[Groonga-commit] groonga/groonga at 3179939 [master] expr: support casting key in "!="

Back to archive index
Kouhei Sutou null+****@clear*****
Mon Nov 19 16:00:30 JST 2018


Kouhei Sutou	2018-11-19 16:00:30 +0900 (Mon, 19 Nov 2018)

  Revision: 317993953b97666f20116d499d0905c154ab5f0a
  https://github.com/groonga/groonga/commit/317993953b97666f20116d499d0905c154ab5f0a

  Message:
    expr: support casting key in "!="

  Added files:
    test/command/suite/select/filter/index/not_equal/reference/need_cast.expected
    test/command/suite/select/filter/index/not_equal/reference/need_cast.test
  Modified files:
    lib/expr.c

  Modified: lib/expr.c (+17 -3)
===================================================================
--- lib/expr.c    2018-11-16 18:59:22 +0900 (a3a9c49db)
+++ lib/expr.c    2018-11-19 16:00:30 +0900 (6136f5a88)
@@ -3858,9 +3858,23 @@ grn_table_select_index_not_equal(grn_ctx *ctx,
       if (GRN_OBJ_GET_DOMAIN(si->query) == DB_OBJ(domain)->id) {
         tid = GRN_RECORD_VALUE(si->query);
       } else {
-        tid = grn_table_get(ctx, domain,
-                            GRN_BULK_HEAD(si->query),
-                            GRN_BULK_VSIZE(si->query));
+        if (GRN_OBJ_GET_DOMAIN(si->query) == domain->header.domain) {
+          tid = grn_table_get(ctx, domain,
+                              GRN_BULK_HEAD(si->query),
+                              GRN_BULK_VSIZE(si->query));
+        } else {
+          grn_obj casted_query;
+          GRN_OBJ_INIT(&casted_query, GRN_BULK, 0, domain->header.domain);
+          if (grn_obj_cast(ctx, si->query, &casted_query, GRN_FALSE) ==
+              GRN_SUCCESS) {
+            tid = grn_table_get(ctx, domain,
+                                GRN_BULK_HEAD(&casted_query),
+                                GRN_BULK_VSIZE(&casted_query));
+          } else {
+            tid = GRN_ID_NIL;
+          }
+          GRN_OBJ_FIN(ctx, &casted_query);
+        }
       }
       if (tid == GRN_ID_NIL) {
         processed = GRN_TRUE;

  Added: test/command/suite/select/filter/index/not_equal/reference/need_cast.expected (+17 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/not_equal/reference/need_cast.expected    2018-11-19 16:00:30 +0900 (c3959e529)
@@ -0,0 +1,17 @@
+table_create Types TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+table_create Entries TABLE_NO_KEY
+[[0,0.0,0.0],true]
+column_create Entries type COLUMN_SCALAR Types
+[[0,0.0,0.0],true]
+column_create Types entries COLUMN_INDEX Entries type
+[[0,0.0,0.0],true]
+load --table Entries
+[
+{"type": "10"},
+{"type": "29"},
+{"type": "fast"}
+]
+[[0,0.0,0.0],3]
+select Entries --filter 'true && type != 29'
+[[0,0.0,0.0],[[[2],[["_id","UInt32"],["type","Types"]],[1,"10"],[3,"fast"]]]]

  Added: test/command/suite/select/filter/index/not_equal/reference/need_cast.test (+15 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/not_equal/reference/need_cast.test    2018-11-19 16:00:30 +0900 (cd330f28e)
@@ -0,0 +1,15 @@
+table_create Types TABLE_PAT_KEY ShortText
+
+table_create Entries TABLE_NO_KEY
+column_create Entries type COLUMN_SCALAR Types
+
+column_create Types entries COLUMN_INDEX Entries type
+
+load --table Entries
+[
+{"type": "10"},
+{"type": "29"},
+{"type": "fast"}
+]
+
+select Entries --filter 'true && type != 29'
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20181119/7a41926d/attachment-0001.html>


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