[Groonga-commit] groonga/groonga at 4c87858 [master] schema: support command

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Oct 20 12:25:41 JST 2015


Kouhei Sutou	2015-10-20 12:25:41 +0900 (Tue, 20 Oct 2015)

  New Revision: 4c87858fe0956edbdeeae04c045396d583e79abe
  https://github.com/groonga/groonga/commit/4c87858fe0956edbdeeae04c045396d583e79abe

  Message:
    schema: support command

  Modified files:
    lib/proc.c
    test/command/suite/schema/tables/normalizer.expected
    test/command/suite/schema/tables/token_filters.expected
    test/command/suite/schema/tables/tokenizer.expected
    test/command/suite/schema/tables/type/array.expected
    test/command/suite/schema/tables/type/hash_table.expected
    test/command/suite/schema/tables/value_type/reference.expected
    test/command/suite/schema/tables/value_type/type.expected

  Modified: lib/proc.c (+198 -1)
===================================================================
--- lib/proc.c    2015-10-20 12:22:53 +0900 (6b06ee0)
+++ lib/proc.c    2015-10-20 12:25:41 +0900 (23b9b52)
@@ -7599,6 +7599,200 @@ proc_schema_table_output_token_filters(grn_ctx *ctx, grn_obj *table)
 }
 
 static void
