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
@@ -4,7 +4,7 @@
4
4
  * POSTGRES low-level lock mechanism
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/storage/lock.h
@@ -19,9 +19,9 @@
19
19
  #endif
20
20
 
21
21
  #include "lib/ilist.h"
22
- #include "storage/backendid.h"
23
22
  #include "storage/lockdefs.h"
24
23
  #include "storage/lwlock.h"
24
+ #include "storage/procnumber.h"
25
25
  #include "storage/shmem.h"
26
26
  #include "utils/timestamp.h"
27
27
 
@@ -42,7 +42,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
42
42
 
43
43
  /*
44
44
  * Top-level transactions are identified by VirtualTransactionIDs comprising
45
- * PGPROC fields backendId and lxid. For recovered prepared transactions, the
45
+ * PGPROC fields procNumber and lxid. For recovered prepared transactions, the
46
46
  * LocalTransactionId is an ordinary XID; LOCKTAG_VIRTUALTRANSACTION never
47
47
  * refers to that kind. These are guaranteed unique over the short term, but
48
48
  * will be reused after a database restart or XID wraparound; hence they
@@ -50,7 +50,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
50
50
  *
51
51
  * Note that struct VirtualTransactionId can not be assumed to be atomically
52
52
  * assignable as a whole. However, type LocalTransactionId is assumed to
53
- * be atomically assignable, and the backend ID doesn't change often enough
53
+ * be atomically assignable, and the proc number doesn't change often enough
54
54
  * to be a problem, so we can fetch or assign the two fields separately.
55
55
  * We deliberately refrain from using the struct within PGPROC, to prevent
56
56
  * coding errors from trying to use struct assignment with it; instead use
@@ -58,7 +58,7 @@ extern PGDLLIMPORT bool Debug_deadlocks;
58
58
  */
59
59
  typedef struct
60
60
  {
61
- BackendId backendId; /* backendId from PGPROC */
61
+ ProcNumber procNumber; /* proc number of the PGPROC */
62
62
  LocalTransactionId localTransactionId; /* lxid from PGPROC */
63
63
  } VirtualTransactionId;
64
64
 
@@ -67,16 +67,16 @@ typedef struct
67
67
  #define VirtualTransactionIdIsValid(vxid) \
68
68
  (LocalTransactionIdIsValid((vxid).localTransactionId))
69
69
  #define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
70
- ((vxid).backendId == InvalidBackendId)
70
+ ((vxid).procNumber == INVALID_PROC_NUMBER)
71
71
  #define VirtualTransactionIdEquals(vxid1, vxid2) \
