pg_query 6.1.0 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -1
  3. data/README.md +1 -1
  4. data/Rakefile +3 -2
  5. data/ext/pg_query/extconf.rb +2 -2
  6. data/ext/pg_query/include/pg_query.h +32 -2
  7. data/ext/pg_query/include/postgres/access/amapi.h +1 -1
  8. data/ext/pg_query/include/postgres/access/slru.h +1 -1
  9. data/ext/pg_query/include/postgres/access/tableam.h +11 -4
  10. data/ext/pg_query/include/postgres/access/xlog.h +1 -0
  11. data/ext/pg_query/include/postgres/access/xlogdefs.h +2 -1
  12. data/ext/pg_query/include/postgres/commands/defrem.h +1 -1
  13. data/ext/pg_query/include/postgres/commands/trigger.h +18 -0
  14. data/ext/pg_query/include/postgres/executor/executor.h +4 -0
  15. data/ext/pg_query/include/postgres/mb/pg_wchar.h +2 -0
  16. data/ext/pg_query/include/postgres/miscadmin.h +2 -1
  17. data/ext/pg_query/include/postgres/nodes/execnodes.h +6 -8
  18. data/ext/pg_query/include/postgres/nodes/pathnodes.h +1 -2
  19. data/ext/pg_query/include/postgres/pg_config.h +10 -9
  20. data/ext/pg_query/include/postgres/pg_config_manual.h +2 -0
  21. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +10 -2
  22. data/ext/pg_query/include/postgres/port/pg_iovec.h +9 -3
  23. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +29 -9
  24. data/ext/pg_query/include/postgres/replication/slot.h +2 -0
  25. data/ext/pg_query/include/postgres/utils/elog.h +1 -0
  26. data/ext/pg_query/include/postgres/utils/guc.h +1 -1
  27. data/ext/pg_query/include/postgres/utils/guc_hooks.h +0 -2
  28. data/ext/pg_query/include/postgres/utils/pg_locale.h +5 -0
  29. data/ext/pg_query/include/postgres_deparse.h +34 -0
  30. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +673 -516
  31. data/ext/pg_query/pg_query.pb-c.c +488 -0
  32. data/ext/pg_query/pg_query_deparse.c +148 -15
  33. data/ext/pg_query/pg_query_internal.h +9 -8
  34. data/ext/pg_query/pg_query_is_utility_stmt.c +70 -0
  35. data/ext/pg_query/pg_query_normalize.c +3 -0
  36. data/ext/pg_query/pg_query_raw_tree_walker_supports.c +117 -0
  37. data/ext/pg_query/pg_query_ruby.c +150 -0
  38. data/ext/pg_query/pg_query_summary.c +941 -0
  39. data/ext/pg_query/pg_query_summary.h +109 -0
  40. data/ext/pg_query/pg_query_summary_statement_type.c +797 -0
  41. data/ext/pg_query/pg_query_summary_truncate.c +530 -0
  42. data/ext/pg_query/postgres_deparse.c +4481 -3870
  43. data/ext/pg_query/src_backend_catalog_namespace.c +29 -0
  44. data/ext/pg_query/src_backend_nodes_bitmapset.c +84 -1
  45. data/ext/pg_query/src_backend_nodes_list.c +60 -1
  46. data/ext/pg_query/src_backend_parser_gram.c +739 -732
  47. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  48. data/ext/pg_query/src_backend_utils_error_elog.c +11 -0
  49. data/ext/pg_query/src_backend_utils_mb_mbutils.c +43 -4
  50. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +22 -7
  51. data/ext/pg_query/src_backend_utils_mmgr_aset.c +3 -3
  52. data/ext/pg_query/src_backend_utils_mmgr_bump.c +1 -1
  53. data/ext/pg_query/src_common_stringinfo.c +20 -0
  54. data/ext/pg_query/src_common_wchar.c +46 -6
  55. data/lib/pg_query/deparse.rb +29 -8
  56. data/lib/pg_query/parse.rb +19 -0
  57. data/lib/pg_query/pg_query_pb.rb +7 -2
  58. data/lib/pg_query/split.rb +20 -0
  59. data/lib/pg_query/treewalker.rb +9 -7
  60. data/lib/pg_query/version.rb +1 -1
  61. data/lib/pg_query.rb +1 -0
  62. metadata +10 -3
  63. data/ext/pg_query/postgres_deparse.h +0 -9
