Kouhei Sutou
null+****@clear*****
Sun Dec 8 22:03:42 JST 2013
Kouhei Sutou 2013-12-08 22:03:42 +0900 (Sun, 08 Dec 2013) New Revision: 0a5a14396b3787059a152021dff53a47e46ea968 https://github.com/groonga/groonga/commit/0a5a14396b3787059a152021dff53a47e46ea968 Message: geo_in_rectangle: report error on cast Modified files: lib/geo.c test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_max_longitude.expected test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_min_longitude.expected test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_max_longitude.expected test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_min_longitude.expected Modified: lib/geo.c (+17 -0) =================================================================== --- lib/geo.c 2013-12-08 21:37:33 +0900 (2ab0568) +++ lib/geo.c 2013-12-08 22:03:42 +0900 (31956f1) @@ -1016,6 +1016,7 @@ in_rectangle_data_fill(grn_ctx *ctx, grn_obj *index, in_rectangle_data *data) { grn_id domain; + const char *domain_name; data->pat = grn_ctx_at(ctx, index->header.domain); domain = data->pat->header.domain; @@ -1038,10 +1039,21 @@ in_rectangle_data_fill(grn_ctx *ctx, grn_obj *index, return; } + if (domain == GRN_DB_TOKYO_GEO_POINT) { + domain_name = "TokyoGeoPoint"; + } else { + domain_name = "WGS84GeoPoint"; + } + if (top_left_point->header.domain != domain) { grn_obj_reinit(ctx, &(data->top_left_point_buffer), domain, GRN_BULK); if (grn_obj_cast(ctx, top_left_point, &(data->top_left_point_buffer), GRN_FALSE)) { + ERR(GRN_INVALID_ARGUMENT, + "%s: failed to cast to %s: <%.*s>", + process_name, domain_name, + (int)GRN_TEXT_LEN(top_left_point), + GRN_TEXT_VALUE(top_left_point)); return; } top_left_point = &(data->top_left_point_buffer); @@ -1052,6 +1064,11 @@ in_rectangle_data_fill(grn_ctx *ctx, grn_obj *index, grn_obj_reinit(ctx, &(data->bottom_right_point_buffer), domain, GRN_BULK); if (grn_obj_cast(ctx, bottom_right_point, &(data->bottom_right_point_buffer), GRN_FALSE)) { + ERR(GRN_INVALID_ARGUMENT, + "%s: failed to cast to %s: <%.*s>", + process_name, domain_name, + (int)GRN_TEXT_LEN(bottom_right_point), + GRN_TEXT_VALUE(bottom_right_point)); return; } bottom_right_point = &(data->bottom_right_point_buffer); Modified: test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_max_longitude.expected (+2 -2) =================================================================== --- test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_max_longitude.expected 2013-12-08 21:37:33 +0900 (1edd5a9) +++ test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_max_longitude.expected 2013-12-08 22:03:42 +0900 (9ffa5e4) @@ -6,10 +6,10 @@ select LandMarks --filter 'geo_in_rectangle(point, "0x0", "0x180.0")' 0.0, 0.0 ], - "geo_in_rectangle(): bottom right point's longitude is too big: <648000000>(max:648000000): (0,0) (0,648000000)" + "geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x180.0>" ], [ ] ] -#|e| geo_in_rectangle(): bottom right point's longitude is too big: <648000000>(max:648000000): (0,0) (0,648000000) +#|e| geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x180.0> Modified: test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_min_longitude.expected (+2 -2) =================================================================== --- test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_min_longitude.expected 2013-12-08 21:37:33 +0900 (025ae5b) +++ test/command/suite/select/filter/geo_in_rectangle/invalid/bottom_right_over_min_longitude.expected 2013-12-08 22:03:42 +0900 (50f52c0) @@ -6,10 +6,10 @@ select LandMarks --filter 'geo_in_rectangle(point, "0x0", "0x-180.0")' 0.0, 0.0 ], - "geo_in_rectangle(): bottom right point's longitude is too small: <-648000000>(min:-648000000): (0,0) (0,-648000000)" + "geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x-180.0>" ], [ ] ] -#|e| geo_in_rectangle(): bottom right point's longitude is too small: <-648000000>(min:-648000000): (0,0) (0,-648000000) +#|e| geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x-180.0> Modified: test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_max_longitude.expected (+2 -2) =================================================================== --- test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_max_longitude.expected 2013-12-08 21:37:33 +0900 (9b5f952) +++ test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_max_longitude.expected 2013-12-08 22:03:42 +0900 (bd9efa7) @@ -6,10 +6,10 @@ select LandMarks --filter 'geo_in_rectangle(point, "0x180.0", "0x0")' 0.0, 0.0 ], - "geo_in_rectangle(): top left point's longitude is too big: <648000000>(max:648000000): (0,648000000) (0,0)" + "geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x180.0>" ], [ ] ] -#|e| geo_in_rectangle(): top left point's longitude is too big: <648000000>(max:648000000): (0,648000000) (0,0) +#|e| geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x180.0> Modified: test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_min_longitude.expected (+2 -2) =================================================================== --- test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_min_longitude.expected 2013-12-08 21:37:33 +0900 (79f8f8d) +++ test/command/suite/select/filter/geo_in_rectangle/invalid/top_left_over_min_longitude.expected 2013-12-08 22:03:42 +0900 (b85131a) @@ -6,10 +6,10 @@ select LandMarks --filter 'geo_in_rectangle(point, "0x-180.0", "0x0")' 0.0, 0.0 ], - "geo_in_rectangle(): top left point's longitude is too small: <-648000000>(min:-648000000): (0,-648000000) (0,0)" + "geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x-180.0>" ], [ ] ] -#|e| geo_in_rectangle(): top left point's longitude is too small: <-648000000>(min:-648000000): (0,-648000000) (0,0) +#|e| geo_in_rectangle(): failed to cast to WGS84GeoPoint: <0x-180.0> -------------- next part -------------- HTML����������������������������... Download