[Groonga-commit] groonga/groonga at 95d5eeb [master] between: accept between() without borders

Back to archive index

Susumu Yata null+****@clear*****
Tue Jan 23 12:29:56 JST 2018


Susumu Yata	2018-01-23 12:29:56 +0900 (Tue, 23 Jan 2018)

  New Revision: 95d5eeb874d95c5b048aa9600b3d070e4e9554ec
  https://github.com/groonga/groonga/commit/95d5eeb874d95c5b048aa9600b3d070e4e9554ec

  Merged 89e0f6a: Merge pull request #810 from groonga/accept-between-without-borders

  Message:
    between: accept between() without borders
    
    If the number of arguments passed to between() is 3, the 2nd and 3rd
    arguments are handled as the inclusive edges.
    
    GitHub: fix #685

  Added files:
    test/command/suite/select/function/between/with_index/without_borders.expected
    test/command/suite/select/function/between/with_index/without_borders.test
    test/command/suite/select/function/between/without_index/without_borders.expected
    test/command/suite/select/function/between/without_index/without_borders.test
  Modified files:
    lib/proc.c

  Modified: lib/proc.c (+24 -23)
===================================================================
--- lib/proc.c    2018-01-23 09:34:32 +0900 (e703c1615)
+++ lib/proc.c    2018-01-23 12:29:56 +0900 (2f0fe7f75)
@@ -2590,32 +2590,33 @@ static grn_rc
 between_parse_args(grn_ctx *ctx, int nargs, grn_obj **args, between_data *data)
 {
   grn_rc rc = GRN_SUCCESS;
-  grn_obj *min_border;
-  grn_obj *max_border;
-
-  if (nargs != 5) {
-    ERR(GRN_INVALID_ARGUMENT,
-        "between(): wrong number of arguments (%d for 5)", nargs);
-    rc = ctx->rc;
-    goto exit;
-  }
 
   data->value = args[0];
   data->min   = args[1];
-  min_border  = args[2];
-  data->max   = args[3];
-  max_border  = args[4];
-
-  data->min_border_type =
-    between_parse_border(ctx, min_border, "the 3rd argument (min_border)");
-  if (data->min_border_type == BETWEEN_BORDER_INVALID) {
-    rc = ctx->rc;
-    goto exit;
-  }
-
-  data->max_border_type =
-    between_parse_border(ctx, max_border, "the 5th argument (max_border)");
-  if (data->max_border_type == BETWEEN_BORDER_INVALID) {
+  switch (nargs) {
+  case 3 :
+    data->min_border_type = BETWEEN_BORDER_INCLUDE;
+    data->max = args[2];
+    data->max_border_type = BETWEEN_BORDER_INCLUDE;
+    break;
+  case 5 :
+    data->min_border_type =
+      between_parse_border(ctx, args[2], "the 3rd argument (min_border)");
+    if (data->min_border_type == BETWEEN_BORDER_INVALID) {
+      rc = ctx->rc;
+      goto exit;
+    }
+    data->max = args[3];
+    data->max_border_type =
+      between_parse_border(ctx, args[4], "the 5th argument (max_border)");
+    if (data->max_border_type == BETWEEN_BORDER_INVALID) {
+      rc = ctx->rc;
+      goto exit;
+    }
+    break;
+  default :
+    ERR(GRN_INVALID_ARGUMENT,
+        "between(): wrong number of arguments (%d for 3 or 5)", nargs);
     rc = ctx->rc;
     goto exit;
   }

  Added: test/command/suite/select/function/between/with_index/without_borders.expected (+61 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/function/between/with_index/without_borders.expected    2018-01-23 12:29:56 +0900 (774d2bc2a)
@@ -0,0 +1,61 @@
+table_create Users TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Users age COLUMN_SCALAR Int32
+[[0,0.0,0.0],true]
+table_create Ages TABLE_PAT_KEY Int32
+[[0,0.0,0.0],true]
+column_create Ages users_age COLUMN_INDEX Users age
+[[0,0.0,0.0],true]
+load --table Users
+[
+{"_key": "alice",  "age": 17},
+{"_key": "bob",    "age": 18},
+{"_key": "calros", "age": 19},
+{"_key": "dave",   "age": 20},
+{"_key": "eric",   "age": 21}
+]
+[[0,0.0,0.0],5]
+select Users --filter 'between(age, 18, 20)'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        3
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ],
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "age",
+          "Int32"
+        ]
+      ],
+      [
+        2,
+        "bob",
+        18
+      ],
+      [
+        3,
+        "calros",
+        19
+      ],
+      [
+        4,
+        "dave",
+        20
+      ]
+    ]
+  ]
+]

  Added: test/command/suite/select/function/between/with_index/without_borders.test (+16 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/function/between/with_index/without_borders.test    2018-01-23 12:29:56 +0900 (edc25017d)
@@ -0,0 +1,16 @@
+table_create Users TABLE_HASH_KEY ShortText
+column_create Users age COLUMN_SCALAR Int32
+
+table_create Ages TABLE_PAT_KEY Int32
+column_create Ages users_age COLUMN_INDEX Users age
+
+load --table Users
+[
+{"_key": "alice",  "age": 17},
+{"_key": "bob",    "age": 18},
+{"_key": "calros", "age": 19},
+{"_key": "dave",   "age": 20},
+{"_key": "eric",   "age": 21}
+]
+
+select Users --filter 'between(age, 18, 20)'

  Added: test/command/suite/select/function/between/without_index/without_borders.expected (+57 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/function/between/without_index/without_borders.expected    2018-01-23 12:29:56 +0900 (0ed1742e4)
@@ -0,0 +1,57 @@
+table_create Users TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Users age COLUMN_SCALAR Int32
+[[0,0.0,0.0],true]
+load --table Users
+[
+{"_key": "alice",  "age": 17},
+{"_key": "bob",    "age": 18},
+{"_key": "calros", "age": 19},
+{"_key": "dave",   "age": 20},
+{"_key": "eric",   "age": 21}
+]
+[[0,0.0,0.0],5]
+select Users --filter 'between(age, 18, 20)'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        3
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ],
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "age",
+          "Int32"
+        ]
+      ],
+      [
+        2,
+        "bob",
+        18
+      ],
+      [
+        3,
+        "calros",
+        19
+      ],
+      [
+        4,
+        "dave",
+        20
+      ]
+    ]
+  ]
+]

  Added: test/command/suite/select/function/between/without_index/without_borders.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/function/between/without_index/without_borders.test    2018-01-23 12:29:56 +0900 (8e238e407)
@@ -0,0 +1,13 @@
+table_create Users TABLE_HASH_KEY ShortText
+column_create Users age COLUMN_SCALAR Int32
+
+load --table Users
+[
+{"_key": "alice",  "age": 17},
+{"_key": "bob",    "age": 18},
+{"_key": "calros", "age": 19},
+{"_key": "dave",   "age": 20},
+{"_key": "eric",   "age": 21}
+]
+
+select Users --filter 'between(age, 18, 20)'
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180123/a3afa3bb/attachment-0003.htm 



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