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
@@ -9,7 +9,7 @@
9
9
  * empty set by a NULL pointer.
10
10
  *
11
11
  *
12
- * Copyright (c) 2003-2023, PostgreSQL Global Development Group
12
+ * Copyright (c) 2003-2024, PostgreSQL Global Development Group
13
13
  *
14
14
  * src/include/nodes/bitmapset.h
15
15
  *
@@ -62,7 +62,7 @@ typedef enum
62
62
  BMS_EQUAL, /* sets are equal */
63
63
  BMS_SUBSET1, /* first set is a subset of the second */
64
64
  BMS_SUBSET2, /* second set is a subset of the first */
65
- BMS_DIFFERENT /* neither set is a subset of the other */
65
+ BMS_DIFFERENT, /* neither set is a subset of the other */
66
66
  } BMS_Comparison;
67
67
 
68
68
  /* result of bms_membership */
@@ -70,9 +70,22 @@ typedef enum
70
70
  {
71
71
  BMS_EMPTY_SET, /* 0 members */
72
72
  BMS_SINGLETON, /* 1 member */
73
- BMS_MULTIPLE /* >1 member */
73
+ BMS_MULTIPLE, /* >1 member */
74
74
  } BMS_Membership;
75
75
 
76
+ /* Select appropriate bit-twiddling functions for bitmap word size */
77
+ #if BITS_PER_BITMAPWORD == 32
78
+ #define bmw_leftmost_one_pos(w) pg_leftmost_one_pos32(w)
79
+ #define bmw_rightmost_one_pos(w) pg_rightmost_one_pos32(w)
80
+ #define bmw_popcount(w) pg_popcount32(w)
81
+ #elif BITS_PER_BITMAPWORD == 64
82
+ #define bmw_leftmost_one_pos(w) pg_leftmost_one_pos64(w)
83
+ #define bmw_rightmost_one_pos(w) pg_rightmost_one_pos64(w)
84
+ #define bmw_popcount(w) pg_popcount64(w)
85
+ #else
86
+ #error "invalid BITS_PER_BITMAPWORD"
87
+ #endif
88
+
76
89
 
77
90
  /*
78
91
  * function prototypes in nodes/bitmapset.c
@@ -109,6 +122,7 @@ extern BMS_Membership bms_membership(const Bitmapset *a);
109
122
  extern Bitmapset *bms_add_member(Bitmapset *a, int x);
110
123
  extern Bitmapset *bms_del_member(Bitmapset *a, int x);
111
124
  extern Bitmapset *bms_add_members(Bitmapset *a, const Bitmapset *b);
125
+ extern Bitmapset *bms_replace_members(Bitmapset *a, const Bitmapset *b);
112
126
  extern Bitmapset *bms_add_range(Bitmapset *a, int lower, int upper);
113
127
  extern Bitmapset *bms_int_members(Bitmapset *a, const Bitmapset *b);
114
128
  extern Bitmapset *bms_del_members(Bitmapset *a, const Bitmapset *b);
@@ -19,7 +19,7 @@
19
19
  * not provided.
20
20
  *
21
21
  *
22
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
22
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
23
23
  * Portions Copyright (c) 1994, Regents of the University of California
24
24
  *
25
25
  * src/include/nodes/execnodes.h
@@ -34,6 +34,7 @@
34
34
  #include "fmgr.h"
35
35
  #include "lib/ilist.h"
36
36
  #include "lib/pairingheap.h"
37
+ #include "nodes/miscnodes.h"
37
38
  #include "nodes/params.h"
38
39
  #include "nodes/plannodes.h"
39
40
  #include "nodes/tidbitmap.h"
@@ -129,6 +130,14 @@ typedef struct ExprState
129
130
 
130
131
  Datum *innermost_domainval;
131
132
  bool *innermost_domainnull;
133
+
134
+ /*
135
+ * For expression nodes that support soft errors. Should be set to NULL if
136
+ * the caller wants errors to be thrown. Callers that do not want errors
137
+ * thrown should set it to a valid ErrorSaveContext before calling
138
+ * ExecInitExprRec().
139
+ */
140
+ ErrorSaveContext *escontext;
132
141
  } ExprState;
