[Groonga-commit] groonga/groonga at 0dac79a [master] grn_ts: add a stub for --sortby

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index