[Groonga-commit] groonga/groonga at 0daaba2 [master] grn_ts: add grn_ts_expr_push_name()

Back to archive index

susumu.yata null+****@clear*****
Thu Sep 24 09:46:50 JST 2015


susumu.yata	2015-09-24 09:46:50 +0900 (Thu, 24 Sep 2015)

  New Revision: 0daaba27c52eea8dce60783fe5363312d8b35abe
  https://github.com/groonga/groonga/commit/0daaba27c52eea8dce60783fe5363312d8b35abe

  Message:
    grn_ts: add grn_ts_expr_push_name()

  Modified files:
    lib/grn_ts.h
    lib/ts.c

  Modified: lib/grn_ts.h (+4 -0)
===================================================================
--- lib/grn_ts.h    2015-09-24 09:28:51 +0900 (31257e3)
+++ lib/grn_ts.h    2015-09-24 09:46:50 +0900 (50179e6)
@@ -242,6 +242,10 @@ grn_ts_expr_node *grn_ts_expr_get_root(grn_ctx *ctx, grn_ts_expr *expr);
 grn_rc grn_ts_expr_push(grn_ctx *ctx, grn_ts_expr *expr,
                         const char *str_ptr, size_t str_size);
 
+/* grn_ts_expr_push_name() pushes a named object. */
+grn_rc grn_ts_expr_push_name(grn_ctx *ctx, grn_ts_expr *expr,
+                             const char *name_ptr, size_t name_size);
+
 /*
  * grn_ts_expr_push_obj() pushes an object.
  *

  Modified: lib/ts.c (+43 -22)
===================================================================
--- lib/ts.c    2015-09-24 09:28:51 +0900 (99e2d5b)
+++ lib/ts.c    2015-09-24 09:46:50 +0900 (8446de0)
@@ -122,6 +122,15 @@ grn_ts_str_is_name_prefix(grn_ts_str str) {
   return GRN_TRUE;
 }
 
+/* grn_ts_str_is_name() returns whether or not a string is valid as a name. */
+static grn_ts_bool
+grn_ts_str_is_name(grn_ts_str str) {
+  if (!str.size) {
+    return GRN_FALSE;
+  }
+  return grn_ts_str_is_name_prefix(str);
+}
+
 /* grn_ts_str_is_id_name() returns whether or not a string is "_id". */
 static grn_ts_bool
 grn_ts_str_is_id_name(grn_ts_str str) {
@@ -4631,28 +4640,8 @@ grn_ts_expr_parser_push_const(grn_ctx *ctx, grn_ts_expr_parser *parser,
 static grn_rc
 grn_ts_expr_parser_push_name(grn_ctx *ctx, grn_ts_expr_parser *parser,
                              grn_ts_expr_name_token *token) {
-  grn_rc rc;
-  grn_obj *column;
-  grn_ts_str name = token->src;
-  if (grn_ts_str_is_id_name(name)) {
-    return grn_ts_expr_push_id(ctx, parser->expr);
-  }
-  if (grn_ts_str_is_score_name(name)) {
-    return grn_ts_expr_push_score(ctx, parser->expr);
-  }
-  if (grn_ts_str_is_key_name(name)) {
-    return grn_ts_expr_push_key(ctx, parser->expr);
-  }
-  if (grn_ts_str_is_value_name(name)) {
-    return grn_ts_expr_push_value(ctx, parser->expr);
-  }
-  column = grn_obj_column(ctx, parser->expr->curr_table, name.ptr, name.size);
-  if (!column) {
-    return GRN_INVALID_ARGUMENT;
-  }
-  rc = grn_ts_expr_push_column(ctx, parser->expr, column);
-  grn_obj_unlink(ctx, column);
-  return rc;
+  return grn_ts_expr_push_name(ctx, parser->expr,
+                               token->src.ptr, token->src.size);
 }
 
 /* grn_ts_expr_parser_push_op() pushes a token to an expression. */
@@ -5180,6 +5169,38 @@ grn_ts_expr_push(grn_ctx *ctx, grn_ts_expr *expr,
   return rc;
 }
 
+grn_rc
+grn_ts_expr_push_name(grn_ctx *ctx, grn_ts_expr *expr,
+                     const char *name_ptr, size_t name_size) {
+  grn_rc rc;
+  grn_obj *column;
+  grn_ts_str name = { name_ptr, name_size };
+  if (!ctx || !expr || (expr->type != GRN_TS_EXPR_INCOMPLETE) ||
+      !grn_ts_str_is_name(name)) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  if (grn_ts_str_is_id_name(name)) {
+    return grn_ts_expr_push_id(ctx, expr);
+  }
+  if (grn_ts_str_is_score_name(name)) {
+    return grn_ts_expr_push_score(ctx, expr);
+  }
+  if (grn_ts_str_is_key_name(name)) {
+    return grn_ts_expr_push_key(ctx, expr);
+  }
+  if (grn_ts_str_is_value_name(name)) {
+    return grn_ts_expr_push_value(ctx, expr);
+  }
+  /* TODO: Resolve references. */
+  column = grn_obj_column(ctx, expr->curr_table, name.ptr, name.size);
+  if (!column) {
+    return GRN_INVALID_ARGUMENT;
+  }
+  rc = grn_ts_expr_push_column(ctx, expr, column);
+  grn_obj_unlink(ctx, column);
+  return rc;
+}
+
 #define GRN_TS_EXPR_PUSH_BULK_CASE(TYPE, kind)\
   case GRN_DB_ ## TYPE: {\
     return grn_ts_expr_push_ ## kind(ctx, expr, GRN_ ## TYPE ## _VALUE(obj));\
-------------- next part --------------
HTML����������������������������...
다운로드 



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