133
142
 
134
143
 
@@ -187,7 +196,6 @@ typedef struct IndexInfo
187
196
  Oid *ii_UniqueOps; /* array with one entry per column */
188
197
  Oid *ii_UniqueProcs; /* array with one entry per column */
189
198
  uint16 *ii_UniqueStrats; /* array with one entry per column */
190
- Datum *ii_OpclassOptions; /* array with one entry per column */
191
199
  bool ii_Unique;
192
200
  bool ii_NullsNotDistinct;
193
201
  bool ii_ReadyForInserts;
@@ -296,7 +304,7 @@ typedef enum
296
304
  {
297
305
  ExprSingleResult, /* expression does not return a set */
298
306
  ExprMultipleResult, /* this result is an element of a set */
299
- ExprEndResult /* there are no more elements in the set */
307
+ ExprEndResult, /* there are no more elements in the set */
300
308
  } ExprDoneCond;
301
309
 
302
310
  /*
@@ -310,7 +318,7 @@ typedef enum
310
318
  SFRM_ValuePerCall = 0x01, /* one value returned per call */
311
319
  SFRM_Materialize = 0x02, /* result set instantiated in Tuplestore */
312
320
  SFRM_Materialize_Random = 0x04, /* Tuplestore needs randomAccess */
313
- SFRM_Materialize_Preferred = 0x08 /* caller prefers Tuplestore */
321
+ SFRM_Materialize_Preferred = 0x08, /* caller prefers Tuplestore */
314
322
  } SetFunctionReturnMode;
315
323
 
316
324
  /*
@@ -538,9 +546,11 @@ typedef struct ResultRelInfo
538
546
  /* ON CONFLICT evaluation state */
539
547
  OnConflictSetState *ri_onConflict;
540
548
 
541
- /* for MERGE, lists of MergeActionState */
542
- List *ri_matchedMergeAction;
543
- List *ri_notMatchedMergeAction;
549
+ /* for MERGE, lists of MergeActionState (one per MergeMatchKind) */
550
+ List *ri_MergeActions[NUM_MERGE_MATCH_KINDS];
551
+
552
+ /* for MERGE, expr state for checking the join condition */
553
+ ExprState *ri_MergeJoinCondition;
544
554
 
545
555
  /* partition check expression state (NULL if not set up yet) */
546
556
  ExprState *ri_PartitionCheckExpr;
@@ -990,7 +1000,7 @@ typedef struct SubPlanState
990
1000
  typedef enum DomainConstraintType
991
1001
  {
992
1002
  DOM_CONSTRAINT_NOTNULL,
993
- DOM_CONSTRAINT_CHECK
1003
+ DOM_CONSTRAINT_CHECK,
994
1004
  } DomainConstraintType;
995
1005
 
996
1006
  typedef struct DomainConstraintState
@@ -1002,6 +1012,77 @@ typedef struct DomainConstraintState
1002
1012
  ExprState *check_exprstate; /* check_expr's eval state, or NULL */
1003
1013
  } DomainConstraintState;
1004
1014
 
