Kouhei Sutou
null+****@clear*****
Tue Mar 8 16:12:16 JST 2016
Kouhei Sutou 2016-03-08 16:12:16 +0900 (Tue, 08 Mar 2016) New Revision: 960f5ef8f3973cf6976f90fc1258e8c0631dbd8e https://github.com/groonga/groonga/commit/960f5ef8f3973cf6976f90fc1258e8c0631dbd8e Message: Clean up validation code Modified files: lib/db.c Modified: lib/db.c (+45 -27) =================================================================== --- lib/db.c 2016-03-08 15:14:48 +0900 (27e6a47) +++ lib/db.c 2016-03-08 16:12:16 +0900 (651e06a) @@ -879,42 +879,60 @@ grn_table_create_validate(grn_ctx *ctx, const char *name, unsigned int name_size const char *path, grn_obj_flags flags, grn_obj *key_type, grn_obj *value_type) { - switch (flags & GRN_OBJ_TABLE_TYPE_MASK) { + grn_obj_flags table_type; + const char *table_type_name = NULL; + + table_type = (flags & GRN_OBJ_TABLE_TYPE_MASK); + switch (table_type) { case GRN_OBJ_TABLE_HASH_KEY : - if (flags & GRN_OBJ_KEY_WITH_SIS) { - ERR(GRN_INVALID_ARGUMENT, - "[table][create] " - "key with SIS isn't available for hash table: <%.*s>", - name_size, name); - } + table_type_name = "TABLE_HASH_KEY"; break; case GRN_OBJ_TABLE_PAT_KEY : + table_type_name = "TABLE_PAT_KEY"; break; case GRN_OBJ_TABLE_DAT_KEY : + table_type_name = "TABLE_DAT_KEY"; break; case GRN_OBJ_TABLE_NO_KEY : - if (key_type) { - int key_name_size; - char key_name[GRN_TABLE_MAX_KEY_SIZE]; - key_name_size = grn_obj_name(ctx, key_type, key_name, - GRN_TABLE_MAX_KEY_SIZE); - ERR(GRN_INVALID_ARGUMENT, - "[table][create] " - "key isn't available for no key table: <%.*s> (%.*s)", - name_size, name, key_name_size, key_name); - } else if (flags & GRN_OBJ_KEY_WITH_SIS) { - ERR(GRN_INVALID_ARGUMENT, - "[table][create] " - "key with SIS isn't available for no key table: <%.*s>", - name_size, name); - } else if (flags & GRN_OBJ_KEY_NORMALIZE) { - ERR(GRN_INVALID_ARGUMENT, - "[table][create] " - "key normalization isn't available for no key table: <%.*s>", - name_size, name); - } + table_type_name = "TABLE_NO_KEY"; break; + default : + table_type_name = "unknown"; + break; + } + + if (key_type && table_type == GRN_OBJ_TABLE_NO_KEY) { + int key_name_size; + char key_name[GRN_TABLE_MAX_KEY_SIZE]; + key_name_size = grn_obj_name(ctx, key_type, key_name, + GRN_TABLE_MAX_KEY_SIZE); + ERR(GRN_INVALID_ARGUMENT, + "[table][create] " + "key isn't available for no key table: <%.*s> (%.*s)", + name_size, name, key_name_size, key_name); + return ctx->rc; + } + + if ((flags & GRN_OBJ_KEY_WITH_SIS) && + table_type != GRN_OBJ_TABLE_PAT_KEY) { + ERR(GRN_INVALID_ARGUMENT, + "[table][create] " + "key with SIS is available only for TABLE_PAT_KEY table: " + "<%.*s>(%s)", + name_size, name, + table_type_name); + return ctx->rc; } + + if ((flags & GRN_OBJ_KEY_NORMALIZE) && + table_type == GRN_OBJ_TABLE_NO_KEY) { + ERR(GRN_INVALID_ARGUMENT, + "[table][create] " + "key normalization isn't available for no key table: <%.*s>", + name_size, name); + return ctx->rc; + } + return ctx->rc; } -------------- next part -------------- HTML����������������������������...Download