[Groonga-commit] groonga/groonga [master] [cast] accept 0 -> geo_point just for backward compatibility.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 9月 3日 (土) 11:23:52 JST


Kouhei Sutou	2011-09-03 02:23:52 +0000 (Sat, 03 Sep 2011)

  New Revision: f009d319f23b29d8f219272c674d2d468e0fb0a9

  Log:
    [cast] accept 0 -> geo_point just for backward compatibility.
    
    We want to remove it in the feature.

  Modified files:
    lib/db.c
    test/unit/core/test-cast-basic.c

  Modified: lib/db.c (+8 -0)
===================================================================
--- lib/db.c    2011-09-01 06:58:42 +0000 (e9181dc)
+++ lib/db.c    2011-09-03 02:23:52 +0000 (2aa49c8)
@@ -4066,6 +4066,14 @@ grn_obj_is_persistent(grn_ctx *ctx, grn_obj *obj)
   case GRN_DB_LONG_TEXT :\
     totext(ctx, dest, getvalue(src));\
     break;\
+  case GRN_DB_TOKYO_GEO_POINT :\
+  case GRN_DB_WGS84_GEO_POINT :\
+    if (getvalue(src) == 0) {\
+      /* REMOVE ME. just ignore zero for backward compatibility. */\
+    } else {\
+      rc = GRN_INVALID_ARGUMENT;\
+    }\
+    break;\
   default :\
     SRC2RECORD();\
   }

  Modified: test/unit/core/test-cast-basic.c (+30 -1)
===================================================================
--- test/unit/core/test-cast-basic.c    2011-09-01 06:58:42 +0000 (922a7dd)
+++ test/unit/core/test-cast-basic.c    2011-09-03 02:23:52 +0000 (1c71e42)
@@ -61,6 +61,8 @@ void test_int32_to_int64(void);
 void test_int32_to_uint64(void);
 void test_int32_to_float(void);
 void test_int32_to_time(void);
+void test_int32_to_geo_point_zero(void);
+void test_int32_to_geo_point_invalid(void);
 
 void data_uint32_to_bool(void);
 void test_uint32_to_bool(gconstpointer data);
@@ -394,10 +396,16 @@ test_text_error(gconstpointer data)
 }
 
 static void
-cast_int32(gint32 number)
+set_int32(gint32 number)
 {
   grn_obj_reinit(&context, &src, GRN_DB_INT32, 0);
   GRN_INT32_SET(&context, &src, number);
+}
+
+static void
+cast_int32(gint32 number)
+{
+  set_int32(number);
   grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
 }
 
@@ -520,6 +528,27 @@ test_int32_to_text(void)
   cut_assert_equal_string("2929", GRN_TEXT_VALUE(&dest));
 }
 
+void
+test_int32_to_geo_point_zero(void)
+{
+  gint zero_latitude, zero_longitude;
+
+  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
+  cast_int32(0);
+  GRN_GEO_POINT_VALUE(&dest, zero_latitude, zero_longitude);
+  cut_assert_equal_int(0, zero_latitude);
+  cut_assert_equal_int(0, zero_longitude);
+}
+
+void
+test_int32_to_geo_point_invalid(void)
+{
+  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
+  set_int32(1);
+  grn_test_assert_equal_rc(GRN_INVALID_ARGUMENT,
+                           grn_obj_cast(&context, &src, &dest, GRN_FALSE));
+}
+
 static void
 cast_uint32(guint32 number)
 {




Groonga-commit メーリングリストの案内
Back to archive index