72
- ((vxid1).backendId == (vxid2).backendId && \
72
+ ((vxid1).procNumber == (vxid2).procNumber && \
73
73
  (vxid1).localTransactionId == (vxid2).localTransactionId)
74
74
  #define SetInvalidVirtualTransactionId(vxid) \
75
- ((vxid).backendId = InvalidBackendId, \
75
+ ((vxid).procNumber = INVALID_PROC_NUMBER, \
76
76
  (vxid).localTransactionId = InvalidLocalTransactionId)
77
- #define GET_VXID_FROM_PGPROC(vxid, proc) \
78
- ((vxid).backendId = (proc).backendId, \
79
- (vxid).localTransactionId = (proc).lxid)
77
+ #define GET_VXID_FROM_PGPROC(vxid_dst, proc) \
78
+ ((vxid_dst).procNumber = (proc).vxid.procNumber, \
79
+ (vxid_dst).localTransactionId = (proc).vxid.lxid)
80
80
 
81
81
  /* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
82
82
  #define MAX_LOCKMODES 10
@@ -145,7 +145,7 @@ typedef enum LockTagType
145
145
  LOCKTAG_OBJECT, /* non-relation database object */
146
146
  LOCKTAG_USERLOCK, /* reserved for old contrib/userlock code */
147
147
  LOCKTAG_ADVISORY, /* advisory user locks */
148
- LOCKTAG_APPLY_TRANSACTION /* transaction being applied on a logical
148
+ LOCKTAG_APPLY_TRANSACTION, /* transaction being applied on a logical
149
149
  * replication subscriber */
150
150
  } LockTagType;
151
151
 
@@ -233,7 +233,7 @@ typedef struct LOCKTAG
233
233
 
234
234
  /* ID info for a virtual transaction is its VirtualTransactionId */
235
235
  #define SET_LOCKTAG_VIRTUALTRANSACTION(locktag,vxid) \
236
- ((locktag).locktag_field1 = (vxid).backendId, \
236
+ ((locktag).locktag_field1 = (vxid).procNumber, \
237
237
  (locktag).locktag_field2 = (vxid).localTransactionId, \
238
238
  (locktag).locktag_field3 = 0, \
239
239
  (locktag).locktag_field4 = 0, \
@@ -454,8 +454,7 @@ typedef struct LockInstanceData
454
454
  LOCKTAG locktag; /* tag for locked object */
455
455
  LOCKMASK holdMask; /* locks held by this PGPROC */
456
456
  LOCKMODE waitLockMode; /* lock awaited by this PGPROC, if any */
457
- BackendId backend; /* backend ID of this PGPROC */
458
- LocalTransactionId lxid; /* local transaction ID of this PGPROC */
457
+ VirtualTransactionId vxid; /* virtual transaction ID of this PGPROC */
459
458
  TimestampTz waitStart; /* time at which this PGPROC started waiting
460
459
  * for lock */
461
460
  int pid; /* pid of this PGPROC */
@@ -502,7 +501,7 @@ typedef enum
502
501
  LOCKACQUIRE_NOT_AVAIL, /* lock not available, and dontWait=true */
503
502
  LOCKACQUIRE_OK, /* lock successfully acquired */
504
503
  LOCKACQUIRE_ALREADY_HELD, /* incremented count for lock already held */
505
- LOCKACQUIRE_ALREADY_CLEAR /* incremented count for lock already clear */
504
+ LOCKACQUIRE_ALREADY_CLEAR, /* incremented count for lock already clear */
506
505
  } LockAcquireResult;
507
506
 
508
507
  /* Deadlock states identified by DeadLockCheck() */
@@ -512,7 +511,7 @@ typedef enum
512
511
  DS_NO_DEADLOCK, /* no deadlock detected */
513
512
  DS_SOFT_DEADLOCK, /* deadlock avoided by queue rearrangement */
514
513
  DS_HARD_DEADLOCK, /* deadlock, no way out but ERROR */
515
- DS_BLOCKED_BY_AUTOVACUUM /* no deadlock; queue blocked by autovacuum
514
+ DS_BLOCKED_BY_AUTOVACUUM, /* no deadlock; queue blocked by autovacuum
516
515
  * worker */
517
516
  } DeadLockState;
518
517
 
@@ -540,7 +539,7 @@ typedef enum
540
539
  * used for a given lock group is determined by the group leader's pgprocno.
541
540
  */
542
541
  #define LockHashPartitionLockByProc(leader_pgproc) \
543
- LockHashPartitionLock((leader_pgproc)->pgprocno)
542
+ LockHashPartitionLock(GetNumberFromPGProc(leader_pgproc))
544
543
 
545
544
  /*
546
545
  * function prototypes
@@ -568,7 +567,8 @@ extern void LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks);
568
567
  extern void LockReleaseSession(LOCKMETHODID lockmethodid);
569
568
  extern void LockReleaseCurrentOwner(LOCALLOCK **locallocks, int nlocks);
570
569
  extern void LockReassignCurrentOwner(LOCALLOCK **locallocks, int nlocks);
571
- extern bool LockHeldByMe(const LOCKTAG *locktag, LOCKMODE lockmode);
570
+ extern bool LockHeldByMe(const LOCKTAG *locktag,
571
+ LOCKMODE lockmode, bool orstronger);
572
572
  #ifdef USE_ASSERT_CHECKING
573
573
  extern HTAB *GetLockMethodLocalHash(void);
574
574
  #endif
@@ -7,7 +7,7 @@
7
7
  * contains definition that have to (indirectly) be available when included by
8
8
  * FRONTEND code.
9
9
  *
10
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1994, Regents of the University of California
12
12
  *
13
13
  * src/include/storage/lockdefs.h
@@ -47,6 +47,8 @@ typedef int LOCKMODE;
47
47
 
48
48
  #define MaxLockMode 8 /* highest standard lock mode */
49
49
 
50
+ /* See README.tuplock section "Locking to write inplace-updated tables" */
51
+ #define InplaceUpdateTupleLock ExclusiveLock
50
52
 
51
53
  /* WAL representation of an AccessExclusiveLock on a table */
52
54
  typedef struct xl_standby_lock
@@ -4,7 +4,7 @@
4
4
  * Lightweight lock manager
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/storage/lwlock.h
@@ -19,6 +19,7 @@
19
19
  #endif
20
20
 
21
21
  #include "port/atomics.h"
22
+ #include "storage/lwlocknames.h"
22
23
  #include "storage/proclist_types.h"
23
24
 
24
25
  struct PGPROC;
@@ -82,9 +83,6 @@ typedef struct NamedLWLockTranche
82
83
  extern PGDLLIMPORT NamedLWLockTranche *NamedLWLockTrancheArray;
83
84
  extern PGDLLIMPORT int NamedLWLockTrancheRequests;
84
85
 
85
- /* Names for fixed lwlocks */
86
- #include "storage/lwlocknames.h"
87
-
88
86
  /*
89
87
  * It's a bit odd to declare NUM_BUFFER_PARTITIONS and NUM_LOCK_PARTITIONS
90
88
  * here, but we need them to figure out offsets within MainLWLockArray, and
@@ -115,7 +113,7 @@ typedef enum LWLockMode
115
113
  {
116
114
  LW_EXCLUSIVE,
117
115
  LW_SHARED,
118
- LW_WAIT_UNTIL_FREE /* A special mode used in PGPROC->lwWaitMode,
116
+ LW_WAIT_UNTIL_FREE, /* A special mode used in PGPROC->lwWaitMode,
119
117
  * when waiting for lock to become free. Not
120
118
  * to be used as LWLockAcquire argument */
121
119
  } LWLockMode;