1015
+ /*
1016
+ * State for JsonExpr evaluation, too big to inline.
1017
+ *
1018
+ * This contains the information going into and coming out of the
1019
+ * EEOP_JSONEXPR_PATH eval step.
1020
+ */
1021
+ typedef struct JsonExprState
1022
+ {
1023
+ /* original expression node */
1024
+ JsonExpr *jsexpr;
1025
+
1026
+ /* value/isnull for formatted_expr */
1027
+ NullableDatum formatted_expr;
1028
+
1029
+ /* value/isnull for pathspec */
1030
+ NullableDatum pathspec;
1031
+
1032
+ /* JsonPathVariable entries for passing_values */
1033
+ List *args;
1034
+
1035
+ /*
1036
+ * Output variables that drive the EEOP_JUMP_IF_NOT_TRUE steps that are
1037
+ * added for ON ERROR and ON EMPTY expressions, if any.
1038
+ *
1039
+ * Reset for each evaluation of EEOP_JSONEXPR_PATH.
1040
+ */
1041
+
1042
+ /* Set to true if jsonpath evaluation cause an error. */
1043
+ NullableDatum error;
1044
+
1045
+ /* Set to true if the jsonpath evaluation returned 0 items. */
1046
+ NullableDatum empty;
1047
+
1048
+ /*
1049
+ * Addresses of steps that implement the non-ERROR variant of ON EMPTY and
1050
+ * ON ERROR behaviors, respectively.
1051
+ */
1052
+ int jump_empty;
1053
+ int jump_error;
1054
+
1055
+ /*
1056
+ * Address of the step to coerce the result value of jsonpath evaluation
1057
+ * to the RETURNING type. -1 if no coercion if JsonExpr.use_io_coercion
1058
+ * is true.
1059
+ */
1060
+ int jump_eval_coercion;
1061
+
1062
+ /*
1063
+ * Address to jump to when skipping all the steps after performing
1064
+ * ExecEvalJsonExprPath() so as to return whatever the JsonPath* function
1065
+ * returned as is, that is, in the cases where there's no error and no
1066
+ * coercion is necessary.
1067
+ */
1068
+ int jump_end;
1069
+
1070
+ /*
1071
+ * RETURNING type input function invocation info when
1072
+ * JsonExpr.use_io_coercion is true.
1073
+ */
1074
+ FunctionCallInfo input_fcinfo;
1075
+
1076
+ /*
1077
+ * For error-safe evaluation of coercions. When the ON ERROR behavior is
1078
+ * not ERROR, a pointer to this is passed to ExecInitExprRec() when
1079
+ * initializing the coercion expressions or to ExecInitJsonCoercion().
1080
+ *
1081
+ * Reset for each evaluation of EEOP_JSONEXPR_PATH.
1082
+ */
1083
+ ErrorSaveContext escontext;
1084
+ } JsonExprState;
1085
+
1005
1086
 
1006
1087
  /* ----------------------------------------------------------------
1007
1088
  * Executor State Trees
@@ -1319,6 +1400,16 @@ typedef struct ModifyTableState
1319
1400
  /* Flags showing which subcommands are present INS/UPD/DEL/DO NOTHING */
1320
1401
  int mt_merge_subcommands;
1321
1402
 
1403
+ /* For MERGE, the action currently being executed */
1404
+ MergeActionState *mt_merge_action;
1405
+
1406
+ /*
1407
+ * For MERGE, if there is a pending NOT MATCHED [BY TARGET] action to be
1408
+ * performed, this will be the last tuple read from the subplan; otherwise
1409
+ * it will be NULL --- see the comments in ExecMerge().
1410
+ */
1411
+ TupleTableSlot *mt_merge_pending_not_matched;
1412
+
1322
1413
  /* tuple counters for MERGE */
1323
1414
  double mt_merge_inserted;
1324
1415
  double mt_merge_updated;
@@ -1600,6 +1691,8 @@ typedef struct IndexScanState
1600
1691
  * TableSlot slot for holding tuples fetched from the table
1601
1692
  * VMBuffer buffer in use for visibility map testing, if any
1602
1693
  * PscanLen size of parallel index-only scan descriptor
1694
+ * NameCStringAttNums attnums of name typed columns to pad to NAMEDATALEN
1695
+ * NameCStringCount number of elements in the NameCStringAttNums array
1603
1696
  * ----------------
1604
1697
  */
1605
1698
  typedef struct IndexOnlyScanState
@@ -1619,6 +1712,8 @@ typedef struct IndexOnlyScanState
1619
1712
  TupleTableSlot *ioss_TableSlot;
1620
1713
  Buffer ioss_VMBuffer;
1621
1714
  Size ioss_PscanLen;
1715
+ AttrNumber *ioss_NameCStringAttNums;
1716
+ int ioss_NameCStringCount;
1622
1717
  } IndexOnlyScanState;
1623
1718
 
