pg_query 4.2.2 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (486) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -3
  5. data/ext/pg_query/extconf.rb +1 -3
  6. data/ext/pg_query/include/access/amapi.h +3 -1
  7. data/ext/pg_query/include/access/attmap.h +5 -3
  8. data/ext/pg_query/include/access/attnum.h +1 -1
  9. data/ext/pg_query/include/access/clog.h +1 -1
  10. data/ext/pg_query/include/access/commit_ts.h +1 -1
  11. data/ext/pg_query/include/access/detoast.h +1 -1
  12. data/ext/pg_query/include/access/genam.h +7 -5
  13. data/ext/pg_query/include/access/gin.h +16 -3
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +6 -2
  16. data/ext/pg_query/include/access/itup.h +61 -58
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +1 -1
  21. data/ext/pg_query/include/access/rmgrlist.h +2 -2
  22. data/ext/pg_query/include/access/sdir.h +12 -3
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +1 -1
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +1 -1
  27. data/ext/pg_query/include/access/tableam.h +68 -45
  28. data/ext/pg_query/include/access/toast_compression.h +1 -1
  29. data/ext/pg_query/include/access/transam.h +1 -1
  30. data/ext/pg_query/include/access/tsmapi.h +82 -0
  31. data/ext/pg_query/include/access/tupconvert.h +5 -2
  32. data/ext/pg_query/include/access/tupdesc.h +2 -2
  33. data/ext/pg_query/include/access/tupmacs.h +58 -98
  34. data/ext/pg_query/include/access/twophase.h +2 -2
  35. data/ext/pg_query/include/access/xact.h +25 -18
  36. data/ext/pg_query/include/access/xlog.h +15 -16
  37. data/ext/pg_query/include/access/xlog_internal.h +100 -62
  38. data/ext/pg_query/include/access/xlogbackup.h +41 -0
  39. data/ext/pg_query/include/access/xlogdefs.h +6 -25
  40. data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
  41. data/ext/pg_query/include/access/xlogreader.h +7 -6
  42. data/ext/pg_query/include/access/xlogrecord.h +17 -5
  43. data/ext/pg_query/include/access/xlogrecovery.h +4 -3
  44. data/ext/pg_query/include/archive/archive_module.h +59 -0
  45. data/ext/pg_query/include/c.h +144 -156
  46. data/ext/pg_query/include/catalog/catalog.h +4 -3
  47. data/ext/pg_query/include/catalog/catversion.h +6 -2
  48. data/ext/pg_query/include/catalog/dependency.h +5 -4
  49. data/ext/pg_query/include/catalog/genbki.h +7 -6
  50. data/ext/pg_query/include/catalog/index.h +4 -4
  51. data/ext/pg_query/include/catalog/indexing.h +1 -1
  52. data/ext/pg_query/include/catalog/namespace.h +2 -2
  53. data/ext/pg_query/include/catalog/objectaccess.h +10 -8
  54. data/ext/pg_query/include/catalog/objectaddress.h +3 -3
  55. data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
  56. data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
  57. data/ext/pg_query/include/catalog/pg_am.h +1 -1
  58. data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
  59. data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
  60. data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
  61. data/ext/pg_query/include/catalog/pg_authid.h +1 -1
  62. data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
  63. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  64. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  65. data/ext/pg_query/include/catalog/pg_collation.h +3 -1
  66. data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
  67. data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
  68. data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
  69. data/ext/pg_query/include/catalog/pg_control.h +9 -1
  70. data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
  71. data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
  72. data/ext/pg_query/include/catalog/pg_database.h +124 -0
  73. data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
  74. data/ext/pg_query/include/catalog/pg_depend.h +1 -1
  75. data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
  76. data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
  77. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
  78. data/ext/pg_query/include/catalog/pg_index.h +1 -1
  79. data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
  80. data/ext/pg_query/include/catalog/pg_language.h +1 -1
  81. data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
  82. data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
  83. data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
  84. data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
  85. data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
  86. data/ext/pg_query/include/catalog/pg_operator.h +1 -1
  87. data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
  88. data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
  89. data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
  90. data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
  91. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
  92. data/ext/pg_query/include/catalog/pg_proc.h +1 -1
  93. data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
  94. data/ext/pg_query/include/catalog/pg_publication.h +2 -5
  95. data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
  96. data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
  97. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
  98. data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
  99. data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
  100. data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
  101. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
  102. data/ext/pg_query/include/catalog/pg_transform.h +1 -1
  103. data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
  104. data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
  105. data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
  106. data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
  107. data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
  108. data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
  109. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
  110. data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
  111. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
  112. data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
  113. data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
  114. data/ext/pg_query/include/catalog/pg_type.h +1 -1
  115. data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
  116. data/ext/pg_query/include/catalog/storage.h +6 -6
  117. data/ext/pg_query/include/commands/async.h +1 -1
  118. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  119. data/ext/pg_query/include/commands/defrem.h +2 -1
  120. data/ext/pg_query/include/commands/event_trigger.h +1 -1
  121. data/ext/pg_query/include/commands/explain.h +3 -1
  122. data/ext/pg_query/include/commands/prepare.h +1 -1
  123. data/ext/pg_query/include/commands/tablespace.h +4 -4
  124. data/ext/pg_query/include/commands/trigger.h +15 -14
  125. data/ext/pg_query/include/commands/user.h +9 -3
  126. data/ext/pg_query/include/commands/vacuum.h +60 -14
  127. data/ext/pg_query/include/common/cryptohash.h +39 -0
  128. data/ext/pg_query/include/common/file_perm.h +1 -1
  129. data/ext/pg_query/include/common/hashfn.h +1 -1
  130. data/ext/pg_query/include/common/int.h +437 -0
  131. data/ext/pg_query/include/common/ip.h +4 -2
  132. data/ext/pg_query/include/common/keywords.h +1 -1
  133. data/ext/pg_query/include/common/kwlookup.h +2 -2
  134. data/ext/pg_query/include/common/pg_prng.h +3 -2
  135. data/ext/pg_query/include/common/relpath.h +20 -13
  136. data/ext/pg_query/include/common/scram-common.h +70 -0
  137. data/ext/pg_query/include/common/sha2.h +32 -0
  138. data/ext/pg_query/include/common/string.h +5 -3
  139. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
  140. data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
  141. data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
  142. data/ext/pg_query/include/copyfuncs.switch.c +938 -0
  143. data/ext/pg_query/include/datatype/timestamp.h +11 -4
  144. data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
  145. data/ext/pg_query/include/equalfuncs.switch.c +785 -0
  146. data/ext/pg_query/include/executor/execdesc.h +1 -1
  147. data/ext/pg_query/include/executor/executor.h +34 -17
  148. data/ext/pg_query/include/executor/functions.h +1 -1
  149. data/ext/pg_query/include/executor/instrument.h +1 -1
  150. data/ext/pg_query/include/executor/spi.h +2 -2
  151. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  152. data/ext/pg_query/include/executor/tuptable.h +18 -11
  153. data/ext/pg_query/include/fmgr.h +21 -2
  154. data/ext/pg_query/include/foreign/fdwapi.h +294 -0
  155. data/ext/pg_query/include/funcapi.h +12 -12
  156. data/ext/pg_query/include/gram.h +1127 -0
  157. data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
  158. data/ext/pg_query/include/jit/jit.h +2 -2
  159. data/ext/pg_query/include/kwlist_d.h +534 -510
  160. data/ext/pg_query/include/lib/dshash.h +4 -1
  161. data/ext/pg_query/include/lib/ilist.h +435 -22
  162. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  163. data/ext/pg_query/include/lib/simplehash.h +9 -9
  164. data/ext/pg_query/include/lib/sort_template.h +1 -1
  165. data/ext/pg_query/include/lib/stringinfo.h +3 -3
  166. data/ext/pg_query/include/libpq/auth.h +8 -2
  167. data/ext/pg_query/include/libpq/crypt.h +1 -1
  168. data/ext/pg_query/include/libpq/hba.h +24 -17
  169. data/ext/pg_query/include/libpq/libpq-be.h +36 -25
  170. data/ext/pg_query/include/libpq/libpq.h +1 -1
  171. data/ext/pg_query/include/libpq/pqcomm.h +10 -41
  172. data/ext/pg_query/include/libpq/pqformat.h +2 -2
  173. data/ext/pg_query/include/libpq/pqsignal.h +22 -10
  174. data/ext/pg_query/include/libpq/sasl.h +136 -0
  175. data/ext/pg_query/include/libpq/scram.h +37 -0
  176. data/ext/pg_query/include/mb/pg_wchar.h +35 -18
  177. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  178. data/ext/pg_query/include/miscadmin.h +26 -14
  179. data/ext/pg_query/include/nodes/bitmapset.h +11 -7
  180. data/ext/pg_query/include/nodes/execnodes.h +83 -30
  181. data/ext/pg_query/include/nodes/extensible.h +5 -3
  182. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  183. data/ext/pg_query/include/nodes/makefuncs.h +14 -2
  184. data/ext/pg_query/include/nodes/memnodes.h +7 -4
  185. data/ext/pg_query/include/nodes/miscnodes.h +56 -0
  186. data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
  187. data/ext/pg_query/include/nodes/nodes.h +95 -510
  188. data/ext/pg_query/include/nodes/nodetags.h +471 -0
  189. data/ext/pg_query/include/nodes/params.h +3 -3
  190. data/ext/pg_query/include/nodes/parsenodes.h +377 -139
  191. data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
  192. data/ext/pg_query/include/nodes/pg_list.h +30 -7
  193. data/ext/pg_query/include/nodes/plannodes.h +367 -124
  194. data/ext/pg_query/include/nodes/primnodes.h +670 -222
  195. data/ext/pg_query/include/nodes/print.h +1 -1
  196. data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
  197. data/ext/pg_query/include/nodes/replnodes.h +111 -0
  198. data/ext/pg_query/include/nodes/supportnodes.h +346 -0
  199. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  200. data/ext/pg_query/include/nodes/value.h +12 -2
  201. data/ext/pg_query/include/optimizer/cost.h +6 -4
  202. data/ext/pg_query/include/optimizer/geqo.h +1 -1
  203. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  204. data/ext/pg_query/include/optimizer/optimizer.h +8 -8
  205. data/ext/pg_query/include/optimizer/paths.h +16 -7
  206. data/ext/pg_query/include/optimizer/planmain.h +3 -6
  207. data/ext/pg_query/include/parser/analyze.h +4 -3
  208. data/ext/pg_query/include/parser/kwlist.h +12 -1
  209. data/ext/pg_query/include/parser/parse_agg.h +4 -2
  210. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  211. data/ext/pg_query/include/parser/parse_expr.h +1 -1
  212. data/ext/pg_query/include/parser/parse_func.h +1 -1
  213. data/ext/pg_query/include/parser/parse_node.h +22 -4
  214. data/ext/pg_query/include/parser/parse_oper.h +3 -3
  215. data/ext/pg_query/include/parser/parse_relation.h +8 -3
  216. data/ext/pg_query/include/parser/parse_type.h +4 -3
  217. data/ext/pg_query/include/parser/parser.h +1 -1
  218. data/ext/pg_query/include/parser/parsetree.h +1 -1
  219. data/ext/pg_query/include/parser/scanner.h +2 -2
  220. data/ext/pg_query/include/parser/scansup.h +1 -1
  221. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  222. data/ext/pg_query/include/pg_config.h +23 -217
  223. data/ext/pg_query/include/pg_config_manual.h +8 -46
  224. data/ext/pg_query/include/pg_getopt.h +1 -1
  225. data/ext/pg_query/include/pg_query.h +27 -3
  226. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  227. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  228. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  229. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  230. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  231. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  232. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  233. data/ext/pg_query/include/pg_trace.h +1 -1
  234. data/ext/pg_query/include/pgstat.h +172 -93
  235. data/ext/pg_query/include/pgtime.h +3 -3
  236. data/ext/pg_query/include/pl_gram.h +64 -62
  237. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  238. data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
  239. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
  240. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
  241. data/ext/pg_query/include/plpgsql.h +17 -22
  242. data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
  244. data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
  245. data/ext/pg_query/include/port/atomics/fallback.h +3 -3
  246. data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
  247. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  248. data/ext/pg_query/include/port/atomics.h +2 -7
  249. data/ext/pg_query/include/port/pg_bitutils.h +62 -25
  250. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  251. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  252. data/ext/pg_query/include/port/simd.h +375 -0
  253. data/ext/pg_query/include/port.h +42 -75
  254. data/ext/pg_query/include/portability/instr_time.h +81 -140
  255. data/ext/pg_query/include/postgres.h +205 -434
  256. data/ext/pg_query/include/postgres_ext.h +0 -1
  257. data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
  258. data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
  259. data/ext/pg_query/include/postmaster/bgworker.h +2 -2
  260. data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
  261. data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
  262. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  263. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  264. data/ext/pg_query/include/postmaster/pgarch.h +1 -38
  265. data/ext/pg_query/include/postmaster/postmaster.h +5 -2
  266. data/ext/pg_query/include/postmaster/startup.h +3 -1
  267. data/ext/pg_query/include/postmaster/syslogger.h +2 -2
  268. data/ext/pg_query/include/postmaster/walwriter.h +3 -1
  269. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  270. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  271. data/ext/pg_query/include/regex/regex.h +9 -6
  272. data/ext/pg_query/include/replication/logicallauncher.h +6 -1
  273. data/ext/pg_query/include/replication/logicalproto.h +30 -10
  274. data/ext/pg_query/include/replication/logicalworker.h +14 -1
  275. data/ext/pg_query/include/replication/origin.h +4 -4
  276. data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
  277. data/ext/pg_query/include/replication/slot.h +25 -6
  278. data/ext/pg_query/include/replication/syncrep.h +2 -8
  279. data/ext/pg_query/include/replication/walreceiver.h +15 -9
  280. data/ext/pg_query/include/replication/walsender.h +13 -13
  281. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  282. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
  283. data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
  284. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  285. data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
  286. data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
  287. data/ext/pg_query/include/storage/backendid.h +1 -1
  288. data/ext/pg_query/include/storage/block.h +24 -31
  289. data/ext/pg_query/include/storage/buf.h +1 -1
  290. data/ext/pg_query/include/storage/bufmgr.h +183 -87
  291. data/ext/pg_query/include/storage/bufpage.h +146 -93
  292. data/ext/pg_query/include/storage/condition_variable.h +2 -2
  293. data/ext/pg_query/include/storage/dsm.h +3 -6
  294. data/ext/pg_query/include/storage/dsm_impl.h +4 -1
  295. data/ext/pg_query/include/storage/fd.h +24 -20
  296. data/ext/pg_query/include/storage/fileset.h +1 -1
  297. data/ext/pg_query/include/storage/ipc.h +1 -1
  298. data/ext/pg_query/include/storage/item.h +1 -1
  299. data/ext/pg_query/include/storage/itemid.h +1 -1
  300. data/ext/pg_query/include/storage/itemptr.h +94 -57
  301. data/ext/pg_query/include/storage/large_object.h +1 -1
  302. data/ext/pg_query/include/storage/latch.h +9 -1
  303. data/ext/pg_query/include/storage/lmgr.h +6 -1
  304. data/ext/pg_query/include/storage/lock.h +21 -13
  305. data/ext/pg_query/include/storage/lockdefs.h +3 -3
  306. data/ext/pg_query/include/storage/lwlock.h +16 -2
  307. data/ext/pg_query/include/storage/off.h +1 -1
  308. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  309. data/ext/pg_query/include/storage/pg_shmem.h +1 -1
  310. data/ext/pg_query/include/storage/pmsignal.h +1 -1
  311. data/ext/pg_query/include/storage/predicate.h +2 -2
  312. data/ext/pg_query/include/storage/proc.h +22 -17
  313. data/ext/pg_query/include/storage/procarray.h +3 -2
  314. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  315. data/ext/pg_query/include/storage/procsignal.h +3 -1
  316. data/ext/pg_query/include/storage/relfilelocator.h +99 -0
  317. data/ext/pg_query/include/storage/s_lock.h +66 -309
  318. data/ext/pg_query/include/storage/sharedfileset.h +1 -1
  319. data/ext/pg_query/include/storage/shm_mq.h +1 -1
  320. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  321. data/ext/pg_query/include/storage/shmem.h +1 -23
  322. data/ext/pg_query/include/storage/sinval.h +3 -3
  323. data/ext/pg_query/include/storage/sinvaladt.h +4 -2
  324. data/ext/pg_query/include/storage/smgr.h +12 -10
  325. data/ext/pg_query/include/storage/spin.h +1 -1
  326. data/ext/pg_query/include/storage/standby.h +9 -8
  327. data/ext/pg_query/include/storage/standbydefs.h +1 -1
  328. data/ext/pg_query/include/storage/sync.h +3 -3
  329. data/ext/pg_query/include/tcop/cmdtag.h +7 -2
  330. data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
  331. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  332. data/ext/pg_query/include/tcop/dest.h +1 -3
  333. data/ext/pg_query/include/tcop/fastpath.h +1 -1
  334. data/ext/pg_query/include/tcop/pquery.h +1 -1
  335. data/ext/pg_query/include/tcop/tcopprot.h +1 -4
  336. data/ext/pg_query/include/tcop/utility.h +1 -1
  337. data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
  338. data/ext/pg_query/include/utils/acl.h +26 -81
  339. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  340. data/ext/pg_query/include/utils/array.h +19 -1
  341. data/ext/pg_query/include/utils/backend_progress.h +2 -1
  342. data/ext/pg_query/include/utils/backend_status.h +24 -3
  343. data/ext/pg_query/include/utils/builtins.h +14 -5
  344. data/ext/pg_query/include/utils/bytea.h +1 -1
  345. data/ext/pg_query/include/utils/catcache.h +1 -1
  346. data/ext/pg_query/include/utils/date.h +37 -9
  347. data/ext/pg_query/include/utils/datetime.h +41 -21
  348. data/ext/pg_query/include/utils/datum.h +1 -1
  349. data/ext/pg_query/include/utils/dsa.h +5 -1
  350. data/ext/pg_query/include/utils/elog.h +101 -26
  351. data/ext/pg_query/include/utils/expandeddatum.h +14 -3
  352. data/ext/pg_query/include/utils/expandedrecord.h +14 -4
  353. data/ext/pg_query/include/utils/float.h +7 -6
  354. data/ext/pg_query/include/utils/fmgroids.h +54 -1
  355. data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
  356. data/ext/pg_query/include/utils/fmgrtab.h +1 -1
  357. data/ext/pg_query/include/utils/guc.h +55 -82
  358. data/ext/pg_query/include/utils/guc_hooks.h +163 -0
  359. data/ext/pg_query/include/utils/guc_tables.h +49 -3
  360. data/ext/pg_query/include/utils/hsearch.h +1 -1
  361. data/ext/pg_query/include/utils/inval.h +3 -3
  362. data/ext/pg_query/include/utils/logtape.h +77 -0
  363. data/ext/pg_query/include/utils/lsyscache.h +5 -1
  364. data/ext/pg_query/include/utils/memdebug.h +1 -1
  365. data/ext/pg_query/include/utils/memutils.h +5 -49
  366. data/ext/pg_query/include/utils/memutils_internal.h +136 -0
  367. data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
  368. data/ext/pg_query/include/utils/numeric.h +20 -5
  369. data/ext/pg_query/include/utils/palloc.h +8 -1
  370. data/ext/pg_query/include/utils/partcache.h +3 -2
  371. data/ext/pg_query/include/utils/pg_locale.h +22 -14
  372. data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
  373. data/ext/pg_query/include/utils/pidfile.h +1 -1
  374. data/ext/pg_query/include/utils/plancache.h +1 -1
  375. data/ext/pg_query/include/utils/portal.h +1 -1
  376. data/ext/pg_query/include/utils/probes.h +6 -6
  377. data/ext/pg_query/include/utils/ps_status.h +23 -1
  378. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  379. data/ext/pg_query/include/utils/regproc.h +3 -3
  380. data/ext/pg_query/include/utils/rel.h +60 -43
  381. data/ext/pg_query/include/utils/relcache.h +13 -8
  382. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  383. data/ext/pg_query/include/utils/resowner.h +1 -1
  384. data/ext/pg_query/include/utils/ruleutils.h +6 -1
  385. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  386. data/ext/pg_query/include/utils/snapmgr.h +4 -2
  387. data/ext/pg_query/include/utils/snapshot.h +1 -1
  388. data/ext/pg_query/include/utils/sortsupport.h +2 -2
  389. data/ext/pg_query/include/utils/syscache.h +4 -1
  390. data/ext/pg_query/include/utils/timeout.h +1 -1
  391. data/ext/pg_query/include/utils/timestamp.h +41 -11
  392. data/ext/pg_query/include/utils/tuplesort.h +189 -35
  393. data/ext/pg_query/include/utils/tuplestore.h +1 -1
  394. data/ext/pg_query/include/utils/typcache.h +1 -1
  395. data/ext/pg_query/include/utils/varlena.h +13 -1
  396. data/ext/pg_query/include/utils/wait_event.h +9 -4
  397. data/ext/pg_query/include/utils/xml.h +15 -5
  398. data/ext/pg_query/include/varatt.h +358 -0
  399. data/ext/pg_query/pg_query.c +1 -1
  400. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  401. data/ext/pg_query/pg_query_fingerprint.c +8 -3
  402. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  403. data/ext/pg_query/pg_query_internal.h +1 -1
  404. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  405. data/ext/pg_query/pg_query_normalize.c +1 -1
  406. data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
  407. data/ext/pg_query/pg_query_parse.c +46 -4
  408. data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
  409. data/ext/pg_query/pg_query_scan.c +1 -1
  410. data/ext/pg_query/pg_query_split.c +2 -2
  411. data/ext/pg_query/postgres_deparse.c +511 -109
  412. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  413. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  414. data/ext/pg_query/src_backend_commands_define.c +1 -1
  415. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  416. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  417. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  418. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  419. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  420. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  421. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  422. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  423. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  424. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  425. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  426. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  427. data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
  428. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  429. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  430. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  431. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  432. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  433. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  434. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  435. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  436. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  437. data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
  438. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  439. data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
  440. data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
  441. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
  442. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  443. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  444. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  445. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  446. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  447. data/ext/pg_query/src_common_encnames.c +4 -1
  448. data/ext/pg_query/src_common_hashfn.c +1 -1
  449. data/ext/pg_query/src_common_keywords.c +1 -1
  450. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  451. data/ext/pg_query/src_common_kwlookup.c +1 -1
  452. data/ext/pg_query/src_common_psprintf.c +1 -1
  453. data/ext/pg_query/src_common_stringinfo.c +4 -4
  454. data/ext/pg_query/src_common_wchar.c +9 -8
  455. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  456. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  457. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  458. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  462. data/ext/pg_query/src_port_pg_bitutils.c +1 -1
  463. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  464. data/ext/pg_query/src_port_snprintf.c +3 -7
  465. data/ext/pg_query/src_port_strerror.c +1 -1
  466. data/ext/pg_query/src_port_strnlen.c +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +166 -3191
  468. data/lib/pg_query/treewalker.rb +7 -2
  469. data/lib/pg_query/version.rb +1 -1
  470. metadata +43 -24
  471. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  472. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  473. data/ext/pg_query/include/commands/variable.h +0 -38
  474. data/ext/pg_query/include/getaddrinfo.h +0 -162
  475. data/ext/pg_query/include/parser/gram.h +0 -1101
  476. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  477. data/ext/pg_query/include/utils/dynahash.h +0 -20
  478. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  479. data/ext/pg_query/include/utils/rls.h +0 -50
  480. data/ext/pg_query/include/utils/tzparser.h +0 -39
  481. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  482. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  483. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  484. data/ext/pg_query/src_common_pg_prng.c +0 -152
  485. data/ext/pg_query/src_common_string.c +0 -92
  486. data/ext/pg_query/src_port_pgsleep.c +0 -69
