Navigation Menu

Skip to content

Commit

Permalink
proc: export mode parse function internally
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Apr 19, 2017
1 parent 2f8f0d8 commit cd72ce3
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
5 changes: 5 additions & 0 deletions lib/grn_proc.h
Expand Up @@ -85,6 +85,11 @@ const char *grn_proc_option_value_string(grn_ctx *ctx,
grn_content_type grn_proc_option_value_content_type(grn_ctx *ctx,
grn_obj *option,
grn_content_type default_value);
grn_operator grn_proc_option_value_mode(grn_ctx *ctx,
grn_obj *option,
grn_operator default_mode,
const char *context);


void grn_proc_output_object_name(grn_ctx *ctx, grn_obj *obj);
void grn_proc_output_object_id_name(grn_ctx *ctx, grn_id id);
Expand Down
28 changes: 19 additions & 9 deletions lib/proc.c
Expand Up @@ -1781,13 +1781,16 @@ selector_to_function_data_fin(grn_ctx *ctx,
}
}

static grn_operator
parse_mode(grn_ctx *ctx, grn_obj *mode, const char *context)
grn_operator
grn_proc_option_value_mode(grn_ctx *ctx,
grn_obj *option,
grn_operator default_mode,
const char *context)
{
if (mode->header.domain != GRN_DB_TEXT) {
if (option->header.domain != GRN_DB_TEXT) {
grn_obj inspected;
GRN_TEXT_INIT(&inspected, 0);
grn_inspect(ctx, &inspected, mode);
grn_inspect(ctx, &inspected, option);
GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT,
"%s: mode must be text: <%.*s>",
context,
Expand All @@ -1797,9 +1800,13 @@ parse_mode(grn_ctx *ctx, grn_obj *mode, const char *context)
return GRN_OP_NOP;
}

if (GRN_TEXT_LEN(option) == 0) {
return default_mode;
}

#define EQUAL_MODE(name) \
(GRN_TEXT_LEN(mode) == strlen(name) && \
memcmp(GRN_TEXT_VALUE(mode), name, strlen(name)) == 0)
(GRN_TEXT_LEN(option) == strlen(name) && \
memcmp(GRN_TEXT_VALUE(option), name, strlen(name)) == 0)

if (EQUAL_MODE("==") || EQUAL_MODE("EQUAL")) {
return GRN_OP_EQUAL;
Expand Down Expand Up @@ -1843,8 +1850,8 @@ parse_mode(grn_ctx *ctx, grn_obj *mode, const char *context)
"\"~\", \"@~\", \"REGEXP\""
"]: <%.*s>",
context,
(int)GRN_TEXT_LEN(mode),
GRN_TEXT_VALUE(mode));
(int)GRN_TEXT_LEN(option),
GRN_TEXT_VALUE(option));
return GRN_OP_NOP;
}

Expand Down Expand Up @@ -1907,7 +1914,10 @@ run_query(grn_ctx *ctx, grn_obj *table,
if (KEY_EQUAL("expander")) {
query_expander_name = value;
} else if (KEY_EQUAL("default_mode")) {
default_mode = parse_mode(ctx, value, "query()");
default_mode = grn_proc_option_value_mode(ctx,
value,
GRN_OP_MATCH,
"query()");
if (ctx->rc != GRN_SUCCESS) {
grn_hash_cursor_close(ctx, cursor);
rc = ctx->rc;
Expand Down

0 comments on commit cd72ce3

Please sign in to comment.