[Groonga-commit] groonga/groonga at 642b56c [master] grn_ts: add grn_ts_expr_parser_push_token()

Back to archive index

susumu.yata null+****@clear*****
Fri Sep 18 11:19:53 JST 2015


susumu.yata	2015-09-18 11:19:53 +0900 (Fri, 18 Sep 2015)

  New Revision: 642b56cdbde898085116896a813a4901cdcc3393
  https://github.com/groonga/groonga/commit/642b56cdbde898085116896a813a4901cdcc3393

  Message:
    grn_ts: add grn_ts_expr_parser_push_token()
    
    GitHub: #400

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+93 -58)
===================================================================
--- lib/ts.c    2015-09-18 10:05:12 +0900 (ad06ad3)
+++ lib/ts.c    2015-09-18 11:19:53 +0900 (24ca650)
@@ -4513,73 +4513,108 @@ grn_ts_expr_parser_reserve_stack(grn_ctx *ctx, grn_ts_expr_parser *parser) {
   return GRN_SUCCESS;
 }
 
-/* grn_ts_expr_parser_analyze_token() analyzes a token. */
+/* grn_ts_expr_parser_push_const_token() pushes a token to an expression. */
 static grn_rc
-grn_ts_expr_parser_analyze_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
-                                 grn_ts_expr_token *token) {
-  switch (token->type) {
-    case GRN_TS_EXPR_START_TOKEN:
-    case GRN_TS_EXPR_END_TOKEN: {
-      return GRN_SUCCESS;
+grn_ts_expr_parser_push_const_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
+                                    grn_ts_expr_const_token *token) {
+  switch (token->data_kind) {
+    case GRN_TS_BOOL: {
+      return grn_ts_expr_push_bool(ctx, parser->expr, token->content.as_bool);
+    }
+    case GRN_TS_INT: {
+      return grn_ts_expr_push_int(ctx, parser->expr, token->content.as_int);
+    }
+    case GRN_TS_FLOAT: {
+      return grn_ts_expr_push_float(ctx, parser->expr,
+                                    token->content.as_float);
+    }
+    case GRN_TS_TEXT: {
+      return grn_ts_expr_push_text(ctx, parser->expr, token->content.as_text);
     }
+    default: {
+      return GRN_OBJECT_CORRUPT;
+    }
+  }
+}
+
+/* grn_ts_expr_parser_push_name_token() pushes a token to an expression. */
+static grn_rc
+grn_ts_expr_parser_push_name_token(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 ((name.size == GRN_COLUMN_NAME_ID_LEN) &&
+      !memcmp(name.ptr, GRN_COLUMN_NAME_ID, GRN_COLUMN_NAME_ID_LEN)) {
+    return grn_ts_expr_push_id(ctx, parser->expr);
+  }
+  if ((name.size == GRN_COLUMN_NAME_KEY_LEN) &&
+      !memcmp(name.ptr, GRN_COLUMN_NAME_KEY, GRN_COLUMN_NAME_KEY_LEN)) {
+    return grn_ts_expr_push_key(ctx, parser->expr);
+  }
+  if ((name.size == GRN_COLUMN_NAME_VALUE_LEN) &&
+      !memcmp(name.ptr, GRN_COLUMN_NAME_VALUE, GRN_COLUMN_NAME_VALUE_LEN)) {
+    return grn_ts_expr_push_value(ctx, parser->expr);
+  }
+  if ((name.size == GRN_COLUMN_NAME_SCORE_LEN) &&
+      !memcmp(name.ptr, GRN_COLUMN_NAME_SCORE, GRN_COLUMN_NAME_SCORE_LEN)) {
+    return grn_ts_expr_push_score(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;
+}
+
+/* grn_ts_expr_parser_push_op_token() pushes a token to an expression. */
+static grn_rc
+grn_ts_expr_parser_push_op_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
+                                 grn_ts_expr_op_token *token) {
+  return grn_ts_expr_push_operator(ctx, parser->expr, token->op_type);
+}
+
+/* grn_ts_expr_parser_push_token() pushes a token to an expression. */
+static grn_rc
+grn_ts_expr_parser_push_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
+                              grn_ts_expr_token *token) {
+  switch (token->type) {
     case GRN_TS_EXPR_CONST_TOKEN: {
-      grn_ts_expr_const_token *const_token;
-      const_token = (grn_ts_expr_const_token *)token;
-      switch (const_token->data_kind) {
-        case GRN_TS_BOOL: {
-          return grn_ts_expr_push_bool(ctx, parser->expr,
-                                       const_token->content.as_bool);
-        }
-        case GRN_TS_INT: {
-          return grn_ts_expr_push_int(ctx, parser->expr,
-                                      const_token->content.as_int);
-        }
-        case GRN_TS_FLOAT: {
-          return grn_ts_expr_push_float(ctx, parser->expr,
-                                        const_token->content.as_float);
-        }
-        case GRN_TS_TEXT: {
-          return grn_ts_expr_push_text(ctx, parser->expr,
-                                       const_token->content.as_text);
-        }
-        default: {
-          return GRN_OBJECT_CORRUPT;
-        }
-      }
+      grn_ts_expr_const_token *const_token = (grn_ts_expr_const_token *)token;
+      return grn_ts_expr_parser_push_const_token(ctx, parser, const_token);
     }
     case GRN_TS_EXPR_NAME_TOKEN: {
       grn_ts_expr_name_token *name_token = (grn_ts_expr_name_token *)token;
-      grn_ts_str name = name_token->src;
-      if ((name.size == GRN_COLUMN_NAME_ID_LEN) &&
-          !memcmp(name.ptr, GRN_COLUMN_NAME_ID, GRN_COLUMN_NAME_ID_LEN)) {
-        return grn_ts_expr_push_id(ctx, parser->expr);
-      } else if ((name.size == GRN_COLUMN_NAME_KEY_LEN) &&
-                 !memcmp(name.ptr, GRN_COLUMN_NAME_KEY,
-                         GRN_COLUMN_NAME_KEY_LEN)) {
-        return grn_ts_expr_push_key(ctx, parser->expr);
-      } else if ((name.size == GRN_COLUMN_NAME_VALUE_LEN) &&
-                 !memcmp(name.ptr, GRN_COLUMN_NAME_VALUE,
-                         GRN_COLUMN_NAME_VALUE_LEN)) {
-        return grn_ts_expr_push_value(ctx, parser->expr);
-      } else if ((name.size == GRN_COLUMN_NAME_SCORE_LEN) &&
-                 !memcmp(name.ptr, GRN_COLUMN_NAME_SCORE,
-                         GRN_COLUMN_NAME_SCORE_LEN)) {
-        return grn_ts_expr_push_score(ctx, parser->expr);
-      } else {
-        grn_obj *column = grn_obj_column(ctx, parser->expr->curr_table,
-                                         name.ptr, name.size);
-        if (!column) {
-          return GRN_INVALID_ARGUMENT;
-        } else {
-          grn_rc rc = grn_ts_expr_push_column(ctx, parser->expr, column);
-          grn_obj_unlink(ctx, column);
-          return rc;
-        }
-      }
+      return grn_ts_expr_parser_push_name_token(ctx, parser, name_token);
     }
     case GRN_TS_EXPR_OP_TOKEN: {
       grn_ts_expr_op_token *op_token = (grn_ts_expr_op_token *)token;
-      return grn_ts_expr_push_operator(ctx, parser->expr, op_token->op_type);
+      return grn_ts_expr_parser_push_op_token(ctx, parser, op_token);
+    }
+    default: {
+      return GRN_INVALID_ARGUMENT;
+    }
+  }
+}
+
+/* grn_ts_expr_parser_analyze_token() analyzes a token. */
+static grn_rc
+grn_ts_expr_parser_analyze_token(grn_ctx *ctx, grn_ts_expr_parser *parser,
+                                 grn_ts_expr_token *token) {
+  switch (token->type) {
+    case GRN_TS_EXPR_START_TOKEN: {
+      return GRN_SUCCESS;
+    }
+    case GRN_TS_EXPR_END_TOKEN: {
+      /* TODO: Apply remaining operators. */
+      return GRN_SUCCESS;
+    }
+    case GRN_TS_EXPR_CONST_TOKEN:
+    case GRN_TS_EXPR_NAME_TOKEN:
+    case GRN_TS_EXPR_OP_TOKEN: {
+      return grn_ts_expr_parser_push_token(ctx, parser, token);
     }
     default: {
       return GRN_INVALID_ARGUMENT;
-------------- next part --------------
HTML����������������������������...
Descargar 



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