Kouhei Sutou
null+****@clear*****
Wed Feb 21 12:23:06 JST 2018
Kouhei Sutou 2018-02-21 12:23:06 +0900 (Wed, 21 Feb 2018) New Revision: 5b645bebf480733e9c64fc1c2d5533521a4d5007 https://github.com/groonga/groonga/commit/5b645bebf480733e9c64fc1c2d5533521a4d5007 Message: expr: cast the right hand side numeric value of equal on select instead of on compile It's for using overflow and underflow information on select. Modified files: lib/expr.c Modified: lib/expr.c (+29 -4) =================================================================== --- lib/expr.c 2018-02-21 12:04:53 +0900 (94386a544) +++ lib/expr.c 2018-02-21 12:23:06 +0900 (435315758) @@ -1070,13 +1070,17 @@ grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, if (CONSTP(y)) { /* todo */ } else { - if (xd != yd) { + if (xd != yd && + !(grn_type_id_is_number_family(ctx, xd) && + grn_type_id_is_number_family(ctx, yd))) { grn_expr_append_obj_resolve_const(ctx, x, yd); } } } else { if (CONSTP(y)) { - if (xd != yd) { + if (xd != yd && + !(grn_type_id_is_number_family(ctx, xd) && + grn_type_id_is_number_family(ctx, yd))) { grn_expr_append_obj_resolve_const(ctx, y, xd); } } @@ -6033,9 +6037,30 @@ grn_table_select_index_equal(grn_ctx *ctx, if (GRN_OBJ_GET_DOMAIN(si->query) == DB_OBJ(domain)->id) { tid = GRN_RECORD_VALUE(si->query); } else { + grn_id key_type; + grn_obj *key; + grn_obj key_buffer; + + key_type = domain->header.domain; + if (key_type == si->query->header.domain) { + key = si->query; + } else { + grn_rc rc; + GRN_OBJ_INIT(&key_buffer, GRN_BULK, 0, key_type); + rc = grn_obj_cast(ctx, si->query, &key_buffer, GRN_FALSE); + if (rc == GRN_SUCCESS) { + key = &key_buffer; + } else { + GRN_OBJ_FIN(ctx, &key_buffer); + key = si->query; + } + } tid = grn_table_get(ctx, domain, - GRN_BULK_HEAD(si->query), - GRN_BULK_VSIZE(si->query)); + GRN_BULK_HEAD(key), + GRN_BULK_VSIZE(key)); + if (key == &key_buffer) { + GRN_OBJ_FIN(ctx, &key_buffer); + } } if (tid != GRN_ID_NIL) { uint32_t sid; -------------- next part -------------- HTML����������������������������... URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180221/ce3c1f44/attachment-0001.htm