Kouhei Sutou
null+****@clear*****
Tue Oct 20 10:48:57 JST 2015
Kouhei Sutou 2015-10-20 10:48:57 +0900 (Tue, 20 Oct 2015) New Revision: 7ef4bdbf8272f9ebf36fbc25a8aaf01d7d57457f https://github.com/groonga/groonga/commit/7ef4bdbf8272f9ebf36fbc25a8aaf01d7d57457f Message: schema: support outputting table type and key type Modified files: lib/proc.c test/command/suite/schema/array.expected Modified: lib/proc.c (+58 -21) =================================================================== --- lib/proc.c 2015-10-20 10:48:34 +0900 (b9c8151) +++ lib/proc.c 2015-10-20 10:48:57 +0900 (1748cd3) @@ -7293,6 +7293,19 @@ exit : } static void +proc_schema_output_name(grn_ctx *ctx, grn_obj *obj) +{ + if (obj) { + char name[GRN_TABLE_MAX_KEY_SIZE]; + unsigned int name_size; + name_size = grn_obj_name(ctx, obj, name, GRN_TABLE_MAX_KEY_SIZE); + GRN_OUTPUT_STR(name, name_size); + } else { + GRN_OUTPUT_NULL(); + } +} + +static void proc_schema_plugins(grn_ctx *ctx) { grn_obj plugin_names; @@ -7339,18 +7352,15 @@ proc_schema_types(grn_ctx *ctx) GRN_OUTPUT_MAP_OPEN("types", n); for (i = 0; i < n; i++) { grn_obj *type; - char name[GRN_TABLE_MAX_KEY_SIZE]; - unsigned int name_size; type = GRN_PTR_VALUE_AT(&types, i); - name_size = grn_obj_name(ctx, type, name, GRN_TABLE_MAX_KEY_SIZE); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, type); GRN_OUTPUT_MAP_OPEN("type", 3); GRN_OUTPUT_CSTR("name"); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, type); GRN_OUTPUT_CSTR("size"); GRN_OUTPUT_INT64(GRN_TYPE_SIZE(DB_OBJ(type))); @@ -7381,18 +7391,15 @@ proc_schema_tokenizers(grn_ctx *ctx) GRN_OUTPUT_MAP_OPEN("tokenizers", n); for (i = 0; i < n; i++) { grn_obj *tokenizer; - char name[GRN_TABLE_MAX_KEY_SIZE]; - unsigned int name_size; tokenizer = GRN_PTR_VALUE_AT(&tokenizers, i); - name_size = grn_obj_name(ctx, tokenizer, name, GRN_TABLE_MAX_KEY_SIZE); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, tokenizer); GRN_OUTPUT_MAP_OPEN("tokenizer", 1); GRN_OUTPUT_CSTR("name"); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, tokenizer); GRN_OUTPUT_MAP_CLOSE(); } @@ -7417,18 +7424,15 @@ proc_schema_normalizers(grn_ctx *ctx) GRN_OUTPUT_MAP_OPEN("normalizers", n); for (i = 0; i < n; i++) { grn_obj *normalizer; - char name[GRN_TABLE_MAX_KEY_SIZE]; - unsigned int name_size; normalizer = GRN_PTR_VALUE_AT(&normalizers, i); - name_size = grn_obj_name(ctx, normalizer, name, GRN_TABLE_MAX_KEY_SIZE); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, normalizer); GRN_OUTPUT_MAP_OPEN("normalizer", 1); GRN_OUTPUT_CSTR("name"); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, normalizer); GRN_OUTPUT_MAP_CLOSE(); } @@ -7437,6 +7441,31 @@ proc_schema_normalizers(grn_ctx *ctx) GRN_OBJ_FIN(ctx, &normalizers); } +static const char * +proc_schema_table_type_name(grn_ctx *ctx, grn_obj *table) +{ + const char *name = "unknown"; + + switch (table->header.type) { + case GRN_TABLE_NO_KEY : + name = "array"; + break; + case GRN_TABLE_HASH_KEY : + name = "hash table"; + break; + case GRN_TABLE_PAT_KEY : + name = "patricia trie"; + break; + case GRN_TABLE_DAT_KEY : + name = "double array trie"; + break; + default : + break; + } + + return name; +} + static void proc_schema_tables(grn_ctx *ctx) { @@ -7453,18 +7482,26 @@ proc_schema_tables(grn_ctx *ctx) GRN_OUTPUT_MAP_OPEN("tables", n); for (i = 0; i < n; i++) { grn_obj *table; - char name[GRN_TABLE_MAX_KEY_SIZE]; - unsigned int name_size; + grn_obj *key_type = NULL; table = GRN_PTR_VALUE_AT(&tables, i); - name_size = grn_obj_name(ctx, table, name, GRN_TABLE_MAX_KEY_SIZE); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, table); - GRN_OUTPUT_MAP_OPEN("table", 1); + GRN_OUTPUT_MAP_OPEN("table", 2); GRN_OUTPUT_CSTR("name"); - GRN_OUTPUT_STR(name, name_size); + proc_schema_output_name(ctx, table); + + GRN_OUTPUT_CSTR("type"); + GRN_OUTPUT_CSTR(proc_schema_table_type_name(ctx, table)); + + GRN_OUTPUT_CSTR("key_type"); + if (table->header.type != GRN_TABLE_NO_KEY && + table->header.domain != GRN_ID_NIL) { + key_type = grn_ctx_at(ctx, table->header.domain); + } + proc_schema_output_name(ctx, key_type); GRN_OUTPUT_MAP_CLOSE(); } Modified: test/command/suite/schema/array.expected (+3 -1) =================================================================== --- test/command/suite/schema/array.expected 2015-10-20 10:48:34 +0900 (2b8a305) +++ test/command/suite/schema/array.expected 2015-10-20 10:48:57 +0900 (316d7e9) @@ -151,7 +151,9 @@ schema }, "tables": { "Logs": { - "name": "Logs" + "name": "Logs", + "type": "array", + "key_type": null } } } -------------- next part -------------- HTML����������������������������...Download