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
@@ -0,0 +1,218 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * slru.h
4
+ * Simple LRU buffering for transaction status logfiles
5
+ *
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/access/slru.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef SLRU_H
14
+ #define SLRU_H
15
+
16
+ #include "access/xlogdefs.h"
17
+ #include "storage/lwlock.h"
18
+ #include "storage/sync.h"
19
+
20
+ /*
21
+ * To avoid overflowing internal arithmetic and the size_t data type, the
22
+ * number of buffers must not exceed this number.
23
+ */
24
+ #define SLRU_MAX_ALLOWED_BUFFERS ((1024 * 1024 * 1024) / BLCKSZ)
25
+
26
+ /*
27
+ * Define SLRU segment size. A page is the same BLCKSZ as is used everywhere
28
+ * else in Postgres. The segment size can be chosen somewhat arbitrarily;
29
+ * we make it 32 pages by default, or 256Kb, i.e. 1M transactions for CLOG
30
+ * or 64K transactions for SUBTRANS.
31
+ *
32
+ * Note: because TransactionIds are 32 bits and wrap around at 0xFFFFFFFF,
33
+ * page numbering also wraps around at 0xFFFFFFFF/xxxx_XACTS_PER_PAGE (where
34
+ * xxxx is CLOG or SUBTRANS, respectively), and segment numbering at
35
+ * 0xFFFFFFFF/xxxx_XACTS_PER_PAGE/SLRU_PAGES_PER_SEGMENT. We need
36
+ * take no explicit notice of that fact in slru.c, except when comparing
37
+ * segment and page numbers in SimpleLruTruncate (see PagePrecedes()).
38
+ */
39
+ #define SLRU_PAGES_PER_SEGMENT 32
40
+
41
+ /*
42
+ * Page status codes. Note that these do not include the "dirty" bit.
43
+ * page_dirty can be true only in the VALID or WRITE_IN_PROGRESS states;
44
+ * in the latter case it implies that the page has been re-dirtied since
45
+ * the write started.
46
+ */
47
+ typedef enum
48
+ {
49
+ SLRU_PAGE_EMPTY, /* buffer is not in use */
50
+ SLRU_PAGE_READ_IN_PROGRESS, /* page is being read in */
51
+ SLRU_PAGE_VALID, /* page is valid and not being written */
52
+ SLRU_PAGE_WRITE_IN_PROGRESS, /* page is being written out */
53
+ } SlruPageStatus;
54
+
55
+ /*
56
+ * Shared-memory state
57
+ *
58
+ * ControlLock is used to protect access to the other fields, except
59
+ * latest_page_number, which uses atomics; see comment in slru.c.
60
+ */
61
+ typedef struct SlruSharedData
62
+ {
63
+ /* Number of buffers managed by this SLRU structure */
64
+ int num_slots;
65
+
66
+ /*
67
+ * Arrays holding info for each buffer slot. Page number is undefined
68
+ * when status is EMPTY, as is page_lru_count.
69
+ */
70
+ char **page_buffer;
71
+ SlruPageStatus *page_status;
72
+ bool *page_dirty;
73
+ int64 *page_number;
74
+ int *page_lru_count;
75
+
76
+ /* The buffer_locks protects the I/O on each buffer slots */
77
+ LWLockPadded *buffer_locks;
78
+
79
+ /* Locks to protect the in memory buffer slot access in SLRU bank. */
80
+ LWLockPadded *bank_locks;
81
+
82
+ /*----------
83
+ * A bank-wise LRU counter is maintained because we do a victim buffer
84
+ * search within a bank. Furthermore, manipulating an individual bank
85
+ * counter avoids frequent cache invalidation since we update it every time
86
+ * we access the page.
87
+ *
88
+ * We mark a page "most recently used" by setting
89
+ * page_lru_count[slotno] = ++bank_cur_lru_count[bankno];
90
+ * The oldest page in the bank is therefore the one with the highest value
91
+ * of
92
+ * bank_cur_lru_count[bankno] - page_lru_count[slotno]
93
+ * The counts will eventually wrap around, but this calculation still
94
+ * works as long as no page's age exceeds INT_MAX counts.
95
+ *----------
96
+ */
97
+ int *bank_cur_lru_count;
98
+
99
+ /*
100
+ * Optional array of WAL flush LSNs associated with entries in the SLRU
101
+ * pages. If not zero/NULL, we must flush WAL before writing pages (true
102
+ * for pg_xact, false for everything else). group_lsn[] has
103
+ * lsn_groups_per_page entries per buffer slot, each containing the
104
+ * highest LSN known for a contiguous group of SLRU entries on that slot's
105
+ * page.
106
+ */
107
+ XLogRecPtr *group_lsn;
108
+ int lsn_groups_per_page;
109
+
110
+ /*
111
+ * latest_page_number is the page number of the current end of the log;
112
+ * this is not critical data, since we use it only to avoid swapping out
113
+ * the latest page.
114
+ */
115
+ pg_atomic_uint64 latest_page_number;
116
+
117
+ /* SLRU's index for statistics purposes (might not be unique) */
118
+ int slru_stats_idx;
119
+ } SlruSharedData;
120
+
121
+ typedef SlruSharedData *SlruShared;
122
+
123
+ /*
124
+ * SlruCtlData is an unshared structure that points to the active information
125
+ * in shared memory.
126
+ */
127
+ typedef struct SlruCtlData
128
+ {
129
+ SlruShared shared;
130
+
131
+ /* Number of banks in this SLRU. */
132
+ uint16 nbanks;
133
+
134
+ /*
135
+ * If true, use long segment file names. Otherwise, use short file names.
136
+ *
137
+ * For details about the file name format, see SlruFileName().
138
+ */
139
+ bool long_segment_names;
140
+
141
+ /*
142
+ * Which sync handler function to use when handing sync requests over to
143
+ * the checkpointer. SYNC_HANDLER_NONE to disable fsync (eg pg_notify).
144
+ */
145
+ SyncRequestHandler sync_handler;
146
+
147
+ /*
148
+ * Decide whether a page is "older" for truncation and as a hint for
149
+ * evicting pages in LRU order. Return true if every entry of the first
150
+ * argument is older than every entry of the second argument. Note that
151
+ * !PagePrecedes(a,b) && !PagePrecedes(b,a) need not imply a==b; it also
152
+ * arises when some entries are older and some are not. For SLRUs using
153
+ * SimpleLruTruncate(), this must use modular arithmetic. (For others,
154
+ * the behavior of this callback has no functional implications.) Use
155
+ * SlruPagePrecedesUnitTests() in SLRUs meeting its criteria.
156
+ */
157
+ bool (*PagePrecedes) (int64, int64);
158
+
159
+ /*
160
+ * Dir is set during SimpleLruInit and does not change thereafter. Since
161
+ * it's always the same, it doesn't need to be in shared memory.
162
+ */
163
+ char Dir[64];
164
+ } SlruCtlData;
165
+
166
+ typedef SlruCtlData *SlruCtl;
167
+
168
+ /*
169
+ * Get the SLRU bank lock for given SlruCtl and the pageno.
170
+ *
171
+ * This lock needs to be acquired to access the slru buffer slots in the
172
+ * respective bank.
173
+ */
174
+ static inline LWLock *
175
+ SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)
176
+ {
177
+ int bankno;
178
+
179
+ bankno = pageno % ctl->nbanks;
180
+ return &(ctl->shared->bank_locks[bankno].lock);
181
+ }
182
+
183
+ extern Size SimpleLruShmemSize(int nslots, int nlsns);
184
+ extern int SimpleLruAutotuneBuffers(int divisor, int max);
185
+ extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
186
+ const char *subdir, int buffer_tranche_id,
187
+ int bank_tranche_id, SyncRequestHandler sync_handler,
188
+ bool long_segment_names);
189
+ extern int SimpleLruZeroPage(SlruCtl ctl, int64 pageno);
190
+ extern int SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
191
+ TransactionId xid);
192
+ extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno,
193
+ TransactionId xid);
194
+ extern void SimpleLruWritePage(SlruCtl ctl, int slotno);
195
+ extern void SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied);
196
+ #ifdef USE_ASSERT_CHECKING
197
+ extern void SlruPagePrecedesUnitTests(SlruCtl ctl, int per_page);
198
+ #else
199
+ #define SlruPagePrecedesUnitTests(ctl, per_page) do {} while (0)
200
+ #endif
201
+ extern void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage);
202
+ extern bool SimpleLruDoesPhysicalPageExist(SlruCtl ctl, int64 pageno);
203
+
204
+ typedef bool (*SlruScanCallback) (SlruCtl ctl, char *filename, int64 segpage,
205
+ void *data);
206
+ extern bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data);
207
+ extern void SlruDeleteSegment(SlruCtl ctl, int64 segno);
208
+
209
+ extern int SlruSyncFileTag(SlruCtl ctl, const FileTag *ftag, char *path);
210
+
211
+ /* SlruScanDirectory public callbacks */
212
+ extern bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename,
213
+ int64 segpage, void *data);
214
+ extern bool SlruScanDirCbDeleteAll(SlruCtl ctl, char *filename, int64 segpage,
215
+ void *data);
216
+ extern bool check_slru_buffers(const char *name, int *newval);
217
+
218
+ #endif /* SLRU_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES strategy number 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/access/stratnum.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES system attribute 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/access/sysattr.h
@@ -4,7 +4,7 @@
4
4
  * Generic routines for table related code.
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/access/table.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES table access method 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/access/tableam.h
@@ -21,6 +21,7 @@
21
21
  #include "access/sdir.h"