@@ -129,14 +127,14 @@ extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
129
127
  extern bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode);
130
128
  extern bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode);
131
129
  extern void LWLockRelease(LWLock *lock);
132
- extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val);
130
+ extern void LWLockReleaseClearVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
133
131
  extern void LWLockReleaseAll(void);
134
132
  extern bool LWLockHeldByMe(LWLock *lock);
135
133
  extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
136
134
  extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
137
135
 
138
- extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval);
139
- extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 val);
136
+ extern bool LWLockWaitForVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 oldval, uint64 *newval);
137
+ extern void LWLockUpdateVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val);
140
138
 
141
139
  extern Size LWLockShmemSize(void);
142
140
  extern void CreateLWLocks(void);
@@ -207,7 +205,17 @@ typedef enum BuiltinTrancheIds
207
205
  LWTRANCHE_PGSTATS_DATA,
208
206
  LWTRANCHE_LAUNCHER_DSA,
209
207
  LWTRANCHE_LAUNCHER_HASH,
210
- LWTRANCHE_FIRST_USER_DEFINED
208
+ LWTRANCHE_DSM_REGISTRY_DSA,
209
+ LWTRANCHE_DSM_REGISTRY_HASH,
210
+ LWTRANCHE_COMMITTS_SLRU,
211
+ LWTRANCHE_MULTIXACTMEMBER_SLRU,
212
+ LWTRANCHE_MULTIXACTOFFSET_SLRU,
213
+ LWTRANCHE_NOTIFY_SLRU,
214
+ LWTRANCHE_SERIAL_SLRU,
215
+ LWTRANCHE_SUBTRANS_SLRU,
216
+ LWTRANCHE_XACT_SLRU,
217
+ LWTRANCHE_PARALLEL_VACUUM_DSA,
218
+ LWTRANCHE_FIRST_USER_DEFINED,
211
219
  } BuiltinTrancheIds;
