pg_query 5.1.0 → 6.1.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 (490) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +1 -1
  4. data/Rakefile +4 -4
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +20 -6
  11. data/ext/pg_query/include/pg_query.h +4 -3
  12. data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
  19. data/ext/pg_query/include/postgres/access/amapi.h +14 -3
  20. data/ext/pg_query/include/postgres/access/attmap.h +1 -1
  21. data/ext/pg_query/include/postgres/access/attnum.h +1 -1
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +2 -3
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
  26. data/ext/pg_query/include/postgres/access/detoast.h +1 -1
  27. data/ext/pg_query/include/postgres/access/genam.h +17 -4
  28. data/ext/pg_query/include/postgres/access/gin.h +1 -1
  29. data/ext/pg_query/include/postgres/access/htup.h +1 -1
  30. data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
  31. data/ext/pg_query/include/postgres/access/itup.h +3 -3
  32. data/ext/pg_query/include/postgres/access/parallel.h +1 -2
  33. data/ext/pg_query/include/postgres/access/printtup.h +1 -1
  34. data/ext/pg_query/include/postgres/access/relation.h +1 -1
  35. data/ext/pg_query/include/postgres/access/relscan.h +1 -1
  36. data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
  37. data/ext/pg_query/include/postgres/access/sdir.h +1 -1
  38. data/ext/pg_query/include/postgres/access/skey.h +1 -1
  39. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  40. data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
  41. data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
  42. data/ext/pg_query/include/postgres/access/table.h +1 -1
  43. data/ext/pg_query/include/postgres/access/tableam.h +35 -25
  44. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  45. data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
  46. data/ext/pg_query/include/postgres/access/transam.h +50 -7
  47. data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
  48. data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
  49. data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
  50. data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
  51. data/ext/pg_query/include/postgres/access/twophase.h +2 -2
  52. data/ext/pg_query/include/postgres/access/xact.h +5 -5
  53. data/ext/pg_query/include/postgres/access/xlog.h +20 -12
  54. data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
  55. data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
  56. data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
  57. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
  58. data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
  59. data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
  60. data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
  61. data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
  62. data/ext/pg_query/include/postgres/c.h +32 -37
  63. data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
  64. data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
  65. data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
  66. data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
  67. data/ext/pg_query/include/postgres/catalog/index.h +22 -18
  68. data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
  69. data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
  70. data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
  71. data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
  72. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
  74. data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
  75. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
  76. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
  78. data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
  79. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
  81. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
  82. data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
  83. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
  84. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
  86. data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
  87. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
  89. data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
  90. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
  91. data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
  92. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
  93. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
  95. data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
  96. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
  97. data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
  98. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
  99. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
  101. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
  103. data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
  104. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
  105. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
  107. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
  109. data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
  110. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
  111. data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
  112. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
  113. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
  115. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
  119. data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
  120. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
  121. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
  131. data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
  132. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
  133. data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
  134. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  135. data/ext/pg_query/include/postgres/commands/async.h +2 -6
  136. data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
  137. data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
  138. data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
  139. data/ext/pg_query/include/postgres/commands/explain.h +19 -3
  140. data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
  141. data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
  142. data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
  143. data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
  144. data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
  145. data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
  146. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  147. data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
  148. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  149. data/ext/pg_query/include/postgres/common/int.h +79 -4
  150. data/ext/pg_query/include/postgres/common/keywords.h +1 -1
  151. data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
  152. data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
  153. data/ext/pg_query/include/postgres/common/relpath.h +4 -4
  154. data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
  155. data/ext/pg_query/include/postgres/common/sha2.h +1 -1
  156. data/ext/pg_query/include/postgres/common/string.h +1 -1
  157. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
  158. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
  159. data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
  160. data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
  161. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
  162. data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
  163. data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
  164. data/ext/pg_query/include/postgres/executor/executor.h +6 -5
  165. data/ext/pg_query/include/postgres/executor/functions.h +2 -1
  166. data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
  167. data/ext/pg_query/include/postgres/executor/spi.h +2 -8
  168. data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
  169. data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
  170. data/ext/pg_query/include/postgres/fmgr.h +2 -2
  171. data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
  172. data/ext/pg_query/include/postgres/funcapi.h +2 -2
  173. data/ext/pg_query/include/postgres/gram.h +871 -830
  174. data/ext/pg_query/include/postgres/gramparse.h +1 -1
  175. data/ext/pg_query/include/postgres/jit/jit.h +4 -3
  176. data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
  177. data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
  178. data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
  179. data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
  180. data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
  181. data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
  182. data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
  183. data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
  184. data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
  185. data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
  186. data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
  187. data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
  188. data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
  189. data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
  190. data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
  191. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  192. data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
  193. data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
  194. data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
  195. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
  196. data/ext/pg_query/include/postgres/miscadmin.h +72 -52
  197. data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
  198. data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
  199. data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
  200. data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
  201. data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
  202. data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
  203. data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
  205. data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
  206. data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
  207. data/ext/pg_query/include/postgres/nodes/params.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
  209. data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
  210. data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
  211. data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
  212. data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
  213. data/ext/pg_query/include/postgres/nodes/print.h +1 -1
  214. data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
  215. data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
  216. data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
  217. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
  218. data/ext/pg_query/include/postgres/nodes/value.h +1 -1
  219. data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
  220. data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
  221. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
  222. data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
  223. data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
  224. data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
  225. data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
  226. data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
  227. data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
  228. data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
  229. data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
  230. data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
  231. data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
  232. data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
  233. data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
  234. data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
  235. data/ext/pg_query/include/postgres/parser/parser.h +3 -3
  236. data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
  237. data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
  238. data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
  239. data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
  240. data/ext/pg_query/include/postgres/pg_config.h +53 -45
  241. data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
  242. data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
  243. data/ext/pg_query/include/postgres/pg_trace.h +1 -1
  244. data/ext/pg_query/include/postgres/pgstat.h +13 -11
  245. data/ext/pg_query/include/postgres/pgtime.h +1 -1
  246. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
  247. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
  248. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
  249. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
  250. data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
  251. data/ext/pg_query/include/postgres/plpgsql.h +15 -13
  252. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
  253. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
  254. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
  255. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
  256. data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
  257. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
  258. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
  259. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
  260. data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
  261. data/ext/pg_query/include/postgres/port/atomics.h +93 -6
  262. data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
  263. data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
  264. data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
  265. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  266. data/ext/pg_query/include/postgres/port/simd.h +48 -1
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
  268. data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
  269. data/ext/pg_query/include/postgres/port.h +39 -4
  270. data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
  271. data/ext/pg_query/include/postgres/postgres.h +1 -1
  272. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
  273. data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
  274. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
  275. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
  276. data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
  277. data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
  278. data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
  279. data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
  280. data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
  281. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  282. data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
  283. data/ext/pg_query/include/postgres/regex/regex.h +92 -9
  284. data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
  285. data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
  286. data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
  287. data/ext/pg_query/include/postgres/replication/origin.h +1 -1
  288. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
  289. data/ext/pg_query/include/postgres/replication/slot.h +45 -5
  290. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  291. data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
  292. data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
  293. data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
  294. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
  295. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
  296. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
  297. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
  298. data/ext/pg_query/include/postgres/storage/block.h +1 -1
  299. data/ext/pg_query/include/postgres/storage/buf.h +1 -1
  300. data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
  301. data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
  302. data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
  303. data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
  304. data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
  305. data/ext/pg_query/include/postgres/storage/fd.h +30 -13
  306. data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
  307. data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
  308. data/ext/pg_query/include/postgres/storage/item.h +1 -1
  309. data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
  310. data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
  311. data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
  312. data/ext/pg_query/include/postgres/storage/latch.h +4 -2
  313. data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
  314. data/ext/pg_query/include/postgres/storage/lock.h +19 -19
  315. data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
  316. data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
  317. data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
  318. data/ext/pg_query/include/postgres/storage/off.h +1 -1
  319. data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
  320. data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
  321. data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
  322. data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
  323. data/ext/pg_query/include/postgres/storage/proc.h +48 -26
  324. data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
  325. data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
  326. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  327. data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
  328. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  329. data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
  330. data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
  331. data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
  332. data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
  333. data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
  334. data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
  335. data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
  336. data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
  337. data/ext/pg_query/include/postgres/storage/spin.h +1 -1
  338. data/ext/pg_query/include/postgres/storage/standby.h +13 -3
  339. data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
  340. data/ext/pg_query/include/postgres/storage/sync.h +4 -4
  341. data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
  342. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
  343. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
  344. data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
  345. data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
  346. data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
  347. data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
  348. data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
  349. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
  350. data/ext/pg_query/include/postgres/utils/acl.h +19 -7
  351. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
  352. data/ext/pg_query/include/postgres/utils/array.h +1 -2
  353. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  354. data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
  355. data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
  356. data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
  357. data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
  358. data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
  359. data/ext/pg_query/include/postgres/utils/date.h +1 -1
  360. data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
  361. data/ext/pg_query/include/postgres/utils/datum.h +1 -1
  362. data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
  363. data/ext/pg_query/include/postgres/utils/elog.h +3 -8
  364. data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
  365. data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
  366. data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
  367. data/ext/pg_query/include/postgres/utils/float.h +1 -1
  368. data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
  369. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
  370. data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
  371. data/ext/pg_query/include/postgres/utils/guc.h +20 -6
  372. data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
  373. data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
  374. data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
  375. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  376. data/ext/pg_query/include/postgres/utils/inval.h +1 -1
  377. data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
  378. data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
  379. data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
  380. data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
  381. data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
  382. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
  383. data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
  384. data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
  385. data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
  386. data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
  387. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
  388. data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
  389. data/ext/pg_query/include/postgres/utils/portal.h +10 -10
  390. data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
  391. data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
  392. data/ext/pg_query/include/postgres/utils/rel.h +14 -15
  393. data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
  394. data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
  395. data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
  396. data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
  397. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
  398. data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
  399. data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
  400. data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
  401. data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
  402. data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
  403. data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
  404. data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
  405. data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
  406. data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
  407. data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
  408. data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
  409. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  410. data/ext/pg_query/include/postgres/utils/xml.h +4 -4
  411. data/ext/pg_query/include/postgres/varatt.h +1 -1
  412. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
  413. data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
  414. data/ext/pg_query/pg_query.pb-c.c +6598 -3739
  415. data/ext/pg_query/pg_query_normalize.c +42 -1
  416. data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
  417. data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
  418. data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
  419. data/ext/pg_query/pg_query_scan.c +1 -1
  420. data/ext/pg_query/postgres_deparse.c +601 -172
  421. data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
  422. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  423. data/ext/pg_query/src_backend_commands_define.c +2 -3
  424. data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
  425. data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
  426. data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
  427. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  428. data/ext/pg_query/src_backend_nodes_list.c +3 -7
  429. data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
  430. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
  431. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  432. data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
  433. data/ext/pg_query/src_backend_parser_parser.c +8 -8
  434. data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
  435. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  436. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  437. data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
  438. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  439. data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
  440. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  441. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  442. data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
  443. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
  444. data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
  445. data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
  446. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
  447. data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
  448. data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
  449. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
  450. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
  451. data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
  452. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  453. data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
  454. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
  455. data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
  456. data/ext/pg_query/src_common_encnames.c +43 -44
  457. data/ext/pg_query/src_common_hashfn.c +1 -1
  458. data/ext/pg_query/src_common_keywords.c +1 -1
  459. data/ext/pg_query/src_common_kwlist_d.h +511 -466
  460. data/ext/pg_query/src_common_kwlookup.c +1 -1
  461. data/ext/pg_query/src_common_psprintf.c +3 -3
  462. data/ext/pg_query/src_common_stringinfo.c +18 -1
  463. data/ext/pg_query/src_common_wchar.c +92 -109
  464. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  465. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
  466. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
  467. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  468. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  469. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  470. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
  471. data/ext/pg_query/src_port_pg_bitutils.c +173 -28
  472. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  473. data/ext/pg_query/src_port_snprintf.c +15 -18
  474. data/ext/pg_query/src_port_strerror.c +1 -3
  475. data/ext/pg_query/src_port_strlcpy.c +1 -1
  476. data/lib/pg_query/fingerprint.rb +3 -5
  477. data/lib/pg_query/param_refs.rb +2 -2
  478. data/lib/pg_query/parse.rb +5 -7
  479. data/lib/pg_query/parse_error.rb +1 -0
  480. data/lib/pg_query/pg_query_pb.rb +27 -25
  481. data/lib/pg_query/scan.rb +1 -0
  482. data/lib/pg_query/treewalker.rb +38 -15
  483. data/lib/pg_query/truncate.rb +18 -20
  484. data/lib/pg_query/version.rb +1 -1
  485. metadata +31 -82
  486. data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
  487. data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
  488. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  489. data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
  490. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -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 */
