susumu.yata
null+****@clear*****
Tue Oct 6 16:32:47 JST 2015
susumu.yata 2015-10-06 16:32:47 +0900 (Tue, 06 Oct 2015) New Revision: 6fb1e1ec70f44abe6a6a139c9837ba0c662f6542 https://github.com/groonga/groonga/commit/6fb1e1ec70f44abe6a6a139c9837ba0c662f6542 Message: grn_ts: skip "_key" to suppress "table has no _key" errors GitHub: #412 Modified files: lib/ts.c Modified: lib/ts.c (+18 -14) =================================================================== --- lib/ts.c 2015-10-06 16:12:40 +0900 (5c39df8) +++ lib/ts.c 2015-10-06 16:32:47 +0900 (3b70a98) @@ -6768,6 +6768,13 @@ grn_ts_writer_parse(grn_ctx *ctx, grn_ts_writer *writer, if (rc != GRN_SUCCESS) { return rc; } + } else if (grn_ts_str_is_key_name(token) && + !grn_ts_table_has_key(ctx, table)) { + /* + * Skip _key if the table has no _key, because the default output_columns + * option contains _key. + */ + GRN_TS_DEBUG("skip \"_key\" because the table has no _key"); } else { rc = grn_vector_add_element(ctx, &writer->name_buf, token.ptr, token.size, 0, GRN_DB_TEXT); @@ -6782,8 +6789,7 @@ grn_ts_writer_parse(grn_ctx *ctx, grn_ts_writer *writer, /* grn_ts_writer_build() builds output expresions. */ static grn_rc grn_ts_writer_build(grn_ctx *ctx, grn_ts_writer *writer, grn_obj *table) { - size_t i; - size_t n_names = grn_vector_size(ctx, &writer->name_buf); + size_t i, n_names = grn_vector_size(ctx, &writer->name_buf); if (!n_names) { return GRN_SUCCESS; } @@ -6799,20 +6805,18 @@ grn_ts_writer_build(grn_ctx *ctx, grn_ts_writer *writer, grn_obj *table) { } for (i = 0; i < n_names; i++) { grn_rc rc; - grn_ts_str *name = &writer->names[writer->n_exprs]; - name->size = grn_vector_get_element(ctx, &writer->name_buf, i, - &name->ptr, NULL, NULL); - rc = grn_ts_expr_parse(ctx, table, name->ptr, name->size, - &writer->exprs[writer->n_exprs]); - if (rc == GRN_SUCCESS) { - writer->n_exprs++; - } else if (!grn_ts_str_is_key_name(*name)) { - /* - * Ignore an error for _key because the default output_columns option - * contains _key. - */ + grn_ts_expr *new_expr; + const char *name_ptr; + size_t name_size = grn_vector_get_element(ctx, &writer->name_buf, i, + &name_ptr, NULL, NULL); + rc = grn_ts_expr_parse(ctx, table, name_ptr, name_size, &new_expr); + if (rc != GRN_SUCCESS) { return rc; } + writer->names[i].ptr = name_ptr; + writer->names[i].size = name_size; + writer->exprs[i] = new_expr; + writer->n_exprs++; } return GRN_SUCCESS; } -------------- next part -------------- HTML����������������������������...Download