212
220
 
213
221
  /*
@@ -1,4 +1,4 @@
1
- /* autogenerated from src/backend/storage/lmgr/lwlocknames.txt, do not edit */
1
+ /* autogenerated from src/include/storage/lwlocklist.h, do not edit */
2
2
  /* there is deliberately not an #ifndef LWLOCKNAMES_H here */
3
3
 
4
4
  #define ShmemIndexLock (&MainLWLockArray[1].lock)
@@ -10,11 +10,7 @@
10
10
  #define WALBufMappingLock (&MainLWLockArray[7].lock)
11
11
  #define WALWriteLock (&MainLWLockArray[8].lock)
12
12
  #define ControlFileLock (&MainLWLockArray[9].lock)
13
- #define XactSLRULock (&MainLWLockArray[11].lock)
14
- #define SubtransSLRULock (&MainLWLockArray[12].lock)
15
13
  #define MultiXactGenLock (&MainLWLockArray[13].lock)
16
- #define MultiXactOffsetSLRULock (&MainLWLockArray[14].lock)
17
- #define MultiXactMemberSLRULock (&MainLWLockArray[15].lock)
18
14
  #define RelCacheInitLock (&MainLWLockArray[16].lock)
19
15
  #define CheckpointerCommLock (&MainLWLockArray[17].lock)
20
16
  #define TwoPhaseStateLock (&MainLWLockArray[18].lock)
@@ -25,26 +21,27 @@
25
21
  #define AutovacuumScheduleLock (&MainLWLockArray[23].lock)
26
22
  #define SyncScanLock (&MainLWLockArray[24].lock)
27
23
  #define RelationMappingLock (&MainLWLockArray[25].lock)
28
- #define NotifySLRULock (&MainLWLockArray[26].lock)
29
24
  #define NotifyQueueLock (&MainLWLockArray[27].lock)
30
25
  #define SerializableXactHashLock (&MainLWLockArray[28].lock)
31
26
  #define SerializableFinishedListLock (&MainLWLockArray[29].lock)
32
27
  #define SerializablePredicateListLock (&MainLWLockArray[30].lock)
33
- #define SerialSLRULock (&MainLWLockArray[31].lock)
34
28
  #define SyncRepLock (&MainLWLockArray[32].lock)
35
29
  #define BackgroundWorkerLock (&MainLWLockArray[33].lock)
36
30
  #define DynamicSharedMemoryControlLock (&MainLWLockArray[34].lock)
37
31
  #define AutoFileLock (&MainLWLockArray[35].lock)
38
32
  #define ReplicationSlotAllocationLock (&MainLWLockArray[36].lock)
39
33
  #define ReplicationSlotControlLock (&MainLWLockArray[37].lock)
40
- #define CommitTsSLRULock (&MainLWLockArray[38].lock)
41
34
  #define CommitTsLock (&MainLWLockArray[39].lock)
42
35
  #define ReplicationOriginLock (&MainLWLockArray[40].lock)
43
36
  #define MultiXactTruncationLock (&MainLWLockArray[41].lock)
44
- #define OldSnapshotTimeMapLock (&MainLWLockArray[42].lock)
45
37
  #define LogicalRepWorkerLock (&MainLWLockArray[43].lock)
46
38
  #define XactTruncationLock (&MainLWLockArray[44].lock)
47
39
  #define WrapLimitsVacuumLock (&MainLWLockArray[46].lock)
48
40
  #define NotifyQueueTailLock (&MainLWLockArray[47].lock)
41
+ #define WaitEventCustomLock (&MainLWLockArray[48].lock)
42
+ #define WALSummarizerLock (&MainLWLockArray[49].lock)
43
+ #define DSMRegistryLock (&MainLWLockArray[50].lock)
44
+ #define InjectionPointLock (&MainLWLockArray[51].lock)
45
+ #define SerialControlLock (&MainLWLockArray[52].lock)
49
46
 