@@ -12,7 +12,7 @@
12
12
  * identifying statement boundaries in multi-statement source strings.
13
13
  *
14
14
  *
15
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  * src/include/nodes/parsenodes.h
@@ -22,6 +22,7 @@
22
22
  #ifndef PARSENODES_H
23
23
  #define PARSENODES_H
24
24
 
25
+ #include "common/relpath.h"
25
26
  #include "nodes/bitmapset.h"
26
27
  #include "nodes/lockoptions.h"
27
28
  #include "nodes/primnodes.h"
@@ -72,12 +73,12 @@ typedef enum SetQuantifier
72
73
 
73
74
  /*
74
75
  * Grantable rights are encoded so that we can OR them together in a bitmask.
75
- * The present representation of AclItem limits us to 16 distinct rights,
76
- * even though AclMode is defined as uint32. See utils/acl.h.
76
+ * The present representation of AclItem limits us to 32 distinct rights,
77
+ * even though AclMode is defined as uint64. See utils/acl.h.
77
78
  *
78
79
  * Caution: changing these codes breaks stored ACLs, hence forces initdb.
79
80
  */
80
- typedef uint32 AclMode; /* a bitmask of privilege bits */
81
+ typedef uint64 AclMode; /* a bitmask of privilege bits */
81
82
 
