[Groonga-commit] groonga/groonga at bc90f9e [master] grn_ts: add error messages

Back to archive index

susumu.yata null+****@clear*****
Tue Oct 6 02:56:20 JST 2015


susumu.yata	2015-10-06 02:56:20 +0900 (Tue, 06 Oct 2015)

  New Revision: bc90f9eeebea4ca5061da6db80aca6b911a69f13
  https://github.com/groonga/groonga/commit/bc90f9eeebea4ca5061da6db80aca6b911a69f13

  Message:
    grn_ts: add error messages
    
    GitHub: #412

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+56 -26)
===================================================================
--- lib/ts.c    2015-10-06 02:23:17 +0900 (e84aeeb)
+++ lib/ts.c    2015-10-06 02:56:20 +0900 (63b5ec3)
@@ -3515,7 +3515,8 @@ grn_ts_op_logical_or_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE(type, GEO_POINT, geo_point)\
     GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE(type, REF, ref)\
     default: {\
-      return GRN_INVALID_ARGUMENT;\
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",\
+                        node->args[0]->data_kind);\
     }\
   }
 /* grn_ts_op_equal_evaluate() evaluates an operator. */
@@ -3570,7 +3571,8 @@ grn_ts_op_not_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     GRN_TS_OP_CMP_EVALUATE_VECTOR_CASE(type, TIME, time)\
     GRN_TS_OP_CMP_EVALUATE_VECTOR_CASE(type, TEXT, text)\
     default: {\
-      return GRN_INVALID_ARGUMENT;\
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",\
+                        node->args[0]->data_kind);\
     }\
   }
 /* grn_ts_op_less_evaluate() evaluates an operator. */
@@ -3664,12 +3666,15 @@ grn_ts_op_plus_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
         GRN_TS_OP_ARITH_EVALUATE_TIME_CASE(plus, INT, time, int)
         GRN_TS_OP_ARITH_EVALUATE_TIME_CASE(plus, FLOAT, time, float)
         default: {
-          return GRN_INVALID_ARGUMENT;
+          GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "data kind conflict: %d, %d",
+                            node->args[0]->data_kind,
+                            node->args[1]->data_kind);
         }
       }
     }
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        node->args[0]->data_kind);
     }
   }
 }
@@ -3709,12 +3714,15 @@ grn_ts_op_minus_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
           return GRN_SUCCESS;
         }
         default: {
-          return GRN_INVALID_ARGUMENT;
+          GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "data kind conflict: %d, %d",
+                            node->args[0]->data_kind,
+                            node->args[1]->data_kind);
         }
       }
     }
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        node->args[0]->data_kind);
     }
   }
 }
@@ -3729,7 +3737,8 @@ grn_ts_op_multiplication_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     GRN_TS_OP_ARITH_EVALUATE_CASE(multiplication, INT, int)
     GRN_TS_OP_ARITH_EVALUATE_CASE(multiplication, FLOAT, float)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        node->data_kind);
     }
   }
 }
@@ -3751,9 +3760,13 @@ grn_ts_op_division_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
         if (rc == GRN_SUCCESS) {
           grn_ts_int *buf_ptr = (grn_ts_int *)node->bufs[0].ptr;
           for (i = 0; i < n_in; i++) {
-            if (!buf_ptr[i] ||
-                ((out_ptr[i] == INT64_MIN) && (buf_ptr[i] == -1))) {
-              rc = GRN_INVALID_ARGUMENT;
+            if (!buf_ptr[i]) {
+              GRN_TS_ERR(GRN_INVALID_ARGUMENT, "integer division by zero");
+              rc = ctx->rc;
+              break;
+            } else if ((out_ptr[i] == INT64_MIN) && (buf_ptr[i] == -1)) {
+              GRN_TS_ERR(GRN_INVALID_ARGUMENT, "integer division overflow");
+              rc = ctx->rc;
               break;
             }
             out_ptr[i] = grn_ts_op_division_int(out_ptr[i], buf_ptr[i]);
@@ -3764,7 +3777,8 @@ grn_ts_op_division_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     }
     GRN_TS_OP_ARITH_EVALUATE_CASE(division, FLOAT, float)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        node->data_kind);
     }
   }
 }
@@ -3786,9 +3800,13 @@ grn_ts_op_modulus_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
         if (rc == GRN_SUCCESS) {
           grn_ts_int *buf_ptr = (grn_ts_int *)node->bufs[0].ptr;
           for (i = 0; i < n_in; i++) {
-            if (!buf_ptr[i] ||
-                ((out_ptr[i] == INT64_MIN) && (buf_ptr[i] == -1))) {
-              rc = GRN_INVALID_ARGUMENT;
+            if (!buf_ptr[i]) {
+              GRN_TS_ERR(GRN_INVALID_ARGUMENT, "integer division by zero");
+              rc = ctx->rc;
+              break;
+            } else if ((out_ptr[i] == INT64_MIN) && (buf_ptr[i] == -1)) {
+              GRN_TS_ERR(GRN_INVALID_ARGUMENT, "integer division overflow");
+              rc = ctx->rc;
               break;
             }
             out_ptr[i] = grn_ts_op_modulus_int(out_ptr[i], buf_ptr[i]);
@@ -3799,7 +3817,8 @@ grn_ts_op_modulus_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     }
     GRN_TS_OP_ARITH_EVALUATE_CASE(modulus, FLOAT, float)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",
+                        node->data_kind);
     }
   }
 }
