[Groonga-commit] groonga/groonga at a38d390 [master] load: add column type check for loading object value as column value case

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Feb 19 15:22:37 JST 2014


Kouhei Sutou	2014-02-19 15:22:37 +0900 (Wed, 19 Feb 2014)

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

  Message:
    load: add column type check for loading object value as column value case

  Added files:
    test/command/suite/load/index/forward/array/invalid/not_index_column.expected
    test/command/suite/load/index/forward/array/invalid/not_index_column.test
    test/command/suite/load/index/forward/object/invalid/not_index_column.expected
    test/command/suite/load/index/forward/object/invalid/not_index_column.test
  Modified files:
    lib/db.c

  Modified: lib/db.c (+19 -3)
===================================================================
--- lib/db.c    2014-02-19 15:13:06 +0900 (6e81d8d)
+++ lib/db.c    2014-02-19 15:22:37 +0900 (9443abd)
@@ -9462,7 +9462,8 @@ values_add(grn_ctx *ctx, grn_loader *loader)
 static grn_obj *
 values_next(grn_ctx *ctx, grn_obj *value)
 {
-  if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
+  if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET ||
+      value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
     value += GRN_UINT32_VALUE(value);
   }
   return value + 1;
@@ -9576,6 +9577,21 @@ set_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grn_obj *vector)
   GRN_OBJ_FIN(ctx, &buf);
 }
 
+static void
+set_map(grn_ctx *ctx, grn_obj *column, grn_id id, grn_obj *map)
+{
+  if (column->header.type != GRN_COLUMN_INDEX) {
+    char column_name[GRN_TABLE_MAX_KEY_SIZE];
+    int column_name_size;
+    column_name_size = grn_obj_name(ctx, column, column_name,
+                                    GRN_TABLE_MAX_KEY_SIZE);
+    ERR(GRN_INVALID_ARGUMENT,
+        "<%.*s>: columns except index column don't support object value",
+        column_name_size, column_name);
+    return;
+  }
+}
+
 static inline int
 name_equal(const char *p, unsigned int size, const char *name)
 {
@@ -9726,7 +9742,7 @@ bracket_close(grn_ctx *ctx, grn_loader *loader)
           if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
             set_vector(ctx, column, id, value);
           } else if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
-            /* todo */
+            set_map(ctx, column, id, value);
           } else {
             grn_obj_set_value(ctx, column, id, value, GRN_OBJ_SET);
           }
@@ -9836,7 +9852,7 @@ brace_close(grn_ctx *ctx, grn_loader *loader)
             if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
               set_vector(ctx, col, id, value);
             } else if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
-              /* todo */
+              set_map(ctx, col, id, value);
             } else {
               grn_obj_set_value(ctx, col, id, value, GRN_OBJ_SET);
             }

  Added: test/command/suite/load/index/forward/array/invalid/not_index_column.expected (+17 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/load/index/forward/array/invalid/not_index_column.expected    2014-02-19 15:22:37 +0900 (b132880)
@@ -0,0 +1,17 @@
+table_create Memos TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Memos content COLUMN_SCALAR ShortText
+[[0,0.0,0.0],true]
+load --table Memos
+[
+["_key", "content"],
+[
+  "Groonga is fast",
+  {
+    "groonga": 100
+  }
+]
+]
+[[0,0.0,0.0],1]
+#|e| <Memos.content>: columns except index column don't support object value
+#|e| [table][load] failed to set column value: <Memos.content>: columns except index column don't support object value: key: <"Groonga is fast">, column: <Memos.content>, value: <{"groonga": 100}>

  Added: test/command/suite/load/index/forward/array/invalid/not_index_column.test (+13 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/load/index/forward/array/invalid/not_index_column.test    2014-02-19 15:22:37 +0900 (643ffec)
@@ -0,0 +1,13 @@
+table_create Memos TABLE_HASH_KEY ShortText
+column_create Memos content COLUMN_SCALAR ShortText
+
+load --table Memos
+[
+["_key", "content"],
+[
+  "Groonga is fast",
+  {
+    "groonga": 100
+  }
+]
+]

  Added: test/command/suite/load/index/forward/object/invalid/not_index_column.expected (+16 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/load/index/forward/object/invalid/not_index_column.expected    2014-02-19 15:22:37 +0900 (71f2c34)
@@ -0,0 +1,16 @@
+table_create Memos TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Memos content COLUMN_SCALAR ShortText
+[[0,0.0,0.0],true]
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "content": {
+    "groonga": 100
+  }
+}
+]
+[[0,0.0,0.0],1]
+#|e| <Memos.content>: columns except index column don't support object value
+#|e| [table][load] failed to set column value: <Memos.content>: columns except index column don't support object value: key: <"Groonga is fast">, column: <content>, value: <{"groonga": 100}>

  Added: test/command/suite/load/index/forward/object/invalid/not_index_column.test (+12 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/load/index/forward/object/invalid/not_index_column.test    2014-02-19 15:22:37 +0900 (98e0d08)
@@ -0,0 +1,12 @@
+table_create Memos TABLE_HASH_KEY ShortText
+column_create Memos content COLUMN_SCALAR ShortText
+
+load --table Memos
+[
+{
+  "_key": "Groonga is fast",
+  "content": {
+    "groonga": 100
+  }
+}
+]
-------------- next part --------------
HTML����������������������������...
다운로드 



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