1624
1719
  /* ----------------
@@ -1670,7 +1765,7 @@ typedef enum
1670
1765
  {
1671
1766
  BM_INITIAL,
1672
1767
  BM_INPROGRESS,
1673
- BM_FINISHED
1768
+ BM_FINISHED,
1674
1769
  } SharedBitmapState;
1675
1770
 
1676
1771
  /* ----------------
@@ -1683,7 +1778,6 @@ typedef enum
1683
1778
  * prefetch_target current target prefetch distance
1684
1779
  * state current state of the TIDBitmap
1685
1780
  * cv conditional wait variable
1686
- * phs_snapshot_data snapshot data shared to workers
1687
1781
  * ----------------
1688
1782
  */
1689
1783
  typedef struct ParallelBitmapHeapState
@@ -1695,7 +1789,6 @@ typedef struct ParallelBitmapHeapState
1695
1789
  int prefetch_target;
1696
1790
  SharedBitmapState state;
1697
1791
  ConditionVariable cv;
1698
- char phs_snapshot_data[FLEXIBLE_ARRAY_MEMBER];
1699
1792
  } ParallelBitmapHeapState;
1700
1793
 
1701
1794
  /* ----------------
@@ -1705,17 +1798,13 @@ typedef struct ParallelBitmapHeapState
1705
1798
  * tbm bitmap obtained from child index scan(s)
1706
1799
  * tbmiterator iterator for scanning current pages
1707
1800
  * tbmres current-page data
1708
- * can_skip_fetch can we potentially skip tuple fetches in this scan?
1709
- * return_empty_tuples number of empty tuples to return
1710
- * vmbuffer buffer for visibility-map lookups
1711
- * pvmbuffer ditto, for prefetched pages
1801
+ * pvmbuffer buffer for visibility-map lookups of prefetched pages
1712
1802
  * exact_pages total number of exact pages retrieved
1713
1803
  * lossy_pages total number of lossy pages retrieved
1714
1804
  * prefetch_iterator iterator for prefetching ahead of current page
1715
1805
  * prefetch_pages # pages prefetch iterator is ahead of current
1716
1806
  * prefetch_target current target prefetch distance
1717
1807
  * prefetch_maximum maximum value for prefetch_target
1718
- * pscan_len size of the shared memory for parallel bitmap
1719
1808
  * initialized is node is ready to iterate
1720
1809
  * shared_tbmiterator shared iterator
1721
1810
  * shared_prefetch_iterator shared iterator for prefetching
@@ -1729,9 +1818,6 @@ typedef struct BitmapHeapScanState
1729
1818
  TIDBitmap *tbm;
1730
1819
  TBMIterator *tbmiterator;
1731
1820
  TBMIterateResult *tbmres;
1732
- bool can_skip_fetch;
1733
- int return_empty_tuples;
1734
- Buffer vmbuffer;
1735
1821
  Buffer pvmbuffer;
1736
1822
  long exact_pages;
1737
1823
  long lossy_pages;
@@ -1739,7 +1825,6 @@ typedef struct BitmapHeapScanState
1739
1825
  int prefetch_pages;
1740
1826
  int prefetch_target;
1741
1827
  int prefetch_maximum;
1742
- Size pscan_len;
1743
1828
  bool initialized;
1744
1829
  TBMSharedIterator *shared_tbmiterator;
1745
1830
  TBMSharedIterator *shared_prefetch_iterator;
@@ -1754,7 +1839,6 @@ typedef struct BitmapHeapScanState
1754
1839
  * NumTids number of tids in this scan
1755
1840
  * TidPtr index of currently fetched tid
1756
1841
  * TidList evaluated item pointers (array of size NumTids)
1757
- * htup currently-fetched tuple, if any
1758
1842
  * ----------------
1759
1843
  */
1760
1844
  typedef struct TidScanState
@@ -1765,7 +1849,6 @@ typedef struct TidScanState
1765
1849
  int tss_NumTids;
1766
1850
  int tss_TidPtr;
1767
1851
  ItemPointerData *tss_TidList;
1768
- HeapTupleData tss_htup;
1769
1852
  } TidScanState;
1770
1853
 
1771
1854
  /* ----------------
@@ -1876,6 +1959,8 @@ typedef struct TableFuncScanState
1876
1959
  ExprState *rowexpr; /* state for row-generating expression */
