[Groonga-commit] groonga/groonga at 20435f7 [master] grn_ts: update grn_ts_expr_push() to support Text

アーカイブの一覧に戻る

susumu.yata null+****@clear*****
Mon Sep 7 15:08:24 JST 2015


susumu.yata	2015-09-07 15:08:24 +0900 (Mon, 07 Sep 2015)

  New Revision: 20435f75a368d48b78b5a799d0b3896776c03621
  https://github.com/groonga/groonga/commit/20435f75a368d48b78b5a799d0b3896776c03621

  Message:
    grn_ts: update grn_ts_expr_push() to support Text
    
    GitHub: #392

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+43 -0)
===================================================================
--- lib/ts.c    2015-09-07 14:45:02 +0900 (56666c0)
+++ lib/ts.c    2015-09-07 15:08:24 +0900 (8f1b0f3)
@@ -2205,6 +2205,49 @@ grn_ts_expr_push(grn_ctx *ctx, grn_ts_expr *expr,
     }
     GRN_FREE(buf);
     return rc;
+  } else if (str[0] == '"') {
+    char *buf;
+    size_t i, len, end;
+    grn_rc rc;
+    if (str[str_size - 1] != '"') {
+      return GRN_INVALID_ARGUMENT;
+    }
+    if (str_size == 2) {
+      return grn_ts_expr_push_text(ctx, expr, grn_ts_text_zero());
+    }
+    buf = GRN_MALLOCN(char, str_size - 2);
+    if (!buf) {
+      return GRN_NO_MEMORY_AVAILABLE;
+    }
+    rc = GRN_SUCCESS;
+    len = 0;
+    end = str_size - 1;
+    for (i = 1; (rc == GRN_SUCCESS) && (i < end); i++) {
+      switch (str[i]) {
+        case '\\': {
+          if (i == (end - 1)) {
+            rc = GRN_INVALID_ARGUMENT;
+            break;
+          }
+          buf[len++] = str[++i];
+          break;
+        }
+        case '"': {
+          rc = GRN_INVALID_ARGUMENT;
+          break;
+        }
+        default: {
+          buf[len++] = str[i];
+          break;
+        }
+      }
+    }
+    if (rc == GRN_SUCCESS) {
+      grn_ts_text value = { buf, len };
+      rc = grn_ts_expr_push_text(ctx, expr, value);
+    }
+    GRN_FREE(buf);
+    return rc;
   } else {
     grn_rc rc;
     grn_obj *column = grn_obj_column(ctx, expr->curr_table, str, str_size);
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る