mirror of
https://github.com/postgres/postgres.git
synced 2025-08-22 21:53:06 +03:00
Bring SIMILAR TO and SUBSTRING into some semblance of conformance with
the SQL99 standard. (I'm not sure that the character-class features are quite right, but that can be fixed later.) Document SQL99 and POSIX regexps as being different features; provide variants of SUBSTRING for each.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.367 2002/09/18 21:35:21 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.368 2002/09/22 17:27:23 tgl Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@@ -5644,22 +5644,40 @@ a_expr: c_expr { $$ = $1; }
|
||||
}
|
||||
|
||||
| a_expr SIMILAR TO a_expr %prec SIMILAR
|
||||
{ $$ = (Node *) makeSimpleA_Expr(OP, "~", $1, $4); }
|
||||
{
|
||||
A_Const *c = makeNode(A_Const);
|
||||
FuncCall *n = makeNode(FuncCall);
|
||||
c->val.type = T_Null;
|
||||
n->funcname = SystemFuncName("similar_escape");
|
||||
n->args = makeList2($4, (Node *) c);
|
||||
n->agg_star = FALSE;
|
||||
n->agg_distinct = FALSE;
|
||||
$$ = (Node *) makeSimpleA_Expr(OP, "~", $1, (Node *) n);
|
||||
}
|
||||
| a_expr SIMILAR TO a_expr ESCAPE a_expr
|
||||
{
|
||||
FuncCall *n = makeNode(FuncCall);
|
||||
n->funcname = SystemFuncName("like_escape");
|
||||
n->funcname = SystemFuncName("similar_escape");
|
||||
n->args = makeList2($4, $6);
|
||||
n->agg_star = FALSE;
|
||||
n->agg_distinct = FALSE;
|
||||
$$ = (Node *) makeSimpleA_Expr(OP, "~", $1, (Node *) n);
|
||||
}
|
||||
| a_expr NOT SIMILAR TO a_expr %prec SIMILAR
|
||||
{ $$ = (Node *) makeSimpleA_Expr(OP, "!~", $1, $5); }
|
||||
{
|
||||
A_Const *c = makeNode(A_Const);
|
||||
FuncCall *n = makeNode(FuncCall);
|
||||
c->val.type = T_Null;
|
||||
n->funcname = SystemFuncName("similar_escape");
|
||||
n->args = makeList2($5, (Node *) c);
|
||||
n->agg_star = FALSE;
|
||||
n->agg_distinct = FALSE;
|
||||
$$ = (Node *) makeSimpleA_Expr(OP, "!~", $1, (Node *) n);
|
||||
}
|
||||
| a_expr NOT SIMILAR TO a_expr ESCAPE a_expr
|
||||
{
|
||||
FuncCall *n = makeNode(FuncCall);
|
||||
n->funcname = SystemFuncName("like_escape");
|
||||
n->funcname = SystemFuncName("similar_escape");
|
||||
n->args = makeList2($5, $7);
|
||||
n->agg_star = FALSE;
|
||||
n->agg_distinct = FALSE;
|
||||
|
Reference in New Issue
Block a user