[Groonga-commit] groonga/groonga [master] Support binary assign operation for Int16 type

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Mar 4 15:02:27 JST 2013


Kouhei Sutou	2013-03-04 15:02:27 +0900 (Mon, 04 Mar 2013)

  New Revision: 8c3d7cd75b7c5da82841416e500dca118e79c008
  https://github.com/groonga/groonga/commit/8c3d7cd75b7c5da82841416e500dca118e79c008

  Log:
    Support binary assign operation for Int16 type
    
    Operation: X - Y

  Added files:
    test/command/suite/select/filter/arithmetic_operation/minus/int16.expected
    test/command/suite/select/filter/arithmetic_operation/minus/int16.test
  Modified files:
    lib/expr.c

  Modified: lib/expr.c (+51 -0)
===================================================================
--- lib/expr.c    2013-03-04 14:21:19 +0900 (7f39813)
+++ lib/expr.c    2013-03-04 15:02:27 +0900 (e6724bb)
@@ -1849,6 +1849,8 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
   ((long long int)(x) >> (long long int)(y))
 #define INTEGER8_ARITHMETIC_OPERATION_SHIFTRR(x, y)             \
   ((uint8_t)(x) >> (y))
+#define INTEGER16_ARITHMETIC_OPERATION_SHIFTRR(x, y)            \
+  ((uint16_t)(x) >> (y))
 #define INTEGER32_ARITHMETIC_OPERATION_SHIFTRR(x, y)            \
   ((unsigned int)(x) >> (y))
 #define INTEGER64_ARITHMETIC_OPERATION_SHIFTRR(x, y)            \
@@ -1932,6 +1934,14 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
       set(ctx, res, integer_operation(x_, y_));                         \
     }                                                                   \
     break;                                                              \
+  case GRN_DB_INT16 :                                                   \
+    {                                                                   \
+      int16_t y_;                                                       \
+      y_ = GRN_INT16_VALUE(y);                                          \
+      right_expression_check(y_);                                       \
+      set(ctx, res, integer_operation(x_, y_));                         \
+    }                                                                   \
+    break;                                                              \
   case GRN_DB_INT32 :                                                   \
     {                                                                   \
       int y_;                                                           \
@@ -2002,6 +2012,7 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
 
 #define ARITHMETIC_OPERATION_DISPATCH(x, y, res,                        \
                                       integer8_operation,               \
+                                      integer16_operation,              \
                                       integer32_operation,              \
                                       integer64_operation,              \
                                       float_operation,                  \
@@ -2038,6 +2049,20 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
                                             invalid_type_error);        \
     }                                                                   \
     break;                                                              \
+  case GRN_DB_INT16 :                                                   \
+    {                                                                   \
+      int16_t x_;                                                       \
+      x_ = GRN_INT8_VALUE(x);                                           \
+      left_expression_check(x_);                                        \
+      NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_INT16_SET,              \
+                                            GRN_INT16_VALUE,            \
+                                            x_, y, res,                 \
+                                            integer16_operation,        \
+                                            float_operation,            \
+                                            right_expression_check,     \
+                                            invalid_type_error);        \
+    }                                                                   \
+    break;                                                              \
   case GRN_DB_INT32 :                                                   \
     {                                                                   \
       int x_;                                                           \
@@ -2135,6 +2160,7 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
 } while (0)
 
 #define ARITHMETIC_BINARY_OPERATION_DISPATCH(integer8_operation,        \
+                                             integer16_operation,       \
                                              integer32_operation,       \
                                              integer64_operation,       \
                                              float_operation,           \
@@ -2148,6 +2174,7 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
   res->header.domain = x->header.domain;                                \
   ARITHMETIC_OPERATION_DISPATCH(x, y, res,                              \
                                 integer8_operation,                     \
+                                integer16_operation,                    \
                                 integer32_operation,                    \
                                 integer64_operation,                    \
                                 float_operation,                        \
@@ -2312,6 +2339,7 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
 } while (0)
 
 #define ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(integer8_operation,    \
+                                                 integer16_operation,   \
                                                  integer32_operation,   \
                                                  integer64_operation,   \
                                                  float_operation,       \