@@ -1086,6 +1101,9 @@ typedef struct IndexOptInfo IndexOptInfo;
1086
1101
  #define HAVE_INDEXOPTINFO_TYPEDEF 1
1087
1102
  #endif
1088
1103
 
1104
+ struct IndexPath; /* avoid including pathnodes.h here */
1105
+ struct PlannerInfo; /* avoid including pathnodes.h here */
1106
+
1089
1107
  struct IndexOptInfo
1090
1108
  {
1091
1109
  pg_node_attr(no_copy_equal, no_read, no_query_jumble)
@@ -1185,7 +1203,7 @@ struct IndexOptInfo
1185
1203
  bool amcanmarkpos;
1186
1204
  /* AM's cost estimator */
1187
1205
  /* Rather than include amapi.h here, we declare amcostestimate like this */
1188
- void (*amcostestimate) () pg_node_attr(read_write_ignore);
1206
+ void (*amcostestimate) (struct PlannerInfo *, struct IndexPath *, double, Cost *, Cost *, Selectivity *, double *, double *) pg_node_attr(read_write_ignore);
1189
1207
  };
1190
1208
 
1191
1209
  /*
@@ -1456,6 +1474,23 @@ typedef struct PathKey
1456
1474
  bool pk_nulls_first; /* do NULLs come before normal values? */
