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
@@ -0,0 +1,221 @@
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
+ /*
132
+ * Bitmask to determine bank number from page number.
133
+ */
134
+ bits16 bank_mask;
135
+
136
+ /*
137
+ * If true, use long segment file names. Otherwise, use short file names.
138
+ *
139
+ * For details about the file name format, see SlruFileName().
140
+ */
141
+ bool long_segment_names;
142
+
143
+ /*
144
+ * Which sync handler function to use when handing sync requests over to
145
+ * the checkpointer. SYNC_HANDLER_NONE to disable fsync (eg pg_notify).
146
+ */
147
+ SyncRequestHandler sync_handler;
148
+
149
+ /*
150
+ * Decide whether a page is "older" for truncation and as a hint for
151
+ * evicting pages in LRU order. Return true if every entry of the first
152
+ * argument is older than every entry of the second argument. Note that
153
+ * !PagePrecedes(a,b) && !PagePrecedes(b,a) need not imply a==b; it also
154
+ * arises when some entries are older and some are not. For SLRUs using
155
+ * SimpleLruTruncate(), this must use modular arithmetic. (For others,
156
+ * the behavior of this callback has no functional implications.) Use
157
+ * SlruPagePrecedesUnitTests() in SLRUs meeting its criteria.
158
+ */
159
+ bool (*PagePrecedes) (int64, int64);
160
+
161
+ /*
162
+ * Dir is set during SimpleLruInit and does not change thereafter. Since
163
+ * it's always the same, it doesn't need to be in shared memory.
164
+ */
165
+ char Dir[64];
166
+
167
+ } SlruCtlData;
168
+
169
+ typedef SlruCtlData *SlruCtl;
170
+
171
+ /*
172
+ * Get the SLRU bank lock for given SlruCtl and the pageno.
173
+ *
174
+ * This lock needs to be acquired to access the slru buffer slots in the
175
+ * respective bank.
176
+ */
177
+ static inline LWLock *
178
+ SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)
179
+ {
180
+ int bankno;
181
+
182
+ bankno = pageno & ctl->bank_mask;
183
+ return &(ctl->shared->bank_locks[bankno].lock);
184
+ }
185
+
186
+ extern Size SimpleLruShmemSize(int nslots, int nlsns);
187
+ extern int SimpleLruAutotuneBuffers(int divisor, int max);
188
+ extern void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns,
189
+ const char *subdir, int buffer_tranche_id,
190
+ int bank_tranche_id, SyncRequestHandler sync_handler,
191
+ bool long_segment_names);
192
+ extern int SimpleLruZeroPage(SlruCtl ctl, int64 pageno);
193
+ extern int SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok,
194
+ TransactionId xid);
195
+ extern int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno,
196
+ TransactionId xid);
197
+ extern void SimpleLruWritePage(SlruCtl ctl, int slotno);
198
+ extern void SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied);
199
+ #ifdef USE_ASSERT_CHECKING
200
+ extern void SlruPagePrecedesUnitTests(SlruCtl ctl, int per_page);
201
+ #else
202
+ #define SlruPagePrecedesUnitTests(ctl, per_page) do {} while (0)
203
+ #endif
204
+ extern void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage);
205
+ extern bool SimpleLruDoesPhysicalPageExist(SlruCtl ctl, int64 pageno);
206
+
207
+ typedef bool (*SlruScanCallback) (SlruCtl ctl, char *filename, int64 segpage,
208
+ void *data);
209
+ extern bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data);
210
+ extern void SlruDeleteSegment(SlruCtl ctl, int64 segno);
211
+
212
+ extern int SlruSyncFileTag(SlruCtl ctl, const FileTag *ftag, char *path);
213
+
214
+ /* SlruScanDirectory public callbacks */
215
+ extern bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename,
216
+ int64 segpage, void *data);
217
+ extern bool SlruScanDirCbDeleteAll(SlruCtl ctl, char *filename, int64 segpage,
218
+ void *data);
219
+ extern bool check_slru_buffers(const char *name, int *newval);
220
+
221
+ #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
  /*
@@ -617,8 +625,8 @@ typedef struct TableAmRoutine
617
625
  const RelFileLocator *newrlocator);
618
626
 
619
627
  /* See table_relation_copy_for_cluster() */
620
- void (*relation_copy_for_cluster) (Relation NewTable,
621
- Relation OldTable,
628
+ void (*relation_copy_for_cluster) (Relation OldTable,
629
+ Relation NewTable,
622
630
  Relation OldIndex,
623
631
  bool use_sort,
624
632
  TransactionId OldestXmin,
@@ -665,8 +673,7 @@ typedef struct TableAmRoutine
665
673
  * isn't one yet.
666
674
  */
667
675
  bool (*scan_analyze_next_block) (TableScanDesc scan,
668
- BlockNumber blockno,
669
- BufferAccessStrategy bstrategy);
676
+ ReadStream *stream);
670
677
 
671
678
  /*
672
679
  * See table_scan_analyze_next_tuple().
@@ -944,10 +951,13 @@ table_beginscan_strat(Relation rel, Snapshot snapshot,
944
951
  */
945
952
  static inline TableScanDesc
946
953
  table_beginscan_bm(Relation rel, Snapshot snapshot,
947
- int nkeys, struct ScanKeyData *key)
954
+ int nkeys, struct ScanKeyData *key, bool need_tuple)
948
955
  {
949
956
  uint32 flags = SO_TYPE_BITMAPSCAN | SO_ALLOW_PAGEMODE;
950
957
 
958
+ if (need_tuple)
959
+ flags |= SO_NEED_TUPLES;
960
+
951
961
  return rel->rd_tableam->scan_begin(rel, snapshot, nkeys, key, NULL, flags);
952
962
  }