1877
1960
  List *colexprs; /* state for column-generating expression */
1878
1961
  List *coldefexprs; /* state for column default expressions */
1962
+ List *colvalexprs; /* state for column value expressions */
1963
+ List *passingvalexprs; /* state for PASSING argument expressions */
1879
1964
  List *ns_names; /* same as TableFunc.ns_names */
1880
1965
  List *ns_uris; /* list of states of namespace URI exprs */
1881
1966
  Bitmapset *notnulls; /* nullability flag for each output column */
@@ -2447,7 +2532,6 @@ typedef struct AggState
2447
2532
  #define FIELDNO_AGGSTATE_ALL_PERGROUPS 53
2448
2533
  AggStatePerGroup *all_pergroups; /* array of first ->pergroups, than
2449
2534
  * ->hash_pergroup */
2450
- ProjectionInfo *combinedproj; /* projection machinery */
2451
2535
  SharedAggInfo *shared_info; /* one entry per worker */
2452
2536
  } AggState;
2453
2537
 
@@ -2467,7 +2551,7 @@ typedef enum WindowAggStatus
2467
2551
  WINDOWAGG_DONE, /* No more processing to do */
2468
2552
  WINDOWAGG_RUN, /* Normal processing of window funcs */
2469
2553
  WINDOWAGG_PASSTHROUGH, /* Don't eval window funcs */
2470
- WINDOWAGG_PASSTHROUGH_STRICT /* Pass-through plus don't store new
2554
+ WINDOWAGG_PASSTHROUGH_STRICT, /* Pass-through plus don't store new
2471
2555
  * tuples during spool */
2472
2556
  } WindowAggStatus;
2473
2557
 
@@ -2745,7 +2829,7 @@ typedef enum
2745
2829
  LIMIT_WINDOWEND_TIES, /* have returned a tied row */
2746
2830
  LIMIT_SUBPLANEOF, /* at EOF of subplan (within window) */
2747
2831
  LIMIT_WINDOWEND, /* stepped off end of window */
2748
- LIMIT_WINDOWSTART /* stepped off beginning of window */
2832
+ LIMIT_WINDOWSTART, /* stepped off beginning of window */
2749
2833
  } LimitStateCond;
2750
2834
 
2751
2835
  typedef struct LimitState
@@ -4,7 +4,7 @@
4
4
  * Definitions for extensible nodes and custom scans
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/extensible.h
@@ -4,7 +4,7 @@
4
4
  * Common header for some locking-related declarations.
5
5
  *
6
6
  *
7
- * Copyright (c) 2014-2023, PostgreSQL Global Development Group
7
+ * Copyright (c) 2014-2024, PostgreSQL Global Development Group
8
8
  *
9
9
  * src/include/nodes/lockoptions.h
10
10
  *
@@ -24,7 +24,7 @@ typedef enum LockClauseStrength
24
24
  LCS_FORKEYSHARE, /* FOR KEY SHARE */
25
25
  LCS_FORSHARE, /* FOR SHARE */
26
26
  LCS_FORNOKEYUPDATE, /* FOR NO KEY UPDATE */
27
- LCS_FORUPDATE /* FOR UPDATE */
27
+ LCS_FORUPDATE, /* FOR UPDATE */
28
28
  } LockClauseStrength;
29
29
 
30
30
  /*
@@ -40,7 +40,7 @@ typedef enum LockWaitPolicy
40
40
  /* Skip rows that can't be locked (SKIP LOCKED) */
41
41
  LockWaitSkip,
42
42
  /* Raise an error if a row cannot be locked (NOWAIT) */
43
- LockWaitError
43
+ LockWaitError,
44
44
  } LockWaitPolicy;
45
45
 
46
46
  /*
@@ -55,7 +55,7 @@ typedef enum LockTupleMode
55
55
  /* SELECT FOR NO KEY UPDATE, and UPDATEs that don't modify key columns */
56
56
  LockTupleNoKeyExclusive,
57
57
  /* SELECT FOR UPDATE, UPDATEs that modify key columns, and DELETE */
