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