[Groonga-commit] groonga/groonga at d11e55e [master] Fix a bug that constant value is overflow/onderflow-ed in >, >=, <, <=, ==, !=

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Feb 21 11:55:09 JST 2018


Kouhei Sutou	2018-02-21 11:55:09 +0900 (Wed, 21 Feb 2018)

  New Revision: d11e55e34637903763a8fc251a9ffb4b44e6dd46
  https://github.com/groonga/groonga/commit/d11e55e34637903763a8fc251a9ffb4b44e6dd46

  Message:
    Fix a bug that constant value is overflow/onderflow-ed in >,>=,<,<=,==,!=
    
    Overflow and underflow case is optimized.

  Added files:
    test/command/suite/select/filter/compare_operation/greater/int16_underflow.expected
    test/command/suite/select/filter/compare_operation/greater/int16_underflow.test
    test/command/suite/select/filter/compare_operation/greater/uint16_overflow.expected
    test/command/suite/select/filter/compare_operation/greater/uint16_overflow.test
    test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.expected
    test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.test
    test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.expected
    test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.test
    test/command/suite/select/filter/compare_operation/less/int16_underflow.expected
    test/command/suite/select/filter/compare_operation/less/int16_underflow.test
    test/command/suite/select/filter/compare_operation/less/uint16_overflow.expected
    test/command/suite/select/filter/compare_operation/less/uint16_overflow.test
    test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.expected
    test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.test
    test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.expected
    test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.test
    test/command/suite/select/filter/equal/int16_underflow.expected
    test/command/suite/select/filter/equal/int16_underflow.test
    test/command/suite/select/filter/equal/uint16_overflow.expected
    test/command/suite/select/filter/equal/uint16_overflow.test
    test/command/suite/select/filter/equal/vector_int32.actual
    test/command/suite/select/filter/equal/vector_int32.test.disabled
    test/command/suite/select/filter/not_equal/int16_underflow.expected
    test/command/suite/select/filter/not_equal/int16_underflow.test
    test/command/suite/select/filter/not_equal/uint16_overflow.expected
    test/command/suite/select/filter/not_equal/uint16_overflow.test
  Modified files:
    lib/expr_executor.c

  Modified: lib/expr_executor.c (+205 -13)
===================================================================
--- lib/expr_executor.c    2018-02-21 11:25:21 +0900 (3a03b3d33)
+++ lib/expr_executor.c    2018-02-21 11:55:09 +0900 (f331d73ed)
@@ -51,6 +51,9 @@ typedef union {
   } proc;
   struct {
     grn_obj result_buffer;
+  } simple_condition_constant;
+  struct {
+    grn_obj result_buffer;
     grn_ra *ra;
     grn_ra_cache ra_cache;
     unsigned int ra_element_size;
@@ -543,6 +546,203 @@ grn_expr_executor_fin_proc(grn_ctx *ctx,
   }
 }
 