1457
1475
  } PathKey;
1458
1476
 
1477
+ /*
1478
+ * Contains an order of group-by clauses and the corresponding list of
1479
+ * pathkeys.
1480
+ *
1481
+ * The elements of 'clauses' list should have the same order as the head of
1482
+ * 'pathkeys' list. The tleSortGroupRef of the clause should be equal to
1483
+ * ec_sortref of the pathkey equivalence class. If there are redundant
1484
+ * clauses with the same tleSortGroupRef, they must be grouped together.
1485
+ */
1486
+ typedef struct GroupByOrdering
1487
+ {
1488
+ NodeTag type;
1489
+
1490
+ List *pathkeys;
1491
+ List *clauses;
1492
+ } GroupByOrdering;
1493
+
1459
1494
  /*
1460
1495
  * VolatileFunctionStatus -- allows nodes to cache their
1461
1496
  * contain_volatile_functions properties. VOLATILITY_UNKNOWN means not yet
@@ -1465,7 +1500,7 @@ typedef enum VolatileFunctionStatus
1465
1500
  {
1466
1501
  VOLATILITY_UNKNOWN = 0,
1467
1502
  VOLATILITY_VOLATILE,
1468
- VOLATILITY_NOVOLATILE
1503
+ VOLATILITY_NOVOLATILE,
1469
1504
  } VolatileFunctionStatus;
1470
1505
 
1471
1506
  /*
@@ -1822,6 +1857,10 @@ typedef struct SubqueryScanPath
1822
1857
  * ForeignPath represents a potential scan of a foreign table, foreign join
1823
1858
  * or foreign upper-relation.
1824
1859
  *
1860
+ * In the case of a foreign join, fdw_restrictinfo stores the RestrictInfos to
1861
+ * apply to the join, which are used by createplan.c to get pseudoconstant
1862
+ * clauses evaluated as one-time quals in a gating Result plan node.
1863
+ *
1825
1864
  * fdw_private stores FDW private data about the scan. While fdw_private is
1826
1865
  * not actually touched by the core code during normal operations, it's
1827
1866
  * generally a good idea to use a representation that can be dumped by
@@ -1832,6 +1871,7 @@ typedef struct ForeignPath
1832
1871
  {
1833
1872
  Path path;
1834
1873
  Path *fdw_outerpath;
1874
+ List *fdw_restrictinfo;
1835
1875
  List *fdw_private;
1836
1876
  } ForeignPath;
1837
1877
 
@@ -1841,7 +1881,7 @@ typedef struct ForeignPath
1841
1881
  *
1842
1882
  * We provide a set of hooks here - which the provider must take care to set
1843
1883
  * 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
1884
+ * a relation or join relations. For example, a provider might provide GPU
1845
1885
  * acceleration, a cache-based scan, or some other kind of logic we haven't
1846
1886
  * dreamed up yet.
1847
1887
  *
@@ -1849,6 +1889,10 @@ typedef struct ForeignPath
1849
1889
  * relation by set_rel_pathlist_hook or set_join_pathlist_hook functions,
1850
1890
  * respectively.
1851
1891
  *
1892
+ * In the case of a table join, custom_restrictinfo stores the RestrictInfos
1893
+ * to apply to the join, which are used by createplan.c to get pseudoconstant
1894
+ * clauses evaluated as one-time quals in a gating Result plan node.
1895
+ *
1852
1896
  * Core code must avoid assuming that the CustomPath is only as large as
1853
1897
  * the structure declared here; providers are allowed to make it the first
1854
1898
  * element in a larger structure. (Since the planner never copies Paths,
@@ -1865,6 +1909,7 @@ typedef struct CustomPath
1865
1909
  uint32 flags; /* mask of CUSTOMPATH_* flags, see
1866
1910
  * nodes/extensible.h */
