susumu.yata
null+****@clear*****
Thu Nov 26 11:13:40 JST 2015
susumu.yata 2015-11-26 11:13:40 +0900 (Thu, 26 Nov 2015) New Revision: 0dac79a8b5002d439df07b06ccc9d23b96ce3668 https://github.com/groonga/groonga/commit/0dac79a8b5002d439df07b06ccc9d23b96ce3668 Message: grn_ts: add a stub for --sortby GitHub: #429 Modified files: lib/grn_ts.h lib/proc.c lib/ts.c Modified: lib/grn_ts.h (+1 -0) =================================================================== --- lib/grn_ts.h 2015-11-25 16:57:32 +0900 (7413c72) +++ lib/grn_ts.h 2015-11-26 11:13:40 +0900 (37d3046) @@ -40,6 +40,7 @@ extern "C" { grn_rc grn_ts_select(grn_ctx *ctx, grn_obj *table, const char *filter_ptr, size_t filter_len, const char *scorer_ptr, size_t scorer_len, + const char *sortby_ptr, size_t sortby_len, const char *output_columns_ptr, size_t output_columns_len, size_t offset, size_t limit); Modified: lib/proc.c (+1 -0) =================================================================== --- lib/proc.c 2015-11-25 16:57:32 +0900 (367ab65) +++ lib/proc.c 2015-11-26 11:13:40 +0900 (aca87b0) @@ -1015,6 +1015,7 @@ grn_select(grn_ctx *ctx, const char *table, unsigned int table_len, (ctx->impl->output.type == GRN_CONTENT_JSON)) { ctx->rc = grn_ts_select(ctx, table_, filter + 1, filter_len - 1, scorer, scorer_len, + sortby, sortby_len, output_columns, output_columns_len, offset, limit); if (!ctx->rc && cacheable && cache_key_size <= GRN_CACHE_MAX_KEY_SIZE && Modified: lib/ts.c (+52 -15) =================================================================== --- lib/ts.c 2015-11-25 16:57:32 +0900 (7bb8b21) +++ lib/ts.c 2015-11-26 11:13:40 +0900 (a6435de9) @@ -701,6 +701,44 @@ grn_ts_select_output(grn_ctx *ctx, grn_obj *table, grn_ts_str str, return rc; } +/* grn_ts_select_with_sortby() executes a select command with --sortby. */ +static grn_rc +grn_ts_select_with_sortby(grn_ctx *ctx, grn_obj *table, + grn_ts_str filter, grn_ts_str scorer, + grn_ts_str sortby, grn_ts_str output_columns, + size_t offset, size_t limit) +{ + // TODO + return GRN_FUNCTION_NOT_IMPLEMENTED; +} + +/* + * grn_ts_select_without_sortby() executes a select command without --sortby. + */ +static grn_rc +grn_ts_select_without_sortby(grn_ctx *ctx, grn_obj *table, + grn_ts_str filter, grn_ts_str scorer, + grn_ts_str output_columns, + size_t offset, size_t limit) +{ + grn_rc rc; + grn_ts_record *records = NULL; + size_t n_records, n_hits; + rc = grn_ts_select_filter(ctx, table, filter, offset, limit, + &records, &n_records, &n_hits); + if (rc == GRN_SUCCESS) { + rc = grn_ts_select_scorer(ctx, table, scorer, records, n_records); + if (rc == GRN_SUCCESS) { + rc = grn_ts_select_output(ctx, table, output_columns, + records, n_records, n_hits); + } + } + if (records) { + GRN_FREE(records); + } + return rc; +} + /*------------------------------------------------------------- * API. */ @@ -709,31 +747,30 @@ grn_rc grn_ts_select(grn_ctx *ctx, grn_obj *table, const char *filter_ptr, size_t filter_len, const char *scorer_ptr, size_t scorer_len, + const char *sortby_ptr, size_t sortby_len, const char *output_columns_ptr, size_t output_columns_len, size_t offset, size_t limit) { grn_rc rc; grn_ts_str filter = { filter_ptr, filter_len }; grn_ts_str scorer = { scorer_ptr, scorer_len }; + grn_ts_str sortby = { sortby_ptr, sortby_len }; grn_ts_str output_columns = { output_columns_ptr, output_columns_len }; - grn_ts_record *records = NULL; - size_t n_records, n_hits; - if (!ctx || !table || !grn_ts_obj_is_table(ctx, table) || - (!filter_ptr && filter_len) || (!scorer_ptr && scorer_len) || - (!output_columns_ptr && output_columns_len)) { + if (!ctx) { return GRN_INVALID_ARGUMENT; } - rc = grn_ts_select_filter(ctx, table, filter, offset, limit, - &records, &n_records, &n_hits); - if (rc == GRN_SUCCESS) { - rc = grn_ts_select_scorer(ctx, table, scorer, records, n_records); - if (rc == GRN_SUCCESS) { - rc = grn_ts_select_output(ctx, table, output_columns, - records, n_records, n_hits); - } + if (!table || !grn_ts_obj_is_table(ctx, table) || + (!filter_ptr && filter_len) || (!scorer_ptr && scorer_len) || + (!sortby_ptr && sortby_len) || + (!output_columns_ptr && output_columns_len)) { + GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument"); } - if (records) { - GRN_FREE(records); + if (sortby_len) { + rc = grn_ts_select_with_sortby(ctx, table, filter, scorer, sortby, + output_columns, offset, limit); + } else { + rc = grn_ts_select_without_sortby(ctx, table, filter, scorer, + output_columns, offset, limit); } if (rc != GRN_SUCCESS) { GRN_BULK_REWIND(ctx->impl->output.buf); -------------- next part -------------- HTML����������������������������...Download