[Groonga-commit] groonga/groonga [master] [shcema][table-create] check max key size.

Zurück zum Archiv-Index

null+****@clear***** null+****@clear*****
2011年 12月 19日 (月) 13:49:43 JST


Kouhei Sutou	2011-12-19 04:49:43 +0000 (Mon, 19 Dec 2011)

  New Revision: d50b0e2f170372f0244193a3f70ae2524f856423

  Log:
    [shcema][table-create] check max key size.
    
    refs #915
    refs #1210

  Modified files:
    lib/db.c
    test/unit/http/test-http-schema.rb

  Modified: lib/db.c (+6 -0)
===================================================================
--- lib/db.c    2011-12-19 04:33:25 +0000 (f7a6306)
+++ lib/db.c    2011-12-19 04:49:43 +0000 (7a7d399)
@@ -710,6 +710,12 @@ grn_table_create(grn_ctx *ctx, const char *name, unsigned name_size,
         grn_db_obj *t = (grn_db_obj *)key_type;
         flags |= t->header.flags;
         key_size = GRN_TYPE_SIZE(t);
+        if (key_size > GRN_TABLE_MAX_KEY_SIZE) {
+          ERR(GRN_INVALID_ARGUMENT,
+              "[table][create] key size too big: <%.*s> (%d) (max:%d)",
+              name_size, name, key_size, GRN_TABLE_MAX_KEY_SIZE);
+          GRN_API_RETURN(NULL);
+        }
       }
       break;
     case GRN_TABLE_HASH_KEY :

  Modified: test/unit/http/test-http-schema.rb (+10 -6)
===================================================================
--- test/unit/http/test-http-schema.rb    2011-12-19 04:33:25 +0000 (f506698)
+++ test/unit/http/test-http-schema.rb    2011-12-19 04:49:43 +0000 (3e66a99)
@@ -319,12 +319,14 @@ class HTTPSchemaTest < Test::Unit::TestCase
                           "null"]])
     end
 
-    def test_long_size_key
+    def test_big_size_key
       response = get(command_path(:table_create,
                                   :name => "users",
                                   :key_type => "Text"))
-      assert_error_response(Result::UNKNOWN_ERROR,
-                            "should implement error case",
+      assert_error_response(Result::INVALID_ARGUMENT,
+                            "[table][create] " +
+                              "key size too big: " +
+                              "<users> (65536) (max:4096)",
                             response,
                             :content_type => "application/json")
 
@@ -443,13 +445,15 @@ class HTTPSchemaTest < Test::Unit::TestCase
                           "null"]])
     end
 
-    def test_long_size_key
+    def test_big_size_key
       response = get(command_path(:table_create,
                                   :name => "users",
                                   :flags => Table::PAT_KEY,
                                   :key_type => "Text"))
-      assert_error_response(Result::UNKNOWN_ERROR,
-                            "should implement error case",
+      assert_error_response(Result::INVALID_ARGUMENT,
+                            "[table][create] " +
+                              "key size too big: " +
+                              "<users> (65536) (max:4096)",
                             response,
                             :content_type => "application/json")
 




Groonga-commit メーリングリストの案内
Zurück zum Archiv-Index