82
83
  #define ACL_INSERT (1<<0) /* for relations */
83
84
  #define ACL_SELECT (1<<1)
@@ -87,8 +88,7 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
87
88
  #define ACL_REFERENCES (1<<5)
88
89
  #define ACL_TRIGGER (1<<6)
89
90
  #define ACL_EXECUTE (1<<7) /* for functions */
90
- #define ACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and
91
- * servers */
91
+ #define ACL_USAGE (1<<8) /* for various object types */
92
92
  #define ACL_CREATE (1<<9) /* for namespaces and databases */
93
93
  #define ACL_CREATE_TEMP (1<<10) /* for databases */
94
94
  #define ACL_CONNECT (1<<11) /* for databases */
@@ -114,6 +114,11 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
114
114
  *
115
115
  * Planning converts a Query tree into a Plan tree headed by a PlannedStmt
116
116
  * node --- the Query structure is not used by the executor.
117
+ *
118
+ * All the fields ignored for the query jumbling are not semantically
119
+ * significant (such as alias names), as is ignored anything that can
120
+ * be deduced from child nodes (else we'd just be double-hashing that
121
+ * piece of information).
117
122
  */
118
123
  typedef struct Query
119
124
  {
@@ -121,41 +126,69 @@ typedef struct Query
121
126
 
122
127
  CmdType commandType; /* select|insert|update|delete|merge|utility */
123
128
 
124
- QuerySource querySource; /* where did I come from? */
129
+ /* where did I come from? */
130
+ QuerySource querySource pg_node_attr(query_jumble_ignore);
125
131
 
126
- uint64 queryId; /* query identifier (can be set by plugins) */
132
+ /*
133
+ * query identifier (can be set by plugins); ignored for equal, as it
134
+ * might not be set; also not stored. This is the result of the query
135
+ * jumble, hence ignored.
136
+ */
137
+ uint64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0));
127
138
 
