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����������������������������... 다운로드