/*
*       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.

Reply via email to