Navigation Menu

Skip to content

Commit

Permalink
add example hook value
Browse files Browse the repository at this point in the history
  • Loading branch information
naoa committed Jul 10, 2014
1 parent c84befa commit 67c13e1
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 1 deletion.
125 changes: 124 additions & 1 deletion commands/hook.c
Expand Up @@ -146,6 +146,116 @@ command_example_hook_add(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_ob
return NULL;
}

static grn_obj *
command_example_hook_add_value(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_obj **args,
grn_user_data *user_data)
{
grn_obj *var, *table, *column, *value;
unsigned int nhooks = 0;

char *table_name = NULL;
unsigned int table_len = 0;
char *column_name = NULL;
unsigned int column_len = 0;

var = grn_plugin_proc_get_var(ctx, user_data, "table", -1);
if (GRN_TEXT_LEN(var) != 0) {
table_name = GRN_TEXT_VALUE(var);
table_len = GRN_TEXT_LEN(var);
}
var = grn_plugin_proc_get_var(ctx, user_data, "column", -1);
if (GRN_TEXT_LEN(var) != 0) {
column_name = GRN_TEXT_VALUE(var);
column_len = GRN_TEXT_LEN(var);
}

value = grn_plugin_proc_get_var(ctx, user_data, "value", -1);
table = grn_ctx_get(ctx, table_name, table_len);
column = grn_obj_column(ctx, table, column_name, column_len);

grn_obj_add_hook(ctx, column, GRN_HOOK_SELECT, 0, NULL, value);

grn_ctx_output_array_open(ctx, "RESULT", 1);
nhooks = grn_obj_get_nhooks(ctx, column, GRN_HOOK_SELECT);
grn_ctx_output_int32(ctx, nhooks);
grn_ctx_output_array_close(ctx);

return NULL;
}

static grn_obj *
command_example_hook_get_value(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_obj **args,
grn_user_data *user_data)
{
grn_obj *var, *table, *column;

char *table_name = NULL;
unsigned int table_len = 0;
char *column_name = NULL;
unsigned int column_len = 0;

var = grn_plugin_proc_get_var(ctx, user_data, "table", -1);
if (GRN_TEXT_LEN(var) != 0) {
table_name = GRN_TEXT_VALUE(var);
table_len = GRN_TEXT_LEN(var);
}
var = grn_plugin_proc_get_var(ctx, user_data, "column", -1);
if (GRN_TEXT_LEN(var) != 0) {
column_name = GRN_TEXT_VALUE(var);
column_len = GRN_TEXT_LEN(var);
}

table = grn_ctx_get(ctx, table_name, table_len);
column = grn_obj_column(ctx, table, column_name, column_len);

grn_obj buf;
GRN_TEXT_INIT(&buf, 0);
GRN_BULK_REWIND(&buf);
grn_obj_get_hook(ctx, column, GRN_HOOK_SELECT, 0, &buf);

grn_ctx_output_array_open(ctx, "RESULT", 1);
grn_ctx_output_cstr(ctx, GRN_TEXT_VALUE(&buf));
grn_ctx_output_array_close(ctx);

grn_obj_unlink(ctx, &buf);
return NULL;
}

static grn_obj *
command_example_hook_delete_value(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_obj **args,
grn_user_data *user_data)
{
grn_obj *var, *table, *column;
unsigned int nhooks = 0;

char *table_name = NULL;
unsigned int table_len = 0;
char *column_name = NULL;
unsigned int column_len = 0;

var = grn_plugin_proc_get_var(ctx, user_data, "table", -1);
if (GRN_TEXT_LEN(var) != 0) {
table_name = GRN_TEXT_VALUE(var);
table_len = GRN_TEXT_LEN(var);
}
var = grn_plugin_proc_get_var(ctx, user_data, "column", -1);
if (GRN_TEXT_LEN(var) != 0) {
column_name = GRN_TEXT_VALUE(var);
column_len = GRN_TEXT_LEN(var);
}

table = grn_ctx_get(ctx, table_name, table_len);
column = grn_obj_column(ctx, table, column_name, column_len);

grn_obj_delete_hook(ctx, column, GRN_HOOK_SELECT, 0);
grn_ctx_output_array_open(ctx, "RESULT", 1);
nhooks = grn_obj_get_nhooks(ctx, column, GRN_HOOK_SELECT);
grn_ctx_output_int32(ctx, nhooks);
grn_ctx_output_array_close(ctx);

return NULL;
}

grn_rc
GRN_PLUGIN_INIT(GNUC_UNUSED grn_ctx *ctx)
{
Expand All @@ -155,7 +265,7 @@ GRN_PLUGIN_INIT(GNUC_UNUSED grn_ctx *ctx)
grn_rc
GRN_PLUGIN_REGISTER(grn_ctx *ctx)
{
grn_expr_var vars[2];
grn_expr_var vars[3];

grn_plugin_command_create(ctx, "log_set", -1, command_log_set, 0, vars);
grn_plugin_command_create(ctx, "log_insert", -1, command_log_insert, 0, vars);
Expand All @@ -169,6 +279,19 @@ GRN_PLUGIN_REGISTER(grn_ctx *ctx)
grn_plugin_expr_var_init(ctx, &vars[1], "column", -1);
grn_plugin_command_create(ctx, "example_hook_delete", -1, command_example_hook_delete, 2, vars);

grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
grn_plugin_expr_var_init(ctx, &vars[1], "column", -1);
grn_plugin_expr_var_init(ctx, &vars[2], "value", -1);
grn_plugin_command_create(ctx, "example_hook_add_value", -1, command_example_hook_add_value, 3, vars);

grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
grn_plugin_expr_var_init(ctx, &vars[1], "column", -1);
grn_plugin_command_create(ctx, "example_hook_get_value", -1, command_example_hook_get_value, 2, vars);

grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
grn_plugin_expr_var_init(ctx, &vars[1], "column", -1);
grn_plugin_command_create(ctx, "example_hook_delete_value", -1, command_example_hook_delete_value, 2, vars);

return ctx->rc;
}

Expand Down
16 changes: 16 additions & 0 deletions test/suite/hook_value.expected
@@ -0,0 +1,16 @@
register commands/hook
[[0,0.0,0.0],true]
table_create Entries TABLE_HASH_KEY ShortText
[[0,0.0,0.0],true]
column_create Entries title COLUMN_SCALAR ShortText
[[0,0.0,0.0],true]
table_create Tokens TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram
[[0,0.0,0.0],true]
column_create Tokens entries_title COLUMN_INDEX|WITH_POSITION Entries title
[[0,0.0,0.0],true]
example_hook_add_value --table Entries --column title --value "hogehoge"
[[0,0.0,0.0],[1]]
example_hook_get_value --table Entries --column title
[[0,0.0,0.0],["hogehoge"]]
example_hook_delete_value --table Entries --column title
[[0,0.0,0.0],[0]]
12 changes: 12 additions & 0 deletions test/suite/hook_value.test
@@ -0,0 +1,12 @@
register commands/hook

table_create Entries TABLE_HASH_KEY ShortText
column_create Entries title COLUMN_SCALAR ShortText

table_create Tokens TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram
column_create Tokens entries_title COLUMN_INDEX|WITH_POSITION Entries title

example_hook_add_value --table Entries --column title --value "hogehoge"
example_hook_get_value --table Entries --column title
example_hook_delete_value --table Entries --column title

0 comments on commit 67c13e1

Please sign in to comment.