128
- bool canSetTag; /* do I set the command result tag? */
139
+ /* do I set the command result tag? */
140
+ bool canSetTag pg_node_attr(query_jumble_ignore);
129
141
 
130
142
  Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
131
143
 
132
- int resultRelation; /* rtable index of target relation for
133
- * INSERT/UPDATE/DELETE/MERGE; 0 for SELECT */
134
-
135
- bool hasAggs; /* has aggregates in tlist or havingQual */
136
- bool hasWindowFuncs; /* has window functions in tlist */
137
- bool hasTargetSRFs; /* has set-returning functions in tlist */
138
- bool hasSubLinks; /* has subquery SubLink */
139
- bool hasDistinctOn; /* distinctClause is from DISTINCT ON */
140
- bool hasRecursive; /* WITH RECURSIVE was specified */
141
- bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */
142
- bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */
143
- bool hasRowSecurity; /* rewriter has applied some RLS policy */
144
-
145
- bool isReturn; /* is a RETURN statement */
144
+ /*
145
+ * rtable index of target relation for INSERT/UPDATE/DELETE/MERGE; 0 for
146
+ * SELECT. This is ignored in the query jumble as unrelated to the
147
+ * compilation of the query ID.
148
+ */
149
+ int resultRelation pg_node_attr(query_jumble_ignore);
150
+
151
+ /* has aggregates in tlist or havingQual */
152
+ bool hasAggs pg_node_attr(query_jumble_ignore);
153
+ /* has window functions in tlist */
154
+ bool hasWindowFuncs pg_node_attr(query_jumble_ignore);
155
+ /* has set-returning functions in tlist */
156
+ bool hasTargetSRFs pg_node_attr(query_jumble_ignore);
157
+ /* has subquery SubLink */
158
+ bool hasSubLinks pg_node_attr(query_jumble_ignore);
159
+ /* distinctClause is from DISTINCT ON */
160
+ bool hasDistinctOn pg_node_attr(query_jumble_ignore);
161
+ /* WITH RECURSIVE was specified */
162
+ bool hasRecursive pg_node_attr(query_jumble_ignore);
163
+ /* has INSERT/UPDATE/DELETE in WITH */
164
+ bool hasModifyingCTE pg_node_attr(query_jumble_ignore);
165
+ /* FOR [KEY] UPDATE/SHARE was specified */
166
+ bool hasForUpdate pg_node_attr(query_jumble_ignore);
167
+ /* rewriter has applied some RLS policy */
168
+ bool hasRowSecurity pg_node_attr(query_jumble_ignore);
169
+ /* is a RETURN statement */
170
+ bool isReturn pg_node_attr(query_jumble_ignore);
146
171
 
147
172
  List *cteList; /* WITH list (of CommonTableExpr's) */
148
173
 
149
174
  List *rtable; /* list of range table entries */
175
+
176
+ /*
177
+ * list of RTEPermissionInfo nodes for the rtable entries having
178
+ * perminfoindex > 0
179
+ */
180
+ List *rteperminfos pg_node_attr(query_jumble_ignore);
150
181
  FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
151
182
  * also USING clause for MERGE */
152
183
 
153
184
  List *mergeActionList; /* list of actions for MERGE (only) */
154
- bool mergeUseOuterJoin; /* whether to use outer join */
185
+ /* whether to use outer join */
186
+ bool mergeUseOuterJoin pg_node_attr(query_jumble_ignore);
155
187
 
156
188
  List *targetList; /* target list (of TargetEntry) */
157
189
 
158
- OverridingKind override; /* OVERRIDING clause */
190
+ /* OVERRIDING clause */
191
+ OverridingKind override pg_node_attr(query_jumble_ignore);
159
192
 
160
193
  OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
161
194
 
@@ -183,11 +216,14 @@ typedef struct Query
183
216
  Node *setOperations; /* set-operation tree if this is top level of
184
217
  * a UNION/INTERSECT/EXCEPT query */
185
218
 
186
- List *constraintDeps; /* a list of pg_constraint OIDs that the query
187
- * depends on to be semantically valid */
219
+ /*
220
+ * A list of pg_constraint OIDs that the query depends on to be
221
+ * semantically valid
222
+ */
223
+ List *constraintDeps pg_node_attr(query_jumble_ignore);
188
224
 
189
- List *withCheckOptions; /* a list of WithCheckOption's (added
190
- * during rewrite) */
225
+ /* a list of WithCheckOption's (added during rewrite) */
226
+ List *withCheckOptions pg_node_attr(query_jumble_ignore);
191
227
 
192
228
  /*
193
229
  * The following two fields identify the portion of the source text string
@@ -195,8 +231,10 @@ typedef struct Query
195
231
  * Queries, not in sub-queries. When not set, they might both be zero, or
196
232
  * both be -1 meaning "unknown".
197
233
  */
198
- int stmt_location; /* start location, or -1 if unknown */
199
- int stmt_len; /* length in bytes; 0 means "rest of string" */
234
+ /* start location, or -1 if unknown */
235
+ int stmt_location;
236
+ /* length in bytes; 0 means "rest of string" */
237
+ int stmt_len pg_node_attr(query_jumble_ignore);
200
238
  } Query;
201
239
 
202
240
 
@@ -287,6 +325,8 @@ typedef enum A_Expr_Kind
287
325
 
288
326
  typedef struct A_Expr
289
327
  {
328
+ pg_node_attr(custom_read_write)
329
+
290
330
  NodeTag type;
291
331
  A_Expr_Kind kind; /* see above */
292
332
  List *name; /* possibly-qualified name of operator */
@@ -297,24 +337,26 @@ typedef struct A_Expr
297
337
 
298
338
  /*
299
339
  * A_Const - a literal constant
340
+ *
341
+ * Value nodes are inline for performance. You can treat 'val' as a node,
342
+ * as in IsA(&val, Integer). 'val' is not valid if isnull is true.
300
343
  */
344
+ union ValUnion
345
+ {
346
+ Node node;
347
+ Integer ival;
348
+ Float fval;
349
+ Boolean boolval;
350
+ String sval;
351
+ BitString bsval;
352
+ };
353
+
301
354
  typedef struct A_Const
302
355
  {
303
- NodeTag type;
356
+ pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble)
304
357
 
305
- /*
306
- * Value nodes are inline for performance. You can treat 'val' as a node,
307
- * as in IsA(&val, Integer). 'val' is not valid if isnull is true.
308
- */
309
- union ValUnion
310
- {
311
- Node node;
312
- Integer ival;
313
- Float fval;
314
- Boolean boolval;
315
- String sval;
316
- BitString bsval;
317
- } val;
358
+ NodeTag type;
359
+ union ValUnion val;
318
360
  bool isnull; /* SQL NULL constant */
319
361
  int location; /* token location, or -1 if unknown */
320
362
  } A_Const;