22
22
  #include "access/xact.h"
23
23
  #include "executor/tuptable.h"
24
+ #include "storage/read_stream.h"
24
25
  #include "utils/rel.h"
25
26
  #include "utils/snapshot.h"
26
27
 
@@ -61,8 +62,15 @@ typedef enum ScanOptions
61
62
  SO_ALLOW_PAGEMODE = 1 << 8,
62
63
 
63
64
  /* unregister snapshot at scan end? */
64
- SO_TEMP_SNAPSHOT = 1 << 9
65
- } ScanOptions;
65
+ SO_TEMP_SNAPSHOT = 1 << 9,
66
+
67
+ /*
68
+ * At the discretion of the table AM, bitmap table scans may be able to
69
+ * skip fetching a block from the table if none of the table data is
70
+ * needed. If table data may be needed, set SO_NEED_TUPLES.
71
+ */
72
+ SO_NEED_TUPLES = 1 << 10,
73
+ } ScanOptions;
66
74
 
67
75
  /*
68
76
  * Result codes for table_{update,delete,lock_tuple}, and for visibility
@@ -99,7 +107,7 @@ typedef enum TM_Result
99
107
  TM_BeingModified,
100
108
 
101
109
  /* lock couldn't be acquired, action skipped. Only used by lock_tuple */
