pg_query 5.1.0 → 6.0.0

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 (479) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/pg_query.h +4 -3
  6. data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
  7. data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
  8. data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
  9. data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
  10. data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
  11. data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
  12. data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
  13. data/ext/pg_query/include/postgres/access/amapi.h +10 -3
  14. data/ext/pg_query/include/postgres/access/attmap.h +1 -1
  15. data/ext/pg_query/include/postgres/access/attnum.h +1 -1
  16. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  17. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  18. data/ext/pg_query/include/postgres/access/clog.h +2 -3
  19. data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
  20. data/ext/pg_query/include/postgres/access/detoast.h +1 -1
  21. data/ext/pg_query/include/postgres/access/genam.h +8 -4
  22. data/ext/pg_query/include/postgres/access/gin.h +1 -1
  23. data/ext/pg_query/include/postgres/access/htup.h +1 -1
  24. data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
  25. data/ext/pg_query/include/postgres/access/itup.h +3 -3
  26. data/ext/pg_query/include/postgres/access/parallel.h +1 -2
  27. data/ext/pg_query/include/postgres/access/printtup.h +1 -1
  28. data/ext/pg_query/include/postgres/access/relation.h +1 -1
  29. data/ext/pg_query/include/postgres/access/relscan.h +1 -1
  30. data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
  31. data/ext/pg_query/include/postgres/access/sdir.h +1 -1
  32. data/ext/pg_query/include/postgres/access/skey.h +1 -1
  33. data/ext/pg_query/include/postgres/access/slru.h +221 -0
  34. data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
  35. data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
  36. data/ext/pg_query/include/postgres/access/table.h +1 -1
  37. data/ext/pg_query/include/postgres/access/tableam.h +33 -24
  38. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  39. data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
  40. data/ext/pg_query/include/postgres/access/transam.h +7 -7
  41. data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
  42. data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
  43. data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
  44. data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
  45. data/ext/pg_query/include/postgres/access/twophase.h +2 -2
  46. data/ext/pg_query/include/postgres/access/xact.h +5 -5
  47. data/ext/pg_query/include/postgres/access/xlog.h +20 -12
  48. data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
  49. data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
  50. data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
  51. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
  52. data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
  53. data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
  54. data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
  55. data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
  56. data/ext/pg_query/include/postgres/c.h +31 -36
  57. data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
  58. data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
  59. data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
  60. data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
  61. data/ext/pg_query/include/postgres/catalog/index.h +22 -18
  62. data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
  63. data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
  64. data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
  65. data/ext/pg_query/include/postgres/catalog/objectaddress.h +1 -1
  66. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
  67. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
  68. data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
  69. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
  70. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
  71. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
  72. data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
  73. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
  74. data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
  75. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
  76. data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
  77. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
  78. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
  79. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
  81. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
  82. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
  83. data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
  84. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
  85. data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
  86. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
  87. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
  88. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
  89. data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
  90. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
  91. data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
  92. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
  93. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
  94. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
  95. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
  96. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
  97. data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
  98. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
  99. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
  100. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
  101. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
  102. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
  103. data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
  104. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
  105. data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
  106. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
  107. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
  108. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
  109. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
  110. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
  111. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
  112. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
  113. data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
  114. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
  115. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
  116. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
  117. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
  118. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
  119. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
  120. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
  121. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
  122. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
  125. data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
  126. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
  127. data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
  128. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  129. data/ext/pg_query/include/postgres/commands/async.h +2 -6
  130. data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
  131. data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
  132. data/ext/pg_query/include/postgres/commands/event_trigger.h +5 -2
  133. data/ext/pg_query/include/postgres/commands/explain.h +19 -3
  134. data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
  135. data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
  136. data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
  137. data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
  138. data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
  139. data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
  140. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  141. data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
  142. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +453 -0
  143. data/ext/pg_query/include/postgres/common/int.h +79 -4
  144. data/ext/pg_query/include/postgres/common/keywords.h +1 -1
  145. data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
  146. data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
  147. data/ext/pg_query/include/postgres/common/relpath.h +4 -4
  148. data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
  149. data/ext/pg_query/include/postgres/common/sha2.h +1 -1
  150. data/ext/pg_query/include/postgres/common/string.h +1 -1
  151. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
  152. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
  153. data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
  154. data/ext/pg_query/include/postgres/datatype/timestamp.h +28 -2
  155. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
  156. data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
  157. data/ext/pg_query/include/postgres/executor/execdesc.h +1 -1
  158. data/ext/pg_query/include/postgres/executor/executor.h +6 -5
  159. data/ext/pg_query/include/postgres/executor/functions.h +2 -1
  160. data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
  161. data/ext/pg_query/include/postgres/executor/spi.h +2 -8
  162. data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
  163. data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
  164. data/ext/pg_query/include/postgres/fmgr.h +2 -2
  165. data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
  166. data/ext/pg_query/include/postgres/funcapi.h +2 -2
  167. data/ext/pg_query/include/postgres/gram.h +871 -830
  168. data/ext/pg_query/include/postgres/gramparse.h +1 -1
  169. data/ext/pg_query/include/postgres/jit/jit.h +4 -3
  170. data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
  171. data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
  172. data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
  173. data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
  174. data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
  175. data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
  176. data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
  177. data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
  178. data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
  179. data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
  180. data/ext/pg_query/include/postgres/libpq/libpq-be.h +29 -25
  181. data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
  182. data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
  183. data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
  184. data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
  185. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  186. data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
  187. data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
  188. data/ext/pg_query/include/postgres/mb/pg_wchar.h +102 -82
  189. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
  190. data/ext/pg_query/include/postgres/miscadmin.h +64 -52
  191. data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
  192. data/ext/pg_query/include/postgres/nodes/execnodes.h +109 -25
  193. data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
  194. data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
  195. data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
  196. data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
  197. data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
  198. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
  199. data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
  200. data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
  201. data/ext/pg_query/include/postgres/nodes/params.h +1 -1
  202. data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
  203. data/ext/pg_query/include/postgres/nodes/pathnodes.h +60 -9
  204. data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
  205. data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
  206. data/ext/pg_query/include/postgres/nodes/primnodes.h +344 -50
  207. data/ext/pg_query/include/postgres/nodes/print.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
  209. data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
  210. data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
  211. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
  212. data/ext/pg_query/include/postgres/nodes/value.h +1 -1
  213. data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
  214. data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
  215. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
  216. data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
  217. data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
  218. data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
  219. data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
  220. data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
  221. data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
  222. data/ext/pg_query/include/postgres/parser/parse_coerce.h +2 -2
  223. data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
  224. data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
  225. data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
  226. data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
  227. data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
  228. data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
  229. data/ext/pg_query/include/postgres/parser/parser.h +3 -3
  230. data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
  231. data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
  232. data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
  233. data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
  234. data/ext/pg_query/include/postgres/pg_config.h +34 -34
  235. data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
  236. data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
  237. data/ext/pg_query/include/postgres/pg_trace.h +1 -1
  238. data/ext/pg_query/include/postgres/pgstat.h +13 -11
  239. data/ext/pg_query/include/postgres/pgtime.h +1 -1
  240. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
  241. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
  242. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
  243. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
  244. data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
  245. data/ext/pg_query/include/postgres/plpgsql.h +15 -13
  246. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
  247. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
  249. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
  250. data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
  251. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
  252. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
  253. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
  254. data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
  255. data/ext/pg_query/include/postgres/port/atomics.h +93 -6
  256. data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
  257. data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
  258. data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
  259. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  260. data/ext/pg_query/include/postgres/port/simd.h +48 -1
  261. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
  262. data/ext/pg_query/include/postgres/port/win32_port.h +1 -11
  263. data/ext/pg_query/include/postgres/port.h +7 -3
  264. data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
  265. data/ext/pg_query/include/postgres/postgres.h +1 -1
  266. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
  267. data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
  268. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
  269. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
  270. data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
  271. data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
  272. data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
  273. data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
  274. data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
  275. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  276. data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
  277. data/ext/pg_query/include/postgres/regex/regex.h +92 -9
  278. data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
  279. data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
  280. data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
  281. data/ext/pg_query/include/postgres/replication/origin.h +1 -1
  282. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +18 -28
  283. data/ext/pg_query/include/postgres/replication/slot.h +41 -5
  284. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  285. data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
  286. data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
  287. data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
  288. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
  289. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
  290. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
  291. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
  292. data/ext/pg_query/include/postgres/storage/block.h +1 -1
  293. data/ext/pg_query/include/postgres/storage/buf.h +1 -1
  294. data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
  295. data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
  296. data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
  297. data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
  298. data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
  299. data/ext/pg_query/include/postgres/storage/fd.h +30 -13
  300. data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
  301. data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
  302. data/ext/pg_query/include/postgres/storage/item.h +1 -1
  303. data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
  304. data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
  305. data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
  306. data/ext/pg_query/include/postgres/storage/latch.h +4 -2
  307. data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
  308. data/ext/pg_query/include/postgres/storage/lock.h +19 -19
  309. data/ext/pg_query/include/postgres/storage/lockdefs.h +1 -1
  310. data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
  311. data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
  312. data/ext/pg_query/include/postgres/storage/off.h +1 -1
  313. data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
  314. data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
  315. data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
  316. data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
  317. data/ext/pg_query/include/postgres/storage/proc.h +48 -23
  318. data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
  319. data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
  320. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  321. data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
  322. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  323. data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
  324. data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
  325. data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
  326. data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
  327. data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
  328. data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
  329. data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
  330. data/ext/pg_query/include/postgres/storage/smgr.h +41 -27
  331. data/ext/pg_query/include/postgres/storage/spin.h +1 -1
  332. data/ext/pg_query/include/postgres/storage/standby.h +13 -3
  333. data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
  334. data/ext/pg_query/include/postgres/storage/sync.h +4 -4
  335. data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
  336. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
  337. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
  338. data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
  339. data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
  340. data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
  341. data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
  342. data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
  343. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
  344. data/ext/pg_query/include/postgres/utils/acl.h +19 -7
  345. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
  346. data/ext/pg_query/include/postgres/utils/array.h +1 -2
  347. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  348. data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
  349. data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
  350. data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
  351. data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
  352. data/ext/pg_query/include/postgres/utils/catcache.h +5 -6
  353. data/ext/pg_query/include/postgres/utils/date.h +1 -1
  354. data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
  355. data/ext/pg_query/include/postgres/utils/datum.h +1 -1
  356. data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
  357. data/ext/pg_query/include/postgres/utils/elog.h +3 -8
  358. data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
  359. data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
  360. data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
  361. data/ext/pg_query/include/postgres/utils/float.h +1 -1
  362. data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
  363. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
  364. data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
  365. data/ext/pg_query/include/postgres/utils/guc.h +20 -6
  366. data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
  367. data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
  368. data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
  369. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  370. data/ext/pg_query/include/postgres/utils/inval.h +1 -1
  371. data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
  372. data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
  373. data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
  374. data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
  375. data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
  376. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
  377. data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
  378. data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
  379. data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
  380. data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
  381. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +11 -17
  382. data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
  383. data/ext/pg_query/include/postgres/utils/portal.h +9 -9
  384. data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
  385. data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
  386. data/ext/pg_query/include/postgres/utils/rel.h +14 -15
  387. data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
  388. data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
  389. data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
  390. data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
  391. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
  392. data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
  393. data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
  394. data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
  395. data/ext/pg_query/include/postgres/utils/syscache.h +2 -98
  396. data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
  397. data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
  398. data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
  399. data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
  400. data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
  401. data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
  402. data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
  403. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  404. data/ext/pg_query/include/postgres/utils/xml.h +4 -4
  405. data/ext/pg_query/include/postgres/varatt.h +1 -1
  406. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
  407. data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
  408. data/ext/pg_query/pg_query.pb-c.c +6598 -3739
  409. data/ext/pg_query/pg_query_normalize.c +42 -1
  410. data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
  411. data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
  412. data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
  413. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -1
  414. data/ext/pg_query/pg_query_scan.c +1 -1
  415. data/ext/pg_query/postgres_deparse.c +409 -21
  416. data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
  417. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  418. data/ext/pg_query/src_backend_commands_define.c +2 -3
  419. data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
  420. data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
  421. data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
  422. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  423. data/ext/pg_query/src_backend_nodes_list.c +3 -7
  424. data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
  425. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
  426. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  427. data/ext/pg_query/src_backend_parser_gram.c +34490 -32135
  428. data/ext/pg_query/src_backend_parser_parser.c +8 -8
  429. data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
  430. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  431. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  432. data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
  433. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  434. data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
  435. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  436. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  437. data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
  438. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
  439. data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
  440. data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
  441. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
  442. data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
  443. data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
  444. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
  445. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
  446. data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
  447. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  448. data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
  449. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
  450. data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
  451. data/ext/pg_query/src_common_encnames.c +43 -44
  452. data/ext/pg_query/src_common_hashfn.c +1 -1
  453. data/ext/pg_query/src_common_keywords.c +1 -1
  454. data/ext/pg_query/src_common_kwlist_d.h +511 -466
  455. data/ext/pg_query/src_common_kwlookup.c +1 -1
  456. data/ext/pg_query/src_common_psprintf.c +3 -3
  457. data/ext/pg_query/src_common_stringinfo.c +18 -1
  458. data/ext/pg_query/src_common_wchar.c +45 -108
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
  462. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  463. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  464. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  465. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
  466. data/ext/pg_query/src_port_pg_bitutils.c +173 -28
  467. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  468. data/ext/pg_query/src_port_snprintf.c +1 -1
  469. data/ext/pg_query/src_port_strerror.c +1 -3
  470. data/ext/pg_query/src_port_strlcpy.c +1 -1
  471. data/lib/pg_query/param_refs.rb +1 -1
  472. data/lib/pg_query/pg_query_pb.rb +26 -3
  473. data/lib/pg_query/treewalker.rb +38 -11
  474. data/lib/pg_query/truncate.rb +1 -1
  475. data/lib/pg_query/version.rb +1 -1
  476. metadata +25 -11
  477. data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
  478. data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
  479. data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
