Skip to content

Commit 0973d45

Browse files
committed
Add LISTEN stmts
1 parent c0b5244 commit 0973d45

File tree

1 file changed

+72
-23
lines changed

1 file changed

+72
-23
lines changed

src/backend/parser/cypher_gram.y

+72-23
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
280280
AlterSeqStmt AlterCollationStmt AlterSystemStmt CreateDomainStmt AlterDomainStmt
281281
AlterDatabaseStmt AlterDatabaseSetStmt AlterEventTrigStmt AlterObjectDependsStmt
282282
AlterEnumStmt AlterExtensionStmt AlterExtensionContentsStmt AlterFdwStmt
283-
AlterGroupStmt
283+
AlterGroupStmt
284284
AlterRoleStmt AlterRoleSetStmt AlterOwnerStmt AlterObjectSchemaStmt AlterOperatorStmt
285285
AlterTableStmt AlterTblSpcStmt AnalyzeStmt AlterOpFamilyStmt AlterTypeStmt
286286
CreateConversionStmt CreateOpFamilyStmt CallStmt CreateStatsStmt
@@ -305,6 +305,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
305305
ReindexStmt RemoveFuncStmt ReturnStmt RenameStmt RevokeStmt
306306
RuleActionStmt RuleActionStmtOrEmpty RuleStmt
307307
SelectStmt
308+
NotifyStmt ListenStmt UnlistenStmt
308309
TransactionStmt TransactionStmtLegacy TruncateStmt
309310
UpdateStmt
310311
PreparableStmt
@@ -662,7 +663,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
662663
%type <integer> OnCommitOption
663664

664665
%type <defelt> def_elem reloption_elem old_aggr_elem operator_def_elem
665-
%type <string> Sconst
666+
%type <string> Sconst notify_payload
666667
%type <string> ColId ColLabel BareColLabel
667668
%type <string> NonReservedWord NonReservedWord_or_Sconst name
668669
%type <list> alter_extension_opt_list create_extension_opt_list
@@ -884,6 +885,7 @@ stmt:
884885
| AlterObjectDependsStmt
885886
| AlterObjectSchemaStmt
886887
| AlterOpFamilyStmt
888+
| AlterOperatorStmt
887889
| AlterOwnerStmt
888890
| AlterPolicyStmt
889891
| AlterRoleStmt
@@ -918,6 +920,7 @@ stmt:
918920
| CreateTableSpaceStmt
919921
| CreateTrigStmt
920922
| CreateUserStmt
923+
| DeclareCursorStmt
921924
| DefineStmt
922925
| DeleteStmt
923926
| DoStmt
@@ -934,8 +937,10 @@ stmt:
934937
| FetchStmt
935938
| GrantStmt
936939
| IndexStmt
937-
| InsertStmt
940+
| InsertStmt
941+
| ListenStmt
938942
| LockStmt
943+
| NotifyStmt
939944
| PrepareStmt
940945
| ReindexStmt
941946
| RemoveFuncStmt
@@ -946,6 +951,7 @@ stmt:
946951
| TransactionStmt
947952
| TransactionStmtLegacy
948953
| TruncateStmt
954+
| UnlistenStmt
949955
| UseGraphStmt
950956
| UpdateStmt
951957
| VacuumStmt
@@ -1612,7 +1618,7 @@ table_ref: relation_expr opt_alias_clause
16121618
n->coldeflist = lsecond($3);
16131619
$$ = (Node *) n;
16141620
}
1615-
/*| xmltable opt_alias_clause TODO
1621+
| xmltable opt_alias_clause
16161622
{
16171623
RangeTableFunc *n = (RangeTableFunc *) $1;
16181624
n->alias = $2;
@@ -1624,7 +1630,7 @@ table_ref: relation_expr opt_alias_clause
16241630
n->lateral = true;
16251631
n->alias = $3;
16261632
$$ = (Node *) n;
1627-
}*/
1633+
}
16281634
| select_with_parens opt_alias_clause
16291635
{
16301636
RangeSubselect *n = makeNode(RangeSubselect);
@@ -2020,14 +2026,14 @@ where_clause:
20202026
/* variant for UPDATE and DELETE */
20212027
where_or_current_clause:
20222028
WHERE a_expr { $$ = $2; }
2023-
/*| WHERE CURRENT_P OF cursor_name TODO
2029+
| WHERE CURRENT OF cursor_name
20242030
{
20252031
CurrentOfExpr *n = makeNode(CurrentOfExpr);
20262032

20272033
n->cursor_name = $4;
20282034
n->cursor_param = 0;
20292035
$$ = (Node *) n;
2030-
}*/
2036+
}
20312037
| /*EMPTY*/ { $$ = NULL; }
20322038
;
20332039

