Re: Failed to parse new syntax

2023-08-05 Thread Jan Wieck
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.







Failed to parse new syntax

2023-08-05 Thread jacktby jacktby
/*
*   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.