+static grn_bool
+grn_expr_executor_is_simple_condition_constant(grn_ctx *ctx,
+                                               grn_expr_executor *executor)
+{
+  grn_expr *e = (grn_expr *)(executor->expr);
+  grn_expr_code *target;
+  grn_expr_code *constant;
+  grn_expr_code *operator;
+  grn_id target_range;
+  grn_id constant_range;
+  grn_bool constant_value_is_int = GRN_TRUE;
+  int64_t constant_value_int = 0;
+  uint64_t constant_value_uint = 0;
+  grn_bool constant_always_over = GRN_FALSE;
+  grn_bool constant_always_under = GRN_FALSE;
+
+  if (e->codes_curr != 3) {
+    return GRN_FALSE;
+  }
+
+  target = &(e->codes[0]);
+  constant = &(e->codes[1]);
+  operator = &(e->codes[2]);
+
+  switch (operator->op) {
+  case GRN_OP_EQUAL :
+  case GRN_OP_NOT_EQUAL :
+  case GRN_OP_LESS :
+  case GRN_OP_GREATER :
+  case GRN_OP_LESS_EQUAL :
+  case GRN_OP_GREATER_EQUAL :
+    break;
+  default :
+    return GRN_FALSE;
+  }
+  if (operator->nargs != 2) {
+    return GRN_FALSE;
+  }
+
+  if (target->op != GRN_OP_GET_VALUE) {
+    return GRN_FALSE;
+  }
+  if (target->nargs != 1) {
+    return GRN_FALSE;
+  }
+  if (target->value->header.type != GRN_COLUMN_FIX_SIZE) {
+    return GRN_FALSE;
+  }
+
+  target_range = grn_obj_get_range(ctx, target->value);
+  if (!(GRN_DB_INT8 <= target_range && target_range <= GRN_DB_UINT64)) {
+    return GRN_FALSE;
+  }
+
+  if (constant->op != GRN_OP_PUSH) {
+    return GRN_FALSE;
+  }
+  if (constant->nargs != 1) {
+    return GRN_FALSE;
+  }
+  if (!constant->value) {
+    return GRN_FALSE;
+  }
+  if (constant->value->header.type != GRN_BULK) {
+    return GRN_FALSE;
+  }
+  constant_range = constant->value->header.domain;
+  if (!(GRN_DB_INT8 <= constant_range && constant_range <= GRN_DB_UINT64)) {
+    return GRN_FALSE;
+  }
+
+#define CASE_INT(N)                                                     \
+  GRN_DB_INT ## N :                                                     \
+    constant_value_is_int = GRN_TRUE;                                   \
+    constant_value_int = GRN_INT ## N ##_VALUE(constant->value);        \
+    break
+#define CASE_UINT(N)                                                    \
+  GRN_DB_UINT ## N :                                                    \
+    constant_value_is_int = GRN_FALSE;                                  \
+    constant_value_uint = GRN_UINT ## N ##_VALUE(constant->value);      \
+    break
+
+  switch (constant_range) {
+  case CASE_INT(8);
+  case CASE_UINT(8);
+  case CASE_INT(16);
+  case CASE_UINT(16);
+  case CASE_INT(32);
+  case CASE_UINT(32);
+  case CASE_INT(64);
+  case CASE_UINT(64);
+  default :
+    return GRN_FALSE;
+  }
+
+#undef CASE_INT
+#undef CASE_UINT
+
+#define CASE_INT(N)                                                     \
+  GRN_DB_INT ## N :                                                     \
+    if (constant_value_is_int) {                                        \
+      if (constant_value_int > INT ## N ## _MAX) {                      \
+        constant_always_over = GRN_TRUE;                                \
+      } else if (constant_value_int < INT ## N ## _MIN) {               \
+        constant_always_under = GRN_TRUE;                               \
+      }                                                                 \
+    } else {                                                            \
+      if (constant_value_uint > INT ## N ## _MAX) {                     \
+        constant_always_over = GRN_TRUE;                                \
+      }                                                                 \
+    }                                                                   \
+    break
+#define CASE_UINT(N)                                                    \
+  GRN_DB_UINT ## N :                                                    \
+    if (constant_value_is_int) {                                        \
+      if (constant_value_int > UINT ## N ## _MAX) {                     \
+        constant_always_over = GRN_TRUE;                                \
+      } else if (constant_value_int < 0) {                              \
+        constant_always_under = GRN_TRUE;                               \
+      }                                                                 \
+    } else {                                                            \
+      if (constant_value_uint > UINT ## N ## _MAX) {                    \
+        constant_always_over = GRN_TRUE;                                \
+      }                                                                 \
+    }                                                                   \
+    break
+
+  switch (target_range) {
+  case CASE_INT(8);
+  case CASE_UINT(8);
+  case CASE_INT(16);
+  case CASE_UINT(16);
+  case CASE_INT(32);
+  case CASE_UINT(32);
+  case CASE_INT(64);
+  case GRN_DB_UINT64 :
+    if (constant_value_is_int && constant_value_int < 0) {
+      constant_always_under = GRN_TRUE;
+    }
+    break;
+  default :
+    return GRN_FALSE;
+  }
+
+  if (!constant_always_over && !constant_always_under) {
+    return GRN_FALSE;
+  }
+
+  {
+    grn_bool result;
+    grn_obj *result_buffer =
+      &(executor->data.simple_condition_constant.result_buffer);
+
+    switch (operator->op) {
+    case GRN_OP_EQUAL :
+      result = GRN_FALSE;
+      break;
+    case GRN_OP_NOT_EQUAL :
+      result = GRN_TRUE;
+      break;
+    case GRN_OP_LESS :
+    case GRN_OP_LESS_EQUAL :
+      result = constant_always_over;
+      break;
+    case GRN_OP_GREATER :
+    case GRN_OP_GREATER_EQUAL :
+      result = constant_always_under;
+      break;
+    default :
+      return GRN_FALSE;
+    }
+
+    GRN_BOOL_INIT(result_buffer, 0);
+    GRN_BOOL_SET(ctx, result_buffer, result);
+
+    return GRN_TRUE;
+  }
+}
+
+static grn_obj *
+grn_expr_executor_exec_simple_condition_constant(grn_ctx *ctx,
+                                                 grn_expr_executor *executor,
+                                                 grn_id id)
+{
+  grn_obj *result_buffer =
+    &(executor->data.simple_condition_constant.result_buffer);
+  return result_buffer;
+}
+
+static void
+grn_expr_executor_fin_simple_condition_constant(grn_ctx *ctx,
+                                                grn_expr_executor *executor)
+{
+  GRN_OBJ_FIN(ctx,
+              &(executor->data.simple_condition_constant.result_buffer));
+}
+
 static void
 grn_expr_executor_init_simple_condition_ra(grn_ctx *ctx,
                                            grn_expr_executor *executor)
