null+****@clear*****
null+****@clear*****
2010年 8月 25日 (水) 16:10:43 JST
Kouhei Sutou 2010-07-20 00:55:48 +0000 (Tue, 20 Jul 2010) New Revision: fe016e6d2966adc06c9035c66856671fed91a974 Log: support prefix search with query syntax. Modified files: lib/expr.c Modified: lib/expr.c (+18 -13) =================================================================== --- lib/expr.c 2010-08-25 07:07:23 +0000 (9a8ffbf) +++ lib/expr.c 2010-07-20 00:55:48 +0000 (78535b4) @@ -3910,19 +3910,24 @@ grn_table_select(grn_ctx *ctx, grn_obj *table, grn_obj *expr, } } } else { - /* table ?? si->index.domain ? */ - grn_hash *pres; - if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, - GRN_OBJ_TABLE_HASH_KEY))) { - grn_id *key; - grn_table_search(ctx, table, - GRN_BULK_HEAD(si->query), - GRN_BULK_VSIZE(si->query), - si->op, (grn_obj *)pres, GRN_OP_OR); - GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, { - grn_ii_at(ctx, (grn_ii *)index, *key, (grn_hash *)res, si->logical_op); - }); - grn_hash_close(ctx, pres); + grn_obj *i = GRN_PTR_VALUE(&si->index); + grn_obj *domain = grn_ctx_at(ctx, i->header.domain); + if (domain) { + grn_hash *pres; + if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, + GRN_OBJ_TABLE_HASH_KEY))) { + grn_id *key; + grn_table_search(ctx, domain, + GRN_BULK_HEAD(si->query), + GRN_BULK_VSIZE(si->query), + si->op, (grn_obj *)pres, GRN_OP_OR); + grn_obj_unlink(ctx, domain); + GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, { + grn_ii_at(ctx, (grn_ii *)index, *key, (grn_hash *)res, si->logical_op); + }); + grn_hash_close(ctx, pres); + } + grn_obj_unlink(ctx, domain); } grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op); done++;