null+****@clear*****
null+****@clear*****
2012年 1月 19日 (木) 20:16:13 JST
Daijiro MORI 2012-01-19 20:16:13 +0900 (Thu, 19 Jan 2012) New Revision: f5eb3417a05b63b388764cad1528e67502dafe15 Log: grn_ii_build() is used only when "USE_OFFLINE_INDEXER" environment variable is set "yes" Modified files: lib/db.c lib/ii.c Modified: lib/db.c (+27 -21) =================================================================== --- lib/db.c 2012-01-19 19:56:19 +0900 (16ca5d6) +++ lib/db.c 2012-01-19 20:16:13 +0900 (0c84f06) @@ -5726,32 +5726,38 @@ build_index(grn_ctx *ctx, grn_obj *obj) if ((src = grn_ctx_at(ctx, *s))) { if ((target = GRN_OBJ_TABLEP(src) ? src : grn_ctx_at(ctx, src->header.domain))) { int i, ncol = DB_OBJ(obj)->source_size / sizeof(grn_id); - if ((col = GRN_MALLOC(ncol * sizeof(grn_obj *)))) { - for (cp = col, i = ncol; i; s++, cp++, i--) { - if (!(*cp = grn_ctx_at(ctx, *s))) { - ERR(GRN_INVALID_ARGUMENT, "source invalid, n=%d",i); - GRN_FREE(col); - return; + if (ncol == 1 && !GRN_OBJ_TABLEP(src) && + getenv("USE_OFFLINE_INDEXER") && + (!strcmp(getenv("USE_OFFLINE_INDEXER"), "yes"))) { + grn_ii_build(ctx, (grn_ii *)obj); + } else { + if ((col = GRN_MALLOC(ncol * sizeof(grn_obj *)))) { + for (cp = col, i = ncol; i; s++, cp++, i--) { + if (!(*cp = grn_ctx_at(ctx, *s))) { + ERR(GRN_INVALID_ARGUMENT, "source invalid, n=%d",i); + GRN_FREE(col); + return; + } } - } - if ((tc = grn_table_cursor_open(ctx, target, NULL, 0, NULL, 0, - 0, -1, GRN_CURSOR_BY_ID))) { - GRN_TEXT_INIT(&rv, 0); - while ((id = grn_table_cursor_next_inline(ctx, tc)) != GRN_ID_NIL) { - for (cp = col, i = ncol; i; i--, cp++) { - GRN_BULK_REWIND(&rv); - if (GRN_OBJ_TABLEP(*cp)) { - grn_table_get_key2(ctx, *cp, id, &rv); - } else { - grn_obj_get_value(ctx, *cp, id, &rv); + if ((tc = grn_table_cursor_open(ctx, target, NULL, 0, NULL, 0, + 0, -1, GRN_CURSOR_BY_ID))) { + GRN_TEXT_INIT(&rv, 0); + while ((id = grn_table_cursor_next_inline(ctx, tc)) != GRN_ID_NIL) { + for (cp = col, i = ncol; i; i--, cp++) { + GRN_BULK_REWIND(&rv); + if (GRN_OBJ_TABLEP(*cp)) { + grn_table_get_key2(ctx, *cp, id, &rv); + } else { + grn_obj_get_value(ctx, *cp, id, &rv); + } + call_hook_for_build(ctx, *cp, id, &rv, 0); } - call_hook_for_build(ctx, *cp, id, &rv, 0); } + GRN_OBJ_FIN(ctx, &rv); + grn_table_cursor_close(ctx, tc); } - GRN_OBJ_FIN(ctx, &rv); - grn_table_cursor_close(ctx, tc); + GRN_FREE(col); } - GRN_FREE(col); } } else { ERR(GRN_INVALID_ARGUMENT, "invalid target"); Modified: lib/ii.c (+1 -0) =================================================================== --- lib/ii.c 2012-01-19 19:56:19 +0900 (a1be7c6) +++ lib/ii.c 2012-01-19 20:16:13 +0900 (280cbc5) @@ -6828,6 +6828,7 @@ grn_ii_build(grn_ctx *ctx, grn_ii *ii) } } GRN_FREE(builder.blocks); + rc = GRN_SUCCESS; /* FIXME */ exit : return rc; }