Navigation Menu

Skip to content

Commit

Permalink
Support index search for ".*" regexp pattern
Browse files Browse the repository at this point in the history
TODO:

  * Need more tests.
  • Loading branch information
kou committed Apr 11, 2017
1 parent a071b5c commit 14f9698
Show file tree
Hide file tree
Showing 4 changed files with 533 additions and 19 deletions.
21 changes: 20 additions & 1 deletion lib/expr.c
Expand Up @@ -4406,6 +4406,7 @@ is_index_searchable_regexp(grn_ctx *ctx, grn_obj *regexp)
const char *regexp_raw;
const char *regexp_raw_end;
grn_bool escaping = GRN_FALSE;
grn_bool dot = GRN_FALSE;

if (!(regexp->header.domain == GRN_DB_SHORT_TEXT ||
regexp->header.domain == GRN_DB_TEXT ||
Expand Down Expand Up @@ -4459,12 +4460,24 @@ is_index_searchable_regexp(grn_ctx *ctx, grn_obj *regexp)
} else {
switch (regexp_raw[0]) {
case '.' :
escaping = GRN_FALSE;
if (dot) {
return GRN_FALSE;
}
dot = GRN_TRUE;
break;
case '*' :
escaping = GRN_FALSE;
if (!dot) {
return GRN_FALSE;
}
dot = GRN_FALSE;
break;
case '[' :
case ']' :
case '|' :
case '?' :
case '+' :
case '*' :
case '{' :
case '}' :
case '^' :
Expand All @@ -4474,9 +4487,15 @@ is_index_searchable_regexp(grn_ctx *ctx, grn_obj *regexp)
escaping = GRN_FALSE;
return GRN_FALSE;
case '\\' :
if (dot) {
return GRN_FALSE;
}
escaping = GRN_TRUE;
break;
default :
if (dot) {
return GRN_FALSE;
}
escaping = GRN_FALSE;
break;
}
Expand Down

0 comments on commit 14f9698

Please sign in to comment.