@@ -683,6 +725,7 @@ typedef struct ColumnDef
683
725
  bool is_not_null; /* NOT NULL constraint specified? */
684
726
  bool is_from_type; /* column definition came from table type */
685
727
  char storage; /* attstorage setting, or 0 for default */
728
+ char *storage_name; /* attstorage setting name or NULL for default */
686
729
  Node *raw_default; /* default value (untransformed parse tree) */
687
730
  Node *cooked_default; /* default value (transformed expr tree) */
688
731
  char identity; /* attidentity setting */
@@ -796,6 +839,7 @@ typedef struct XmlSerialize
796
839
  XmlOptionType xmloption; /* DOCUMENT or CONTENT */
797
840
  Node *expr;
798
841
  TypeName *typeName;
842
+ bool indent; /* [NO] INDENT */
799
843
  int location; /* token location, or -1 if unknown */
800
844
  } XmlSerialize;
801
845
 
@@ -817,6 +861,13 @@ typedef struct PartitionElem
817
861
  int location; /* token location, or -1 if unknown */
818
862
  } PartitionElem;
819
863
 
864
+ typedef enum PartitionStrategy
865
+ {
866
+ PARTITION_STRATEGY_LIST = 'l',
867
+ PARTITION_STRATEGY_RANGE = 'r',
868
+ PARTITION_STRATEGY_HASH = 'h'
869
+ } PartitionStrategy;
870
+
820
871
  /*
821
872
  * PartitionSpec - parse-time representation of a partition key specification
822
873
  *
@@ -825,17 +876,11 @@ typedef struct PartitionElem
825
876
  typedef struct PartitionSpec
826
877
  {
827
878
  NodeTag type;
828
- char *strategy; /* partitioning strategy ('hash', 'list' or
829
- * 'range') */
879
+ PartitionStrategy strategy;
830
880
  List *partParams; /* List of PartitionElems */
831
881
  int location; /* token location, or -1 if unknown */
832
882
  } PartitionSpec;
833
883
 
834
- /* Internal codes for partitioning strategies */
835
- #define PARTITION_STRATEGY_HASH 'h'
836
- #define PARTITION_STRATEGY_LIST 'l'
837
- #define PARTITION_STRATEGY_RANGE 'r'
838
-
839
884
  /*
840
885
  * PartitionBoundSpec - a partition bound specification
841
886
  *
@@ -955,37 +1000,6 @@ typedef struct PartitionCmd
955
1000
  * control visibility. But it is needed by ruleutils.c to determine
956
1001
  * whether RTEs should be shown in decompiled queries.
957
1002
  *
958
- * requiredPerms and checkAsUser specify run-time access permissions
959
- * checks to be performed at query startup. The user must have *all*
960
- * of the permissions that are OR'd together in requiredPerms (zero
961
- * indicates no permissions checking). If checkAsUser is not zero,
962
- * then do the permissions checks using the access rights of that user,
963
- * not the current effective user ID. (This allows rules to act as
964
- * setuid gateways.) Permissions checks only apply to RELATION RTEs.
965
- *
966
- * For SELECT/INSERT/UPDATE permissions, if the user doesn't have
967
- * table-wide permissions then it is sufficient to have the permissions
968
- * on all columns identified in selectedCols (for SELECT) and/or
969
- * insertedCols and/or updatedCols (INSERT with ON CONFLICT DO UPDATE may
970
- * have all 3). selectedCols, insertedCols and updatedCols are bitmapsets,
971
- * which cannot have negative integer members, so we subtract
972
- * FirstLowInvalidHeapAttributeNumber from column numbers before storing
973
- * them in these fields. A whole-row Var reference is represented by
974
- * setting the bit for InvalidAttrNumber.
975
- *
976
- * updatedCols is also used in some other places, for example, to determine
977
- * which triggers to fire and in FDWs to know which changed columns they
978
- * need to ship off.
979
- *
980
- * Generated columns that are caused to be updated by an update to a base
981
- * column are listed in extraUpdatedCols. This is not considered for
982
- * permission checking, but it is useful in those places that want to know
983
- * the full set of columns being updated as opposed to only the ones the
984
- * user explicitly mentioned in the query. (There is currently no need for
985
- * an extraInsertedCols, but it could exist.) Note that extraUpdatedCols
986
- * is populated during query rewrite, NOT in the parser, since generated
987
- * columns could be added after a rule has been parsed and stored.
988
- *
989
1003
  * securityQuals is a list of security barrier quals (boolean expressions),
990
1004
  * to be tested in the listed order before returning a row from the
991
1005
  * relation. It is always NIL in parser output. Entries are added by the
@@ -1011,6 +1025,8 @@ typedef enum RTEKind
1011
1025
 
1012
1026
  typedef struct RangeTblEntry
1013
1027
  {
1028
+ pg_node_attr(custom_read_write, custom_query_jumble)
1029
+
1014
1030
  NodeTag type;
1015
1031
 
1016
1032
  RTEKind rtekind; /* see above */
@@ -1024,11 +1040,6 @@ typedef struct RangeTblEntry
1024
1040
  /*
1025
1041
  * Fields valid for a plain relation RTE (else zero):
1026
1042
  *
1027
- * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1028
- * that the tuple format of the tuplestore is the same as the referenced
1029
- * relation. This allows plans referencing AFTER trigger transition
1030
- * tables to be invalidated if the underlying table is altered.
1031
- *
1032
1043
  * rellockmode is really LOCKMODE, but it's declared int to avoid having
1033
1044
  * to include lock-related headers here. It must be RowExclusiveLock if
1034
1045
  * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if
@@ -1039,11 +1050,29 @@ typedef struct RangeTblEntry
1039
1050
  * current query; this happens if a DO ALSO rule simply scans the original
1040
1051
  * target table. We leave such RTEs with their original lockmode so as to
1041
1052
  * avoid getting an additional, lesser lock.
1053
+ *
1054
+ * perminfoindex is 1-based index of the RTEPermissionInfo belonging to
1055
+ * this RTE in the containing struct's list of same; 0 if permissions need
1056
+ * not be checked for this RTE.
1057
+ *
1058
+ * As a special case, relid, relkind, rellockmode, and perminfoindex can
1059
+ * also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we
1060
+ * convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY
1061
+ * containing the view's query. We still need to perform run-time locking
1062
+ * and permission checks on the view, even though it's not directly used
1063
+ * in the query anymore, and the most expedient way to do that is to
1064
+ * retain these fields from the old state of the RTE.
1065
+ *
1066
+ * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1067
+ * that the tuple format of the tuplestore is the same as the referenced
1068
+ * relation. This allows plans referencing AFTER trigger transition
1069
+ * tables to be invalidated if the underlying table is altered.
1042
1070
  */
1043
1071
  Oid relid; /* OID of the relation */
1044
1072
  char relkind; /* relation kind (see pg_class.relkind) */
1045
1073
  int rellockmode; /* lock level that query requires on the rel */
1046
1074
  struct TableSampleClause *tablesample; /* sampling info, or NULL */
1075
+ Index perminfoindex;
1047
1076
 
1048
1077
  /*
1049
1078
  * Fields valid for a subquery RTE (else NULL):
@@ -1067,6 +1096,14 @@ typedef struct RangeTblEntry
1067
1096
  * alias Vars are generated only for merged columns). We keep these
1068
1097
  * entries only because they're needed in expandRTE() and similar code.
1069
1098
  *
1099
+ * Vars appearing within joinaliasvars are marked with varnullingrels sets
1100
+ * that describe the nulling effects of this join and lower ones. This is
1101
+ * essential for FULL JOIN cases, because the COALESCE expression only
1102
+ * describes the semantics correctly if its inputs have been nulled by the
1103
+ * join. For other cases, it allows expandRTE() to generate a valid
1104
+ * representation of the join's output without consulting additional
1105
+ * parser state.
1106
+ *
1070
1107
  * Within a Query loaded from a stored rule, it is possible for non-merged
1071
1108
  * joinaliasvars items to be null pointers, which are placeholders for
1072
1109
  * (necessarily unreferenced) columns dropped since the rule was made.
@@ -1163,14 +1200,54 @@ typedef struct RangeTblEntry
1163
1200
  bool lateral; /* subquery, function, or values is LATERAL? */