@@ -6,7 +6,7 @@
6
6
  * We don't support copying RelOptInfo, IndexOptInfo, or Path nodes.
7
7
  * There are some subsidiary structs that are useful to copy, though.
8
8
  *
9
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/nodes/pathnodes.h
@@ -76,7 +76,7 @@ typedef enum UpperRelationKind
76
76
  UPPERREL_PARTIAL_DISTINCT, /* result of partial "SELECT DISTINCT", if any */
77
77
  UPPERREL_DISTINCT, /* result of "SELECT DISTINCT", if any */
78
78
  UPPERREL_ORDERED, /* result of ORDER BY, if any */
79
- UPPERREL_FINAL /* result of any remaining top-level actions */
79
+ UPPERREL_FINAL, /* result of any remaining top-level actions */
80
80
  /* NB: UPPERREL_FINAL must be last enum entry; it's used to size arrays */
81
81
  } UpperRelationKind;
82
82
 
@@ -104,6 +104,9 @@ typedef struct PlannerGlobal
104
104
  /* Plans for SubPlan nodes */
105
105
  List *subplans;
106
106
 
107
+ /* Paths from which the SubPlan Plans were made */
108
+ List *subpaths;
109
+
107
110
  /* PlannerInfos for SubPlan nodes */
108
111
  List *subroots pg_node_attr(read_write_ignore);