58
- LockTupleExclusive
58
+ LockTupleExclusive,
59
59
  } LockTupleMode;
60
60
 
61
61
  #endif /* LOCKOPTIONS_H */
@@ -4,7 +4,7 @@
4
4
  * prototypes for the creator functions of various 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/makefuncs.h
@@ -100,6 +100,7 @@ extern IndexInfo *makeIndexInfo(int numattrs, int numkeyattrs, Oid amoid,
100
100
  bool isready, bool concurrent,
101
101
  bool summarizing);
102
102
 
103
+ extern Node *makeStringConst(char *str, int location);
103
104
  extern DefElem *makeDefElem(char *name, Node *arg, int location);
104
105
  extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg,
105
106
  DefElemAction defaction, int location);
@@ -116,6 +117,11 @@ extern Node *makeJsonKeyValue(Node *key, Node *value);
116
117
  extern Node *makeJsonIsPredicate(Node *expr, JsonFormat *format,
117
118
  JsonValueType item_type, bool unique_keys,
118
119
  int location);
119
- extern JsonEncoding makeJsonEncoding(char *name);
120
+ extern JsonBehavior *makeJsonBehavior(JsonBehaviorType btype, Node *expr,
121
+ int location);
122
+ extern JsonTablePath *makeJsonTablePath(Const *pathvalue, char *pathname);
123
+ extern JsonTablePathSpec *makeJsonTablePathSpec(char *string, char *name,
124
+ int string_location,
125
+ int name_location);
120
126
 
121
127
  #endif /* MAKEFUNC_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES memory context node definitions.
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/memnodes.h
@@ -57,20 +57,58 @@ typedef void (*MemoryStatsPrintFunc) (MemoryContext context, void *passthru,
57
57
 
58
58
  typedef struct MemoryContextMethods
59
59
  {
60
- void *(*alloc) (MemoryContext context, Size size);
60
+ /*
61
+ * Function to handle memory allocation requests of 'size' to allocate
62
+ * memory into the given 'context'. The function must handle flags
63
+ * MCXT_ALLOC_HUGE and MCXT_ALLOC_NO_OOM. MCXT_ALLOC_ZERO is handled by
64
+ * the calling function.
65
+ */
66
+ void *(*alloc) (MemoryContext context, Size size, int flags);
67
+
61
68
  /* call this free_p in case someone #define's free() */
62
69
  void (*free_p) (void *pointer);
63
- void *(*realloc) (void *pointer, Size size);
70
+
71
+ /*
72
+ * Function to handle a size change request for an existing allocation.
73
+ * The implementation must handle flags MCXT_ALLOC_HUGE and
74
+ * MCXT_ALLOC_NO_OOM. MCXT_ALLOC_ZERO is handled by the calling function.
75
+ */
76
+ void *(*realloc) (void *pointer, Size size, int flags);
77
+
78
+ /*
79
+ * Invalidate all previous allocations in the given memory context and
80
+ * prepare the context for a new set of allocations. Implementations may
81
+ * optionally free() excess memory back to the OS during this time.
82
+ */
64
83
  void (*reset) (MemoryContext context);
84
+
85
+ /* Free all memory consumed by the given MemoryContext. */
65
86
  void (*delete_context) (MemoryContext context);
87
+
88
+ /* Return the MemoryContext that the given pointer belongs to. */
66
89
  MemoryContext (*get_chunk_context) (void *pointer);
90
+
91
+ /*
92
+ * Return the number of bytes consumed by the given pointer within its
93
+ * memory context, including the overhead of alignment and chunk headers.
94
+ */
67
95
  Size (*get_chunk_space) (void *pointer);
96
+
97
+ /*
98
+ * Return true if the given MemoryContext has not had any allocations
99
+ * since it was created or last reset.
100
+ */
68
101
  bool (*is_empty) (MemoryContext context);
69
102
  void (*stats) (MemoryContext context,
70
103
  MemoryStatsPrintFunc printfunc, void *passthru,
71
104
  MemoryContextCounters *totals,
72
105
  bool print_to_stderr);
73
106
  #ifdef MEMORY_CONTEXT_CHECKING
107
+
108
+ /*
109
+ * Perform validation checks on the given context and raise any discovered
110
+ * anomalies as WARNINGs.
111
+ */
74
112
  void (*check) (MemoryContext context);
75
113
  #endif
76
114
  } MemoryContextMethods;
@@ -108,6 +146,7 @@ typedef struct MemoryContextData
108
146
  ((context) != NULL && \
109
147
  (IsA((context), AllocSetContext) || \
110
148
  IsA((context), SlabContext) || \
111
- IsA((context), GenerationContext)))
149
+ IsA((context), GenerationContext) || \
150
+ IsA((context), BumpContext)))
112
151
 