1164
1201
  bool inh; /* inheritance requested? */
1165
1202
  bool inFromCl; /* present in FROM clause? */
1203
+ List *securityQuals; /* security barrier quals to apply, if any */
1204
+ } RangeTblEntry;
1205
+
1206
+ /*
1207
+ * RTEPermissionInfo
1208
+ * Per-relation information for permission checking. Added to the Query
1209
+ * node by the parser when adding the corresponding RTE to the query
1210
+ * range table and subsequently editorialized on by the rewriter if
1211
+ * needed after rule expansion.
1212
+ *
1213
+ * Only the relations directly mentioned in the query are checked for
1214
+ * access permissions by the core executor, so only their RTEPermissionInfos
1215
+ * are present in the Query. However, extensions may want to check inheritance
1216
+ * children too, depending on the value of rte->inh, so it's copied in 'inh'
1217
+ * for their perusal.
1218
+ *
1219
+ * requiredPerms and checkAsUser specify run-time access permissions checks
1220
+ * to be performed at query startup. The user must have *all* of the
1221
+ * permissions that are OR'd together in requiredPerms (never 0!). If
1222
+ * checkAsUser is not zero, then do the permissions checks using the access
1223
+ * rights of that user, not the current effective user ID. (This allows rules
1224
+ * to act as setuid gateways.)
1225
+ *
1226
+ * For SELECT/INSERT/UPDATE permissions, if the user doesn't have table-wide
1227
+ * permissions then it is sufficient to have the permissions on all columns
1228
+ * identified in selectedCols (for SELECT) and/or insertedCols and/or
1229
+ * updatedCols (INSERT with ON CONFLICT DO UPDATE may have all 3).
1230
+ * selectedCols, insertedCols and updatedCols are bitmapsets, which cannot have
1231
+ * negative integer members, so we subtract FirstLowInvalidHeapAttributeNumber
1232
+ * from column numbers before storing them in these fields. A whole-row Var
1233
+ * reference is represented by setting the bit for InvalidAttrNumber.
1234
+ *
1235
+ * updatedCols is also used in some other places, for example, to determine
1236
+ * which triggers to fire and in FDWs to know which changed columns they need
1237
+ * to ship off.
1238
+ */
1239
+ typedef struct RTEPermissionInfo
1240
+ {
1241
+ NodeTag type;
1242
+
1243
+ Oid relid; /* relation OID */
1244
+ bool inh; /* separately check inheritance children? */
1166
1245
  AclMode requiredPerms; /* bitmask of required access permissions */
1167
1246
  Oid checkAsUser; /* if valid, check access as this role */
1168
1247
  Bitmapset *selectedCols; /* columns needing SELECT permission */
1169
1248
  Bitmapset *insertedCols; /* columns needing INSERT permission */
1170
1249
  Bitmapset *updatedCols; /* columns needing UPDATE permission */
1171
- Bitmapset *extraUpdatedCols; /* generated columns being updated */
1172
- List *securityQuals; /* security barrier quals to apply, if any */
1173
- } RangeTblEntry;
1250
+ } RTEPermissionInfo;
1174
1251
 
1175
1252
  /*
1176
1253
  * RangeTblFunction -
@@ -1187,20 +1264,29 @@ typedef struct RangeTblEntry
1187
1264
  * time. We do however remember how many columns we thought the type had
1188
1265
  * (including dropped columns!), so that we can successfully ignore any
1189
1266
  * columns added after the query was parsed.
1267
+ *
1268
+ * The query jumbling only needs to track the function expression.
1190
1269
  */
1191
1270
  typedef struct RangeTblFunction
1192
1271
  {
1193
1272
  NodeTag type;
1194
1273
 
1195
1274
  Node *funcexpr; /* expression tree for func call */
1196
- int funccolcount; /* number of columns it contributes to RTE */
1275
+ /* number of columns it contributes to RTE */
1276
+ int funccolcount pg_node_attr(query_jumble_ignore);
1197
1277
  /* These fields record the contents of a column definition list, if any: */
1198
- List *funccolnames; /* column names (list of String) */
1199
- List *funccoltypes; /* OID list of column type OIDs */
1200
- List *funccoltypmods; /* integer list of column typmods */
1201
- List *funccolcollations; /* OID list of column collation OIDs */
1278
+ /* column names (list of String) */
1279
+ List *funccolnames pg_node_attr(query_jumble_ignore);
1280
+ /* OID list of column type OIDs */
1281
+ List *funccoltypes pg_node_attr(query_jumble_ignore);
1282
+ /* integer list of column typmods */
1283
+ List *funccoltypmods pg_node_attr(query_jumble_ignore);
1284
+ /* OID list of column collation OIDs */
1285
+ List *funccolcollations pg_node_attr(query_jumble_ignore);
1286
+
1202
1287
  /* This is set during planning for use by the executor: */
1203
- Bitmapset *funcparams; /* PARAM_EXEC Param IDs affecting this func */
1288
+ /* PARAM_EXEC Param IDs affecting this func */
1289
+ Bitmapset *funcparams pg_node_attr(query_jumble_ignore);
1204
1290
  } RangeTblFunction;
1205
1291
 
1206
1292
  /*
@@ -1307,7 +1393,8 @@ typedef struct SortGroupClause
1307
1393
  Oid eqop; /* the equality operator ('=' op) */
1308
1394
  Oid sortop; /* the ordering operator ('<' op), or 0 */
1309
1395
  bool nulls_first; /* do NULLs come before normal values? */
1310
- bool hashable; /* can eqop be implemented by hashing? */
1396
+ /* can eqop be implemented by hashing? */
1397
+ bool hashable pg_node_attr(query_jumble_ignore);
1311
1398
  } SortGroupClause;
1312
1399
 
1313
1400
  /*
@@ -1372,7 +1459,7 @@ typedef enum GroupingSetKind
1372
1459
  typedef struct GroupingSet
1373
1460
  {
1374
1461
  NodeTag type;
1375
- GroupingSetKind kind;
1462
+ GroupingSetKind kind pg_node_attr(query_jumble_ignore);
1376
1463
  List *content;
1377
1464
  int location;
1378
1465
  } GroupingSet;
@@ -1393,25 +1480,38 @@ typedef struct GroupingSet
1393
1480
  * When refname isn't null, the partitionClause is always copied from there;
1394
1481
  * the orderClause might or might not be copied (see copiedOrder); the framing
1395
1482
  * options are never copied, per spec.
1483
+ *
1484
+ * The information relevant for the query jumbling is the partition clause
1485
+ * type and its bounds.
1396
1486
  */
1397
1487
  typedef struct WindowClause
1398
1488
  {
1399
1489
  NodeTag type;
1400
- char *name; /* window name (NULL in an OVER clause) */
1401
- char *refname; /* referenced window name, if any */
1490
+ /* window name (NULL in an OVER clause) */
1491
+ char *name pg_node_attr(query_jumble_ignore);
1492
+ /* referenced window name, if any */
1493
+ char *refname pg_node_attr(query_jumble_ignore);
1402
1494
  List *partitionClause; /* PARTITION BY list */
1403
- List *orderClause; /* ORDER BY list */
1495
+ /* ORDER BY list */
1496
+ List *orderClause;
1404
1497
  int frameOptions; /* frame_clause options, see WindowDef */
1405
1498
  Node *startOffset; /* expression for starting bound, if any */
1406
1499
  Node *endOffset; /* expression for ending bound, if any */
1407
- List *runCondition; /* qual to help short-circuit execution */
1408
- Oid startInRangeFunc; /* in_range function for startOffset */
1409
- Oid endInRangeFunc; /* in_range function for endOffset */
1410
- Oid inRangeColl; /* collation for in_range tests */
1411
- bool inRangeAsc; /* use ASC sort order for in_range tests? */
1412
- bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
1500
+ /* qual to help short-circuit execution */
1501
+ List *runCondition pg_node_attr(query_jumble_ignore);
1502
+ /* in_range function for startOffset */
1503
+ Oid startInRangeFunc pg_node_attr(query_jumble_ignore);
1504
+ /* in_range function for endOffset */
1505
+ Oid endInRangeFunc pg_node_attr(query_jumble_ignore);
1506
+ /* collation for in_range tests */
1507
+ Oid inRangeColl pg_node_attr(query_jumble_ignore);
1508
+ /* use ASC sort order for in_range tests? */
1509
+ bool inRangeAsc pg_node_attr(query_jumble_ignore);
1510
+ /* nulls sort first for in_range tests? */
1511
+ bool inRangeNullsFirst pg_node_attr(query_jumble_ignore);
1413
1512
  Index winref; /* ID referenced by window functions */
1414
- bool copiedOrder; /* did we copy orderClause from refname? */
1513
+ /* did we copy orderClause from refname? */
1514
+ bool copiedOrder pg_node_attr(query_jumble_ignore);
1415
1515
  } WindowClause;