109
112
 
@@ -397,6 +400,8 @@ struct PlannerInfo
397
400
  List *distinct_pathkeys;
398
401
  /* sortClause pathkeys, if any */
399
402
  List *sort_pathkeys;
403
+ /* set operator pathkeys, if any */
404
+ List *setop_pathkeys;
400
405
 
401
406
  /* Canonicalised partition schemes used in the query. */
402
407
  List *part_schemes pg_node_attr(read_write_ignore);
@@ -421,7 +426,11 @@ struct PlannerInfo
421
426
  * items to be proven redundant, implying that there is only one group
422
427
  * containing all the query's rows. Hence, if you want to check whether
423
428
  * GROUP BY was specified, test for nonempty parse->groupClause, not for
424
- * nonempty processed_groupClause.
429
+ * nonempty processed_groupClause. Optimizer chooses specific order of
430
+ * group-by clauses during the upper paths generation process, attempting
431
+ * to use different strategies to minimize number of sorts or engage
432
+ * incremental sort. See preprocess_groupclause() and
433
+ * get_useful_group_keys_orderings() for details.
425
434
  *
426
435
  * Currently, when grouping sets are specified we do not attempt to
427
436
  * optimize the groupClause, so that processed_groupClause will be
@@ -814,7 +823,7 @@ typedef enum RelOptKind
814
823
  RELOPT_OTHER_MEMBER_REL,
