Kouhei Sutou
null+****@clear*****
Sun Nov 9 00:13:15 JST 2014
Kouhei Sutou 2014-11-09 00:13:15 +0900 (Sun, 09 Nov 2014) New Revision: 444915dfadc0af50a35b7d5dc85e30d6104abaeb https://github.com/groonga/groonga/commit/444915dfadc0af50a35b7d5dc85e30d6104abaeb Message: Use UInt32 for reinited domain Because grn_obj_reinit_for() is for grn_obj_get_value(). It should set the same type as grn_obj_get_value(). (grn_obj_get_value() sets domain, so we don't need to set correct the valid domain before calling grn_obj_get_value().) Modified files: lib/db.c Modified: lib/db.c (+35 -4) =================================================================== --- lib/db.c 2014-11-09 00:07:06 +0900 (d4282a4) +++ lib/db.c 2014-11-09 00:13:15 +0900 (a902ffa) @@ -4527,6 +4527,33 @@ grn_column_is_vector(grn_ctx *ctx, grn_obj *column) return type == GRN_OBJ_COLUMN_VECTOR; } +inline static grn_bool +grn_column_is_index(grn_ctx *ctx, grn_obj *column) +{ + grn_obj_flags type; + + if (column->header.type == GRN_ACCESSOR) { + grn_accessor *a; + for (a = (grn_accessor *)column; a; a = a->next) { + if (a->next) { + continue; + } + if (a->action != GRN_ACCESSOR_GET_COLUMN_VALUE) { + return GRN_FALSE; + } + + column = a->obj; + } + } + + if (column->header.type != GRN_COLUMN_INDEX) { + return GRN_FALSE; + } + + type = column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK; + return type == GRN_OBJ_COLUMN_INDEX; +} + inline static void grn_obj_get_range_info(grn_ctx *ctx, grn_obj *obj, grn_id *range_id, grn_obj_flags *range_flags) @@ -8433,10 +8460,14 @@ grn_obj_reinit_for(grn_ctx *ctx, grn_obj *obj, grn_obj *domain_obj) return ctx->rc; } - grn_obj_get_range_info(ctx, domain_obj, &domain, &flags); - if (GRN_OBJ_TABLEP(domain_obj) && - domain_obj->header.type != GRN_TABLE_NO_KEY) { - domain = domain_obj->header.domain; + if (grn_column_is_index(ctx, domain_obj)) { + domain = GRN_DB_UINT32; + } else { + grn_obj_get_range_info(ctx, domain_obj, &domain, &flags); + if (GRN_OBJ_TABLEP(domain_obj) && + domain_obj->header.type != GRN_TABLE_NO_KEY) { + domain = domain_obj->header.domain; + } } return grn_obj_reinit(ctx, obj, domain, flags); } -------------- next part -------------- HTML����������������������������... 下載