113
152
  #endif /* MEMNODES_H */
@@ -10,7 +10,7 @@
10
10
  * "context" pointers.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * src/include/nodes/miscnodes.h
@@ -3,7 +3,7 @@
3
3
  * nodeFuncs.h
4
4
  * Various general-purpose manipulations of Node trees
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/nodes/nodeFuncs.h
@@ -4,7 +4,7 @@
4
4
  * Definitions for tagged 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/nodes.h
@@ -139,39 +139,18 @@ typedef struct Node
139
139
  *
140
140
  * !WARNING!: Avoid using newNode directly. You should be using the
141
141
  * macro makeNode. eg. to create a Query node, use makeNode(Query)
142
- *
143
- * Note: the size argument should always be a compile-time constant, so the
144
- * apparent risk of multiple evaluation doesn't matter in practice.
145
- */
146
- #ifdef __GNUC__
147
-
148
- /* With GCC, we can use a compound statement within an expression */
149
- #define newNode(size, tag) \
150
- ({ Node *_result; \
151
- AssertMacro((size) >= sizeof(Node)); /* need the tag, at least */ \
152
- _result = (Node *) palloc0fast(size); \
153
- _result->type = (tag); \
154
- _result; \
155
- })
156
- #else
157
-
158
- /*
159
- * There is no way to dereference the palloc'ed pointer to assign the
160
- * tag, and also return the pointer itself, so we need a holder variable.
161
- * Fortunately, this macro isn't recursive so we just define
162
- * a global variable for this purpose.
163
142
  */
164
- extern PGDLLIMPORT __thread Node *newNodeMacroHolder;
143
+ static inline Node *
144
+ newNode(size_t size, NodeTag tag)
145
+ {
146
+ Node *result;
165
147
 
166
- #define newNode(size, tag) \
167
- ( \
168
- AssertMacro((size) >= sizeof(Node)), /* need the tag, at least */ \
169
- newNodeMacroHolder = (Node *) palloc0fast(size), \
170
- newNodeMacroHolder->type = (tag), \
171
- newNodeMacroHolder \
172
- )
173
- #endif /* __GNUC__ */
148
+ Assert(size >= sizeof(Node)); /* need the tag, at least */
149
+ result = (Node *) palloc0(size);
150
+ result->type = tag;
174
151
 
152
+ return result;
153
+ }
175
154
 
176
155
  #define makeNode(_type_) ((_type_ *) newNode(sizeof(_type_),T_##_type_))
177
156
  #define NodeSetTag(nodeptr,t) (((Node*)(nodeptr))->type = (t))