@@ -2350,6 +2378,7 @@ grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
     ARITHMETIC_OPERATION_DISPATCH((&variable_value), (&casted_value),   \
                                   res,                                  \
                                   integer8_operation,                   \
+                                  integer16_operation,                  \
                                   integer32_operation,                  \
                                   integer64_operation,                  \
                                   float_operation,                      \
@@ -2607,6 +2636,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_STAR,
           INTEGER_ARITHMETIC_OPERATION_STAR,
           INTEGER_ARITHMETIC_OPERATION_STAR,
+          INTEGER_ARITHMETIC_OPERATION_STAR,
           FLOAT_ARITHMETIC_OPERATION_STAR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2620,6 +2650,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SLASH,
           INTEGER_ARITHMETIC_OPERATION_SLASH,
           INTEGER_ARITHMETIC_OPERATION_SLASH,
+          INTEGER_ARITHMETIC_OPERATION_SLASH,
           FLOAT_ARITHMETIC_OPERATION_SLASH,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2633,6 +2664,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_MOD,
           INTEGER_ARITHMETIC_OPERATION_MOD,
           INTEGER_ARITHMETIC_OPERATION_MOD,
+          INTEGER_ARITHMETIC_OPERATION_MOD,
           FLOAT_ARITHMETIC_OPERATION_MOD,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2646,6 +2678,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_PLUS,
           INTEGER_ARITHMETIC_OPERATION_PLUS,
           INTEGER_ARITHMETIC_OPERATION_PLUS,
+          INTEGER_ARITHMETIC_OPERATION_PLUS,
           FLOAT_ARITHMETIC_OPERATION_PLUS,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2659,6 +2692,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_MINUS,
           INTEGER_ARITHMETIC_OPERATION_MINUS,
           INTEGER_ARITHMETIC_OPERATION_MINUS,
+          INTEGER_ARITHMETIC_OPERATION_MINUS,
           FLOAT_ARITHMETIC_OPERATION_MINUS,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2672,6 +2706,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+          INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           FLOAT_ARITHMETIC_OPERATION_SHIFTL,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2685,6 +2720,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+          INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           FLOAT_ARITHMETIC_OPERATION_SHIFTR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2696,6 +2732,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
       case GRN_OP_SHIFTRR_ASSIGN :
         ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
           INTEGER8_ARITHMETIC_OPERATION_SHIFTRR,
+          INTEGER16_ARITHMETIC_OPERATION_SHIFTRR,
           INTEGER32_ARITHMETIC_OPERATION_SHIFTRR,
           INTEGER64_ARITHMETIC_OPERATION_SHIFTRR,
           FLOAT_ARITHMETIC_OPERATION_SHIFTRR,
@@ -2712,6 +2749,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_AND,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2725,6 +2763,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_OR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -2738,6 +2777,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_XOR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3320,6 +3360,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_PLUS,
           INTEGER_ARITHMETIC_OPERATION_PLUS,
           INTEGER_ARITHMETIC_OPERATION_PLUS,
+          INTEGER_ARITHMETIC_OPERATION_PLUS,
           FLOAT_ARITHMETIC_OPERATION_PLUS,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3367,6 +3408,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
             INTEGER_ARITHMETIC_OPERATION_MINUS,
             INTEGER_ARITHMETIC_OPERATION_MINUS,
             INTEGER_ARITHMETIC_OPERATION_MINUS,
+            INTEGER_ARITHMETIC_OPERATION_MINUS,
             FLOAT_ARITHMETIC_OPERATION_MINUS,
             ARITHMETIC_OPERATION_NO_CHECK,
             ARITHMETIC_OPERATION_NO_CHECK,
@@ -3384,6 +3426,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_STAR,
           INTEGER_ARITHMETIC_OPERATION_STAR,
           INTEGER_ARITHMETIC_OPERATION_STAR,
+          INTEGER_ARITHMETIC_OPERATION_STAR,
           FLOAT_ARITHMETIC_OPERATION_STAR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3400,6 +3443,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SLASH,
           INTEGER_ARITHMETIC_OPERATION_SLASH,
           INTEGER_ARITHMETIC_OPERATION_SLASH,
+          INTEGER_ARITHMETIC_OPERATION_SLASH,
           FLOAT_ARITHMETIC_OPERATION_SLASH,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK,
@@ -3416,6 +3460,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_MOD,
           INTEGER_ARITHMETIC_OPERATION_MOD,
           INTEGER_ARITHMETIC_OPERATION_MOD,
+          INTEGER_ARITHMETIC_OPERATION_MOD,
           FLOAT_ARITHMETIC_OPERATION_MOD,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK,
@@ -3440,6 +3485,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_OR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3450,6 +3496,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_XOR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3460,6 +3507,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+          INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
           FLOAT_ARITHMETIC_OPERATION_BITWISE_AND,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3470,6 +3518,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+          INTEGER_ARITHMETIC_OPERATION_SHIFTL,
           FLOAT_ARITHMETIC_OPERATION_SHIFTL,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3480,6 +3529,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+          INTEGER_ARITHMETIC_OPERATION_SHIFTR,
           FLOAT_ARITHMETIC_OPERATION_SHIFTR,
           ARITHMETIC_OPERATION_NO_CHECK,
           ARITHMETIC_OPERATION_NO_CHECK,
@@ -3488,6 +3538,7 @@ grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
       case GRN_OP_SHIFTRR :
         ARITHMETIC_BINARY_OPERATION_DISPATCH(
           INTEGER8_ARITHMETIC_OPERATION_SHIFTRR,
+          INTEGER16_ARITHMETIC_OPERATION_SHIFTRR,
           INTEGER32_ARITHMETIC_OPERATION_SHIFTRR,
           INTEGER64_ARITHMETIC_OPERATION_SHIFTRR,
           FLOAT_ARITHMETIC_OPERATION_SHIFTRR,

  Added: test/command/suite/select/filter/arithmetic_operation/minus/int16.expected (+45 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/arithmetic_operation/minus/int16.expected    2013-03-04 15:02:27 +0900 (fd8dee8)
@@ -0,0 +1,45 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values value1 COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+column_create Values value2 COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"value1": -1, "value2": 5}
+]
+[[0,0.0,0.0],1]
+select Values   --filter true   --scorer '_score = value1 - value2'   --output_columns 'value1, value2, _score'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        1
+      ],
+      [
+        [
+          "value1",
+          "Int16"
+        ],
+        [
+          "value2",
+          "Int16"
+        ],
+        [
+          "_score",
+          "Int32"
+        ]
+      ],
+      [
+        -1,
+        5,
+        -6
+      ]
+    ]
+  ]
+]

  Added: test/command/suite/select/filter/arithmetic_operation/minus/int16.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/arithmetic_operation/minus/int16.test    2013-03-04 15:02:27 +0900 (1a93ed5)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values value1 COLUMN_SCALAR Int16
+column_create Values value2 COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"value1": -1, "value2": 5}
+]
+
+select Values \
+  --filter true \
+  --scorer '_score = value1 - value2' \
+  --output_columns 'value1, value2, _score'
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index