Skip to content

Commit 146bf38

Browse files
authored
PG18 port for AGE (#2251)
* [PG18 port][Set1] Fix header dependencies and use TupleDescAttr macro - Include executor/executor.h for PG18 header reorganization and use TupleDescAttr() accessor macro instead of direct attrs[] access. * [PG18 port][Set2] Adapt to expandRTE signature change and pg_noreturn - Add VarReturningType parameter to expandRTE() calls using VAR_RETURNING_DEFAULT. - Replace pg_attribute_noreturn() with pg_noreturn prefix specifier. * [PG18 port][Set3] Fix double ExecOpenIndices call for PG18 compatibility - PG18 enforces stricter assertions in ExecOpenIndices, requiring ri_IndexRelationDescs to be NULL when called. - In update_entity_tuple(), indices may already be opened by the caller (create_entity_result_rel_info), causing assertion failures. - Add a check to only open indices if not already open, and track ownership with a boolean flag to ensure we only close what we opened. - Found when regression tests failed with assertions, which this change resolves. * [PG18 port][Set4] Update regression test expected output for ordering PG18's implementation changes result in different row ordering for queries without explicit ORDER BY clauses. Update expected output files to reflect the new ordering while maintaining identical result content. * [PG18 port][Set5] Address review comments - coding standard fix Note: Assisted by GitHub Copilot Agent mode.
1 parent 399a289 commit 146bf38

File tree

10 files changed

+72
-50
lines changed

10 files changed

+72
-50
lines changed

regress/expected/cypher_match.out

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ SELECT * FROM cypher('cypher_match', $$
8888
$$) AS (a agtype);
8989
a
9090
----------------------------------------------------------------------------------
91-
{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
9291
{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
92+
{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
9393
(2 rows)
9494

9595
SELECT * FROM cypher('cypher_match', $$
9696
MATCH ()-[]-()-[]-(a:v1) RETURN a
9797
$$) AS (a agtype);
9898
a
9999
----------------------------------------------------------------------------------
100-
{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
101100
{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
101+
{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
102102
(2 rows)
103103

104104
SELECT * FROM cypher('cypher_match', $$
@@ -132,21 +132,21 @@ SELECT * FROM cypher('cypher_match', $$
132132
$$) AS (a agtype);
133133
a
134134
---------------------------------------------------------------------------------------------------------------------------
135-
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
136-
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
137135
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
136+
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
138137
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
138+
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
139139
(4 rows)
140140

141141
SELECT * FROM cypher('cypher_match', $$
142142
MATCH (:v1)-[e]-() RETURN e
143143
$$) AS (a agtype);
144144
a
145145
---------------------------------------------------------------------------------------------------------------------------
146-
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
147-
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
148146
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
149147
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
148+
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
149+
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
150150
(4 rows)
151151

152152
SELECT * FROM cypher('cypher_match', $$
@@ -165,17 +165,17 @@ SELECT * FROM cypher('cypher_match', $$
165165
$$) AS (a agtype);
166166
a
167167
---------------------------------------------------------------------------------------------------------------------------
168-
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
169168
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
169+
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
170170
(2 rows)
171171

172172
SELECT * FROM cypher('cypher_match', $$
173173
MATCH (a)-[]-()-[]-(:v1) RETURN a
174174
$$) AS (a agtype);
175175
a
176176
----------------------------------------------------------------------------------
177-
{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
178177
{"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
178+
{"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
179179
(2 rows)
180180

181181
-- Right Path Test
@@ -348,10 +348,10 @@ SELECT * FROM cypher('cypher_match', $$
348348
$$) AS (i agtype);
349349
i
350350
----------------------------------------------------------------------------------
351-
{"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex
352-
{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex
353351
{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex
352+
{"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex
354353
{"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex
354+
{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex
355355
(4 rows)
356356

357357
SELECT * FROM cypher('cypher_match', $$
@@ -537,18 +537,18 @@ SELECT * FROM cypher('cypher_match', $$
537537
$$) AS (i agtype, b agtype, c agtype);
538538
i | b | c
539539
---+-----------+-----------
540-
| "end" | "middle"
541-
0 | "end" | "middle"
542-
1 | "end" | "middle"
543540
| "middle" | "end"
544541
0 | "middle" | "end"
545542
1 | "middle" | "end"
546-
| "middle" | "initial"
547-
0 | "middle" | "initial"
548-
1 | "middle" | "initial"
543+
| "end" | "middle"
544+
0 | "end" | "middle"
545+
1 | "end" | "middle"
549546
| "initial" | "middle"
550547
0 | "initial" | "middle"
551548
1 | "initial" | "middle"
549+
| "middle" | "initial"
550+
0 | "middle" | "initial"
551+
1 | "middle" | "initial"
552552
(12 rows)
553553

554554
SELECT * FROM cypher('cypher_match', $$
@@ -558,18 +558,18 @@ SELECT * FROM cypher('cypher_match', $$
558558
$$) AS (i agtype, c agtype);
559559
i | c
560560
---+-----------
561-
| "middle"
562-
0 | "middle"
563-
1 | "middle"
564561
| "end"
565562
0 | "end"
566563
1 | "end"
567-
| "initial"
568-
0 | "initial"
569-
1 | "initial"
570564
| "middle"
571565
0 | "middle"
572566
1 | "middle"
567+
| "middle"
568+
0 | "middle"
569+
1 | "middle"
570+
| "initial"
571+
0 | "initial"
572+
1 | "initial"
573573
(12 rows)
574574

575575
--
@@ -2407,15 +2407,15 @@ SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) MATCH (a {age:a.
24072407
SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship}]->(b) RETURN p $$) as (a agtype);
24082408
a
24092409
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2410-
[{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
24112410
[{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
2411+
[{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
24122412
(2 rows)
24132413

24142414
SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship, years: u.years}]->(b) RETURN p $$) as (a agtype);
24152415
a
24162416
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2417-
[{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
24182417
[{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
2418+
[{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path
24192419
(2 rows)
24202420

24212421
SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationship: u.relationship}]->(b {age:b.age}) RETURN p $$) as (a agtype);

regress/expected/expr.out

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2644,10 +2644,10 @@ SELECT * FROM cypher('expr', $$ MATCH (v) RETURN v $$) AS (expression agtype);
26442644
SELECT * FROM cypher('expr', $$ MATCH ()-[e]-() RETURN e $$) AS (expression agtype);
26452645
expression
26462646
---------------------------------------------------------------------------------------------------------------------------
2647-
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
2648-
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
26492647
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
2648+
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
26502649
{"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge
2650+
{"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge
26512651
(4 rows)
26522652

26532653
-- id()
@@ -2656,10 +2656,10 @@ SELECT * FROM cypher('expr', $$
26562656
$$) AS (id agtype);
26572657
id
26582658
------------------
2659-
1407374883553281
2660-
1407374883553281
26612659
1407374883553282
2660+
1407374883553281
26622661
1407374883553282
2662+
1407374883553281
26632663
(4 rows)
26642664

26652665
SELECT * FROM cypher('expr', $$
@@ -2698,10 +2698,10 @@ SELECT * FROM cypher('expr', $$
26982698
$$) AS (start_id agtype);
26992699
start_id
27002700
------------------
2701-
1125899906842626
2702-
1125899906842626
27032701
1125899906842625
2702+
1125899906842626
27042703
1125899906842625
2704+
1125899906842626
27052705
(4 rows)
27062706

27072707
-- should return null
@@ -2731,10 +2731,10 @@ SELECT * FROM cypher('expr', $$
27312731
$$) AS (end_id agtype);
27322732
end_id
27332733
------------------
2734-
1125899906842627
2735-
1125899906842627
27362734
1125899906842626
2735+
1125899906842627
27372736
1125899906842626
2737+
1125899906842627
27382738
(4 rows)
27392739

27402740
-- should return null
@@ -2764,10 +2764,10 @@ SELECT * FROM cypher('expr', $$
27642764
$$) AS (id agtype, start_id agtype, startNode agtype);
27652765
id | start_id | startnode
27662766
------------------+------------------+----------------------------------------------------------------------------------
2767-
1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
2768-
1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
27692767
1407374883553282 | 1125899906842625 | {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
2768+
1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
27702769
1407374883553282 | 1125899906842625 | {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex
2770+
1407374883553281 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
27712771
(4 rows)
27722772

27732773
-- should return null
@@ -2797,10 +2797,10 @@ SELECT * FROM cypher('expr', $$
27972797
$$) AS (id agtype, end_id agtype, endNode agtype);
27982798
id | end_id | endnode
27992799
------------------+------------------+---------------------------------------------------------------------------------
2800-
1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
2801-
1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
28022800
1407374883553282 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
2801+
1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
28032802
1407374883553282 | 1125899906842626 | {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex
2803+
1407374883553281 | 1125899906842627 | {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex
28042804
(4 rows)
28052805

28062806
-- should return null

src/backend/catalog/ag_label.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "access/genam.h"
2323
#include "catalog/indexing.h"
24+
#include "executor/executor.h"
2425
#include "nodes/makefuncs.h"
2526
#include "utils/builtins.h"
2627
#include "utils/lsyscache.h"

src/backend/executor/cypher_create.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "postgres.h"
2121

22+
#include "executor/executor.h"
23+
2224
#include "catalog/ag_label.h"
2325
#include "executor/cypher_executor.h"
2426
#include "executor/cypher_utils.h"

src/backend/executor/cypher_delete.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include "postgres.h"
2121

22+
#include "executor/executor.h"
2223
#include "storage/bufmgr.h"
2324
#include "common/hashfn.h"
2425

@@ -257,7 +258,7 @@ static agtype_value *extract_entity(CustomScanState *node,
257258
tupleDescriptor = scanTupleSlot->tts_tupleDescriptor;
258259

259260
/* type checking, make sure the entity is an agtype vertex or edge */
260-
if (tupleDescriptor->attrs[entity_position -1].atttypid != AGTYPEOID)
261+
if (TupleDescAttr(tupleDescriptor, entity_position -1)->atttypid != AGTYPEOID)
261262
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
262263
errmsg("DELETE clause can only delete agtype")));
263264

src/backend/executor/cypher_merge.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "postgres.h"
2121

22+
#include "executor/executor.h"
23+
2224
#include "catalog/ag_label.h"
2325
#include "executor/cypher_executor.h"
2426
#include "executor/cypher_utils.h"

src/backend/executor/cypher_set.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include "postgres.h"
2121

22+
#include "executor/executor.h"
2223
#include "storage/bufmgr.h"
2324

2425
#include "executor/cypher_executor.h"
@@ -102,6 +103,7 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo,
102103
TM_Result result;
103104
CommandId cid = GetCurrentCommandId(true);
104105
ResultRelInfo **saved_resultRels = estate->es_result_relations;
106+
bool close_indices = false;
105107

106108
estate->es_result_relations = &resultRelInfo;
107109

@@ -113,7 +115,16 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo,
113115

114116
if (lock_result == TM_Ok)
115117
{
116-
ExecOpenIndices(resultRelInfo, false);
118+
/*
119+
* Open indices if not already open. The resultRelInfo may already
120+
* have indices opened by the caller (e.g., create_entity_result_rel_info),
121+
* so only open if needed and track that we did so for cleanup.
122+
*/
123+
if (resultRelInfo->ri_IndexRelationDescs == NULL)
124+
{
125+
ExecOpenIndices(resultRelInfo, false);
126+
close_indices = true;
127+
}
117128
ExecStoreVirtualTuple(elemTupleSlot);
118129
tuple = ExecFetchSlotHeapTuple(elemTupleSlot, true, NULL);
119130
tuple->t_self = old_tuple->t_self;
@@ -141,7 +152,10 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo,
141152
errmsg("tuple to be updated was already modified")));
142153
}
143154

144-
ExecCloseIndices(resultRelInfo);
155+
if (close_indices)
156+
{
157+
ExecCloseIndices(resultRelInfo);
158+
}
145159
estate->es_result_relations = saved_resultRels;
146160

147161
return tuple;
@@ -160,7 +174,10 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo,
160174
(update_indexes == TU_Summarizing));
161175
}
162176

163-
ExecCloseIndices(resultRelInfo);
177+
if (close_indices)
178+
{
179+
ExecCloseIndices(resultRelInfo);
180+
}
164181
}
165182
else if (lock_result == TM_SelfModified)
166183
{
@@ -310,7 +327,7 @@ static void update_all_paths(CustomScanState *node, graphid id,
310327
agtype_value *original_entity_value;
311328

312329
/* skip nulls */
313-
if (scanTupleSlot->tts_tupleDescriptor->attrs[i].atttypid != AGTYPEOID)
330+
if (TupleDescAttr(scanTupleSlot->tts_tupleDescriptor, i)->atttypid != AGTYPEOID)
314331
{
315332
continue;
316333
}
@@ -414,7 +431,7 @@ static void process_update_list(CustomScanState *node)
414431
continue;
415432
}
416433

417-
if (scanTupleSlot->tts_tupleDescriptor->attrs[update_item->entity_position -1].atttypid != AGTYPEOID)
434+
if (TupleDescAttr(scanTupleSlot->tts_tupleDescriptor, update_item->entity_position -1)->atttypid != AGTYPEOID)
418435
{
419436
ereport(ERROR,
420437
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@@ -588,7 +605,7 @@ static void process_update_list(CustomScanState *node)
588605
}
589606

590607
estate->es_snapshot->curcid = cid;
591-
/* close relation */
608+
/* close relation */
592609
ExecCloseIndices(resultRelInfo);
593610
table_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock);
594611

src/backend/executor/cypher_utils.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
#include "postgres.h"
2626

27+
#include "executor/executor.h"
2728
#include "nodes/makefuncs.h"
2829
#include "parser/parse_relation.h"
2930

src/backend/parser/cypher_clause.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2585,9 +2585,9 @@ static void get_res_cols(ParseState *pstate, ParseNamespaceItem *l_pnsi,
25852585
List *colnames = NIL;
25862586
List *colvars = NIL;
25872587

2588-
expandRTE(l_pnsi->p_rte, l_pnsi->p_rtindex, 0, -1, false,
2588+
expandRTE(l_pnsi->p_rte, l_pnsi->p_rtindex, 0, VAR_RETURNING_DEFAULT, -1, false,
25892589
&l_colnames, &l_colvars);
2590-
expandRTE(r_pnsi->p_rte, r_pnsi->p_rtindex, 0, -1, false,
2590+
expandRTE(r_pnsi->p_rte, r_pnsi->p_rtindex, 0, VAR_RETURNING_DEFAULT, -1, false,
25912591
&r_colnames, &r_colvars);
25922592

25932593
/* add in all colnames and colvars from the l_rte. */

src/backend/utils/adt/agtype_parser.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,9 @@ static void parse_object(agtype_lex_context *lex, agtype_sem_action *sem);
7474
static void parse_array_element(agtype_lex_context *lex,
7575
agtype_sem_action *sem);
7676
static void parse_array(agtype_lex_context *lex, agtype_sem_action *sem);
77-
static void report_parse_error(agtype_parse_context ctx,
78-
agtype_lex_context *lex)
79-
pg_attribute_noreturn();
80-
static void report_invalid_token(agtype_lex_context *lex)
81-
pg_attribute_noreturn();
77+
static pg_noreturn void report_parse_error(agtype_parse_context ctx,
78+
agtype_lex_context *lex);
79+
static pg_noreturn void report_invalid_token(agtype_lex_context *lex);
8280
static int report_agtype_context(agtype_lex_context *lex);
8381
static char *extract_mb_char(char *s);
8482

0 commit comments

Comments
 (0)