102
- TM_WouldBlock
110
+ TM_WouldBlock,
103
111
  } TM_Result;
104
112
 
105
113
  /*
@@ -115,7 +123,7 @@ typedef enum TU_UpdateIndexes
115
123
  TU_All,
116
124
 
117
125
  /* Only summarized columns were updated, TID is unchanged */
118
- TU_Summarizing
126
+ TU_Summarizing,
119
127
  } TU_UpdateIndexes;
120
128
 
121
129
  /*
@@ -129,7 +137,8 @@ typedef enum TU_UpdateIndexes
129
137
  *
130
138
  * xmax is the outdating transaction's XID. If the caller wants to visit the
131
139
  * replacement tuple, it must check that this matches before believing the
132
- * replacement is really a match.
140
+ * replacement is really a match. This is InvalidTransactionId if the target
141
+ * was !LP_NORMAL (expected only for a TID retrieved from syscache).
133
142
  *
134
143
  * cmax is the outdating command's CID, but only when the failure code is
135
144
  * TM_SelfModified (i.e., something in the current transaction outdated the
@@ -617,8 +626,8 @@ typedef struct TableAmRoutine
617
626
  const RelFileLocator *newrlocator);
618
627
 
619
628
  /* See table_relation_copy_for_cluster() */
620
- void (*relation_copy_for_cluster) (Relation NewTable,
621
- Relation OldTable,
629
+ void (*relation_copy_for_cluster) (Relation OldTable,
630
+ Relation NewTable,
622
631
  Relation OldIndex,
623
632
  bool use_sort,
624
633
  TransactionId OldestXmin,
@@ -665,8 +674,7 @@ typedef struct TableAmRoutine
665
674
  * isn't one yet.
666
675
  */
667
676
  bool (*scan_analyze_next_block) (TableScanDesc scan,
668
- BlockNumber blockno,
669
- BufferAccessStrategy bstrategy);
677
+ ReadStream *stream);
670
678
 
671
679
  /*
672
680
  * See table_scan_analyze_next_tuple().
@@ -944,10 +952,13 @@ table_beginscan_strat(Relation rel, Snapshot snapshot,
944
952
  */
945
953
  static inline TableScanDesc
946
954
  table_beginscan_bm(Relation rel, Snapshot snapshot,
947
- int nkeys, struct ScanKeyData *key)
955
+ int nkeys, struct ScanKeyData *key, bool need_tuple)
948
956
  {
949
957
  uint32 flags = SO_TYPE_BITMAPSCAN | SO_ALLOW_PAGEMODE;
950
958
 
959
+ if (need_tuple)
960
+ flags |= SO_NEED_TUPLES;
961
+
951
962
  return rel->rd_tableam->scan_begin(rel, snapshot, nkeys, key, NULL, flags);
952
963
  }