@@ -578,19 +778,8 @@ grn_expr_executor_init_simple_condition_ra(grn_ctx *ctx,
 
   constant_buffer = &(executor->data.simple_condition_ra.constant_buffer);
   GRN_VOID_INIT(constant_buffer);
-  if (grn_obj_is_scalar_column(ctx, target) &&
-      grn_type_id_is_number_family(ctx, grn_obj_get_range(ctx, target)) &&
-      grn_obj_is_bulk(ctx, constant) &&
-      grn_type_id_is_number_family(ctx, constant->header.domain)) {
-    GRN_VALUE_FIX_SIZE_INIT(constant_buffer, 0, constant->header.domain);
-    grn_bulk_write(ctx,
-                   constant_buffer,
-                   GRN_BULK_HEAD(constant),
-                   GRN_BULK_VSIZE(constant));
-  } else {
-    grn_obj_reinit_for(ctx, constant_buffer, target);
-    grn_obj_cast(ctx, constant, constant_buffer, GRN_FALSE);
-  }
+  grn_obj_reinit_for(ctx, constant_buffer, target);
+  grn_obj_cast(ctx, constant, constant_buffer, GRN_FALSE);
 }
 
 static grn_bool
@@ -928,6 +1117,9 @@ grn_expr_executor_open(grn_ctx *ctx, grn_obj *expr)
   } else if (grn_expr_executor_is_proc(ctx, executor)) {
     executor->exec = grn_expr_executor_exec_proc;
     executor->fin = grn_expr_executor_fin_proc;
+  } else if (grn_expr_executor_is_simple_condition_constant(ctx, executor)) {
+    executor->exec = grn_expr_executor_exec_simple_condition_constant;
+    executor->fin = grn_expr_executor_fin_simple_condition_constant;
   } else if (grn_expr_executor_is_simple_condition_ra(ctx, executor)) {
     executor->exec = grn_expr_executor_exec_simple_condition_ra;
     executor->fin = grn_expr_executor_fin_simple_condition_ra;

  Added: test/command/suite/select/filter/compare_operation/greater/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater/int16_underflow.expected    2018-02-21 11:55:09 +0900 (6a79a3b03)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number > -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","Int16"]],[3],[4],[-1]]]]

  Added: test/command/suite/select/filter/compare_operation/greater/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater/int16_underflow.test    2018-02-21 11:55:09 +0900 (222ebaeb5)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number > -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/greater/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (172a5becb)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number > 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","UInt16"]]]]]

  Added: test/command/suite/select/filter/compare_operation/greater/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater/uint16_overflow.test    2018-02-21 11:55:09 +0900 (ef47f3ab4)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number > 65536' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.expected    2018-02-21 11:55:09 +0900 (b9435dabd)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number >= -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","Int16"]],[3],[4],[-1]]]]

  Added: test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater_equal/int16_underflow.test    2018-02-21 11:55:09 +0900 (3bd76bc39)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number >= -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (a36b76bf2)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number >= 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","UInt16"]]]]]

  Added: test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/greater_equal/uint16_overflow.test    2018-02-21 11:55:09 +0900 (3ae876315)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number >= 65536' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/less/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less/int16_underflow.expected    2018-02-21 11:55:09 +0900 (b22483c82)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number < -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","Int16"]]]]]

  Added: test/command/suite/select/filter/compare_operation/less/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less/int16_underflow.test    2018-02-21 11:55:09 +0900 (5b78b9f2a)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number < -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/less/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (d2061c767)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number < 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","UInt16"]],[3],[4],[65535]]]]

  Added: test/command/suite/select/filter/compare_operation/less/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less/uint16_overflow.test    2018-02-21 11:55:09 +0900 (b8848d9ba)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number < 65536' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.expected    2018-02-21 11:55:09 +0900 (fa4c67a43)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number <= -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","Int16"]]]]]

  Added: test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less_equal/int16_underflow.test    2018-02-21 11:55:09 +0900 (0af855e2e)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number <= -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (b276b37e9)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number <= 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","UInt16"]],[3],[4],[65535]]]]

  Added: test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/compare_operation/less_equal/uint16_overflow.test    2018-02-21 11:55:09 +0900 (4ee3eb597)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 4},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number <= 65536' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/equal/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/int16_underflow.expected    2018-02-21 11:55:09 +0900 (bd685a1f9)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 32767},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number == -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","Int16"]]]]]

  Added: test/command/suite/select/filter/equal/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/int16_underflow.test    2018-02-21 11:55:09 +0900 (0e46c9d41)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 32767},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number == -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/equal/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (723ec4aa4)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 0},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number == 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[0],[["number","UInt16"]]]]]

  Added: test/command/suite/select/filter/equal/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/uint16_overflow.test    2018-02-21 11:55:09 +0900 (3b1ae2941)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 0},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number == 65536' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/equal/vector_int32.actual (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/vector_int32.actual    2018-02-21 11:55:09 +0900 (9981ae239)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values numbers COLUMN_VECTOR Int32
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"numbers": [2, 1, 3]},
+{"numbers": [2, 3, 4]},
+{"numbers": [8, 9, -1]}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'numbers == [2, 3, 4]'   --output_columns 'numbers'
+# error: timeout (5s)

  Added: test/command/suite/select/filter/equal/vector_int32.test.disabled (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/equal/vector_int32.test.disabled    2018-02-21 11:55:09 +0900 (adf8638e1)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values numbers COLUMN_VECTOR Int32
+
+load --table Values
+[
+{"numbers": [2, 1, 3]},
+{"numbers": [2, 3, 4]},
+{"numbers": [8, 9, -1]}
+]
+
+select Values \
+  --filter 'numbers == [2, 3, 4]' \
+  --output_columns 'numbers'

  Added: test/command/suite/select/filter/not_equal/int16_underflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/not_equal/int16_underflow.expected    2018-02-21 11:55:09 +0900 (e780930b2)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR Int16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 32767},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number != -32769'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","Int16"]],[3],[32767],[-1]]]]

  Added: test/command/suite/select/filter/not_equal/int16_underflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/not_equal/int16_underflow.test    2018-02-21 11:55:09 +0900 (87547ba2b)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR Int16