@@ -0,0 +1,797 @@
1
+ #include "pg_query.h"
2
+ #include "pg_query_internal.h"
3
+ #include "pg_query_outfuncs.h"
4
+
5
+ #include "parser/parser.h"
6
+ #include "parser/scanner.h"
7
+ #include "parser/scansup.h"
8
+
9
+ #include "nodes/nodeFuncs.h"
10
+ #include "utils/builtins.h"
11
+
12
+ #include <unistd.h>
13
+ #include <fcntl.h>
14
+ #include <string.h>
15
+
16
+ #include "pg_query_summary.h"
17
+
18
+ /* Declare the huge function early so we can put it at the end of the file. */
19
+ static bool pg_query_summary_stmt_walk_impl(Node *node, Summary * summary);
20
+
21
+ /*
22
+ * Adds new_stmt_type to summary->statement_types, if it's not already in it.
23
+ * What we really want is a set, but I'd rather not implement one in C.
24
+ */
25
+ void
26
+ add_stmt_type_if_needed(Summary * summary, char *new_stmt_type)
27
+ {
28
+ ListCell *lc = NULL;
29
+
30
+ foreach(lc, summary->statement_types)
31
+ {
32
+ char *stmt_type = lfirst(lc);
33
+
34
+ if (strcmp(new_stmt_type, stmt_type) == 0)
35
+ return;
36
+ }
37
+
38
+ summary->statement_types = lappend(summary->statement_types, new_stmt_type);
39
+ }
40
+
41
+
42
+ void
43
+ pg_query_summary_statement_walk(Summary * summary, Node *tree)
44
+ {
45
+ pg_query_summary_stmt_walk_impl(tree, summary);
46
+ }
47
+
48
+ static bool
49
+ pg_query_summary_stmt_walk_impl(Node *node, Summary * summary)
50
+ {
51
+ if (node == NULL)
52
+ return false;
53
+
54
+ switch (nodeTag(node))
55
+ {
56
+ case T_AlterCollationStmt:
57
+ add_stmt_type_if_needed(summary, "AlterCollationStmt");
58
+ break;
59
+ case T_AlterDatabaseSetStmt:
60
+ add_stmt_type_if_needed(summary, "AlterDatabaseSetStmt");
61
+ break;
62
+ case T_AlterDatabaseStmt:
63
+ add_stmt_type_if_needed(summary, "AlterDatabaseStmt");
64
+ break;
65
+ case T_AlterDefaultPrivilegesStmt:
66
+ add_stmt_type_if_needed(summary, "AlterDefaultPrivilegesStmt");
67
+ break;
68
+ case T_AlterDomainStmt:
69
+ add_stmt_type_if_needed(summary, "AlterDomainStmt");
70
+ break;
71
+ case T_AlterEnumStmt:
72
+ add_stmt_type_if_needed(summary, "AlterEnumStmt");
73
+ break;
74
+ case T_AlterEventTrigStmt:
75
+ add_stmt_type_if_needed(summary, "AlterEventTrigStmt");
76
+ break;
77
+ case T_AlterExtensionContentsStmt:
78
+ add_stmt_type_if_needed(summary, "AlterExtensionContentsStmt");
79
+ break;
80
+ case T_AlterExtensionStmt:
81
+ add_stmt_type_if_needed(summary, "AlterExtensionStmt");
82
+ break;
83
+ case T_AlterFdwStmt:
84
+ add_stmt_type_if_needed(summary, "AlterFdwStmt");
85
+ break;
86
+ case T_AlterForeignServerStmt:
87
+ add_stmt_type_if_needed(summary, "AlterForeignServerStmt");
88
+ break;
89
+ case T_AlterFunctionStmt:
90
+ add_stmt_type_if_needed(summary, "AlterFunctionStmt");
91
+ break;
92
+ case T_AlterObjectDependsStmt:
93
+ add_stmt_type_if_needed(summary, "AlterObjectDependsStmt");
94
+ break;
95
+ case T_AlterObjectSchemaStmt:
96
+ add_stmt_type_if_needed(summary, "AlterObjectSchemaStmt");
97
+ break;
98
+ case T_AlterOpFamilyStmt:
99
+ add_stmt_type_if_needed(summary, "AlterOpFamilyStmt");
100
+ break;
101
+ case T_AlterOperatorStmt:
102
+ add_stmt_type_if_needed(summary, "AlterOperatorStmt");
103
+ break;
104
+ case T_AlterOwnerStmt:
105
+ add_stmt_type_if_needed(summary, "AlterOwnerStmt");
106
+ break;
107
+ case T_AlterPolicyStmt:
108
+ add_stmt_type_if_needed(summary, "AlterPolicyStmt");
109
+ break;
110
+ case T_AlterPublicationStmt:
111
+ add_stmt_type_if_needed(summary, "AlterPublicationStmt");
112
+ break;
113
+ case T_AlterRoleSetStmt:
114
+ add_stmt_type_if_needed(summary, "AlterRoleSetStmt");
115
+ break;
116
+ case T_AlterRoleStmt:
117
+ add_stmt_type_if_needed(summary, "AlterRoleStmt");
118
+ break;
119
+ case T_AlterSeqStmt:
120
+ add_stmt_type_if_needed(summary, "AlterSeqStmt");
121
+ break;
122
+ case T_AlterStatsStmt:
123
+ add_stmt_type_if_needed(summary, "AlterStatsStmt");
124
+ break;
125
+ case T_AlterSubscriptionStmt:
126
+ add_stmt_type_if_needed(summary, "AlterSubscriptionStmt");
127
+ break;
128
+ case T_AlterSystemStmt:
129
+ add_stmt_type_if_needed(summary, "AlterSystemStmt");
130
+ break;
131
+ case T_AlterTableCmd:
132
+ add_stmt_type_if_needed(summary, "AlterTableCmd");
133
+ break;
134
+ case T_AlterTableMoveAllStmt:
135
+ add_stmt_type_if_needed(summary, "AlterTableMoveAllStmt");
136
+ break;
137
+ case T_AlterTableSpaceOptionsStmt:
138
+ add_stmt_type_if_needed(summary, "AlterTableSpaceOptionsStmt");
139
+ break;
140
+ case T_AlterTableStmt:
141
+ add_stmt_type_if_needed(summary, "AlterTableStmt");
142
+ break;
143
+ case T_AlterTSConfigurationStmt:
144
+ add_stmt_type_if_needed(summary, "AlterTSConfigurationStmt");
145
+ break;
146
+ case T_AlterTSDictionaryStmt:
147
+ add_stmt_type_if_needed(summary, "AlterTSDictionaryStmt");
148
+ break;
149
+ case T_AlterTypeStmt:
150
+ add_stmt_type_if_needed(summary, "AlterTypeStmt");
151
+ break;
152
+ case T_AlterUserMappingStmt:
153
+ add_stmt_type_if_needed(summary, "AlterUserMappingStmt");
154
+ break;
155
+ case T_CallStmt:
156
+ add_stmt_type_if_needed(summary, "CallStmt");
157
+ break;
158
+ case T_CheckPointStmt:
159
+ add_stmt_type_if_needed(summary, "CheckPointStmt");
160
+ break;
161
+ case T_ClosePortalStmt:
162
+ add_stmt_type_if_needed(summary, "ClosePortalStmt");
163
+ break;
164
+ case T_ClusterStmt:
165
+ add_stmt_type_if_needed(summary, "ClusterStmt");
166
+ break;
167
+ case T_CommentStmt:
168
+ add_stmt_type_if_needed(summary, "CommentStmt");
169
+ break;
170
+ case T_CompositeTypeStmt:
171
+ add_stmt_type_if_needed(summary, "CompositeTypeStmt");
172
+ break;
173
+ case T_ConstraintsSetStmt:
174
+ add_stmt_type_if_needed(summary, "ConstraintsSetStmt");
175
+ break;
176
+ case T_CopyStmt:
177
+ add_stmt_type_if_needed(summary, "CopyStmt");
178
+ break;
179
+ case T_CreateAmStmt:
180
+ add_stmt_type_if_needed(summary, "CreateAmStmt");
181
+ break;
182
+ case T_CreateCastStmt:
183
+ add_stmt_type_if_needed(summary, "CreateCastStmt");
184
+ break;
185
+ case T_CreateConversionStmt:
186
+ add_stmt_type_if_needed(summary, "CreateConversionStmt");
187
+ break;
188
+ case T_CreateDomainStmt:
189
+ add_stmt_type_if_needed(summary, "CreateDomainStmt");
190
+ break;
191
+ case T_CreateEnumStmt:
192
+ add_stmt_type_if_needed(summary, "CreateEnumStmt");
193
+ break;
194
+ case T_CreateEventTrigStmt:
195
+ add_stmt_type_if_needed(summary, "CreateEventTrigStmt");
196
+ break;
197
+ case T_CreateExtensionStmt:
198
+ add_stmt_type_if_needed(summary, "CreateExtensionStmt");
199
+ break;
200
+ case T_CreateFdwStmt:
201
+ add_stmt_type_if_needed(summary, "CreateFdwStmt");
202
+ break;
203
+ case T_CreateForeignServerStmt:
204
+ add_stmt_type_if_needed(summary, "CreateForeignServerStmt");
205
+ break;
206
+ case T_CreateForeignTableStmt:
207
+ add_stmt_type_if_needed(summary, "CreateForeignTableStmt");
208
+ break;
209
+ case T_CreateFunctionStmt:
210
+ add_stmt_type_if_needed(summary, "CreateFunctionStmt");
211
+ break;
212
+ case T_CreateOpClassStmt:
213
+ add_stmt_type_if_needed(summary, "CreateOpClassStmt");
214
+ break;
215
+ case T_CreateOpFamilyStmt:
216
+ add_stmt_type_if_needed(summary, "CreateOpFamilyStmt");
217
+ break;
218
+ case T_CreatePLangStmt:
219
+ add_stmt_type_if_needed(summary, "CreatePLangStmt");
220
+ break;
221
+ case T_CreatePolicyStmt:
222
+ add_stmt_type_if_needed(summary, "CreatePolicyStmt");
223
+ break;
224
+ case T_CreatePublicationStmt:
225
+ add_stmt_type_if_needed(summary, "CreatePublicationStmt");
226
+ break;
227
+ case T_CreateRangeStmt:
228
+ add_stmt_type_if_needed(summary, "CreateRangeStmt");
229
+ break;
230
+ case T_CreateRoleStmt:
231
+ add_stmt_type_if_needed(summary, "CreateRoleStmt");
232
+ break;
233
+ case T_CreateSchemaStmt:
234
+ add_stmt_type_if_needed(summary, "CreateSchemaStmt");
235
+ break;
236
+ case T_CreateSeqStmt:
237
+ add_stmt_type_if_needed(summary, "CreateSeqStmt");
238
+ break;
239
+ case T_CreateStatsStmt:
240
+ add_stmt_type_if_needed(summary, "CreateStatsStmt");
241
+ break;
242
+ case T_CreateStmt:
243
+ add_stmt_type_if_needed(summary, "CreateStmt");
244
+ break;
245
+ case T_CreateSubscriptionStmt:
246
+ add_stmt_type_if_needed(summary, "CreateSubscriptionStmt");
247
+ break;
248
+ case T_CreateTableAsStmt:
249
+ {
250
+ add_stmt_type_if_needed(summary, "CreateTableAsStmt");
251
+ CreateTableAsStmt *stmt = (CreateTableAsStmt *) node;
252
+
253
+ if (stmt->query)
254
+ pg_query_summary_stmt_walk_impl(stmt->query, summary);
255
+ break;
256
+ }
257
+ case T_CreateTableSpaceStmt:
258
+ add_stmt_type_if_needed(summary, "CreateTableSpaceStmt");
259
+ break;
260
+ case T_CreateTransformStmt:
261
+ add_stmt_type_if_needed(summary, "CreateTransformStmt");
262
+ break;
263
+ case T_CreateTrigStmt:
264
+ add_stmt_type_if_needed(summary, "CreateTrigStmt");
265
+ break;
266
+ case T_CreateUserMappingStmt:
267
+ add_stmt_type_if_needed(summary, "CreateUserMappingStmt");
268
+ break;
269
+ case T_CreatedbStmt:
270
+ add_stmt_type_if_needed(summary, "CreatedbStmt");
271
+ break;
272
+ case T_DeallocateStmt:
273
+ add_stmt_type_if_needed(summary, "DeallocateStmt");
274
+ break;
275
+ case T_DeclareCursorStmt:
276
+ add_stmt_type_if_needed(summary, "DeclareCursorStmt");
277
+ break;
278
+ case T_DefineStmt:
279
+ add_stmt_type_if_needed(summary, "DefineStmt");
280
+ break;
281
+ case T_DeleteStmt:
282
+ add_stmt_type_if_needed(summary, "DeleteStmt");
283
+ break;
284
+ case T_DiscardStmt:
285
+ add_stmt_type_if_needed(summary, "DiscardStmt");
286
+ break;
287
+ case T_DoStmt:
288
+ add_stmt_type_if_needed(summary, "DoStmt");
289
+ break;
290
+ case T_DropOwnedStmt:
291
+ add_stmt_type_if_needed(summary, "DropOwnedStmt");
292
+ break;
293
+ case T_DropRoleStmt:
294
+ add_stmt_type_if_needed(summary, "DropRoleStmt");
295
+ break;
296
+ case T_DropStmt:
297
+ add_stmt_type_if_needed(summary, "DropStmt");
298
+ break;
299
+ case T_DropSubscriptionStmt:
300
+ add_stmt_type_if_needed(summary, "DropSubscriptionStmt");
301
+ break;
302
+ case T_DropTableSpaceStmt:
303
+ add_stmt_type_if_needed(summary, "DropTableSpaceStmt");
304
+ break;
305
+ case T_DropUserMappingStmt:
306
+ add_stmt_type_if_needed(summary, "DropUserMappingStmt");
307
+ break;
308
+ case T_DropdbStmt:
309
+ add_stmt_type_if_needed(summary, "DropdbStmt");
310
+ break;
311
+ case T_ExecuteStmt:
312
+ add_stmt_type_if_needed(summary, "ExecuteStmt");
313
+ break;
314
+ case T_ExplainStmt:
315
+ {
316
+ add_stmt_type_if_needed(summary, "ExplainStmt");
317
+ ExplainStmt *stmt = (ExplainStmt *) node;
318
+
319
+ if (stmt->query)
320
+ pg_query_summary_stmt_walk_impl(stmt->query, summary);
321
+ break;
322
+ }
323
+ case T_FetchStmt:
324
+ add_stmt_type_if_needed(summary, "FetchStmt");
325
+ break;
326
+ case T_GrantRoleStmt:
327
+ add_stmt_type_if_needed(summary, "GrantRoleStmt");
328
+ break;
329
+ case T_GrantStmt:
330
+ add_stmt_type_if_needed(summary, "GrantStmt");
331
+ break;
332
+ case T_ImportForeignSchemaStmt:
333
+ add_stmt_type_if_needed(summary, "ImportForeignSchemaStmt");
334
+ break;
335
+ case T_IndexStmt:
336
+ add_stmt_type_if_needed(summary, "IndexStmt");
337
+ break;
338
+ case T_InsertStmt:
339
+ add_stmt_type_if_needed(summary, "InsertStmt");
340
+ break;
341
+ case T_ListenStmt:
342
+ add_stmt_type_if_needed(summary, "ListenStmt");
343
+ break;
344
+ case T_LoadStmt:
345
+ add_stmt_type_if_needed(summary, "LoadStmt");
346
+ break;
347
+ case T_LockStmt:
348
+ add_stmt_type_if_needed(summary, "LockStmt");
349
+ break;
350
+ case T_MergeStmt:
351
+ add_stmt_type_if_needed(summary, "MergeStmt");
352
+ break;
353
+ case T_NotifyStmt:
354
+ add_stmt_type_if_needed(summary, "NotifyStmt");
355
+ break;
356
+ case T_PrepareStmt:
357
+ {
358
+ add_stmt_type_if_needed(summary, "PrepareStmt");
359
+ PrepareStmt *stmt = (PrepareStmt *) node;
360
+
361
+ if (stmt->query)
362
+ pg_query_summary_stmt_walk_impl(stmt->query, summary);
363
+ break;
364
+ }
365
+ case T_ReassignOwnedStmt:
366
+ add_stmt_type_if_needed(summary, "ReassignOwnedStmt");
367
+ break;
368
+ case T_RefreshMatViewStmt:
369
+ add_stmt_type_if_needed(summary, "RefreshMatViewStmt");
370
+ break;
371
+ case T_ReindexStmt:
372
+ add_stmt_type_if_needed(summary, "ReindexStmt");
373
+ break;
374
+ case T_RenameStmt:
375
+ add_stmt_type_if_needed(summary, "RenameStmt");
376
+ break;
377
+ case T_ReplicaIdentityStmt:
378
+ add_stmt_type_if_needed(summary, "ReplicaIdentityStmt");
379
+ break;
380
+ case T_RuleStmt:
381
+ add_stmt_type_if_needed(summary, "RuleStmt");
382
+ break;
383
+ case T_SecLabelStmt:
384
+ add_stmt_type_if_needed(summary, "SecLabelStmt");
385
+ break;
386
+ case T_SelectStmt:
387
+ add_stmt_type_if_needed(summary, "SelectStmt");
388
+ break;
389
+ case T_SetOperationStmt:
390
+ add_stmt_type_if_needed(summary, "SetOperationStmt");
391
+ break;
392
+ case T_TransactionStmt:
393
+ add_stmt_type_if_needed(summary, "TransactionStmt");
394
+ break;
395
+ case T_TruncateStmt:
396
+ add_stmt_type_if_needed(summary, "TruncateStmt");
397
+ break;
398
+ case T_UnlistenStmt:
399
+ add_stmt_type_if_needed(summary, "UnlistenStmt");
400
+ break;
401
+ case T_UpdateStmt:
402
+ add_stmt_type_if_needed(summary, "UpdateStmt");
403
+ break;
404
+ case T_VacuumStmt:
405
+ add_stmt_type_if_needed(summary, "VacuumStmt");
406
+ break;
407
+ case T_VariableSetStmt:
408
+ add_stmt_type_if_needed(summary, "VariableSetStmt");
409
+ break;
410
+ case T_VariableShowStmt:
411
+ add_stmt_type_if_needed(summary, "VariableShowStmt");
412
+ break;
413
+ case T_ViewStmt:
414
+ {
415
+ add_stmt_type_if_needed(summary, "ViewStmt");
416
+ ViewStmt *stmt = (ViewStmt *) node;
417
+
418
+ if (stmt->query)
419
+ pg_query_summary_stmt_walk_impl(stmt->query, summary);
420
+ break;
421
+ }
422
+ case T_RawStmt:
423
+ return pg_query_summary_stmt_walk_impl(((RawStmt *) node)->stmt, summary);
424
+
425
+ /*
426
+ * All the cases below here are not handled in the Rust version.
427
+ * They're added here so, if a new statement type (like MergeStmt)
428
+ * is added, the C compiler will generate a warning.
429
+ */
430
+ case T_Invalid:
431
+ case T_List:
432
+ case T_Alias:
433
+ case T_RangeVar:
434
+ case T_TableFunc:
435
+ case T_IntoClause:
436
+ case T_Var:
437
+ case T_Const:
438
+ case T_Param:
439
+ case T_Aggref:
440
+ case T_GroupingFunc:
441
+ case T_WindowFunc:
442
+ case T_WindowFuncRunCondition:
443
+ case T_MergeSupportFunc:
444
+ case T_SubscriptingRef:
445
+ case T_FuncExpr:
446
+ case T_NamedArgExpr:
447
+ case T_OpExpr:
448
+ case T_DistinctExpr:
449
+ case T_NullIfExpr:
450
+ case T_ScalarArrayOpExpr:
451
+ case T_BoolExpr:
452
+ case T_SubLink:
453
+ case T_SubPlan:
454
+ case T_AlternativeSubPlan:
455
+ case T_FieldSelect:
456
+ case T_FieldStore:
457
+ case T_RelabelType:
458
+ case T_CoerceViaIO:
459
+ case T_ArrayCoerceExpr:
460
+ case T_ConvertRowtypeExpr:
461
+ case T_CollateExpr:
462
+ case T_CaseExpr:
463
+ case T_CaseWhen:
464
+ case T_CaseTestExpr:
465
+ case T_ArrayExpr:
466
+ case T_RowExpr:
467
+ case T_RowCompareExpr:
468
+ case T_CoalesceExpr:
469
+ case T_MinMaxExpr:
470
+ case T_SQLValueFunction:
471
+ case T_XmlExpr:
472
+ case T_JsonFormat:
473
+ case T_JsonReturning:
474
+ case T_JsonValueExpr:
475
+ case T_JsonConstructorExpr:
476
+ case T_JsonIsPredicate:
477
+ case T_JsonBehavior:
478
+ case T_JsonExpr:
479
+ case T_JsonTablePath:
480
+ case T_JsonTablePathScan:
481
+ case T_JsonTableSiblingJoin:
482
+ case T_NullTest:
483
+ case T_BooleanTest:
484
+ case T_MergeAction:
485
+ case T_CoerceToDomain:
486
+ case T_CoerceToDomainValue:
487
+ case T_SetToDefault:
488
+ case T_CurrentOfExpr:
489
+ case T_NextValueExpr:
490
+ case T_InferenceElem:
491
+ case T_TargetEntry:
492
+ case T_RangeTblRef:
493
+ case T_JoinExpr:
494
+ case T_FromExpr:
495
+ case T_OnConflictExpr:
496
+ case T_Query:
497
+ case T_TypeName:
498
+ case T_ColumnRef:
499
+ case T_ParamRef:
500
+ case T_A_Expr:
501
+ case T_A_Const:
502
+ case T_TypeCast:
503
+ case T_CollateClause:
504
+ case T_RoleSpec:
505
+ case T_FuncCall:
506
+ case T_A_Star:
507
+ case T_A_Indices:
508
+ case T_A_Indirection:
509
+ case T_A_ArrayExpr:
510
+ case T_ResTarget:
511
+ case T_MultiAssignRef:
512
+ case T_SortBy:
513
+ case T_WindowDef:
514
+ case T_RangeSubselect:
515
+ case T_RangeFunction:
516
+ case T_RangeTableFunc:
517
+ case T_RangeTableFuncCol:
518
+ case T_RangeTableSample:
519
+ case T_ColumnDef:
520
+ case T_TableLikeClause:
521
+ case T_IndexElem:
522
+ case T_DefElem:
523
+ case T_LockingClause:
524
+ case T_XmlSerialize:
525
+ case T_PartitionElem:
526
+ case T_PartitionSpec:
527
+ case T_PartitionBoundSpec:
528
+ case T_PartitionRangeDatum:
529
+ case T_SinglePartitionSpec:
530
+ case T_PartitionCmd:
531
+ case T_RangeTblEntry:
532
+ case T_RTEPermissionInfo:
533
+ case T_RangeTblFunction:
534
+ case T_TableSampleClause:
535
+ case T_WithCheckOption:
536
+ case T_SortGroupClause:
537
+ case T_GroupingSet:
538
+ case T_WindowClause:
539
+ case T_RowMarkClause:
540
+ case T_WithClause:
541
+ case T_InferClause:
542
+ case T_OnConflictClause:
543
+ case T_CTESearchClause:
544
+ case T_CTECycleClause:
545
+ case T_CommonTableExpr:
546
+ case T_MergeWhenClause:
547
+ case T_TriggerTransition:
548
+ case T_JsonOutput:
549
+ case T_JsonArgument:
550
+ case T_JsonFuncExpr:
551
+ case T_JsonTablePathSpec:
552
+ case T_JsonTable:
553
+ case T_JsonTableColumn:
554
+ case T_JsonKeyValue:
555
+ case T_JsonParseExpr:
556
+ case T_JsonScalarExpr:
557
+ case T_JsonSerializeExpr:
558
+ case T_JsonObjectConstructor:
559
+ case T_JsonArrayConstructor:
560
+ case T_JsonArrayQueryConstructor:
561
+ case T_JsonAggConstructor:
562
+ case T_JsonObjectAgg:
563
+ case T_JsonArrayAgg:
564
+ case T_ReturnStmt:
565
+ case T_PLAssignStmt:
566
+ case T_ObjectWithArgs:
567
+ case T_AccessPriv:
568
+ case T_Constraint:
569
+ case T_CreateOpClassItem:
570
+ case T_StatsElem:
571
+ case T_FunctionParameter:
572
+ case T_InlineCodeBlock:
573
+ case T_CallContext:
574
+ case T_AlterDatabaseRefreshCollStmt:
575
+ case T_VacuumRelation:
576
+ case T_PublicationTable:
577
+ case T_PublicationObjSpec:
578
+ case T_PlannerGlobal:
579
+ case T_PlannerInfo:
580
+ case T_RelOptInfo:
581
+ case T_IndexOptInfo:
582
+ case T_ForeignKeyOptInfo:
583
+ case T_StatisticExtInfo:
584
+ case T_JoinDomain:
585
+ case T_EquivalenceClass:
586
+ case T_EquivalenceMember:
587
+ case T_PathKey:
588
+ case T_GroupByOrdering:
589
+ case T_PathTarget:
590
+ case T_ParamPathInfo:
591
+ case T_Path:
592
+ case T_IndexPath:
593
+ case T_IndexClause:
594
+ case T_BitmapHeapPath:
595
+ case T_BitmapAndPath:
596
+ case T_BitmapOrPath:
597
+ case T_TidPath:
598
+ case T_TidRangePath:
599
+ case T_SubqueryScanPath:
600
+ case T_ForeignPath:
601
+ case T_CustomPath:
602
+ case T_AppendPath:
603
+ case T_MergeAppendPath:
604
+ case T_GroupResultPath:
605
+ case T_MaterialPath:
606
+ case T_MemoizePath:
607
+ case T_UniquePath:
608
+ case T_GatherPath:
609
+ case T_GatherMergePath:
610
+ case T_NestPath:
611
+ case T_MergePath:
612
+ case T_HashPath:
613
+ case T_ProjectionPath:
614
+ case T_ProjectSetPath:
615
+ case T_SortPath:
616
+ case T_IncrementalSortPath:
617
+ case T_GroupPath:
618
+ case T_UpperUniquePath:
619
+ case T_AggPath:
620
+ case T_GroupingSetData:
621
+ case T_RollupData:
622
+ case T_GroupingSetsPath:
623
+ case T_MinMaxAggPath:
624
+ case T_WindowAggPath:
625
+ case T_SetOpPath:
626
+ case T_RecursiveUnionPath:
627
+ case T_LockRowsPath:
628
+ case T_ModifyTablePath:
629
+ case T_LimitPath:
630
+ case T_RestrictInfo:
631
+ case T_PlaceHolderVar:
632
+ case T_SpecialJoinInfo:
633
+ case T_OuterJoinClauseInfo:
634
+ case T_AppendRelInfo:
635
+ case T_RowIdentityVarInfo:
636
+ case T_PlaceHolderInfo:
637
+ case T_MinMaxAggInfo:
638
+ case T_PlannerParamItem:
639
+ case T_AggInfo:
640
+ case T_AggTransInfo:
641
+ case T_PlannedStmt:
642
+ case T_Result:
643
+ case T_ProjectSet:
644
+ case T_ModifyTable:
645
+ case T_Append:
646
+ case T_MergeAppend:
647
+ case T_RecursiveUnion:
648
+ case T_BitmapAnd:
649
+ case T_BitmapOr:
650
+ case T_SeqScan:
651
+ case T_SampleScan:
652
+ case T_IndexScan:
653
+ case T_IndexOnlyScan:
654
+ case T_BitmapIndexScan:
655
+ case T_BitmapHeapScan:
656
+ case T_TidScan:
657
+ case T_TidRangeScan:
658
+ case T_SubqueryScan:
659
+ case T_FunctionScan:
660
+ case T_ValuesScan:
661
+ case T_TableFuncScan:
662
+ case T_CteScan:
663
+ case T_NamedTuplestoreScan:
664
+ case T_WorkTableScan:
665
+ case T_ForeignScan:
666
+ case T_CustomScan:
667
+ case T_NestLoop:
668
+ case T_NestLoopParam:
669
+ case T_MergeJoin:
670
+ case T_HashJoin:
671
+ case T_Material:
672
+ case T_Memoize:
673
+ case T_Sort:
674
+ case T_IncrementalSort:
675
+ case T_Group:
676
+ case T_Agg:
677
+ case T_WindowAgg:
678
+ case T_Unique:
679
+ case T_Gather:
680
+ case T_GatherMerge:
681
+ case T_Hash:
682
+ case T_SetOp:
683
+ case T_LockRows:
684
+ case T_Limit:
685
+ case T_PlanRowMark:
686
+ case T_PartitionPruneInfo:
687
+ case T_PartitionedRelPruneInfo:
688
+ case T_PartitionPruneStepOp:
689
+ case T_PartitionPruneStepCombine:
690
+ case T_PlanInvalItem:
691
+ case T_ExprState:
692
+ case T_IndexInfo:
693
+ case T_ExprContext:
694
+ case T_ReturnSetInfo:
695
+ case T_ProjectionInfo:
696
+ case T_JunkFilter:
697
+ case T_OnConflictSetState:
698
+ case T_MergeActionState:
699
+ case T_ResultRelInfo:
700
+ case T_EState:
701
+ case T_WindowFuncExprState:
702
+ case T_SetExprState:
703
+ case T_SubPlanState:
704
+ case T_DomainConstraintState:
705
+ case T_ResultState:
706
+ case T_ProjectSetState:
707
+ case T_ModifyTableState:
708
+ case T_AppendState:
709
+ case T_MergeAppendState:
710
+ case T_RecursiveUnionState:
711
+ case T_BitmapAndState:
712
+ case T_BitmapOrState:
713
+ case T_ScanState:
714
+ case T_SeqScanState:
715
+ case T_SampleScanState:
716
+ case T_IndexScanState:
717
+ case T_IndexOnlyScanState:
718
+ case T_BitmapIndexScanState:
719
+ case T_BitmapHeapScanState:
720
+ case T_TidScanState:
721
+ case T_TidRangeScanState:
722
+ case T_SubqueryScanState:
723
+ case T_FunctionScanState:
724
+ case T_ValuesScanState:
725
+ case T_TableFuncScanState:
726
+ case T_CteScanState:
727
+ case T_NamedTuplestoreScanState:
728
+ case T_WorkTableScanState:
729
+ case T_ForeignScanState:
730
+ case T_CustomScanState:
731
+ case T_JoinState:
732
+ case T_NestLoopState:
733
+ case T_MergeJoinState:
734
+ case T_HashJoinState:
735
+ case T_MaterialState:
736
+ case T_MemoizeState:
737
+ case T_SortState:
738
+ case T_IncrementalSortState:
739
+ case T_GroupState:
740
+ case T_AggState:
741
+ case T_WindowAggState:
742
+ case T_UniqueState:
743
+ case T_GatherState:
744
+ case T_GatherMergeState:
745
+ case T_HashState:
746
+ case T_SetOpState:
747
+ case T_LockRowsState:
748
+ case T_LimitState:
749
+ case T_IndexAmRoutine:
750
+ case T_TableAmRoutine:
751
+ case T_TsmRoutine:
752
+ case T_EventTriggerData:
753
+ case T_TriggerData:
754
+ case T_TupleTableSlot:
755
+ case T_FdwRoutine:
756
+ case T_Bitmapset:
757
+ case T_ExtensibleNode:
758
+ case T_ErrorSaveContext:
759
+ case T_IdentifySystemCmd:
760
+ case T_BaseBackupCmd:
761
+ case T_CreateReplicationSlotCmd:
762
+ case T_DropReplicationSlotCmd:
763
+ case T_AlterReplicationSlotCmd:
764
+ case T_StartReplicationCmd:
765
+ case T_ReadReplicationSlotCmd:
766
+ case T_TimeLineHistoryCmd:
767
+ case T_UploadManifestCmd:
768
+ case T_SupportRequestSimplify:
769
+ case T_SupportRequestSelectivity:
770
+ case T_SupportRequestCost:
771
+ case T_SupportRequestRows:
772
+ case T_SupportRequestIndexCondition:
773
+ case T_SupportRequestWFuncMonotonic:
774
+ case T_SupportRequestOptimizeWindowClause:
775
+ case T_Integer:
776
+ case T_Float:
777
+ case T_Boolean:
778
+ case T_String:
779
+ case T_BitString:
780
+ case T_ForeignKeyCacheInfo:
781
+ case T_IntList:
782
+ case T_OidList:
783
+ case T_XidList:
784
+ case T_AllocSetContext:
785
+ case T_GenerationContext:
786
+ case T_SlabContext:
787
+ case T_BumpContext:
788
+ case T_TIDBitmap:
789
+ case T_WindowObjectData:
790
+ break;
791
+ }
792
+
793
+ if (!pg_query_raw_tree_walker_supports(node))
794
+ return false;
795
+
796
+ return raw_expression_tree_walker(node, pg_query_summary_stmt_walk_impl, (void *) summary);
797
+ }