953
964
 
@@ -1038,11 +1049,6 @@ table_rescan_set_params(TableScanDesc scan, struct ScanKeyData *key,
1038
1049
  allow_pagemode);
1039
1050
  }
1040
1051
 
1041
- /*
1042
- * Update snapshot used by the scan.
1043
- */
1044
- extern void table_scan_update_snapshot(TableScanDesc scan, Snapshot snapshot);
1045
-
1046
1052
  /*
1047
1053
  * Return next tuple from `scan`, store in slot.
1048
1054
  */
@@ -1479,8 +1485,8 @@ table_multi_insert(Relation rel, TupleTableSlot **slots, int nslots,
1479
1485
  * TM_BeingModified (the last only possible if wait == false).
1480
1486
  *
1481
1487
  * In the failure cases, the routine fills *tmfd with the tuple's t_ctid,
1482
- * t_xmax, and, if possible, and, if possible, t_cmax. See comments for
1483
- * struct TM_FailureData for additional info.
1488
+ * t_xmax, and, if possible, t_cmax. See comments for struct
1489
+ * TM_FailureData for additional info.
1484
1490
  */
1485
1491
  static inline TM_Result
1486
1492
  table_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
@@ -1706,19 +1712,17 @@ table_relation_vacuum(Relation rel, struct VacuumParams *params,
1706
1712
  }
1707
1713
 
1708
1714
  /*
1709
- * Prepare to analyze block `blockno` of `scan`. The scan needs to have been
1710
- * started with table_beginscan_analyze(). Note that this routine might
1711
- * acquire resources like locks that are held until
1715
+ * Prepare to analyze the next block in the read stream. The scan needs to
1716
+ * have been started with table_beginscan_analyze(). Note that this routine
1717
+ * might acquire resources like locks that are held until
1712
1718
  * table_scan_analyze_next_tuple() returns false.
1713
1719
  *
1714
1720
  * Returns false if block is unsuitable for sampling, true otherwise.
1715
1721
  */
1716
1722
  static inline bool
1717
- table_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno,
1718
- BufferAccessStrategy bstrategy)
1723
+ table_scan_analyze_next_block(TableScanDesc scan, ReadStream *stream)
1719
1724
  {
1720
- return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan, blockno,
1721
- bstrategy);
1725
+ return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan, stream);
1722
1726
  }