953
963
 
@@ -1038,11 +1048,6 @@ table_rescan_set_params(TableScanDesc scan, struct ScanKeyData *key,
1038
1048
  allow_pagemode);
1039
1049
  }
1040
1050
 
1041
- /*
1042
- * Update snapshot used by the scan.
1043
- */
1044
- extern void table_scan_update_snapshot(TableScanDesc scan, Snapshot snapshot);
1045
-
1046
1051
  /*
1047
1052
  * Return next tuple from `scan`, store in slot.
1048
1053
  */
@@ -1479,8 +1484,8 @@ table_multi_insert(Relation rel, TupleTableSlot **slots, int nslots,
1479
1484
  * TM_BeingModified (the last only possible if wait == false).
1480
1485
  *
1481
1486
  * 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.
1487
+ * t_xmax, and, if possible, t_cmax. See comments for struct
1488
+ * TM_FailureData for additional info.
1484
1489
  */
1485
1490
  static inline TM_Result
1486
1491
  table_tuple_delete(Relation rel, ItemPointer tid, CommandId cid,
@@ -1706,19 +1711,17 @@ table_relation_vacuum(Relation rel, struct VacuumParams *params,
1706
1711
  }
1707
1712
 
1708
1713
  /*
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
1714
+ * Prepare to analyze the next block in the read stream. The scan needs to
1715
+ * have been started with table_beginscan_analyze(). Note that this routine
1716
+ * might acquire resources like locks that are held until
1712
1717
  * table_scan_analyze_next_tuple() returns false.
1713
1718
  *
1714
1719
  * Returns false if block is unsuitable for sampling, true otherwise.
1715
1720
  */
1716
1721
  static inline bool
1717
- table_scan_analyze_next_block(TableScanDesc scan, BlockNumber blockno,
1718
- BufferAccessStrategy bstrategy)
1722
+ table_scan_analyze_next_block(TableScanDesc scan, ReadStream *stream)
1719
1723
  {
1720
- return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan, blockno,
1721
- bstrategy);
1724
+ return scan->rs_rd->rd_tableam->scan_analyze_next_block(scan, stream);
1722
1725
  }
1723
1726
 
1724
1727
  /*
@@ -2095,6 +2098,12 @@ extern void table_block_relation_estimate_size(Relation rel,
2095
2098
  */
2096
2099
 
2097
2100
  extern const TableAmRoutine *GetTableAmRoutine(Oid amhandler);
2101
+
2102
+ /* ----------------------------------------------------------------------------
2103
+ * Functions in heapam_handler.c
2104
+ * ----------------------------------------------------------------------------
2105
+ */
2106
+
2098
2107
  extern const TableAmRoutine *GetHeapamTableAmRoutine(void);
2099
2108
 
2100
2109
  #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);
@@ -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,
@@ -4,7 +4,7 @@
4
4
  * postgres transaction system 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/xact.h
@@ -72,8 +72,8 @@ typedef enum
72
72
  SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote
73
73
  * write */
74
74
  SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */
75
- SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush and
76
- * remote apply */
75
+ SYNCHRONOUS_COMMIT_REMOTE_APPLY, /* wait for local and remote flush and
76
+ * remote apply */
77
77
  } SyncCommitLevel;
78
78
 
79
79
  /* Define the default setting for synchronous_commit */
@@ -132,7 +132,7 @@ typedef enum
132
132
  XACT_EVENT_PREPARE,
133
133
  XACT_EVENT_PRE_COMMIT,
134
134
  XACT_EVENT_PARALLEL_PRE_COMMIT,
135
- XACT_EVENT_PRE_PREPARE
135
+ XACT_EVENT_PRE_PREPARE,
136
136
  } XactEvent;
137
137
 
138
138
  typedef void (*XactCallback) (XactEvent event, void *arg);
@@ -142,7 +142,7 @@ typedef enum
142
142
  SUBXACT_EVENT_START_SUB,
143
143
  SUBXACT_EVENT_COMMIT_SUB,
144
144
  SUBXACT_EVENT_ABORT_SUB,
145
- SUBXACT_EVENT_PRE_COMMIT_SUB
145
+ SUBXACT_EVENT_PRE_COMMIT_SUB,
146
146
  } SubXactEvent;
147
147
 
148
148
  typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,