Navigation Menu

Skip to content

Commit

Permalink
schema: start implementing
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Oct 16, 2015
1 parent b0718f2 commit 635d792
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 2 deletions.
69 changes: 67 additions & 2 deletions lib/proc.c
Expand Up @@ -2792,7 +2792,7 @@ exit :
static const size_t DUMP_FLUSH_THRESHOLD_SIZE = 256 * 1024;

static void
dump_plugins(grn_ctx *ctx, grn_obj *outbuf)
collect_plugin_names(grn_ctx *ctx, grn_obj *plugin_names)
{
grn_obj *db = ctx->impl->db;
grn_table_cursor *cursor;
Expand Down Expand Up @@ -2887,14 +2887,39 @@ dump_plugins(grn_ctx *ctx, grn_obj *outbuf)
ruby_plugin_suffix) == 0) {
name[strlen(name) - strlen(ruby_plugin_suffix)] = '\0';
}
grn_text_printf(ctx, outbuf, "plugin_register %s\n", name);
grn_vector_add_element(ctx, plugin_names,
name, strlen(name),
0, GRN_DB_TEXT);
}
}
grn_table_cursor_close(ctx, cursor);

grn_hash_close(ctx, processed_paths);
}

static void
dump_plugins(grn_ctx *ctx, grn_obj *outbuf)
{
grn_obj plugin_names;
unsigned int i, n;

GRN_TEXT_INIT(&plugin_names, GRN_OBJ_VECTOR);

collect_plugin_names(ctx, &plugin_names);

n = grn_vector_size(ctx, &plugin_names);
for (i = 0; i < n; i++) {
const char *name;
unsigned int name_size;

name_size = grn_vector_get_element(ctx, &plugin_names, i, &name, NULL, NULL);
grn_text_printf(ctx, outbuf, "plugin_register %.*s\n",
(int)name_size, name);
}

GRN_OBJ_FIN(ctx, &plugin_names);
}

static void
dump_name(grn_ctx *ctx, grn_obj *outbuf, const char *name, int name_len)
{
Expand Down Expand Up @@ -7267,6 +7292,44 @@ exit :
return NULL;
}

static void
proc_schema_plugins(grn_ctx *ctx)
{
grn_obj plugin_names;
unsigned int i, n;

GRN_TEXT_INIT(&plugin_names, GRN_OBJ_VECTOR);

collect_plugin_names(ctx, &plugin_names);

GRN_OUTPUT_CSTR("plugins");

n = grn_vector_size(ctx, &plugin_names);
GRN_OUTPUT_MAP_OPEN("plugin", n);
for (i = 0; i < n; i++) {
const char *name;
unsigned int name_size;

name_size = grn_vector_get_element(ctx, &plugin_names, i, &name, NULL, NULL);
GRN_OUTPUT_CSTR("name");
GRN_OUTPUT_STR(name, name_size);
}
GRN_OUTPUT_MAP_CLOSE();

GRN_OBJ_FIN(ctx, &plugin_names);
}

static grn_obj *
proc_schema(grn_ctx *ctx, int nargs, grn_obj **args,
grn_user_data *user_data)
{
GRN_OUTPUT_MAP_OPEN("schema", 1);
proc_schema_plugins(ctx);
GRN_OUTPUT_MAP_CLOSE();

return NULL;
}

#define DEF_VAR(v,name_str) do {\
(v).name = (name_str);\
(v).name_size = GRN_STRLEN(name_str);\
Expand Down Expand Up @@ -7564,4 +7627,6 @@ grn_db_init_builtin_query(grn_ctx *ctx)
DEF_VAR(vars[2], "to_table");
DEF_VAR(vars[3], "to_name");
DEF_COMMAND("column_copy", proc_column_copy, 4, vars);

DEF_COMMAND("schema", proc_schema, 0, vars);
}
4 changes: 4 additions & 0 deletions test/command/suite/schema/plugins.expected
@@ -0,0 +1,4 @@
plugin_register query_expanders/tsv
[[0,0.0,0.0],true]
schema
[[0,0.0,0.0],{"plugins":{"name":"query_expanders/tsv"}}]
3 changes: 3 additions & 0 deletions test/command/suite/schema/plugins.grn
@@ -0,0 +1,3 @@
plugin_register query_expanders/tsv

schema

0 comments on commit 635d792

Please sign in to comment.