1723
1727
 
1724
1728
  /*
@@ -2095,6 +2099,12 @@ extern void table_block_relation_estimate_size(Relation rel,
2095
2099
  */
2096
2100
 
2097
2101
  extern const TableAmRoutine *GetTableAmRoutine(Oid amhandler);
2102
+
2103
+ /* ----------------------------------------------------------------------------
2104
+ * Functions in heapam_handler.c
2105
+ * ----------------------------------------------------------------------------
2106
+ */
2107
+
2098
2108
  extern const TableAmRoutine *GetHeapamTableAmRoutine(void);
2099
2109
 
2100
2110
  #endif /* TABLEAM_H */
@@ -0,0 +1,50 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * tidstore.h
4
+ * TidStore interface.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/access/tidstore.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef TIDSTORE_H
15
+ #define TIDSTORE_H
16
+
17
+ #include "storage/itemptr.h"
18
+ #include "utils/dsa.h"
19
+
20
+ typedef struct TidStore TidStore;
21
+ typedef struct TidStoreIter TidStoreIter;
22
+
23
+ /* Result struct for TidStoreIterateNext */
24
+ typedef struct TidStoreIterResult
25
+ {
26
+ BlockNumber blkno;
27
+ int max_offset;
28
+ int num_offsets;
29
+ OffsetNumber *offsets;
30
+ } TidStoreIterResult;
31
+
32
+ extern TidStore *TidStoreCreateLocal(size_t max_bytes, bool insert_only);
33
+ extern TidStore *TidStoreCreateShared(size_t max_bytes, int tranche_id);
34
+ extern TidStore *TidStoreAttach(dsa_handle area_handle, dsa_pointer handle);
35
+ extern void TidStoreDetach(TidStore *ts);
36
+ extern void TidStoreLockExclusive(TidStore *ts);
37
+ extern void TidStoreLockShare(TidStore *ts);
38
+ extern void TidStoreUnlock(TidStore *ts);
39
+ extern void TidStoreDestroy(TidStore *ts);
40
+ extern void TidStoreSetBlockOffsets(TidStore *ts, BlockNumber blkno, OffsetNumber *offsets,
41
+ int num_offsets);
42
+ extern bool TidStoreIsMember(TidStore *ts, ItemPointer tid);
43
+ extern TidStoreIter *TidStoreBeginIterate(TidStore *ts);
44
+ extern TidStoreIterResult *TidStoreIterateNext(TidStoreIter *iter);
45
+ extern void TidStoreEndIterate(TidStoreIter *iter);
46
+ extern size_t TidStoreMemoryUsage(TidStore *ts);
47
+ extern dsa_pointer TidStoreGetHandle(TidStore *ts);
48
+ extern dsa_area *TidStoreGetDSA(TidStore *ts);
49
+
50
+ #endif /* TIDSTORE_H */
@@ -3,7 +3,7 @@
3
3
  * toast_compression.h
4
4
  * Functions for toast compression.
5
5
  *
6
- * Copyright (c) 2021-2023, PostgreSQL Global Development Group
6
+ * Copyright (c) 2021-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/access/toast_compression.h
9
9
  *
