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>