[Groonga-commit] groonga/groonga [master] do equal Int8/UInt8/Int16/UInt16 explicitly. #660

Back to archive index

null+****@clear***** null+****@clear*****
2010年 11月 4日 (木) 21:41:08 JST


Kouhei Sutou	2010-11-04 12:41:08 +0000 (Thu, 04 Nov 2010)

  New Revision: 472bb76b2d80b565fecae5af8742ed61b8f68e82

  Log:
    do equal Int8/UInt8/Int16/UInt16 explicitly. #660

  Modified files:
    lib/expr.c
    test/unit/core/test-command-select.c

  Modified: lib/expr.c (+36 -0)
===================================================================
--- lib/expr.c    2010-11-07 03:21:22 +0000 (c5e1c77)
+++ lib/expr.c    2010-11-04 12:41:08 +0000 (9824f18)
@@ -1437,6 +1437,18 @@ grn_expr_compile(grn_ctx *ctx, grn_obj *expr)
 
 #define DO_EQ_SUB {\
   switch (y->header.domain) {\
+  case GRN_DB_INT8 :\
+    r = (x_ == GRN_INT8_VALUE(y));\
+    break;\
+  case GRN_DB_UINT8 :\
+    r = (x_ == GRN_UINT8_VALUE(y));\
+    break;\
+  case GRN_DB_INT16 :\
+    r = (x_ == GRN_INT16_VALUE(y));\
+    break;\
+  case GRN_DB_UINT16 :\
+    r = (x_ == GRN_UINT16_VALUE(y));\
+    break;\
   case GRN_DB_INT32 :\
     r = (x_ == GRN_INT32_VALUE(y));\
     break;\
@@ -1475,6 +1487,30 @@ grn_expr_compile(grn_ctx *ctx, grn_obj *expr)
   case GRN_DB_VOID :\
     r = 0;\
     break;\
+  case GRN_DB_INT8 :\
+    {\
+      int8_t x_ = GRN_INT8_VALUE(x);\
+      DO_EQ_SUB;\
+    }\
+    break;\
+  case GRN_DB_UINT8 :\
+    {\
+      uint8_t x_ = GRN_UINT8_VALUE(x);\
+      DO_EQ_SUB;\
+    }\
+    break;\
+  case GRN_DB_INT16 :\
+    {\
+      int16_t x_ = GRN_INT16_VALUE(x);\
+      DO_EQ_SUB;\
+    }\
+    break;\
+  case GRN_DB_UINT16 :\
+    {\
+      uint16_t x_ = GRN_UINT16_VALUE(x);\
+      DO_EQ_SUB;\
+    }\
+    break;\
   case GRN_DB_INT32 :\
     {\
       int32_t x_ = GRN_INT32_VALUE(x);\

  Modified: test/unit/core/test-command-select.c (+53 -0)
===================================================================
--- test/unit/core/test-command-select.c    2010-11-07 03:21:22 +0000 (8e20a27)
+++ test/unit/core/test-command-select.c    2010-11-04 12:41:08 +0000 (652dd8e)
@@ -43,6 +43,8 @@ void data_less_than(void);
 void test_less_than(gconstpointer data);
 void data_less_than_or_equal(void);
 void test_less_than_or_equal(gconstpointer data);
+void data_equal_numeric(void);
+void test_equal_numeric(gconstpointer data);
 
 static gchar *tmp_directory;
 
@@ -608,3 +610,54 @@ test_less_than_or_equal(gconstpointer data)
                  "--output_columns _key,score "
                  "--filter 'score >= 4'"));
 }
+
+void
+data_equal_numeric(void)
+{
+#define ADD_DATA(type)                          \
+  gcut_add_datum(type,                          \
+                 "type", G_TYPE_STRING, type,   \
+                 NULL)
+
+  ADD_DATA("Int8");
+  ADD_DATA("UInt8");
+  ADD_DATA("Int16");
+  ADD_DATA("UInt16");
+  ADD_DATA("Int32");
+  ADD_DATA("UInt32");
+  ADD_DATA("Int64");
+  ADD_DATA("UInt64");
+
+#undef ADD_DATA
+}
+
+void
+test_equal_numeric(gconstpointer data)
+{
+  const gchar *type;
+
+  type = gcut_data_get_string(data, "type");
+
+  assert_send_command("table_create Sites TABLE_HASH_KEY ShortText");
+  assert_send_command(
+    cut_take_printf("column_create Sites score COLUMN_SCALAR %s", type));
+
+  cut_assert_equal_string(
+    "3",
+    send_command("load --table Sites --columns '_key, score' \n"
+                 "[\n"
+                 " [\"groonga.org\", 5],\n"
+                 " [\"ruby-lang.org\", 4],\n"
+                 " [\"qwik.jp/senna/\", 3]\n"
+                 "]"));
+  cut_assert_equal_string(
+    cut_take_printf("[[[1],"
+                     "[[\"_key\",\"ShortText\"],"
+                      "[\"score\",\"%s\"]],"
+                     "[\"ruby-lang.org\",4]]]",
+                    type),
+    send_command("select Sites "
+                 "--sortby -score "
+                 "--output_columns _key,score "
+                 "--filter 'score == 4'"));
+}




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