815
824
  RELOPT_OTHER_JOINREL,
816
825
  RELOPT_UPPER_REL,
817
- RELOPT_OTHER_UPPER_REL
826
+ RELOPT_OTHER_UPPER_REL,
818
827
  } RelOptKind;
819
828
 
820
829
  /*
@@ -913,6 +922,12 @@ typedef struct RelOptInfo
913
922
  Relids *attr_needed pg_node_attr(read_write_ignore);
914
923
  /* array indexed [min_attr .. max_attr] */
915
924
  int32 *attr_widths pg_node_attr(read_write_ignore);
925
+
926
+ /*
927
+ * Zero-based set containing attnums of NOT NULL columns. Not populated
928
+ * for rels corresponding to non-partitioned inh==true RTEs.
929
+ */
930
+ Bitmapset *notnullattnums;
916
931
  /* relids of outer joins that can null this baserel */
917
932
  Relids nulling_relids;
918
933
  /* LATERAL Vars and PHVs referenced by rel */
@@ -1456,6 +1471,23 @@ typedef struct PathKey
1456
1471
  bool pk_nulls_first; /* do NULLs come before normal values? */
1457
1472
  } PathKey;
1458
1473
 
1474
+ /*
1475
+ * Contains an order of group-by clauses and the corresponding list of
1476
+ * pathkeys.
1477
+ *
1478
+ * The elements of 'clauses' list should have the same order as the head of
1479
+ * 'pathkeys' list. The tleSortGroupRef of the clause should be equal to
1480
+ * ec_sortref of the pathkey equivalence class. If there are redundant
1481
+ * clauses with the same tleSortGroupRef, they must be grouped together.
1482
+ */
1483
+ typedef struct GroupByOrdering
1484
+ {
1485
+ NodeTag type;
1486
+
1487
+ List *pathkeys;
1488
+ List *clauses;
1489
+ } GroupByOrdering;
1490
+
1459
1491
  /*
1460
1492
  * VolatileFunctionStatus -- allows nodes to cache their
1461
1493
  * contain_volatile_functions properties. VOLATILITY_UNKNOWN means not yet
@@ -1465,7 +1497,7 @@ typedef enum VolatileFunctionStatus
1465
1497
  {
1466
1498
  VOLATILITY_UNKNOWN = 0,
1467
1499
  VOLATILITY_VOLATILE,
1468
- VOLATILITY_NOVOLATILE
1500
+ VOLATILITY_NOVOLATILE,
1469
1501
  } VolatileFunctionStatus;
1470
1502
 
1471
1503
  /*
@@ -1822,6 +1854,10 @@ typedef struct SubqueryScanPath
1822
1854
  * ForeignPath represents a potential scan of a foreign table, foreign join
1823
1855
  * or foreign upper-relation.
1824
1856
  *
1857
+ * In the case of a foreign join, fdw_restrictinfo stores the RestrictInfos to
1858
+ * apply to the join, which are used by createplan.c to get pseudoconstant
1859
+ * clauses evaluated as one-time quals in a gating Result plan node.
1860
+ *
1825
1861
  * fdw_private stores FDW private data about the scan. While fdw_private is
1826
1862
  * not actually touched by the core code during normal operations, it's
1827
1863
  * generally a good idea to use a representation that can be dumped by
@@ -1832,6 +1868,7 @@ typedef struct ForeignPath
1832
1868
  {
1833
1869
  Path path;
1834
1870
  Path *fdw_outerpath;
1871
+ List *fdw_restrictinfo;
1835
1872
  List *fdw_private;
1836
1873
  } ForeignPath;
1837
1874
 
@@ -1841,7 +1878,7 @@ typedef struct ForeignPath
1841
1878
  *
1842
1879
  * We provide a set of hooks here - which the provider must take care to set
1843
1880
  * up correctly - to allow extensions to supply their own methods of scanning
1844
- * a relation or joing relations. For example, a provider might provide GPU
1881
+ * a relation or join relations. For example, a provider might provide GPU
1845
1882
  * acceleration, a cache-based scan, or some other kind of logic we haven't
1846
1883
  * dreamed up yet.
1847
1884
  *
@@ -1849,6 +1886,10 @@ typedef struct ForeignPath
1849
1886
  * relation by set_rel_pathlist_hook or set_join_pathlist_hook functions,
1850
1887
  * respectively.
1851
1888
  *
1889
+ * In the case of a table join, custom_restrictinfo stores the RestrictInfos
1890
+ * to apply to the join, which are used by createplan.c to get pseudoconstant
1891
+ * clauses evaluated as one-time quals in a gating Result plan node.
1892
+ *
1852
1893
  * Core code must avoid assuming that the CustomPath is only as large as
1853
1894
  * the structure declared here; providers are allowed to make it the first
1854
1895
  * element in a larger structure. (Since the planner never copies Paths,
@@ -1865,6 +1906,7 @@ typedef struct CustomPath
1865
1906
  uint32 flags; /* mask of CUSTOMPATH_* flags, see
1866
1907
  * nodes/extensible.h */