+proc_schema_table_command_collect_arguments(grn_ctx *ctx,
+                                            grn_obj *table,
+                                            grn_obj *arguments)
+{
+#define ADD(name_, value_)                              \
+  grn_vector_add_element(ctx, arguments,                \
+                         name_, strlen(name_),          \
+                         0, GRN_DB_TEXT);               \
+  grn_vector_add_element(ctx, arguments,                \
+                         value_, strlen(value_),        \
+                         0, GRN_DB_TEXT)
+
+#define ADD_OBJECT_NAME(name_, object_) do {                    \
+    char object_name[GRN_TABLE_MAX_KEY_SIZE];                   \
+    unsigned int object_name_size;                              \
+    object_name_size = grn_obj_name(ctx, object_,               \
+                                    object_name,                \
+                                    GRN_TABLE_MAX_KEY_SIZE);    \
+    object_name[object_name_size] = '\0';                       \
+    ADD(name_, object_name);                                    \
+  } while (GRN_FALSE)
+
+  ADD_OBJECT_NAME("name", table);
+
+  switch (table->header.type) {
+  case GRN_TABLE_NO_KEY :
+    ADD("flags", "TABLE_NO_KEY");
+    break;
+  case GRN_TABLE_HASH_KEY :
+    ADD("flags", "TABLE_HASH_KEY");
+    break;
+  case GRN_TABLE_PAT_KEY :
+    if (table->header.flags & GRN_OBJ_KEY_WITH_SIS) {
+      ADD("flags", "TABLE_PAT_KEY|KEY_WITH_SIS");
+    } else {
+      ADD("flags", "TABLE_PAT_KEY");
+    }
+    break;
+  case GRN_TABLE_DAT_KEY :
+    ADD("flags", "TABLE_DAT_KEY");
+    break;
+  }
+
+  {
+    grn_obj *key_type = NULL;
+
+    if (table->header.type != GRN_TABLE_NO_KEY &&
+        table->header.domain != GRN_ID_NIL) {
+      key_type = grn_ctx_at(ctx, table->header.domain);
+    }
+    if (key_type) {
+      ADD_OBJECT_NAME("key_type", key_type);
+    }
+  }
+
+  {
+    grn_obj *value_type = NULL;
+    grn_id range = GRN_ID_NIL;
+
+    if (table->header.type != GRN_TABLE_DAT_KEY) {
+      range = grn_obj_get_range(ctx, table);
+    }
+    if (range != GRN_ID_NIL) {
+      value_type = grn_ctx_at(ctx, range);
+    }
+    if (value_type) {
+      ADD_OBJECT_NAME("value_type", value_type);
+    }
+  }
+
+  {
+    grn_obj *tokenizer;
+    tokenizer = grn_obj_get_info(ctx, table, GRN_INFO_DEFAULT_TOKENIZER, NULL);
+    if (tokenizer) {
+      ADD_OBJECT_NAME("default_tokenizer", tokenizer);
+    }
+  }
+
+  {
+    grn_obj *normalizer;
+    normalizer = grn_obj_get_info(ctx, table, GRN_INFO_NORMALIZER, NULL);
+    if (!normalizer && (table->header.flags & GRN_OBJ_KEY_NORMALIZE)) {
+      normalizer = grn_ctx_get(ctx, "NormalizerAuto", -1);
+    }
+    if (normalizer) {
+      ADD_OBJECT_NAME("normalizer", normalizer);
+    }
+  }
+
+  if (table->header.type != GRN_TABLE_NO_KEY) {
+    grn_obj token_filters;
+    int n;
+
+    GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, GRN_DB_OBJECT);
+    grn_obj_get_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters);
+    n = GRN_BULK_VSIZE(&token_filters) / sizeof(grn_obj *);
+    if (n > 0) {
+      grn_obj token_filter_names;
+      int i;
+
+      GRN_TEXT_INIT(&token_filter_names, 0);
+      for (i = 0; i < n; i++) {
+        grn_obj *token_filter;
+        char name[GRN_TABLE_MAX_KEY_SIZE];
+        int name_size;
+
+        token_filter = GRN_PTR_VALUE_AT(&token_filters, i);
+        name_size = grn_obj_name(ctx, token_filter,
+                                 name, GRN_TABLE_MAX_KEY_SIZE);
+        if (i > 0) {
+          GRN_TEXT_PUTC(ctx, &token_filter_names, ',');
+        }
+        GRN_TEXT_PUT(ctx, &token_filter_names, name, name_size);
+      }
+      GRN_TEXT_PUTC(ctx, &token_filter_names, '\0');
+      ADD("token_filters", GRN_TEXT_VALUE(&token_filter_names));
+      GRN_OBJ_FIN(ctx, &token_filter_names);
+    }
+    GRN_OBJ_FIN(ctx, &token_filters);
+  }
+
+#undef ADD_OBJECT_NAME
+#undef ADD
+}
+
+static void
+proc_schema_table_output_command(grn_ctx *ctx, grn_obj *table)
+{
+  const char *command_name = "table_create";
+  grn_obj arguments;
+
+  GRN_TEXT_INIT(&arguments, GRN_OBJ_VECTOR);
+  proc_schema_table_command_collect_arguments(ctx, table, &arguments);
+
+  GRN_OUTPUT_MAP_OPEN("command", 3);
+
+  GRN_OUTPUT_CSTR("name");
+  GRN_OUTPUT_CSTR(command_name);
+
+  GRN_OUTPUT_CSTR("arguments");
+  {
+    int i, n;
+
+    n = grn_vector_size(ctx, &arguments);
+    GRN_OUTPUT_MAP_OPEN("arguments", n / 2);
+    for (i = 0; i < n; i += 2) {
+      const char *name;
+      unsigned int name_size;
+      const char *value;
+      unsigned int value_size;
+
+      name_size  = grn_vector_get_element(ctx, &arguments, i, &name,
+                                          NULL, NULL);
+      value_size = grn_vector_get_element(ctx, &arguments, i + 1, &value,
+                                          NULL, NULL);
+      GRN_OUTPUT_STR(name, name_size);
+      GRN_OUTPUT_STR(value, value_size);
+    }
+    GRN_OUTPUT_MAP_CLOSE();
+  }
+
+  GRN_OUTPUT_CSTR("command_line");
+  {
+    int i, n;
+    grn_obj command_line;
+
+    GRN_TEXT_INIT(&command_line, 0);
+    GRN_TEXT_PUTS(ctx, &command_line, command_name);
+    n = grn_vector_size(ctx, &arguments);
+    for (i = 0; i < n; i += 2) {
+      const char *name;
+      unsigned int name_size;
+      const char *value;
+      unsigned int value_size;
+
+      name_size  = grn_vector_get_element(ctx, &arguments, i, &name,
+                                          NULL, NULL);
+      value_size = grn_vector_get_element(ctx, &arguments, i + 1, &value,
+                                          NULL, NULL);
+      grn_text_printf(ctx, &command_line,
+                      " --%.*s %.*s",
+                      name_size, name,
+                      value_size, value);
+    }
+    GRN_OUTPUT_STR(GRN_TEXT_VALUE(&command_line), GRN_TEXT_LEN(&command_line));
+    GRN_OBJ_FIN(ctx, &command_line);
+  }
+
+  GRN_OUTPUT_MAP_CLOSE();
+
+  GRN_OBJ_FIN(ctx, &arguments);
+}
+
+static void
 proc_schema_tables(grn_ctx *ctx)
 {
   grn_obj tables;
@@ -7619,7 +7813,7 @@ proc_schema_tables(grn_ctx *ctx)
 
     proc_schema_output_name(ctx, table);
 
-    GRN_OUTPUT_MAP_OPEN("table", 7);
+    GRN_OUTPUT_MAP_OPEN("table", 8);
 
     GRN_OUTPUT_CSTR("name");
     proc_schema_output_name(ctx, table);
@@ -7642,6 +7836,9 @@ proc_schema_tables(grn_ctx *ctx)
     GRN_OUTPUT_CSTR("token_filters");
     proc_schema_table_output_token_filters(ctx, table);
 
+    GRN_OUTPUT_CSTR("command");
+    proc_schema_table_output_command(ctx, table);
+
     GRN_OUTPUT_MAP_CLOSE();
   }
   GRN_OUTPUT_MAP_CLOSE();

  Modified: test/command/suite/schema/tables/normalizer.expected (+11 -1)