1867
1911
  List *custom_paths; /* list of child Path nodes, if any */
1912
+ List *custom_restrictinfo;
1868
1913
  List *custom_private;
1869
1914
  const struct CustomPathMethods *methods;
1870
1915
  } CustomPath;
@@ -1977,7 +2022,7 @@ typedef enum UniquePathMethod
1977
2022
  {
1978
2023
  UNIQUE_PATH_NOOP, /* input is known unique already */
1979
2024
  UNIQUE_PATH_HASH, /* use hashing */
1980
- UNIQUE_PATH_SORT /* use sorting */
2025
+ UNIQUE_PATH_SORT, /* use sorting */
1981
2026
  } UniquePathMethod;
1982
2027
 
1983
2028
  typedef struct UniquePath
@@ -2277,6 +2322,7 @@ typedef struct WindowAggPath
2277
2322
  Path *subpath; /* path representing input source */
2278
2323
  WindowClause *winclause; /* WindowClause we'll be using */
2279
2324
  List *qual; /* lower-level WindowAgg runconditions */
2325
+ List *runCondition; /* OpExpr List to short-circuit execution */
2280
2326
  bool topwindow; /* false for all apart from the WindowAgg
2281
2327
  * that's closest to the root of the plan */
2282
2328
  } WindowAggPath;