1867
1908
  List *custom_paths; /* list of child Path nodes, if any */
1909
+ List *custom_restrictinfo;
1868
1910
  List *custom_private;
1869
1911
  const struct CustomPathMethods *methods;
1870
1912
  } CustomPath;
@@ -1977,7 +2019,7 @@ typedef enum UniquePathMethod
1977
2019
  {
1978
2020
  UNIQUE_PATH_NOOP, /* input is known unique already */
1979
2021
  UNIQUE_PATH_HASH, /* use hashing */
1980
- UNIQUE_PATH_SORT /* use sorting */
2022
+ UNIQUE_PATH_SORT, /* use sorting */
1981
2023
  } UniquePathMethod;
1982
2024
 
1983
2025
  typedef struct UniquePath
@@ -2277,6 +2319,7 @@ typedef struct WindowAggPath
2277
2319
  Path *subpath; /* path representing input source */
2278
2320
  WindowClause *winclause; /* WindowClause we'll be using */
2279
2321
  List *qual; /* lower-level WindowAgg runconditions */
2322
+ List *runCondition; /* OpExpr List to short-circuit execution */
2280
2323
  bool topwindow; /* false for all apart from the WindowAgg
2281
2324
  * that's closest to the root of the plan */
2282
2325
  } WindowAggPath;