===================================================================
--- test/command/suite/schema/tables/normalizer.expected    2015-10-20 12:22:53 +0900 (9a0359b)
+++ test/command/suite/schema/tables/normalizer.expected    2015-10-20 12:25:41 +0900 (792821b)
@@ -181,7 +181,17 @@ schema
         },
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Tags",
+            "flags": "TABLE_PAT_KEY",
+            "key_type": "ShortText",
+            "normalizer": "NormalizerAuto"
+          },
+          "command_line": "table_create --name Tags --flags TABLE_PAT_KEY --key_type ShortText --normalizer NormalizerAuto"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/token_filters.expected (+12 -1)
===================================================================
--- test/command/suite/schema/tables/token_filters.expected    2015-10-20 12:22:53 +0900 (ab6f24e)
+++ test/command/suite/schema/tables/token_filters.expected    2015-10-20 12:25:41 +0900 (2b2ec38)
@@ -191,7 +191,18 @@ schema
           {
             "name": "TokenFilterStopWord"
           }
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Terms",
+            "flags": "TABLE_PAT_KEY",
+            "key_type": "ShortText",
+            "default_tokenizer": "TokenBigram",
+            "token_filters": "TokenFilterStopWord"
+          },
+          "command_line": "table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --token_filters TokenFilterStopWord"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/tokenizer.expected (+11 -1)
===================================================================
--- test/command/suite/schema/tables/tokenizer.expected    2015-10-20 12:22:53 +0900 (0140f9a)
+++ test/command/suite/schema/tables/tokenizer.expected    2015-10-20 12:25:41 +0900 (056ace3)
@@ -181,7 +181,17 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Terms",
+            "flags": "TABLE_PAT_KEY",
+            "key_type": "ShortText",
+            "default_tokenizer": "TokenBigram"
+          },
+          "command_line": "table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/type/array.expected (+9 -1)
===================================================================
--- test/command/suite/schema/tables/type/array.expected    2015-10-20 12:22:53 +0900 (866cda1)
+++ test/command/suite/schema/tables/type/array.expected    2015-10-20 12:25:41 +0900 (1adf541)
@@ -176,7 +176,15 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Logs",
+            "flags": "TABLE_NO_KEY"
+          },
+          "command_line": "table_create --name Logs --flags TABLE_NO_KEY"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/type/hash_table.expected (+10 -1)
===================================================================
--- test/command/suite/schema/tables/type/hash_table.expected    2015-10-20 12:22:53 +0900 (193b50e)
+++ test/command/suite/schema/tables/type/hash_table.expected    2015-10-20 12:25:41 +0900 (e598cbc)
@@ -179,7 +179,16 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Users",
+            "flags": "TABLE_HASH_KEY",
+            "key_type": "ShortText"
+          },
+          "command_line": "table_create --name Users --flags TABLE_HASH_KEY --key_type ShortText"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/value_type/reference.expected (+20 -2)
===================================================================
--- test/command/suite/schema/tables/value_type/reference.expected    2015-10-20 12:22:53 +0900 (616a097)
+++ test/command/suite/schema/tables/value_type/reference.expected    2015-10-20 12:25:41 +0900 (c5b2871)
@@ -181,7 +181,16 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Logs",
+            "flags": "TABLE_NO_KEY",
+            "value_type": "Users"
+          },
+          "command_line": "table_create --name Logs --flags TABLE_NO_KEY --value_type Users"
+        }
       },
       "Users": {
         "name": "Users",
@@ -195,7 +204,16 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Users",
+            "flags": "TABLE_HASH_KEY",
+            "key_type": "ShortText"
+          },
+          "command_line": "table_create --name Users --flags TABLE_HASH_KEY --key_type ShortText"
+        }
       }
     }
   }

  Modified: test/command/suite/schema/tables/value_type/type.expected (+10 -1)
===================================================================
--- test/command/suite/schema/tables/value_type/type.expected    2015-10-20 12:22:53 +0900 (0a54613)
+++ test/command/suite/schema/tables/value_type/type.expected    2015-10-20 12:25:41 +0900 (0bafd6f)
@@ -179,7 +179,16 @@ schema
         "normalizer": null,
         "token_filters": [
 
-        ]
+        ],
+        "command": {
+          "name": "table_create",
+          "arguments": {
+            "name": "Logs",
+            "flags": "TABLE_NO_KEY",
+            "value_type": "Int32"
+          },
+          "command_line": "table_create --name Logs --flags TABLE_NO_KEY --value_type Int32"
+        }
       }
     }
   }
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index