@@ -216,6 +195,7 @@ extern void outBitmapset(struct StringInfoData *str,
216
195
  extern void outDatum(struct StringInfoData *str, uintptr_t value,
217
196
  int typlen, bool typbyval);
218
197
  extern char *nodeToString(const void *obj);
198
+ extern char *nodeToStringWithLocations(const void *obj);
219
199
  extern char *bmsToString(const struct Bitmapset *bms);
220
200
 
221
201
  /*
@@ -251,9 +231,18 @@ extern bool equal(const void *a, const void *b);
251
231
 
252
232
 
253
233
  /*
254
- * Typedefs for identifying qualifier selectivities and plan costs as such.
255
- * These are just plain "double"s, but declaring a variable as Selectivity
256
- * or Cost makes the intent more obvious.
234
+ * Typedef for parse location. This is just an int, but this way
235
+ * gen_node_support.pl knows which fields should get special treatment for
236
+ * location values.
237
+ *
238
+ * -1 is used for unknown.
239
+ */
240
+ typedef int ParseLoc;
241
+
242
+ /*
243
+ * Typedefs for identifying qualifier selectivities, plan costs, and row
244
+ * counts as such. These are just plain "double"s, but declaring a variable
245
+ * as Selectivity, Cost, or Cardinality makes the intent more obvious.
257
246
  *
258
247
  * These could have gone into plannodes.h or some such, but many files
259
248
  * depend on them...
@@ -280,7 +269,7 @@ typedef enum CmdType
280
269
  CMD_MERGE, /* merge stmt */
281
270
  CMD_UTILITY, /* cmds like create, destroy, copy, vacuum,
282
271
  * etc. */
283
- CMD_NOTHING /* dummy command for instead nothing rules
272
+ CMD_NOTHING, /* dummy command for instead nothing rules
284
273
  * with qual */
285
274
  } CmdType;
286
275
 
@@ -324,7 +313,7 @@ typedef enum JoinType
324
313
  * by the executor (nor, indeed, by most of the planner).
325
314
  */
326
315
  JOIN_UNIQUE_OUTER, /* LHS path must be made unique */
327
- JOIN_UNIQUE_INNER /* RHS path must be made unique */
316
+ JOIN_UNIQUE_INNER, /* RHS path must be made unique */
328
317
 
329
318
  /*
330
319
  * We might need additional join types someday.
@@ -364,7 +353,7 @@ typedef enum AggStrategy
364
353
  AGG_PLAIN, /* simple agg across all input rows */
365
354
  AGG_SORTED, /* grouped agg, input must be sorted */
366
355
  AGG_HASHED, /* grouped agg, use internal hashtable */
367
- AGG_MIXED /* grouped agg, hash and sort both used */
356
+ AGG_MIXED, /* grouped agg, hash and sort both used */
368
357
  } AggStrategy;
369
358
 
370
359
  /*
@@ -388,7 +377,7 @@ typedef enum AggSplit
388
377
  /* Initial phase of partial aggregation, with serialization: */
389
378
  AGGSPLIT_INITIAL_SERIAL = AGGSPLITOP_SKIPFINAL | AGGSPLITOP_SERIALIZE,
390
379
  /* Final phase of partial aggregation, with deserialization: */
391
- AGGSPLIT_FINAL_DESERIAL = AGGSPLITOP_COMBINE | AGGSPLITOP_DESERIALIZE
380
+ AGGSPLIT_FINAL_DESERIAL = AGGSPLITOP_COMBINE | AGGSPLITOP_DESERIALIZE,
392
381
  } AggSplit;
393
382
 
394
383
  /* Test whether an AggSplit value selects each primitive option: */
@@ -408,13 +397,13 @@ typedef enum SetOpCmd
408
397
  SETOPCMD_INTERSECT,
409
398
  SETOPCMD_INTERSECT_ALL,
410
399
  SETOPCMD_EXCEPT,
411
- SETOPCMD_EXCEPT_ALL
400
+ SETOPCMD_EXCEPT_ALL,
412
401
  } SetOpCmd;
413
402
 
414
403
  typedef enum SetOpStrategy
415
404
  {
416
405
  SETOP_SORTED, /* input must be sorted */
417
- SETOP_HASHED /* use internal hashtable */
406
+ SETOP_HASHED, /* use internal hashtable */
418
407
  } SetOpStrategy;
419
408
 
420
409
  /*
@@ -427,7 +416,7 @@ typedef enum OnConflictAction
427
416
  {
428
417
  ONCONFLICT_NONE, /* No "ON CONFLICT" clause */
429
418
  ONCONFLICT_NOTHING, /* ON CONFLICT ... DO NOTHING */
430
- ONCONFLICT_UPDATE /* ON CONFLICT ... DO UPDATE */
419
+ ONCONFLICT_UPDATE, /* ON CONFLICT ... DO UPDATE */
431
420
  } OnConflictAction;
432
421
 
433
422
  /*