1416
1516
 
1417
1517
  /*
@@ -1521,22 +1621,37 @@ typedef struct CTECycleClause
1521
1621
  typedef struct CommonTableExpr
1522
1622
  {
1523
1623
  NodeTag type;
1524
- char *ctename; /* query name (never qualified) */
1525
- List *aliascolnames; /* optional list of column names */
1624
+
1625
+ /*
1626
+ * Query name (never qualified). The string name is included in the query
1627
+ * jumbling because RTE_CTE RTEs need it.
1628
+ */
1629
+ char *ctename;
1630
+ /* optional list of column names */
1631
+ List *aliascolnames pg_node_attr(query_jumble_ignore);
1526
1632
  CTEMaterialize ctematerialized; /* is this an optimization fence? */
1527
1633
  /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */
1528
1634
  Node *ctequery; /* the CTE's subquery */
1529
- CTESearchClause *search_clause;
1530
- CTECycleClause *cycle_clause;
1635
+ CTESearchClause *search_clause pg_node_attr(query_jumble_ignore);
1636
+ CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore);
1531
1637
  int location; /* token location, or -1 if unknown */
1532
1638
  /* These fields are set during parse analysis: */
1533
- bool cterecursive; /* is this CTE actually recursive? */
1534
- int cterefcount; /* number of RTEs referencing this CTE
1535
- * (excluding internal self-references) */
1536
- List *ctecolnames; /* list of output column names */
1537
- List *ctecoltypes; /* OID list of output column type OIDs */
1538
- List *ctecoltypmods; /* integer list of output column typmods */
1539
- List *ctecolcollations; /* OID list of column collation OIDs */
1639
+ /* is this CTE actually recursive? */
1640
+ bool cterecursive pg_node_attr(query_jumble_ignore);
1641
+
1642
+ /*
1643
+ * Number of RTEs referencing this CTE (excluding internal
1644
+ * self-references), irrelevant for query jumbling.
1645
+ */
1646
+ int cterefcount pg_node_attr(query_jumble_ignore);
1647
+ /* list of output column names */
1648
+ List *ctecolnames pg_node_attr(query_jumble_ignore);
1649
+ /* OID list of output column type OIDs */
1650
+ List *ctecoltypes pg_node_attr(query_jumble_ignore);
1651
+ /* integer list of output column typmods */
1652
+ List *ctecoltypmods pg_node_attr(query_jumble_ignore);
1653
+ /* OID list of column collation OIDs */
1654
+ List *ctecolcollations pg_node_attr(query_jumble_ignore);
1540
1655
  } CommonTableExpr;
1541
1656
 
1542
1657
  /* Convenience macro to get the output tlist of a CTE's query */
@@ -1573,10 +1688,12 @@ typedef struct MergeAction
1573
1688
  NodeTag type;
1574
1689
  bool matched; /* true=MATCHED, false=NOT MATCHED */
1575
1690
  CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1576
- OverridingKind override; /* OVERRIDING clause */
1691
+ /* OVERRIDING clause */
1692
+ OverridingKind override pg_node_attr(query_jumble_ignore);
1577
1693
  Node *qual; /* transformed WHEN conditions */
1578
1694
  List *targetList; /* the target list (of TargetEntry) */
1579
- List *updateColnos; /* target attribute numbers of an UPDATE */
1695
+ /* target attribute numbers of an UPDATE */
1696
+ List *updateColnos pg_node_attr(query_jumble_ignore);
1580
1697
  } MergeAction;
1581
1698
 
1582
1699
  /*
@@ -1595,6 +1712,113 @@ typedef struct TriggerTransition
1595
1712
  bool isTable;
1596
1713
  } TriggerTransition;
1597
1714
 
1715
+ /* Nodes for SQL/JSON support */
1716
+
1717
+ /*
1718
+ * JsonOutput -
1719
+ * representation of JSON output clause (RETURNING type [FORMAT format])
1720
+ */
1721
+ typedef struct JsonOutput
1722
+ {
1723
+ NodeTag type;
1724
+ TypeName *typeName; /* RETURNING type name, if specified */
1725
+ JsonReturning *returning; /* RETURNING FORMAT clause and type Oids */
1726
+ } JsonOutput;
1727
+
1728
+ /*
1729
+ * JsonKeyValue -
1730
+ * untransformed representation of JSON object key-value pair for
1731
+ * JSON_OBJECT() and JSON_OBJECTAGG()
1732
+ */
1733
+ typedef struct JsonKeyValue
1734
+ {
1735
+ NodeTag type;
1736
+ Expr *key; /* key expression */
1737
+ JsonValueExpr *value; /* JSON value expression */
1738
+ } JsonKeyValue;
1739
+
1740
+ /*
1741
+ * JsonObjectConstructor -
1742
+ * untransformed representation of JSON_OBJECT() constructor
1743
+ */
1744
+ typedef struct JsonObjectConstructor
1745
+ {
1746
+ NodeTag type;
1747
+ List *exprs; /* list of JsonKeyValue pairs */
1748
+ JsonOutput *output; /* RETURNING clause, if specified */
1749
+ bool absent_on_null; /* skip NULL values? */
1750
+ bool unique; /* check key uniqueness? */
1751
+ int location; /* token location, or -1 if unknown */
1752
+ } JsonObjectConstructor;
1753
+
1754
+ /*
1755
+ * JsonArrayConstructor -
1756
+ * untransformed representation of JSON_ARRAY(element,...) constructor
1757
+ */
1758
+ typedef struct JsonArrayConstructor
1759
+ {
1760
+ NodeTag type;
1761
+ List *exprs; /* list of JsonValueExpr elements */
1762
+ JsonOutput *output; /* RETURNING clause, if specified */
1763
+ bool absent_on_null; /* skip NULL elements? */
1764
+ int location; /* token location, or -1 if unknown */
1765
+ } JsonArrayConstructor;
1766
+
1767
+ /*
1768
+ * JsonArrayQueryConstructor -
1769
+ * untransformed representation of JSON_ARRAY(subquery) constructor
1770
+ */
1771
+ typedef struct JsonArrayQueryConstructor
1772
+ {
1773
+ NodeTag type;
1774
+ Node *query; /* subquery */
1775
+ JsonOutput *output; /* RETURNING clause, if specified */
1776
+ JsonFormat *format; /* FORMAT clause for subquery, if specified */
1777
+ bool absent_on_null; /* skip NULL elements? */
1778
+ int location; /* token location, or -1 if unknown */
1779
+ } JsonArrayQueryConstructor;
1780
+
1781
+ /*
1782
+ * JsonAggConstructor -
1783
+ * common fields of untransformed representation of
1784
+ * JSON_ARRAYAGG() and JSON_OBJECTAGG()
1785
+ */
1786
+ typedef struct JsonAggConstructor
1787
+ {
1788
+ NodeTag type;
1789
+ JsonOutput *output; /* RETURNING clause, if any */
1790
+ Node *agg_filter; /* FILTER clause, if any */
1791
+ List *agg_order; /* ORDER BY clause, if any */
1792
+ struct WindowDef *over; /* OVER clause, if any */
1793
+ int location; /* token location, or -1 if unknown */
1794
+ } JsonAggConstructor;
1795
+
1796
+ /*
1797
+ * JsonObjectAgg -
1798
+ * untransformed representation of JSON_OBJECTAGG()
1799
+ */
1800
+ typedef struct JsonObjectAgg
1801
+ {
1802
+ NodeTag type;
1803
+ JsonAggConstructor *constructor; /* common fields */
1804
+ JsonKeyValue *arg; /* object key-value pair */
1805
+ bool absent_on_null; /* skip NULL values? */
1806
+ bool unique; /* check key uniqueness? */
1807
+ } JsonObjectAgg;
1808
+
1809
+ /*
1810
+ * JsonArrayAgg -
1811
+ * untransformed representation of JSON_ARRAYAGG()
1812
+ */
1813
+ typedef struct JsonArrayAgg
1814
+ {
1815
+ NodeTag type;
1816
+ JsonAggConstructor *constructor; /* common fields */
1817
+ JsonValueExpr *arg; /* array element expression */
1818
+ bool absent_on_null; /* skip NULL elements? */
1819
+ } JsonArrayAgg;
1820
+
1821
+
1598
1822
  /*****************************************************************************
1599
1823
  * Raw Grammar Output Statements
1600
1824
  *****************************************************************************/