@@ -38,7 +38,7 @@ typedef enum ToastCompressionId
38
38
  {
39
39
  TOAST_PGLZ_COMPRESSION_ID = 0,
40
40
  TOAST_LZ4_COMPRESSION_ID = 1,
41
- TOAST_INVALID_COMPRESSION_ID = 2
41
+ TOAST_INVALID_COMPRESSION_ID = 2,
42
42
  } ToastCompressionId;
43
43
 
44
44
  /*
@@ -4,7 +4,7 @@
4
4
  * postgres transaction access method support code
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/access/transam.h
@@ -197,7 +197,7 @@ FullTransactionIdAdvance(FullTransactionId *dest)
197
197
  #define FirstNormalObjectId 16384
198
198
 
199
199
  /*
200
- * VariableCache is a data structure in shared memory that is used to track
200
+ * TransamVariables is a data structure in shared memory that is used to track
201
201
  * OID and XID assignment state. For largely historical reasons, there is
202
202
  * just one struct with different fields that are protected by different
203
203
  * LWLocks.
@@ -206,7 +206,7 @@ FullTransactionIdAdvance(FullTransactionId *dest)
206
206
  * used just to generate useful messages when xidWarnLimit or xidStopLimit
207
207
  * are exceeded.
208
208
  */
209
- typedef struct VariableCacheData
209
+ typedef struct TransamVariablesData
210
210
  {
211
211
  /*
212
212
  * These fields are protected by OidGenLock.
@@ -252,9 +252,7 @@ typedef struct VariableCacheData
252
252
  */
253
253
  TransactionId oldestClogXid; /* oldest it's safe to look up in clog */
254
254
 
255
- } VariableCacheData;
256
-
257
- typedef VariableCacheData *VariableCache;
255
+ } TransamVariablesData;
258
256
 
259
257
 
260
258
  /* ----------------
@@ -266,7 +264,7 @@ typedef VariableCacheData *VariableCache;
266
264
  extern bool TransactionStartedDuringRecovery(void);
267
265
 
268
266
  /* in transam/varsup.c */
269
- extern PGDLLIMPORT VariableCache ShmemVariableCache;
267
+ extern PGDLLIMPORT TransamVariablesData *TransamVariables;
270
268
 
271
269
  /*
272
270
  * prototypes for functions in transam/transam.c
@@ -285,6 +283,8 @@ extern TransactionId TransactionIdLatest(TransactionId mainxid,
285
283
  extern XLogRecPtr TransactionIdGetCommitLSN(TransactionId xid);
286
284
 
287
285
  /* in transam/varsup.c */
286
+ extern Size VarsupShmemSize(void);
287
+ extern void VarsupShmemInit(void);
288
288
  extern FullTransactionId GetNewTransactionId(bool isSubXact);
289
289
  extern void AdvanceNextFullTransactionIdPastXid(TransactionId xid);
290
290
  extern FullTransactionId ReadNextFullTransactionId(void);
@@ -370,6 +370,49 @@ FullTransactionIdNewer(FullTransactionId a, FullTransactionId b)
370
370
  return b;
371
371
  }
372
372
 
