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)
{