50
- #define NUM_INDIVIDUAL_LWLOCKS 48
47
+ #define NUM_INDIVIDUAL_LWLOCKS 53
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk "offset" 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/storage/off.h
@@ -10,7 +10,7 @@
10
10
  * be provided by each port.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * src/include/storage/pg_sema.h
@@ -14,7 +14,7 @@
14
14
  * only one ID number.
15
15
  *
16
16
  *
17
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
17
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
18
18
  * Portions Copyright (c) 1994, Regents of the University of California
19
19
  *
20
20
  * src/include/storage/pg_shmem.h
@@ -46,12 +46,13 @@ extern PGDLLIMPORT int shared_memory_type;
46
46
  extern PGDLLIMPORT int huge_pages;
47
47
  extern PGDLLIMPORT int huge_page_size;
48
48
 
49
- /* Possible values for huge_pages */
49
+ /* Possible values for huge_pages and huge_pages_status */
50
50
  typedef enum
51
51
  {
52
52
  HUGE_PAGES_OFF,
53
53
  HUGE_PAGES_ON,
54
- HUGE_PAGES_TRY
54
+ HUGE_PAGES_TRY, /* only for huge_pages */
55
+ HUGE_PAGES_UNKNOWN, /* only for huge_pages_status */
55
56
  } HugePagesType;
56
57
 
57
58
  /* Possible values for shared_memory_type */
@@ -59,7 +60,7 @@ typedef enum
59
60
  {
60
61
  SHMEM_TYPE_WINDOWS,
61
62
  SHMEM_TYPE_SYSV,
62
- SHMEM_TYPE_MMAP
63
+ SHMEM_TYPE_MMAP,
63
64
  } PGShmemType;
64
65
 
65
66
  #ifndef WIN32
@@ -4,7 +4,7 @@
4
4
  * routines for signaling between the postmaster and its child processes
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/storage/pmsignal.h
@@ -51,7 +51,7 @@ typedef enum
51
51
  {
52
52
  PMQUIT_NOT_SENT = 0, /* postmaster hasn't sent SIGQUIT */
53
53
  PMQUIT_FOR_CRASH, /* some other backend bought the farm */
54
- PMQUIT_FOR_STOP /* immediate stop was commanded */
54
+ PMQUIT_FOR_STOP, /* immediate stop was commanded */
55
55
  } QuitSignalReason;
56
56
 
57
57
  /* PMSignalData is an opaque struct, details known only within pmsignal.c */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES public predicate locking 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/storage/predicate.h
@@ -26,10 +26,6 @@ extern PGDLLIMPORT int max_predicate_locks_per_xact;
26
26
  extern PGDLLIMPORT int max_predicate_locks_per_relation;
27
27
  extern PGDLLIMPORT int max_predicate_locks_per_page;
28
28
 
29
-
30
- /* Number of SLRU buffers to use for Serial SLRU */
31
- #define NUM_SERIAL_BUFFERS 16
32
-
33
29
  /*
34
30
  * A handle used for sharing SERIALIZABLEXACT objects between the participants
35
31
  * in a parallel query.
@@ -4,7 +4,7 @@
4
4
  * per-process shared memory data structures
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/storage/proc.h
@@ -21,6 +21,7 @@
21
21
  #include "storage/lock.h"
22
22
  #include "storage/pg_sema.h"
23
23
  #include "storage/proclist_types.h"
24
+ #include "storage/procnumber.h"
24
25
 
25
26
  /*
26
27
  * Each backend advertises up to PGPROC_MAX_CACHED_SUBXIDS TransactionIds
@@ -84,12 +85,6 @@ struct XidCache
84
85
  */
85
86
  #define FP_LOCK_SLOTS_PER_BACKEND 16
86
87
 
