Are you aware that PostgreSQL has a built in '~' operator for regular
expressions?
Regards, Jan
On 8/5/23 11:56, jacktby jacktby wrote:
> /*
> * similarity_search_expr is used for our multi-mode
> * similarity_search, and we just use this for multi
> * cols search.
> */
> similarity_search_expr:
> sub_search_expr '<' AexprConst {
> $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "<", $1, $3, @2);
> }
> ;
> sub_search_expr:
> '[' col_tuple_expr '~' AexprConst ']' {
> $$ = (Node *) makeSimpleA_Expr(AEXPR_OP, "~", $2, $4, @3);
> }
> ;
> col_tuple_expr:
> columnref { $$ = $1;}
> | '(' col_list_expr ')' { $$ = $2;}
> ;
> col_list_expr:
> columnref {
> ResTarget* target = makeNode(ResTarget);
> target->name = NULL;
> target->indirection = NIL;
> target->val = (Node *) $1;
> target->location = @1;
> $$ = list_make1(target);
> }
> | col_list_expr ',' columnref { $$ = lappend($1,$3);}
> ;
> This is my new grammer.
> But I get below:
> postgres=# select * from t2 where [a ~ 1] < 0;
> ERROR: syntax error at or near "~"
> LINE 1: select * from t2 where [a ~ 1] < 0;
> It’s strange that it can’t parse ‘~’, I add it in the parser.
>