373
+ /*
374
+ * Compute FullTransactionId for the given TransactionId, assuming xid was
375
+ * between [oldestXid, nextXid] at the time when TransamVariables->nextXid was
376
+ * nextFullXid. When adding calls, evaluate what prevents xid from preceding
377
+ * oldestXid if SetTransactionIdLimit() runs between the collection of xid and
378
+ * the collection of nextFullXid.
379
+ */
380
+ static inline FullTransactionId
381
+ FullTransactionIdFromAllowableAt(FullTransactionId nextFullXid,
382
+ TransactionId xid)
383
+ {
384
+ uint32 epoch;
385
+
386
+ /* Special transaction ID. */
387
+ if (!TransactionIdIsNormal(xid))
388
+ return FullTransactionIdFromEpochAndXid(0, xid);
389
+
390
+ Assert(TransactionIdPrecedesOrEquals(xid,
391
+ XidFromFullTransactionId(nextFullXid)));
392
+
393
+ /*
394
+ * The 64 bit result must be <= nextFullXid, since nextFullXid hadn't been
395
+ * issued yet when xid was in the past. The xid must therefore be from
396
+ * the epoch of nextFullXid or the epoch before. We know this because we
397
+ * must remove (by freezing) an XID before assigning the XID half an epoch
398
+ * ahead of it.
399
+ *
400
+ * The unlikely() branch hint is dubious. It's perfect for the first 2^32
401
+ * XIDs of a cluster's life. Right at 2^32 XIDs, misprediction shoots to
402
+ * 100%, then improves until perfection returns 2^31 XIDs later. Since
403
+ * current callers pass relatively-recent XIDs, expect >90% prediction
404
+ * accuracy overall. This favors average latency over tail latency.
405
+ */
406
+ epoch = EpochFromFullTransactionId(nextFullXid);
407
+ if (unlikely(xid > XidFromFullTransactionId(nextFullXid)))
408
+ {
409
+ Assert(epoch != 0);
410
+ epoch--;
411
+ }
412
+
413
+ return FullTransactionIdFromEpochAndXid(epoch, xid);
414
+ }
415
+
373
416
  #endif /* FRONTEND */
374
417
 
375
418
  #endif /* TRANSAM_H */
@@ -3,7 +3,7 @@
3
3
  * tsmapi.h
4
4
  * API for tablesample methods
5
5
  *
6
- * Copyright (c) 2015-2023, PostgreSQL Global Development Group
6
+ * Copyright (c) 2015-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/access/tsmapi.h
9
9
  *
@@ -4,7 +4,7 @@
4
4
  * Tuple conversion support.
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/access/tupconvert.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES tuple descriptor 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/access/tupdesc.h
@@ -126,8 +126,8 @@ extern void DecrTupleDescRefCount(TupleDesc tupdesc);
126
126
  } while (0)
127
127
 
128
128
  extern bool equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2);
129
-
130
- extern uint32 hashTupleDesc(TupleDesc desc);
129
+ extern bool equalRowTypes(TupleDesc tupdesc1, TupleDesc tupdesc2);
130
+ extern uint32 hashRowType(TupleDesc desc);
131
131
 
132
132
  extern void TupleDescInitEntry(TupleDesc desc,
133
133
  AttrNumber attributeNumber,
@@ -147,8 +147,8 @@ extern void TupleDescInitEntryCollation(TupleDesc desc,
147
147
  AttrNumber attributeNumber,
148
148
  Oid collationid);
149
149
 
150
- extern TupleDesc BuildDescForRelation(List *schema);
150
+ extern TupleDesc BuildDescFromLists(const List *names, const List *types, const List *typmods, const List *collations);
151
151
 
152
- extern TupleDesc BuildDescFromLists(List *names, List *types, List *typmods, List *collations);
152
+ extern Node *TupleDescGetDefault(TupleDesc tupdesc, AttrNumber attnum);
153
153
 
154
154
  #endif /* TUPDESC_H */
@@ -4,7 +4,7 @@
4
4
  * Tuple macros used by both index tuples and heap tuples.
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/access/tupmacs.h
@@ -4,7 +4,7 @@
4
4
  * Two-phase-commit related declarations.
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/access/twophase.h
@@ -37,7 +37,7 @@ extern void PostPrepare_Twophase(void);
37
37
  extern TransactionId TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid,
38
38
  bool *have_more);
39
39
  extern PGPROC *TwoPhaseGetDummyProc(TransactionId xid, bool lock_held);
40
- extern BackendId TwoPhaseGetDummyBackendId(TransactionId xid, bool lock_held);
40
+ extern int TwoPhaseGetDummyProcNumber(TransactionId xid, bool lock_held);
41
41
 
42
42
  extern GlobalTransaction MarkAsPreparing(TransactionId xid, const char *gid,
43
43
  TimestampTz prepared_at,