+
+load --table Values
+[
+{"number": 3},
+{"number": 32767},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number != -32769' \
+  --output_columns 'number'

  Added: test/command/suite/select/filter/not_equal/uint16_overflow.expected (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/not_equal/uint16_overflow.expected    2018-02-21 11:55:09 +0900 (e506ca74e)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Values number COLUMN_SCALAR UInt16
+[[0,0.0,0.0],true]
+load --table Values
+[
+{"number": 3},
+{"number": 0},
+{"number": -1}
+]
+[[0,0.0,0.0],3]
+select Values   --filter 'number != 65536'   --output_columns 'number'
+[[0,0.0,0.0],[[[3],[["number","UInt16"]],[3],[0],[65535]]]]

  Added: test/command/suite/select/filter/not_equal/uint16_overflow.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/not_equal/uint16_overflow.test    2018-02-21 11:55:09 +0900 (4e7779eaa)
@@ -0,0 +1,13 @@
+table_create Values TABLE_NO_KEY
+column_create Values number COLUMN_SCALAR UInt16
+
+load --table Values
+[
+{"number": 3},
+{"number": 0},
+{"number": -1}
+]
+
+select Values \
+  --filter 'number != 65536' \
+  --output_columns 'number'
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180221/09ee1fef/attachment-0001.htm 



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