summaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index eb0bf12cd8b..87a80bc25c1 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -444,6 +444,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <list> substr_list trim_list
%type <list> opt_interval interval_second
%type <node> overlay_placing substr_from substr_for
+%type <str> unicode_normal_form
%type <boolean> opt_instead
%type <boolean> opt_unique opt_concurrently opt_verbose opt_full
@@ -664,7 +665,8 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
MAPPING MATCH MATERIALIZED MAXVALUE METHOD MINUTE_P MINVALUE MODE MONTH_P MOVE
- NAME_P NAMES NATIONAL NATURAL NCHAR NEW NEXT NO NONE
+ NAME_P NAMES NATIONAL NATURAL NCHAR NEW NEXT NFC NFD NFKC NFKD NO NONE
+ NORMALIZE NORMALIZED
NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF
NULLS_P NUMERIC
@@ -13491,6 +13493,22 @@ a_expr: c_expr { $$ = $1; }
list_make1($1), @2),
@2);
}
+ | a_expr IS NORMALIZED %prec IS
+ {
+ $$ = (Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make1($1), @2);
+ }
+ | a_expr IS unicode_normal_form NORMALIZED %prec IS
+ {
+ $$ = (Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make2($1, makeStringConst($3, @3)), @2);
+ }
+ | a_expr IS NOT NORMALIZED %prec IS
+ {
+ $$ = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make1($1), @2), @2);
+ }
+ | a_expr IS NOT unicode_normal_form NORMALIZED %prec IS
+ {
+ $$ = makeNotExpr((Node *) makeFuncCall(SystemFuncName("is_normalized"), list_make2($1, makeStringConst($4, @4)), @2), @2);
+ }
| DEFAULT
{
/*
@@ -13934,6 +13952,14 @@ func_expr_common_subexpr:
{
$$ = (Node *) makeFuncCall(SystemFuncName("date_part"), $3, @1);
}
+ | NORMALIZE '(' a_expr ')'
+ {
+ $$ = (Node *) makeFuncCall(SystemFuncName("normalize"), list_make1($3), @1);
+ }
+ | NORMALIZE '(' a_expr ',' unicode_normal_form ')'
+ {
+ $$ = (Node *) makeFuncCall(SystemFuncName("normalize"), list_make2($3, makeStringConst($5, @5)), @1);
+ }
| OVERLAY '(' overlay_list ')'
{
/* overlay(A PLACING B FROM C FOR D) is converted to
@@ -14569,6 +14595,13 @@ extract_arg:
| Sconst { $$ = $1; }
;
+unicode_normal_form:
+ NFC { $$ = "nfc"; }
+ | NFD { $$ = "nfd"; }
+ | NFKC { $$ = "nfkc"; }
+ | NFKD { $$ = "nfkd"; }
+ ;
+
/* OVERLAY() arguments
* SQL99 defines the OVERLAY() function:
* o overlay(text placing text from int for int)
@@ -15315,7 +15348,12 @@ unreserved_keyword:
| NAMES
| NEW
| NEXT
+ | NFC
+ | NFD
+ | NFKC
+ | NFKD
| NO
+ | NORMALIZED
| NOTHING
| NOTIFY
| NOWAIT
@@ -15494,6 +15532,7 @@ col_name_keyword:
| NATIONAL
| NCHAR
| NONE
+ | NORMALIZE
| NULLIF
| NUMERIC
| OUT_P