null+****@clear*****
null+****@clear*****
2011年 12月 19日 (月) 17:41:07 JST
Kouhei Sutou 2011-12-19 08:41:07 +0000 (Mon, 19 Dec 2011)
New Revision: aca41f7fb4ad06e0194eeeda11934f13b4b28c0d
Log:
[shcema][table-create] improve message on variable size value type error.
refs #915
refs #1210
Modified files:
lib/db.c
test/unit/http/test-http-schema.rb
Modified: lib/db.c (+19 -7)
===================================================================
--- lib/db.c 2011-12-19 08:24:53 +0000 (58719ed)
+++ lib/db.c 2011-12-19 08:41:07 +0000 (c7c0b85)
@@ -747,7 +747,7 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
key_name_size = grn_obj_name(ctx, key_type, key_name,
GRN_TABLE_MAX_KEY_SIZE);
ERR(GRN_INVALID_ARGUMENT,
- "[table][create] key must by type or table: <%.*s> (%.*s)",
+ "[table][create] key type must be type or table: <%.*s> (%.*s)",
name_size, name, key_name_size, key_name);
GRN_API_RETURN(NULL);
}
@@ -763,7 +763,13 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
{
grn_db_obj *t = (grn_db_obj *)value_type;
if (t->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
- ERR(GRN_INVALID_ARGUMENT, "value_type must be fixed size");
+ int type_name_size;
+ char type_name[GRN_TABLE_MAX_KEY_SIZE];
+ type_name_size = grn_obj_name(ctx, value_type, type_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] value type must be fixed size: <%.*s> (%.*s)",
+ name_size, name, type_name_size, type_name);
GRN_API_RETURN(NULL);
}
value_size = GRN_TYPE_SIZE(t);
@@ -773,15 +779,21 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
case GRN_TABLE_PAT_KEY :
case GRN_TABLE_DAT_KEY :
case GRN_TABLE_NO_KEY :
+ case GRN_TABLE_VIEW :
value_size = sizeof(grn_id);
break;
default :
- /*
- if (value_type == grn_type_any) {
- value_size = sizeof(grn_id) + sizeof(grn_id);
+ {
+ int value_name_size;
+ char value_name[GRN_TABLE_MAX_KEY_SIZE];
+ value_name_size = grn_obj_name(ctx, value_type, value_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] value type must be type or table: <%.*s> (%.*s)",
+ name_size, name, value_name_size, value_name);
+ GRN_API_RETURN(NULL);
}
- */
- value_size = sizeof(grn_id);
+ break;
}
} else {
value_size = 0;
Modified: test/unit/http/test-http-schema.rb (+60 -2)
===================================================================
--- test/unit/http/test-http-schema.rb 2011-12-19 08:24:53 +0000 (d82e55f)
+++ test/unit/http/test-http-schema.rb 2011-12-19 08:41:07 +0000 (3aedaa2)
@@ -369,7 +369,7 @@ class HTTPSchemaTest < Test::Unit::TestCase
:key_type => "table_create"))
assert_error_response(Result::INVALID_ARGUMENT,
"[table][create] " +
- "key must by type or table: " +
+ "key type must be type or table: " +
"<users> (table_create)",
response,
:content_type => "application/json")
@@ -399,6 +399,34 @@ class HTTPSchemaTest < Test::Unit::TestCase
assert_table_list([])
end
+
+ def test_invalid_value_type
+ response = get(command_path(:table_create,
+ :name => "users",
+ :value_type => "table_create"))
+ assert_error_response(Result::INVALID_ARGUMENT,
+ "[table][create] " +
+ "value type must be type or table: " +
+ "<users> (table_create)",
+ response,
+ :content_type => "application/json")
+
+ assert_table_list([])
+ end
+
+ def test_variable_size_value_type
+ response = get(command_path(:table_create,
+ :name => "users",
+ :value_type => "ShortText"))
+ assert_error_response(Result::INVALID_ARGUMENT,
+ "[table][create] " +
+ "value type must be fixed size: " +
+ "<users> (ShortText)",
+ response,
+ :content_type => "application/json")
+
+ assert_table_list([])
+ end
end
class PatriciaTrieCreateTest < Test::Unit::TestCase
@@ -499,7 +527,7 @@ class HTTPSchemaTest < Test::Unit::TestCase
:key_type => "table_create"))
assert_error_response(Result::INVALID_ARGUMENT,
"[table][create] " +
- "key must by type or table: " +
+ "key type must be type or table: " +
"<users> (table_create)",
response,
:content_type => "application/json")
@@ -532,6 +560,36 @@ class HTTPSchemaTest < Test::Unit::TestCase
assert_table_list([])
end
+
+ def test_invalid_value_type
+ response = get(command_path(:table_create,
+ :name => "users",
+ :flags => Table::PAT_KEY,
+ :value_type => "table_create"))
+ assert_error_response(Result::INVALID_ARGUMENT,
+ "[table][create] " +
+ "value type must be type or table: " +
+ "<users> (table_create)",
+ response,
+ :content_type => "application/json")
+
+ assert_table_list([])
+ end
+
+ def test_variable_size_value_type
+ response = get(command_path(:table_create,
+ :name => "users",
+ :flags => Table::PAT_KEY,
+ :value_type => "ShortText"))
+ assert_error_response(Result::INVALID_ARGUMENT,
+ "[table][create] " +
+ "value type must be fixed size: " +
+ "<users> (ShortText)",
+ response,
+ :content_type => "application/json")
+
+ assert_table_list([])
+ end
end
class ArrayCreateTest < Test::Unit::TestCase