@@ -2140,26 +2146,23 @@ xmltable_column_el:
21402146
if (fc->coldefexpr != NULL)
21412147
ereport(ERROR,
21422148
(errcode(ERRCODE_SYNTAX_ERROR),
2143-
errmsg("only one DEFAULT value is allowed"),
2144-
parser_errposition(defel->location)));
2149+
errmsg("only one DEFAULT value is allowed")));
21452150
fc->coldefexpr = defel->arg;
21462151
}
21472152
else if (strcmp(defel->defname, "path") == 0)
21482153
{
21492154
if (fc->colexpr != NULL)
21502155
ereport(ERROR,
21512156
(errcode(ERRCODE_SYNTAX_ERROR),
2152-
errmsg("only one PATH value per column is allowed"),
2153-
parser_errposition(defel->location)));
2157+
errmsg("only one PATH value per column is allowed")));
21542158
fc->colexpr = defel->arg;
21552159
}
21562160
else if (strcmp(defel->defname, "is_not_null") == 0)
21572161
{
21582162
if (nullability_seen)
21592163
ereport(ERROR,
21602164
(errcode(ERRCODE_SYNTAX_ERROR),
2161-
errmsg("conflicting or redundant NULL / NOT NULL declarations for column \"%s\"", fc->colname),
2162-
parser_errposition(defel->location)));
2165+
errmsg("conflicting or redundant NULL / NOT NULL declarations for column \"%s\"", fc->colname)));
21632166
fc->is_not_null = intVal(defel->arg);
21642167
nullability_seen = true;
21652168
}
@@ -2168,8 +2171,7 @@ xmltable_column_el:
21682171
ereport(ERROR,
21692172
(errcode(ERRCODE_SYNTAX_ERROR),
21702173
errmsg("unrecognized column option \"%s\"",
2171-
defel->defname),
2172-
parser_errposition(defel->location)));
2174+
defel->defname)));
21732175
}
21742176
}
21752177
$$ = (Node *) fc;
@@ -6527,16 +6529,16 @@ object_type_any_name:
65276529
TABLE { $$ = OBJECT_TABLE; }
65286530
| SEQUENCE { $$ = OBJECT_SEQUENCE; }
65296531
| VIEW { $$ = OBJECT_VIEW; }
6530-
//| MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
6532+
| MATERIALIZED VIEW { $$ = OBJECT_MATVIEW; }
65316533
| INDEX { $$ = OBJECT_INDEX; }
65326534
| FOREIGN TABLE { $$ = OBJECT_FOREIGN_TABLE; }
6533-
//| COLLATION { $$ = OBJECT_COLLATION; }
6534-
//| CONVERSION_P { $$ = OBJECT_CONVERSION; }
6535-
//| STATISTICS { $$ = OBJECT_STATISTIC_EXT; }
6536-
/*| TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
6535+
| COLLATION { $$ = OBJECT_COLLATION; }
6536+
| CONVERSION_P { $$ = OBJECT_CONVERSION; }
6537+
| STATISTICS { $$ = OBJECT_STATISTIC_EXT; }
6538+
| TEXT_P SEARCH PARSER { $$ = OBJECT_TSPARSER; }
65376539
| TEXT_P SEARCH DICTIONARY { $$ = OBJECT_TSDICTIONARY; }
65386540
| TEXT_P SEARCH TEMPLATE { $$ = OBJECT_TSTEMPLATE; }
6539-
| TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }*/
6541+
| TEXT_P SEARCH CONFIGURATION { $$ = OBJECT_TSCONFIGURATION; }
65406542
;
65416543

65426544
/*
@@ -7691,6 +7693,53 @@ table_func_column_list:
76917693
}
76927694
;
76937695

7696+
7697+
/*****************************************************************************
7698+
*
7699+
* QUERY:
7700+
* NOTIFY <identifier> can appear both in rule bodies and
7701+
* as a query-level command
7702+
*
7703+
*****************************************************************************/
7704+
7705+
NotifyStmt: NOTIFY ColId notify_payload
7706+
{
7707+
NotifyStmt *n = makeNode(NotifyStmt);
7708+
n->conditionname = $2;
7709+
n->payload = $3;
7710+
$$ = (Node *)n;
7711+
}
7712+
;
7713+
7714+
notify_payload:
7715+
',' Sconst { $$ = $2; }
7716+
| /*EMPTY*/ { $$ = NULL; }
7717+
;
7718+
7719+
ListenStmt: LISTEN ColId
7720+
{
7721+
ListenStmt *n = makeNode(ListenStmt);
7722+
n->conditionname = $2;
7723+
$$ = (Node *)n;
7724+
}
7725+
;
7726+
7727+
UnlistenStmt:
7728+
UNLISTEN ColId
7729+
{
7730+
UnlistenStmt *n = makeNode(UnlistenStmt);
7731+
n->conditionname = $2;
7732+
$$ = (Node *)n;
7733+
}
7734+
| UNLISTEN '*'
7735+
{
7736+
UnlistenStmt *n = makeNode(UnlistenStmt);
7737+
n->conditionname = NULL;
7738+
$$ = (Node *)n;
7739+
}
7740+
;
7741+
7742+
76947743
/*****************************************************************************
76957744
*
76967745
* Transactions:
@@ -7904,7 +7953,7 @@ RuleActionStmt:
79047953
| InsertStmt
79057954
| UpdateStmt
79067955
| DeleteStmt
7907-
//| NotifyStmt TODO
7956+
| NotifyStmt
79087957
;
79097958

79107959
RuleActionStmtOrEmpty:
@@ -9701,7 +9750,7 @@ AlterObjectSchemaStmt:
97019750
*****************************************************************************/
97029751

97039752
AlterOperatorStmt:
9704-
ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')'
9753+
ALTER OPERATOR_P operator_with_argtypes SET '(' operator_def_list ')'
97059754
{
97069755
AlterOperatorStmt *n = makeNode(AlterOperatorStmt);
97079756
n->opername = $3;

0 commit comments

Comments
 (0)