87
- /*
88
- * An invalid pgprocno. Must be larger than the maximum number of PGPROC
89
- * structures we could possibly have. See comments for MAX_BACKENDS.
90
- */
91
- #define INVALID_PGPROCNO PG_INT32_MAX
92
-
93
88
  /*
94
89
  * Flags for PGPROC.delayChkptFlags
95
90
  *
@@ -186,28 +181,38 @@ struct PGPROC
186
181
  * vacuum must not remove tuples deleted by
187
182
  * xid >= xmin ! */
188
183
 
189
- LocalTransactionId lxid; /* local id of top-level transaction currently
190
- * being executed by this proc, if running;
191
- * else InvalidLocalTransactionId */
192
184
  int pid; /* Backend's process ID; 0 if prepared xact */
193
185
 
194
186
  int pgxactoff; /* offset into various ProcGlobal->arrays with
195
187
  * data mirrored from this PGPROC */
196
188
 
197
- int pgprocno; /* Number of this PGPROC in
198
- * ProcGlobal->allProcs array. This is set
199
- * once by InitProcGlobal().
200
- * ProcGlobal->allProcs[n].pgprocno == n */
189
+ /*
190
+ * Currently running top-level transaction's virtual xid. Together these
191
+ * form a VirtualTransactionId, but we don't use that struct because this
192
+ * is not atomically assignable as whole, and we want to enforce code to
193
+ * consider both parts separately. See comments at VirtualTransactionId.
194
+ */
195
+ struct
196
+ {
197
+ ProcNumber procNumber; /* For regular backends, equal to
198
+ * GetNumberFromPGProc(proc). For prepared
199
+ * xacts, ID of the original backend that
200
+ * processed the transaction. For unused
201
+ * PGPROC entries, INVALID_PROC_NUMBER. */
202
+ LocalTransactionId lxid; /* local id of top-level transaction
203
+ * currently * being executed by this
204
+ * proc, if running; else
205
+ * InvalidLocalTransactionId */
206
+ } vxid;
201
207
 
202
208
  /* These fields are zero while a backend is still starting up: */
203
- BackendId backendId; /* This backend's backend ID (if assigned) */
204
209
  Oid databaseId; /* OID of database this backend is using */
205
210
  Oid roleId; /* OID of role using this backend */
206
211
 
207
212
  Oid tempNamespaceId; /* OID of temp schema this backend is
208
213
  * using */
209
214
 
210
- bool isBackgroundWorker; /* true if background worker. */
215
+ bool isBackgroundWorker; /* true if not a regular backend. */
211
216
 
212
217
  /*
213
218
  * While in hot standby mode, shows that a conflict signal has been sent
@@ -281,7 +286,7 @@ struct PGPROC
281
286
  TransactionId clogGroupMemberXid; /* transaction id of clog group member */
282
287
  XidStatus clogGroupMemberXidStatus; /* transaction status of clog
283
288
  * group member */
284
- int clogGroupMemberPage; /* clog page corresponding to
289
+ int64 clogGroupMemberPage; /* clog page corresponding to
285
290
  * transaction id of clog group member */
286
291
  XLogRecPtr clogGroupMemberLsn; /* WAL location of commit record for clog
287
292
  * group member */
@@ -386,7 +391,7 @@ typedef struct PROC_HDR
386
391
  uint32 allProcCount;
387
392
  /* Head of list of free PGPROC structures */
388
393
  dlist_head freeProcs;
389
- /* Head of list of autovacuum's free PGPROC structures */
394
+ /* Head of list of autovacuum & special worker free PGPROC structures */
390
395
  dlist_head autovacFreeProcs;
391
396
  /* Head of list of bgworker free PGPROC structures */
392
397
  dlist_head bgworkerFreeProcs;
@@ -410,24 +415,39 @@ extern PGDLLIMPORT PROC_HDR *ProcGlobal;
410
415
 
411
416
  extern PGDLLIMPORT PGPROC *PreparedXactProcs;
412
417
 
