Skip to content

Commit 7b04231

Browse files
committed
Fix Integer Keyword
1 parent 428bd5a commit 7b04231

File tree

2 files changed

+63
-7
lines changed

2 files changed

+63
-7
lines changed

src/backend/parser/cypher_gram.y

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
179179
%token NOT_EQ LT_EQ GT_EQ DOT_DOT TYPECAST PLUS_EQ
180180

181181
/* keywords in alphabetical order */
182-
%token <keyword> ACCESS ACTION ADMIN ALL ALTER AND ANY ALWAYS ARRAY AS ASC ASCENDING ASYMMETRIC AT ATOMIC AUTHORIZATION
182+
%token <keyword> ACCESS ACTION ADMIN ALL ALTER AND ANY ALWAYS ARRAY AS ASC ASCENDING ASSIGNMENT ASYMMETRIC AT ATOMIC AUTHORIZATION
183183

184184
BIGINT BEGIN_P BETWEEN BOOLEAN_P BOTH BREADTH BY
185185

@@ -200,7 +200,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
200200

201201
HAVING
202202

203-
IDENTITY_P IF ILIKE IN INCLUDING INDEX INDEXES IMMEDIATE IMMUTABLE INCLUDE INCREMENT INHERIT INHERITS INITIALLY INNER
203+
IDENTITY_P IF ILIKE IN INCLUDING INDEX INDEXES IMMEDIATE IMMUTABLE IMPLICIT_P INCLUDE INCREMENT INHERIT INHERITS INITIALLY INNER
204204
INOUT INPUT_P INT_P INTEGER_P INTERSECT INSERT INTERVAL INTO INVOKER IS ISNULL ISOLATION
205205

206206
JOIN
@@ -244,7 +244,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
244244

245245
%type <node> parse_toplevel stmtmulti schema_stmt routine_body_stmt
246246
AlterDatabaseStmt AlterDatabaseSetStmt
247-
CreatedbStmt CreateSchemaStmt
247+
CreateCastStmt CreatedbStmt CreateSchemaStmt
248248
CreateExtensionStmt CreateFunctionStmt CreateGraphStmt
249249
CreateTableStmt CreateTableSpaceStmt
250250
CreateUserStmt
@@ -291,7 +291,7 @@ static void processCASbits(int cas_bits, int location, const char *constrType,
291291
%type <integer> generated_when override_kind
292292
%type <integer> opt_materialized
293293

294-
294+
%type <integer> cast_context
295295
%type <node> opt_search_clause opt_cycle_clause
296296

297297
%type <node> func_application func_expr_common_subexpr
@@ -666,6 +666,7 @@ stmt:
666666
cypher_stmt
667667
| AlterDatabaseSetStmt
668668
| AlterDatabaseStmt
669+
| CreateCastStmt
669670
| CreatedbStmt
670671
| CreateGraphStmt
671672
| CreateExtensionStmt
@@ -2291,7 +2292,7 @@ cypher_range_idx_opt:
22912292
| /* EMPTY */ { $$ = NULL; }
22922293
;
22932294

2294-
Iconst: INTEGER
2295+
Iconst: INTEGER | INTEGER_P
22952296
;
22962297
/*
22972298
* RETURN and WITH clause
@@ -2417,6 +2418,53 @@ having_clause:
24172418
;
24182419

24192420

2421+
/*****************************************************************************
2422+
*
2423+
* CREATE CAST / DROP CAST
2424+
*
2425+
*****************************************************************************/
2426+
2427+
CreateCastStmt: CREATE CAST '(' Typename AS Typename ')'
2428+
WITH FUNCTION function_with_argtypes cast_context
2429+
{
2430+
CreateCastStmt *n = makeNode(CreateCastStmt);
2431+
n->sourcetype = $4;
2432+
n->targettype = $6;
2433+
n->func = $10;
2434+
n->context = (CoercionContext) $11;
2435+
n->inout = false;
2436+
$$ = (Node *)n;
2437+
}
2438+
| CREATE CAST '(' Typename AS Typename ')'
2439+
WITHOUT FUNCTION cast_context
2440+
{
2441+
CreateCastStmt *n = makeNode(CreateCastStmt);
2442+
n->sourcetype = $4;
2443+
n->targettype = $6;
2444+
n->func = NULL;
2445+
n->context = (CoercionContext) $10;
2446+
n->inout = false;
2447+
$$ = (Node *)n;
2448+
}
2449+
| CREATE CAST '(' Typename AS Typename ')'
2450+
WITH INOUT cast_context
2451+
{
2452+
CreateCastStmt *n = makeNode(CreateCastStmt);
2453+
n->sourcetype = $4;
2454+
n->targettype = $6;
2455+
n->func = NULL;
2456+
n->context = (CoercionContext) $10;
2457+
n->inout = true;
2458+
$$ = (Node *)n;
2459+
}
2460+
;
2461+
2462+
cast_context: AS IMPLICIT_P { $$ = COERCION_IMPLICIT; }
2463+
| AS ASSIGNMENT { $$ = COERCION_ASSIGNMENT; }
2464+
| /*EMPTY*/ { $$ = COERCION_EXPLICIT; }
2465+
;
2466+
2467+
24202468

24212469
/*****************************************************************************
24222470
*
@@ -3223,8 +3271,9 @@ NumericOnly_list: NumericOnly { $$ = list_make1($1); }
32233271
| '+' Iconst { $$ = + $2; }
32243272
| '-' Iconst { $$ = - $2; }
32253273
;
3226-
Iconst: INTEGER { $$ = $1; };
3227-
3274+
Iconst: INTEGER { $$ = $1; }
3275+
| INTEGER_P
3276+
;
32283277

32293278

32303279

@@ -7135,6 +7184,11 @@ Numeric: INT_P
71357184
$$ = SystemTypeName("int4");
71367185
$$->location = @1;
71377186
}
7187+
| INTEGER_P
7188+
{
7189+
$$ = SystemTypeName("int4");
7190+
$$->location = @1;
7191+
}
71387192
| SMALLINT
71397193
{
71407194
$$ = SystemTypeName("int2");

src/include/parser/cypher_kwlist.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ PG_KEYWORD("array", ARRAY, RESERVED_KEYWORD)
1010
PG_KEYWORD("as", AS, RESERVED_KEYWORD)
1111
PG_KEYWORD("asc", ASC, RESERVED_KEYWORD)
1212
PG_KEYWORD("ascending", ASCENDING, RESERVED_KEYWORD)
13+
PG_KEYWORD("assignment", ASSIGNMENT, RESERVED_KEYWORD)
1314
PG_KEYWORD("asymmetric", ASYMMETRIC, RESERVED_KEYWORD)
1415
PG_KEYWORD("at", AT, RESERVED_KEYWORD)
1516
PG_KEYWORD("atomic", ATOMIC, RESERVED_KEYWORD)
@@ -112,6 +113,7 @@ PG_KEYWORD("if", IF, RESERVED_KEYWORD)
112113
PG_KEYWORD("ilike", ILIKE, RESERVED_KEYWORD)
113114
PG_KEYWORD("immediate", IMMEDIATE, RESERVED_KEYWORD)
114115
PG_KEYWORD("immutable", IMMUTABLE, RESERVED_KEYWORD)
116+
PG_KEYWORD("implicit", IMPLICIT_P, RESERVED_KEYWORD)
115117
PG_KEYWORD("in", IN, RESERVED_KEYWORD)
116118
PG_KEYWORD("include", INCLUDE, RESERVED_KEYWORD)
117119
PG_KEYWORD("including", INCLUDING, RESERVED_KEYWORD)

0 commit comments

Comments
 (0)