@@ -2345,6 +2388,8 @@ typedef struct ModifyTablePath
2345
2388
  int epqParam; /* ID of Param for EvalPlanQual re-eval */
2346
2389
  List *mergeActionLists; /* per-target-table lists of actions for
2347
2390
  * MERGE */
2391
+ List *mergeJoinConditions; /* per-target-table join conditions
2392
+ * for MERGE */
2348
2393
  } ModifyTablePath;
2349
2394
 
2350
2395
  /*
@@ -2578,7 +2623,10 @@ typedef struct RestrictInfo
2578
2623
  * 2. If we manufacture a commuted version of a qual to use as an index
2579
2624
  * condition, it copies the original's rinfo_serial, since it is in
2580
2625
  * practice the same condition.
2581
- * 3. RestrictInfos made for a child relation copy their parent's
2626
+ * 3. If we reduce a qual to constant-FALSE, the new constant-FALSE qual
2627
+ * copies the original's rinfo_serial, since it is in practice the same
2628
+ * condition.
2629
+ * 4. RestrictInfos made for a child relation copy their parent's
2582
2630
  * rinfo_serial. Likewise, when an EquivalenceClass makes a derived
2583
2631
  * equality clause for a child relation, it copies the rinfo_serial of
2584
2632
  * the matching equality clause for the parent. This allows detection
@@ -2829,6 +2877,9 @@ typedef struct PlaceHolderVar
2829
2877
  * cost estimation purposes it is sometimes useful to know the join size under
2830
2878
  * plain innerjoin semantics. Note that lhs_strict and the semi_xxx fields
2831
2879
  * are not set meaningfully within such structs.
2880
+ *
2881
+ * We also create transient SpecialJoinInfos for child joins during
2882
+ * partitionwise join planning, which are also not present in join_info_list.
2832
2883
  */
2833
2884
  #ifndef HAVE_SPECIALJOININFO_TYPEDEF
2834
2885
  typedef struct SpecialJoinInfo SpecialJoinInfo;
@@ -3218,7 +3269,7 @@ typedef enum
3218
3269
  {
3219
3270
  PARTITIONWISE_AGGREGATE_NONE,
3220
3271
  PARTITIONWISE_AGGREGATE_FULL,
3221
- PARTITIONWISE_AGGREGATE_PARTIAL
3272
+ PARTITIONWISE_AGGREGATE_PARTIAL,
3222
3273
  } PartitionwiseAggregateType;
3223
3274
 
3224
3275
  /*
@@ -29,7 +29,7 @@
29
29
  * always be so; be careful to use the appropriate list type for your data.)
30
30
  *
31
31
  *
32
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
32
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
33
33
  * Portions Copyright (c) 1994, Regents of the University of California
34
34
  *
35
35
  * src/include/nodes/pg_list.h
@@ -381,26 +381,26 @@ lnext(const List *l, const ListCell *c)
381
381
  /*
382
382
  * foreach_delete_current -
383
383
  * delete the current list element from the List associated with a
384
- * surrounding foreach() loop, returning the new List pointer.
384
+ * surrounding foreach() or foreach_*() loop, returning the new List
385
+ * pointer; pass the name of the iterator variable.
385
386
  *
386
- * This is equivalent to list_delete_cell(), but it also adjusts the foreach
387
- * loop's state so that no list elements will be missed. Do not delete
388
- * elements from an active foreach loop's list in any other way!
387
+ * This is similar to list_delete_cell(), but it also adjusts the loop's state
388
+ * so that no list elements will be missed. Do not delete elements from an
389
+ * active foreach or foreach_* loop's list in any other way!
389
390
  */