@@ -3855,7 +3874,8 @@ grn_ts_expr_op_node_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
     }
     // TODO: Add operators.
     default: {
-      return GRN_OPERATION_NOT_SUPPORTED;
+      GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                        "operator not supported: %d", node->op_type);
     }
   }
 }
@@ -3988,7 +4008,8 @@ grn_ts_op_logical_or_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
     GRN_TS_OP_CHK_FILTER_VECTOR_CASE(type, GEO_POINT, geo_point)\
     GRN_TS_OP_CHK_FILTER_VECTOR_CASE(type, REF, ref)\
     default: {\
-      return GRN_INVALID_ARGUMENT;\
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",\
+                        node->args[0]->data_kind);\
     }\
   }
 /* grn_ts_op_equal_filter() filters records. */
@@ -4045,7 +4066,8 @@ grn_ts_op_not_equal_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
     GRN_TS_OP_CMP_FILTER_VECTOR_CASE(type, TIME, time)\
     GRN_TS_OP_CMP_FILTER_VECTOR_CASE(type, TEXT, text)\
     default: {\
-      return GRN_INVALID_ARGUMENT;\
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT, "invalid data kind: %d",\
+                        node->args[0]->data_kind);\
     }\
   }
 /* grn_ts_op_less_filter() filters records. */
@@ -4118,7 +4140,8 @@ grn_ts_expr_op_node_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
     }
     // TODO: Add operators.
     default: {
-      return GRN_OPERATION_NOT_SUPPORTED;
+      GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                        "operator not supported: %d", node->op_type);
     }
   }
 }
@@ -4200,7 +4223,8 @@ grn_ts_expr_op_node_adjust(grn_ctx *ctx, grn_ts_expr_op_node *node,
     }
     // TODO: Add operators.
     default: {
-      return GRN_OPERATION_NOT_SUPPORTED;
+      GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                        "operator not supported: %d", node->op_type);
     }
   }
 }
@@ -4379,7 +4403,8 @@ grn_ts_expr_node_evaluate(grn_ctx *ctx, grn_ts_expr_node *node,
     GRN_TS_EXPR_NODE_EVALUATE_CASE(OP, op)
     GRN_TS_EXPR_NODE_EVALUATE_CASE(BRIDGE, bridge)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT,
+                        "invalid node type: %d", node->type);
     }
   }
 }
@@ -4416,7 +4441,8 @@ grn_ts_expr_node_evaluate_to_buf(grn_ctx *ctx, grn_ts_expr_node *node,
     GRN_TS_EXPR_NODE_EVALUATE_TO_BUF_VECTOR_CASE(GEO_POINT, geo_point)
     GRN_TS_EXPR_NODE_EVALUATE_TO_BUF_VECTOR_CASE(REF, ref)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OBJECT_CORRUPT,
+                        "invalid data kind: %d", node->data_kind);
     }
   }
 }
@@ -4436,7 +4462,8 @@ grn_ts_expr_node_filter(grn_ctx *ctx, grn_ts_expr_node *node,
                         grn_ts_record *in, size_t n_in,
                         grn_ts_record *out, size_t *n_out) {
   if (node->data_kind != GRN_TS_BOOL) {
-    return GRN_INVALID_ARGUMENT;
+    GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                      "invalid data kind: %d", node->data_kind);
   }
   switch (node->type) {
     GRN_TS_EXPR_NODE_FILTER_CASE(KEY, key)
@@ -4446,7 +4473,8 @@ grn_ts_expr_node_filter(grn_ctx *ctx, grn_ts_expr_node *node,
     GRN_TS_EXPR_NODE_FILTER_CASE(OP, op)
     GRN_TS_EXPR_NODE_FILTER_CASE(BRIDGE, bridge)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                        "invalid node type: %d", node->type);
     }
   }
 }
@@ -4463,7 +4491,8 @@ static grn_rc
 grn_ts_expr_node_adjust(grn_ctx *ctx, grn_ts_expr_node *node,
                         grn_ts_record *io, size_t n_io) {
   if (node->data_kind != GRN_TS_FLOAT) {
-    return GRN_INVALID_ARGUMENT;
+    GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                      "invalid data kind: %d", node->data_kind);
   }
   switch (node->type) {
     GRN_TS_EXPR_NODE_ADJUST_CASE(SCORE, score)
@@ -4474,7 +4503,8 @@ grn_ts_expr_node_adjust(grn_ctx *ctx, grn_ts_expr_node *node,
     GRN_TS_EXPR_NODE_ADJUST_CASE(OP, op)
     GRN_TS_EXPR_NODE_ADJUST_CASE(BRIDGE, bridge)
     default: {
-      return GRN_INVALID_ARGUMENT;
+      GRN_TS_ERR_RETURN(GRN_OPERATION_NOT_SUPPORTED,
+                        "invalid node type: %d", node->type);
     }
   }
 }
-------------- next part --------------
HTML����������������������������...
Download 



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