@@ -1610,9 +1834,14 @@ typedef struct TriggerTransition
1610
1834
  *
1611
1835
  * stmt_location/stmt_len identify the portion of the source text string
1612
1836
  * containing this raw statement (useful for multi-statement strings).
1837
+ *
1838
+ * This is irrelevant for query jumbling, as this is not used in parsed
1839
+ * queries.
1613
1840
  */
1614
1841
  typedef struct RawStmt
1615
1842
  {
1843
+ pg_node_attr(no_query_jumble)
1844
+
1616
1845
  NodeTag type;
1617
1846
  Node *stmt; /* raw parse tree */
1618
1847
  int stmt_location; /* start location, or -1 if unknown */
@@ -1785,11 +2014,15 @@ typedef struct SetOperationStmt
1785
2014
  Node *rarg; /* right child */
1786
2015
  /* Eventually add fields for CORRESPONDING spec here */
1787
2016
 
1788
- /* Fields derived during parse analysis: */
1789
- List *colTypes; /* OID list of output column type OIDs */
1790
- List *colTypmods; /* integer list of output column typmods */
1791
- List *colCollations; /* OID list of output column collation OIDs */
1792
- List *groupClauses; /* a list of SortGroupClause's */
2017
+ /* Fields derived during parse analysis (irrelevant for query jumbling): */
2018
+ /* OID list of output column type OIDs */
2019
+ List *colTypes pg_node_attr(query_jumble_ignore);
2020
+ /* integer list of output column typmods */
2021
+ List *colTypmods pg_node_attr(query_jumble_ignore);
2022
+ /* OID list of output column collation OIDs */
2023
+ List *colCollations pg_node_attr(query_jumble_ignore);
2024
+ /* a list of SortGroupClause's */
2025
+ List *groupClauses pg_node_attr(query_jumble_ignore);
1793
2026
  /* groupClauses is NIL if UNION ALL, but must be set otherwise */
1794
2027
  } SetOperationStmt;
1795
2028
 
@@ -1938,7 +2171,6 @@ typedef struct AlterTableStmt
1938
2171
  typedef enum AlterTableType
1939
2172
  {
1940
2173
  AT_AddColumn, /* add column */
1941
- AT_AddColumnRecurse, /* internal to commands/tablecmds.c */
1942
2174
  AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
1943
2175
  AT_ColumnDefault, /* alter column default */
1944
2176
  AT_CookedColumnDefault, /* add a pre-cooked column default */
@@ -1952,19 +2184,15 @@ typedef enum AlterTableType
1952
2184
  AT_SetStorage, /* alter column set storage */
1953
2185
  AT_SetCompression, /* alter column set compression */
1954
2186
  AT_DropColumn, /* drop column */
1955
- AT_DropColumnRecurse, /* internal to commands/tablecmds.c */
1956
2187
  AT_AddIndex, /* add index */
1957
2188
  AT_ReAddIndex, /* internal to commands/tablecmds.c */
1958
2189
  AT_AddConstraint, /* add constraint */
1959
- AT_AddConstraintRecurse, /* internal to commands/tablecmds.c */
1960
2190
  AT_ReAddConstraint, /* internal to commands/tablecmds.c */
1961
2191
  AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
1962
2192
  AT_AlterConstraint, /* alter constraint */
1963
2193
  AT_ValidateConstraint, /* validate constraint */
1964
- AT_ValidateConstraintRecurse, /* internal to commands/tablecmds.c */
1965
2194
  AT_AddIndexConstraint, /* add constraint using existing index */
1966
2195
  AT_DropConstraint, /* drop constraint */
1967
- AT_DropConstraintRecurse, /* internal to commands/tablecmds.c */
1968
2196
  AT_ReAddComment, /* internal to commands/tablecmds.c */
1969
2197
  AT_AlterColumnType, /* alter column type */
1970
2198
  AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
@@ -2153,7 +2381,7 @@ typedef struct GrantRoleStmt
2153
2381
  List *granted_roles; /* list of roles to be granted/revoked */
2154
2382
  List *grantee_roles; /* list of member roles to add/delete */
2155
2383
  bool is_grant; /* true = GRANT, false = REVOKE */
2156
- bool admin_opt; /* with admin option */
2384
+ List *opt; /* options e.g. WITH GRANT OPTION */
2157
2385
  RoleSpec *grantor; /* set grantor to other than current role */
2158
2386
  DropBehavior behavior; /* drop behavior (for REVOKE) */
2159
2387
  } GrantRoleStmt;
@@ -2321,6 +2549,8 @@ typedef enum ConstrType /* types of constraints */
2321
2549
 
2322
2550
  typedef struct Constraint
2323
2551
  {
2552
+ pg_node_attr(custom_read_write)
2553
+
2324
2554
  NodeTag type;
2325
2555
  ConstrType contype; /* see above */
2326
2556
 
@@ -2961,10 +3191,10 @@ typedef struct IndexStmt
2961
3191
  List *excludeOpNames; /* exclusion operator names, or NIL if none */
2962
3192
  char *idxcomment; /* comment to apply to index, or NULL */
2963
3193
  Oid indexOid; /* OID of an existing index, if any */
2964
- Oid oldNode; /* relfilenode of existing storage, if any */
2965
- SubTransactionId oldCreateSubid; /* rd_createSubid of oldNode */
2966
- SubTransactionId oldFirstRelfilenodeSubid; /* rd_firstRelfilenodeSubid of
2967
- * oldNode */
3194
+ RelFileNumber oldNumber; /* relfilenumber of existing storage, if any */
3195
+ SubTransactionId oldCreateSubid; /* rd_createSubid of oldNumber */
3196
+ SubTransactionId oldFirstRelfilelocatorSubid; /* rd_firstRelfilelocatorSubid
3197
+ * of oldNumber */
2968
3198
  bool unique; /* is index unique? */
2969
3199
  bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2970
3200
  bool primary; /* is index a primary key? */
@@ -3080,6 +3310,8 @@ typedef struct DoStmt
3080
3310
 
3081
3311
  typedef struct InlineCodeBlock
3082
3312
  {
3313
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3314
+
3083
3315
  NodeTag type;
3084
3316
  char *source_text; /* source text of anonymous code block */
3085
3317
  Oid langOid; /* OID of selected language */
@@ -3094,18 +3326,24 @@ typedef struct InlineCodeBlock
3094
3326
  * list contains copies of the expressions for all output arguments, in the
3095
3327
  * order of the procedure's declared arguments. (outargs is never evaluated,
3096
3328
  * but is useful to the caller as a reference for what to assign to.)
3329
+ * The transformed call state is not relevant in the query jumbling, only the
3330
+ * function call is.
3097
3331
  * ----------------------
3098
3332
  */
3099
3333
  typedef struct CallStmt
3100
3334
  {
3101
3335
  NodeTag type;
3102
3336
  FuncCall *funccall; /* from the parser */
3103
- FuncExpr *funcexpr; /* transformed call, with only input args */
3104
- List *outargs; /* transformed output-argument expressions */
3337
+ /* transformed call, with only input args */
3338
+ FuncExpr *funcexpr pg_node_attr(query_jumble_ignore);
3339
+ /* transformed output-argument expressions */
3340
+ List *outargs pg_node_attr(query_jumble_ignore);
3105
3341
  } CallStmt;
3106
3342
 
3107
3343
  typedef struct CallContext
3108
3344
  {
3345
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3346
+
3109
3347
  NodeTag type;
3110
3348
  bool atomic;
3111
3349
  } CallContext;