413
- /* Accessor for PGPROC given a pgprocno. */
418
+ /*
419
+ * Accessors for getting PGPROC given a ProcNumber and vice versa.
420
+ */
414
421
  #define GetPGProcByNumber(n) (&ProcGlobal->allProcs[(n)])
422
+ #define GetNumberFromPGProc(proc) ((proc) - &ProcGlobal->allProcs[0])
423
+
424
+ /*
425
+ * We set aside some extra PGPROC structures for "special worker" processes,
426
+ * which are full-fledged backends (they can run transactions)
427
+ * but are unique animals that there's never more than one of.
428
+ * Currently there are two such processes: the autovacuum launcher
429
+ * and the slotsync worker.
430
+ */
431
+ #define NUM_SPECIAL_WORKER_PROCS 2
415
432
 
416
433
  /*
417
434
  * We set aside some extra PGPROC structures for auxiliary processes,
418
- * ie things that aren't full-fledged backends but need shmem access.
435
+ * ie things that aren't full-fledged backends (they cannot run transactions
436
+ * or take heavyweight locks) but need shmem access.
419
437
  *
420
- * Background writer, checkpointer, WAL writer and archiver run during normal
421
- * operation. Startup process and WAL receiver also consume 2 slots, but WAL
422
- * writer is launched only after startup has exited, so we only need 5 slots.
438
+ * Background writer, checkpointer, WAL writer, WAL summarizer, and archiver
439
+ * run during normal operation. Startup process and WAL receiver also consume
440
+ * 2 slots, but WAL writer is launched only after startup has exited, so we
441
+ * only need 6 slots.
423
442
  */
424
- #define NUM_AUXILIARY_PROCS 5
443
+ #define NUM_AUXILIARY_PROCS 6
425
444
 
426
445
  /* configurable options */
427
446
  extern PGDLLIMPORT int DeadlockTimeout;
428
447
  extern PGDLLIMPORT int StatementTimeout;
429
448
  extern PGDLLIMPORT int LockTimeout;
430
449
  extern PGDLLIMPORT int IdleInTransactionSessionTimeout;
450
+ extern PGDLLIMPORT int TransactionTimeout;
431
451
  extern PGDLLIMPORT int IdleSessionTimeout;
432
452
  extern PGDLLIMPORT bool log_lock_waits;
433
453
 
@@ -448,7 +468,9 @@ extern int GetStartupBufferPinWaitBufId(void);
448
468
  extern bool HaveNFreeProcs(int n, int *nfree);
449
469
  extern void ProcReleaseLocks(bool isCommit);
450
470
 
451
- extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable);
471
+ extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock,
472
+ LockMethod lockMethodTable,
473
+ bool dontWait);
452
474
  extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
453
475
  extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock);
454
476
  extern void CheckDeadLockAlert(void);
@@ -456,7 +478,7 @@ extern bool IsWaitingForLock(void);
456
478
  extern void LockErrorCleanup(void);
457
479
 
458
480
  extern void ProcWaitForSignal(uint32 wait_event_info);
459
- extern void ProcSendSignal(int pgprocno);
481
+ extern void ProcSendSignal(ProcNumber procNumber);
460
482
 
461
483
  extern PGPROC *AuxiliaryPidGetProc(int pid);
462
484
 
@@ -4,7 +4,7 @@
4
4
  * POSTGRES process array 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/storage/procarray.h
@@ -64,6 +64,10 @@ extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type);
64
64
  extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids,
65
65
  int nvxids, int type);
66
66
 
67
+ extern PGPROC *ProcNumberGetProc(int procNumber);
68
+ extern void ProcNumberGetTransactionIds(int procNumber, TransactionId *xid,
69
+ TransactionId *xmin, int *nsubxid,
70
+ bool *overflowed);
67
71
  extern PGPROC *BackendPidGetProc(int pid);
68
72
  extern PGPROC *BackendPidGetProcWithLock(int pid);
69
73
  extern int BackendXidGetPid(TransactionId xid);
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * See proclist.h for functions that operate on these types.
7
7
  *
8
- * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 2016-2024, PostgreSQL Global Development Group
9
9
  *