@@ -2345,6 +2391,8 @@ typedef struct ModifyTablePath
2345
2391
  int epqParam; /* ID of Param for EvalPlanQual re-eval */
2346
2392
  List *mergeActionLists; /* per-target-table lists of actions for
2347
2393
  * MERGE */
2394
+ List *mergeJoinConditions; /* per-target-table join conditions
2395
+ * for MERGE */
2348
2396
  } ModifyTablePath;
2349
2397
 
2350
2398
  /*
@@ -2578,7 +2626,10 @@ typedef struct RestrictInfo
2578
2626
  * 2. If we manufacture a commuted version of a qual to use as an index
2579
2627
  * condition, it copies the original's rinfo_serial, since it is in
2580
2628
  * practice the same condition.
2581
- * 3. RestrictInfos made for a child relation copy their parent's
2629
+ * 3. If we reduce a qual to constant-FALSE, the new constant-FALSE qual
2630
+ * copies the original's rinfo_serial, since it is in practice the same
2631
+ * condition.
2632
+ * 4. RestrictInfos made for a child relation copy their parent's
2582
2633
  * rinfo_serial. Likewise, when an EquivalenceClass makes a derived
2583
2634
  * equality clause for a child relation, it copies the rinfo_serial of
2584
2635
  * the matching equality clause for the parent. This allows detection
@@ -2829,6 +2880,9 @@ typedef struct PlaceHolderVar
2829
2880
  * cost estimation purposes it is sometimes useful to know the join size under
2830
2881
  * plain innerjoin semantics. Note that lhs_strict and the semi_xxx fields
2831
2882
  * are not set meaningfully within such structs.
2883
+ *
2884
+ * We also create transient SpecialJoinInfos for child joins during
2885
+ * partitionwise join planning, which are also not present in join_info_list.
2832
2886
  */
2833
2887
  #ifndef HAVE_SPECIALJOININFO_TYPEDEF
2834
2888
  typedef struct SpecialJoinInfo SpecialJoinInfo;
@@ -3218,7 +3272,7 @@ typedef enum
3218
3272
  {
3219
3273
  PARTITIONWISE_AGGREGATE_NONE,
3220
3274
  PARTITIONWISE_AGGREGATE_FULL,
3221
- PARTITIONWISE_AGGREGATE_PARTIAL
3275
+ PARTITIONWISE_AGGREGATE_PARTIAL,
3222
3276
  } PartitionwiseAggregateType;
3223
3277
 
3224
3278
  /*
@@ -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 = (type pointer) 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 */