390
- #define foreach_delete_current(lst, cell) \
391
- (cell##__state.i--, \
392
- (List *) (cell##__state.l = list_delete_cell(lst, cell)))
391
+ #define foreach_delete_current(lst, var_or_cell) \
392
+ ((List *) (var_or_cell##__state.l = list_delete_nth_cell(lst, var_or_cell##__state.i--)))
393
393
 
394
394
  /*
395
395
  * foreach_current_index -
396
- * get the zero-based list index of a surrounding foreach() loop's
397
- * current element; pass the name of the "ListCell *" iterator variable.
396
+ * get the zero-based list index of a surrounding foreach() or foreach_*()
397
+ * loop's current element; pass the name of the iterator variable.
398
398
  *
399
399
  * Beware of using this after foreach_delete_current(); the value will be
400
400
  * out of sync for the rest of the current loop iteration. Anyway, since
401
401
  * you just deleted the current element, the value is pretty meaningless.
402
402
  */
403
- #define foreach_current_index(cell) (cell##__state.i)
403
+ #define foreach_current_index(var_or_cell) (var_or_cell##__state.i)
404
404
 
405
405
  /*
406
406
  * for_each_from -
@@ -452,6 +452,57 @@ for_each_cell_setup(const List *lst, const ListCell *initcell)
452
452
  return r;
453
453
  }
454
454
 
455
+ /*
456
+ * Convenience macros that loop through a list without needing a separate
457
+ * "ListCell *" variable. Instead, the macros declare a locally-scoped loop
458
+ * variable with the provided name and the appropriate type.
459
+ *
460
+ * Since the variable is scoped to the loop, it's not possible to detect an
461
+ * early break by checking its value after the loop completes, as is common
462
+ * practice. If you need to do this, you can either use foreach() instead or
463
+ * manually track early breaks with a separate variable declared outside of the
464
+ * loop.
465
+ *
466
+ * Note that the caveats described in the comment above the foreach() macro
467
+ * also apply to these convenience macros.
468
+ */
469
+ #define foreach_ptr(type, var, lst) foreach_internal(type, *, var, lst, lfirst)
470
+ #define foreach_int(var, lst) foreach_internal(int, , var, lst, lfirst_int)
471
+ #define foreach_oid(var, lst) foreach_internal(Oid, , var, lst, lfirst_oid)
472
+ #define foreach_xid(var, lst) foreach_internal(TransactionId, , var, lst, lfirst_xid)
473
+
474
+ /*
475
+ * The internal implementation of the above macros. Do not use directly.
476
+ *
477
+ * This macro actually generates two loops in order to declare two variables of
478
+ * different types. The outer loop only iterates once, so we expect optimizing
479
+ * compilers will unroll it, thereby optimizing it away.
480
+ */
481
+ #define foreach_internal(type, pointer, var, lst, func) \
482
+ for (type pointer var = 0, pointer var##__outerloop = (type pointer) 1; \
483
+ var##__outerloop; \
484
+ var##__outerloop = 0) \
485
+ for (ForEachState var##__state = {(lst), 0}; \
486
+ (var##__state.l != NIL && \
487
+ var##__state.i < var##__state.l->length && \
488
+ (var = func(&var##__state.l->elements[var##__state.i]), true)); \
489
+ var##__state.i++)
490
+
491
+ /*
492
+ * foreach_node -
493
+ * The same as foreach_ptr, but asserts that the element is of the specified
494
+ * node type.
495
+ */
496
+ #define foreach_node(type, var, lst) \
497
+ for (type * var = 0, *var##__outerloop = (type *) 1; \
498
+ var##__outerloop; \
499
+ var##__outerloop = 0) \
500
+ for (ForEachState var##__state = {(lst), 0}; \
501
+ (var##__state.l != NIL && \
502
+ var##__state.i < var##__state.l->length && \
503
+ (var = lfirst_node(type, &var##__state.l->elements[var##__state.i]), true)); \
504
+ var##__state.i++)
505
+
455
506
  /*
456
507
  * forboth -
457
508
  * a convenience macro for advancing through two linked lists
@@ -4,7 +4,7 @@
4
4
  * definitions for query plan nodes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/nodes/plannodes.h
@@ -20,7 +20,6 @@
20
20
  #include "lib/stringinfo.h"
21
21
  #include "nodes/bitmapset.h"
22
22
  #include "nodes/lockoptions.h"
23
- #include "nodes/parsenodes.h"
24
23
  #include "nodes/primnodes.h"
25
24
 
26
25
 
@@ -54,9 +53,9 @@ typedef struct PlannedStmt
54
53
 
55
54
  uint64 queryId; /* query identifier (copied from Query) */
56
55
 
57
- bool hasReturning; /* is it insert|update|delete RETURNING? */
56
+ bool hasReturning; /* is it insert|update|delete|merge RETURNING? */
58
57
 
59
- bool hasModifyingCTE; /* has insert|update|delete in WITH? */
58
+ bool hasModifyingCTE; /* has insert|update|delete|merge in WITH? */
60
59
 
61
60
  bool canSetTag; /* do I set the command result tag? */
62
61
 
@@ -96,8 +95,8 @@ typedef struct PlannedStmt
96
95
  Node *utilityStmt; /* non-null if this is utility stmt */
97
96
 
98
97
  /* statement location in source string (copied from Query) */
99
- int stmt_location; /* start location, or -1 if unknown */
100
- int stmt_len; /* length in bytes; 0 means "rest of string" */
98
+ ParseLoc stmt_location; /* start location, or -1 if unknown */
99
+ ParseLoc stmt_len; /* length in bytes; 0 means "rest of string" */
101
100
  } PlannedStmt;
102
101
 
103
102
  /* macro for fetching the Plan associated with a SubPlan node */
@@ -252,6 +251,8 @@ typedef struct ModifyTable
252
251
  List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
253
252
  List *mergeActionLists; /* per-target-table lists of actions for
254
253
  * MERGE */
254
+ List *mergeJoinConditions; /* per-target-table join conditions
255
+ * for MERGE */
255
256
  } ModifyTable;
256
257
 
257
258
  struct PartitionPruneInfo; /* forward reference to struct below */
@@ -591,7 +592,7 @@ typedef enum SubqueryScanStatus
591
592
  {
592
593
  SUBQUERY_SCAN_UNKNOWN,
593
594
  SUBQUERY_SCAN_TRIVIAL,
594
- SUBQUERY_SCAN_NONTRIVIAL
595
+ SUBQUERY_SCAN_NONTRIVIAL,
595
596
  } SubqueryScanStatus;
596
597
 
597
598
  typedef struct SubqueryScan
@@ -1330,7 +1331,7 @@ typedef enum RowMarkType
1330
1331
  ROW_MARK_SHARE, /* obtain shared tuple lock */
1331
1332
  ROW_MARK_KEYSHARE, /* obtain keyshare tuple lock */
1332
1333
  ROW_MARK_REFERENCE, /* just fetch the TID, don't lock it */
1333
- ROW_MARK_COPY /* physically copy the row value */
1334
+ ROW_MARK_COPY, /* physically copy the row value */
1334
1335
  } RowMarkType;
1335
1336
 
1336
1337
  #define RowMarkRequiresRowShareLock(marktype) ((marktype) <= ROW_MARK_KEYSHARE)
@@ -1542,7 +1543,7 @@ typedef struct PartitionPruneStepOp
1542
1543
  typedef enum PartitionPruneCombineOp
1543
1544
  {
1544
1545
  PARTPRUNE_COMBINE_UNION,
1545
- PARTPRUNE_COMBINE_INTERSECT
1546
+ PARTPRUNE_COMBINE_INTERSECT,
1546
1547
  } PartitionPruneCombineOp;
1547
1548
 
1548
1549
  typedef struct PartitionPruneStepCombine
@@ -1586,7 +1587,7 @@ typedef enum MonotonicFunction
1586
1587
  MONOTONICFUNC_NONE = 0,
1587
1588
  MONOTONICFUNC_INCREASING = (1 << 0),
1588
1589
  MONOTONICFUNC_DECREASING = (1 << 1),
1589
- MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
1590
+ MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING,
1590
1591
  } MonotonicFunction;
1591
1592
 
1592
1593
  #endif /* PLANNODES_H */