10
10
  * IDENTIFICATION
11
11
  * src/include/storage/proclist_types.h
@@ -15,28 +15,30 @@
15
15
  #ifndef PROCLIST_TYPES_H
16
16
  #define PROCLIST_TYPES_H
17
17
 
18
+ #include "storage/procnumber.h"
19
+
18
20
  /*
19
21
  * A node in a doubly-linked list of processes. The link fields contain
20
22
  * the 0-based PGPROC indexes of the next and previous process, or
21
- * INVALID_PGPROCNO in the next-link of the last node and the prev-link
23
+ * INVALID_PROC_NUMBER in the next-link of the last node and the prev-link
22
24
  * of the first node. A node that is currently not in any list
23
25
  * should have next == prev == 0; this is not a possible state for a node
24
26
  * that is in a list, because we disallow circularity.
25
27
  */
26
28
  typedef struct proclist_node
27
29
  {
28
- int next; /* pgprocno of the next PGPROC */
29
- int prev; /* pgprocno of the prev PGPROC */
30
+ ProcNumber next; /* pgprocno of the next PGPROC */
31
+ ProcNumber prev; /* pgprocno of the prev PGPROC */
30
32
  } proclist_node;
31
33
 
32
34
  /*
33
35
  * Header of a doubly-linked list of PGPROCs, identified by pgprocno.
34
- * An empty list is represented by head == tail == INVALID_PGPROCNO.
36
+ * An empty list is represented by head == tail == INVALID_PROC_NUMBER.
35
37
  */
36
38
  typedef struct proclist_head
37
39
  {
38
- int head; /* pgprocno of the head PGPROC */
39
- int tail; /* pgprocno of the tail PGPROC */
40
+ ProcNumber head; /* pgprocno of the head PGPROC */
41
+ ProcNumber tail; /* pgprocno of the tail PGPROC */
40
42
  } proclist_head;
41
43
 
42
44
  /*
@@ -44,8 +46,8 @@ typedef struct proclist_head
44
46
  */
45
47
  typedef struct proclist_mutable_iter
46
48
  {
47
- int cur; /* pgprocno of the current PGPROC */
48
- int next; /* pgprocno of the next PGPROC */
49
+ ProcNumber cur; /* pgprocno of the current PGPROC */
50
+ ProcNumber next; /* pgprocno of the next PGPROC */
49
51
  } proclist_mutable_iter;
50
52
 
51
53
  #endif /* PROCLIST_TYPES_H */
@@ -0,0 +1,43 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * procnumber.h
4
+ * definition of process number
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/storage/procnumber.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PROCNUMBER_H
15
+ #define PROCNUMBER_H
16
+
17
+ /*
18
+ * ProcNumber uniquely identifies an active backend or auxiliary process.
19
+ * It's assigned at backend startup after authentication, when the process
20
+ * adds itself to the proc array. It is an index into the proc array,
21
+ * starting from 0. Note that a ProcNumber can be reused for a different
22
+ * backend immediately after a backend exits.
23
+ */
24
+ typedef int ProcNumber;
25
+
26
+ #define INVALID_PROC_NUMBER (-1)
27
+
28
+ /*
29
+ * Proc number of this backend (same as GetNumberFromPGProc(MyProc))
30
+ */
31
+ extern PGDLLIMPORT ProcNumber MyProcNumber;
32
+
33
+ /* proc number of our parallel session leader, or INVALID_PROC_NUMBER if none */
34
+ extern PGDLLIMPORT ProcNumber ParallelLeaderProcNumber;
35
+
36
+ /*
37
+ * The ProcNumber to use for our session's temp relations is normally our own,
38
+ * but parallel workers should use their leader's proc number.
39
+ */
40
+ #define ProcNumberForTempRelations() \
41
+ (ParallelLeaderProcNumber == INVALID_PROC_NUMBER ? MyProcNumber : ParallelLeaderProcNumber)
42
+
43
+ #endif /* PROCNUMBER_H */