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 relation descriptor (a/k/a relcache entry) 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/utils/rel.h
@@ -57,7 +57,7 @@ typedef struct RelationData
57
57
  RelFileLocator rd_locator; /* relation physical identifier */
58
58
  SMgrRelation rd_smgr; /* cached file handle, or NULL */
59
59
  int rd_refcnt; /* reference count */
60
- BackendId rd_backend; /* owning backend id, if temporary relation */
60
+ ProcNumber rd_backend; /* owning backend's proc number, if temp rel */
61
61
  bool rd_islocaltemp; /* rel is a temp rel of this session */
62
62
  bool rd_isnailed; /* rel is nailed in cache */
63
63
  bool rd_isvalid; /* relcache entry is valid */
@@ -150,7 +150,8 @@ typedef struct RelationData
150
150
 
151
151
  /* data managed by RelationGetIndexList: */
152
152
  List *rd_indexlist; /* list of OIDs of indexes on relation */
153
- Oid rd_pkindex; /* OID of primary key, if any */
153
+ Oid rd_pkindex; /* OID of (deferrable?) primary key, if any */
154
+ bool rd_ispkdeferrable; /* is rd_pkindex a deferrable PK? */
154
155
  Oid rd_replidindex; /* OID of replica identity index, if any */
155
156
 
156
157
  /* data managed by RelationGetStatExtList: */
@@ -329,7 +330,7 @@ typedef enum StdRdOptIndexCleanup
329
330
  {
330
331
  STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0,
331
332
  STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF,
332
- STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON
333
+ STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON,
333
334
  } StdRdOptIndexCleanup;
334
335
 
335
336
  typedef struct StdRdOptions
@@ -402,7 +403,7 @@ typedef enum ViewOptCheckOption
402
403
  {
403
404
  VIEW_OPTION_CHECK_OPTION_NOT_SET,
404
405
  VIEW_OPTION_CHECK_OPTION_LOCAL,
405
- VIEW_OPTION_CHECK_OPTION_CASCADED
406
+ VIEW_OPTION_CHECK_OPTION_CASCADED,
406
407
  } ViewOptCheckOption;
407
408
 
408
409
  /*
@@ -561,18 +562,15 @@ typedef struct ViewOptions
561
562
  *
562
563
  * Very little code is authorized to touch rel->rd_smgr directly. Instead
563
564
  * use this function to fetch its value.
564
- *
565
- * Note: since a relcache flush can cause the file handle to be closed again,
566
- * it's unwise to hold onto the pointer returned by this function for any
567
- * long period. Recommended practice is to just re-execute RelationGetSmgr
568
- * each time you need to access the SMgrRelation. It's quite cheap in
569
- * comparison to whatever an smgr function is going to do.
570
565
  */
571
566
  static inline SMgrRelation
572
567
  RelationGetSmgr(Relation rel)
573
568
  {
574
569
  if (unlikely(rel->rd_smgr == NULL))
575
- smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_locator, rel->rd_backend));
570
+ {
571
+ rel->rd_smgr = smgropen(rel->rd_locator, rel->rd_backend);
572
+ smgrpin(rel->rd_smgr);
573
+ }
576
574
  return rel->rd_smgr;
577
575
  }
578
576
 
@@ -584,10 +582,11 @@ static inline void
584
582
  RelationCloseSmgr(Relation relation)
585
583
  {
586
584
  if (relation->rd_smgr != NULL)
585
+ {
586
+ smgrunpin(relation->rd_smgr);
587
587
  smgrclose(relation->rd_smgr);
588
-
589
- /* smgrclose should unhook from owner pointer */
590
- Assert(relation->rd_smgr == NULL);
588
+ relation->rd_smgr = NULL;
589
+ }
591
590
  }
592
591
  #endif /* !FRONTEND */
593
592
 
@@ -4,7 +4,7 @@
4
4
  * Relation descriptor cache 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/utils/relcache.h
@@ -51,7 +51,6 @@ extern Oid RelationGetReplicaIndex(Relation relation);
51
51
  extern List *RelationGetIndexExpressions(Relation relation);
52
52
  extern List *RelationGetDummyIndexExpressions(Relation relation);
53
53
  extern List *RelationGetIndexPredicate(Relation relation);
54
- extern Datum *RelationGetIndexRawAttOptions(Relation indexrel);
55
54
  extern bytea **RelationGetIndexAttOptions(Relation relation, bool copy);
56
55
 
57
56
  /*
@@ -63,7 +62,7 @@ typedef enum IndexAttrBitmapKind
63
62
  INDEX_ATTR_BITMAP_PRIMARY_KEY,
64
63
  INDEX_ATTR_BITMAP_IDENTITY_KEY,
65
64
  INDEX_ATTR_BITMAP_HOT_BLOCKING,
66
- INDEX_ATTR_BITMAP_SUMMARIZED
65
+ INDEX_ATTR_BITMAP_SUMMARIZED,
67
66
  } IndexAttrBitmapKind;
68
67
 
69
68
  extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
@@ -130,8 +129,6 @@ extern void RelationCacheInvalidateEntry(Oid relationId);
130
129
 
131
130
  extern void RelationCacheInvalidate(bool debug_discard);
132
131
 
133
- extern void RelationCloseSmgrByOid(Oid relationId);
134
-
135
132
  #ifdef USE_ASSERT_CHECKING
136
133
  extern void AssertPendingSyncs_RelationCache(void);
137
134
  #else
@@ -4,7 +4,7 @@
4
4
  * POSTGRES relation trigger 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/utils/reltrigger.h
@@ -9,7 +9,7 @@
9
9
  * See utils/resowner/README for more info.
10
10
  *
11
11
  *
12
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  * src/include/utils/resowner.h
@@ -37,19 +37,88 @@ extern PGDLLIMPORT ResourceOwner AuxProcessResourceOwner;
37
37
 
38
38
  /*
39
39
  * Resource releasing is done in three phases: pre-locks, locks, and
40
- * post-locks. The pre-lock phase must release any resources that are
41
- * visible to other backends (such as pinned buffers); this ensures that
42
- * when we release a lock that another backend may be waiting on, it will
43
- * see us as being fully out of our transaction. The post-lock phase
44
- * should be used for backend-internal cleanup.
40
+ * post-locks. The pre-lock phase must release any resources that are visible
41
+ * to other backends (such as pinned buffers); this ensures that when we
42
+ * release a lock that another backend may be waiting on, it will see us as
43
+ * being fully out of our transaction. The post-lock phase should be used for
44
+ * backend-internal cleanup.
45
+ *
46
+ * Within each phase, resources are released in priority order. Priority is
47
+ * just an integer specified in ResourceOwnerDesc. The priorities of built-in
48
+ * resource types are given below, extensions may use any priority relative to
49
+ * those or RELEASE_PRIO_FIRST/LAST. RELEASE_PRIO_FIRST is a fine choice if
50
+ * your resource doesn't depend on any other resources.
45
51
  */
46
52
  typedef enum
47
53
  {
48
- RESOURCE_RELEASE_BEFORE_LOCKS,
54
+ RESOURCE_RELEASE_BEFORE_LOCKS = 1,
49
55
  RESOURCE_RELEASE_LOCKS,
50
- RESOURCE_RELEASE_AFTER_LOCKS
56
+ RESOURCE_RELEASE_AFTER_LOCKS,
51
57
  } ResourceReleasePhase;
52
58
 
59
+ typedef uint32 ResourceReleasePriority;
60
+
61
+ /* priorities of built-in BEFORE_LOCKS resources */
62
+ #define RELEASE_PRIO_BUFFER_IOS 100
63
+ #define RELEASE_PRIO_BUFFER_PINS 200
64
+ #define RELEASE_PRIO_RELCACHE_REFS 300
65
+ #define RELEASE_PRIO_DSMS 400
66
+ #define RELEASE_PRIO_JIT_CONTEXTS 500
67
+ #define RELEASE_PRIO_CRYPTOHASH_CONTEXTS 600
68
+ #define RELEASE_PRIO_HMAC_CONTEXTS 700
69
+
70
+ /* priorities of built-in AFTER_LOCKS resources */
71
+ #define RELEASE_PRIO_CATCACHE_REFS 100
72
+ #define RELEASE_PRIO_CATCACHE_LIST_REFS 200
73
+ #define RELEASE_PRIO_PLANCACHE_REFS 300
74
+ #define RELEASE_PRIO_TUPDESC_REFS 400
75
+ #define RELEASE_PRIO_SNAPSHOT_REFS 500
76
+ #define RELEASE_PRIO_FILES 600
77
+ #define RELEASE_PRIO_WAITEVENTSETS 700
78
+
79
+ /* 0 is considered invalid */
80
+ #define RELEASE_PRIO_FIRST 1
81
+ #define RELEASE_PRIO_LAST UINT32_MAX
82
+
83
+ /*
84
+ * In order to track an object, resowner.c needs a few callbacks for it.
85
+ * The callbacks for resources of a specific kind are encapsulated in
86
+ * ResourceOwnerDesc.
87
+ *
88
+ * Note that the callbacks occur post-commit or post-abort, so the callback
89
+ * functions can only do noncritical cleanup and must not fail.
90
+ */
91
+ typedef struct ResourceOwnerDesc
92
+ {
93
+ const char *name; /* name for the object kind, for debugging */
94
+
95
+ /* when are these objects released? */
96
+ ResourceReleasePhase release_phase;
97
+ ResourceReleasePriority release_priority;
98
+
99
+ /*
100
+ * Release resource.
101
+ *
102
+ * This is called for each resource in the resource owner, in the order
103
+ * specified by 'release_phase' and 'release_priority' when the whole
104
+ * resource owner is been released or when ResourceOwnerReleaseAllOfKind()
105
+ * is called. The resource is implicitly removed from the owner, the
106
+ * callback function doesn't need to call ResourceOwnerForget.
107
+ */
108
+ void (*ReleaseResource) (Datum res);
109
+
110
+ /*
111
+ * Format a string describing the resource, for debugging purposes. If a
112
+ * resource has not been properly released before commit, this is used to
113
+ * print a WARNING.
114
+ *
115
+ * This can be left to NULL, in which case a generic "[resource name]: %p"
116
+ * format is used.
117
+ */
118
+ char *(*DebugPrint) (Datum res);
119
+
120
+ } ResourceOwnerDesc;
121
+
53
122
  /*
54
123
  * Dynamically loaded modules can get control during ResourceOwnerRelease
55
124
  * by providing a callback of this form.
@@ -71,16 +140,28 @@ extern void ResourceOwnerRelease(ResourceOwner owner,
71
140
  ResourceReleasePhase phase,
72
141
  bool isCommit,
73
142
  bool isTopLevel);
74
- extern void ResourceOwnerReleaseAllPlanCacheRefs(ResourceOwner owner);
75
143
  extern void ResourceOwnerDelete(ResourceOwner owner);
76
144
  extern ResourceOwner ResourceOwnerGetParent(ResourceOwner owner);
77
145
  extern void ResourceOwnerNewParent(ResourceOwner owner,
78
146
  ResourceOwner newparent);
147
+
148
+ extern void ResourceOwnerEnlarge(ResourceOwner owner);
149
+ extern void ResourceOwnerRemember(ResourceOwner owner, Datum value, const ResourceOwnerDesc *kind);
150
+ extern void ResourceOwnerForget(ResourceOwner owner, Datum value, const ResourceOwnerDesc *kind);
151
+
152
+ extern void ResourceOwnerReleaseAllOfKind(ResourceOwner owner, const ResourceOwnerDesc *kind);
153
+
79
154
  extern void RegisterResourceReleaseCallback(ResourceReleaseCallback callback,
80
155
  void *arg);
81
156
  extern void UnregisterResourceReleaseCallback(ResourceReleaseCallback callback,
82
157
  void *arg);
158
+
83
159
  extern void CreateAuxProcessResourceOwner(void);
84
160
  extern void ReleaseAuxProcessResources(bool isCommit);
85
161
 
162
+ /* special support for local lock management */
163
+ struct LOCALLOCK;
164
+ extern void ResourceOwnerRememberLock(ResourceOwner owner, struct LOCALLOCK *locallock);
165
+ extern void ResourceOwnerForgetLock(ResourceOwner owner, struct LOCALLOCK *locallock);
166
+
86
167
  #endif /* RESOWNER_H */
@@ -3,7 +3,7 @@
3
3
  * ruleutils.h
4
4
  * Declarations for ruleutils.c
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/ruleutils.h
@@ -3,7 +3,7 @@
3
3
  * sharedtuplestore.h
4
4
  * Simple mechanism for sharing tuples between backends.
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/sharedtuplestore.h
@@ -3,7 +3,7 @@
3
3
  * snapmgr.h
4
4
  * POSTGRES snapshot manager
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/snapmgr.h
@@ -19,40 +19,6 @@
19
19
  #include "utils/snapshot.h"
20
20
 
21
21
 
22
- /*
23
- * The structure used to map times to TransactionId values for the "snapshot
24
- * too old" feature must have a few entries at the tail to hold old values;
25
- * otherwise the lookup will often fail and the expected early pruning or
26
- * vacuum will not usually occur. It is best if this padding is for a number
27
- * of minutes greater than a thread would normally be stalled, but it's OK if
28
- * early vacuum opportunities are occasionally missed, so there's no need to
29
- * use an extreme value or get too fancy. 10 minutes seems plenty.
30
- */
31
- #define OLD_SNAPSHOT_PADDING_ENTRIES 10
32
- #define OLD_SNAPSHOT_TIME_MAP_ENTRIES (old_snapshot_threshold + OLD_SNAPSHOT_PADDING_ENTRIES)
33
-
34
- /*
35
- * Common definition of relation properties that allow early pruning/vacuuming
36
- * when old_snapshot_threshold >= 0.
37
- */
38
- #define RelationAllowsEarlyPruning(rel) \
39
- ( \
40
- RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
41
- && !RelationIsAccessibleInLogicalDecoding(rel) \
42
- )
43
-
44
- #define EarlyPruningEnabled(rel) (old_snapshot_threshold >= 0 && RelationAllowsEarlyPruning(rel))
45
-
46
- /* GUC variables */
47
- extern PGDLLIMPORT int old_snapshot_threshold;
48
-
49
-
50
- extern Size SnapMgrShmemSize(void);
51
- extern void SnapMgrInit(void);
52
- extern TimestampTz GetSnapshotCurrentTimestamp(void);
53
- extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
54
- extern void SnapshotTooOldMagicForTest(void);
55
-
56
22
  extern PGDLLIMPORT bool FirstSnapshotSet;
57
23
 
58
24
  extern PGDLLIMPORT TransactionId TransactionXmin;
@@ -97,14 +63,6 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
97
63
  ((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
98
64
  (snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
99
65
 
100
- #ifndef FRONTEND
101
- static inline bool
102
- OldSnapshotThresholdActive(void)
103
- {
104
- return old_snapshot_threshold >= 0;
105
- }
106
- #endif
107
-
108
66
  extern Snapshot GetTransactionSnapshot(void);
109
67
  extern Snapshot GetLatestSnapshot(void);
110
68
  extern void SnapshotSetCommandId(CommandId curcid);
@@ -138,13 +96,6 @@ extern void DeleteAllExportedSnapshotFiles(void);
138
96
  extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
139
97
  extern bool ThereAreNoPriorRegisteredSnapshots(void);
140
98
  extern bool HaveRegisteredOrActiveSnapshot(void);
141
- extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
142
- Relation relation,
143
- TransactionId *limit_xid,
144
- TimestampTz *limit_ts);
145
- extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
146
- extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
147
- TransactionId xmin);
148
99
 
149
100
  extern char *ExportSnapshot(Snapshot snapshot);
150
101
 
@@ -156,8 +107,6 @@ typedef struct GlobalVisState GlobalVisState;
156
107
  extern GlobalVisState *GlobalVisTestFor(Relation rel);
157
108
  extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
158
109
  extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
159
- extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
160
- extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
161
110
  extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
162
111
  extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
163
112
 
@@ -3,7 +3,7 @@
3
3
  * snapshot.h
4
4
  * POSTGRES snapshot definition
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/snapshot.h
@@ -115,7 +115,7 @@ typedef enum SnapshotType
115
115
  * For visibility checks snapshot->min must have been set up with the xmin
116
116
  * horizon to use.
117
117
  */
118
- SNAPSHOT_NON_VACUUMABLE
118
+ SNAPSHOT_NON_VACUUMABLE,
119
119
  } SnapshotType;
120
120
 
121
121
  typedef struct SnapshotData *Snapshot;
@@ -42,7 +42,7 @@
42
42
  * function for such cases, but probably not any other acceleration method.
43
43
  *
44
44
  *
45
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
45
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
46
46
  * Portions Copyright (c) 1994, Regents of the University of California
47
47
  *
48
48
  * src/include/utils/sortsupport.h
@@ -6,7 +6,7 @@
6
6
  * See also lsyscache.h, which provides convenience routines for
7
7
  * common cache-lookup operations.
8
8
  *
9
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/utils/syscache.h
@@ -20,103 +20,7 @@
20
20
  #include "access/htup.h"
21
21
  /* we intentionally do not include utils/catcache.h here */
22
22
 
23
- /*
24
- * SysCache identifiers.
25
- *
26
- * The order of these identifiers must match the order
27
- * of the entries in the array cacheinfo[] in syscache.c.
28
- * Keep them in alphabetical order (renumbering only costs a
29
- * backend rebuild).
30
- */
31
-
32
- enum SysCacheIdentifier
33
- {
34
- AGGFNOID = 0,
35
- AMNAME,
36
- AMOID,
37
- AMOPOPID,
38
- AMOPSTRATEGY,
39
- AMPROCNUM,
40
- ATTNAME,
41
- ATTNUM,
42
- AUTHMEMMEMROLE,
43
- AUTHMEMROLEMEM,
44
- AUTHNAME,
45
- AUTHOID,
46
- CASTSOURCETARGET,
47
- CLAAMNAMENSP,
48
- CLAOID,
49
- COLLNAMEENCNSP,
50
- COLLOID,
51
- CONDEFAULT,
52
- CONNAMENSP,
53
- CONSTROID,
54
- CONVOID,
55
- DATABASEOID,
56
- DEFACLROLENSPOBJ,
57
- ENUMOID,
58
- ENUMTYPOIDNAME,
59
- EVENTTRIGGERNAME,
60
- EVENTTRIGGEROID,
61
- FOREIGNDATAWRAPPERNAME,
62
- FOREIGNDATAWRAPPEROID,
63
- FOREIGNSERVERNAME,
64
- FOREIGNSERVEROID,
65
- FOREIGNTABLEREL,
66
- INDEXRELID,
67
- LANGNAME,
68
- LANGOID,
69
- NAMESPACENAME,
70
- NAMESPACEOID,
71
- OPERNAMENSP,
72
- OPEROID,
73
- OPFAMILYAMNAMENSP,
74
- OPFAMILYOID,
75
- PARAMETERACLNAME,
76
- PARAMETERACLOID,
77
- PARTRELID,
78
- PROCNAMEARGSNSP,
79
- PROCOID,
80
- PUBLICATIONNAME,
81
- PUBLICATIONNAMESPACE,
82
- PUBLICATIONNAMESPACEMAP,
83
- PUBLICATIONOID,
84
- PUBLICATIONREL,
85
- PUBLICATIONRELMAP,
86
- RANGEMULTIRANGE,
87
- RANGETYPE,
88
- RELNAMENSP,
89
- RELOID,
90
- REPLORIGIDENT,
91
- REPLORIGNAME,
92
- RULERELNAME,
93
- SEQRELID,
94
- STATEXTDATASTXOID,
95
- STATEXTNAMENSP,
96
- STATEXTOID,
97
- STATRELATTINH,
98
- SUBSCRIPTIONNAME,
99
- SUBSCRIPTIONOID,
100
- SUBSCRIPTIONRELMAP,
101
- TABLESPACEOID,
102
- TRFOID,
103
- TRFTYPELANG,
104
- TSCONFIGMAP,
105
- TSCONFIGNAMENSP,
106
- TSCONFIGOID,
107
- TSDICTNAMENSP,
108
- TSDICTOID,
109
- TSPARSERNAMENSP,
110
- TSPARSEROID,
111
- TSTEMPLATENAMENSP,
112
- TSTEMPLATEOID,
113
- TYPENAMENSP,
114
- TYPEOID,
115
- USERMAPPINGOID,
116
- USERMAPPINGUSERSERVER
117
-
118
- #define SysCacheSize (USERMAPPINGUSERSERVER + 1)
119
- };
23
+ #include "catalog/syscache_ids.h"
120
24
 
121
25
  extern void InitCatalogCache(void);
122
26
  extern void InitCatalogCachePhase2(void);
@@ -139,9 +43,14 @@ extern HeapTuple SearchSysCache4(int cacheId,
139
43
 
140
44
  extern void ReleaseSysCache(HeapTuple tuple);
141
45
 
46
+ extern HeapTuple SearchSysCacheLocked1(int cacheId,
47
+ Datum key1);
48
+
142
49
  /* convenience routines */
143
50
  extern HeapTuple SearchSysCacheCopy(int cacheId,
144
51
  Datum key1, Datum key2, Datum key3, Datum key4);
52
+ extern HeapTuple SearchSysCacheLockedCopy1(int cacheId,
53
+ Datum key1);
145
54
  extern bool SearchSysCacheExists(int cacheId,
146
55
  Datum key1, Datum key2, Datum key3, Datum key4);
147
56
  extern Oid GetSysCacheOid(int cacheId, AttrNumber oidcol,
@@ -4,7 +4,7 @@
4
4
  * Routines to multiplex SIGALRM interrupts for multiple timeout reasons.
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/utils/timeout.h
@@ -31,6 +31,7 @@ typedef enum TimeoutId
31
31
  STANDBY_TIMEOUT,
32
32
  STANDBY_LOCK_TIMEOUT,
33
33
  IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
34
+ TRANSACTION_TIMEOUT,
34
35
  IDLE_SESSION_TIMEOUT,
35
36
  IDLE_STATS_UPDATE_TIMEOUT,
36
37
  CLIENT_CONNECTION_CHECK_TIMEOUT,
@@ -51,7 +52,7 @@ typedef enum TimeoutType
51
52
  {
52
53
  TMPARAM_AFTER,
53
54
  TMPARAM_AT,
54
- TMPARAM_EVERY
55
+ TMPARAM_EVERY,
55
56
  } TimeoutType;
56
57
 
57
58
  typedef struct
@@ -3,7 +3,7 @@
3
3
  * timestamp.h
4
4
  * Definitions for the SQL "timestamp" and "interval" types.
5
5
  *
6
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/timestamp.h
@@ -11,7 +11,7 @@
11
11
  * algorithm. Parallel sorts use a variant of this external sort
12
12
  * algorithm, and are typically only used for large amounts of data.
13
13
  *
14
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  * src/include/utils/tuplesort.h
@@ -21,6 +21,7 @@
21
21
  #ifndef TUPLESORT_H
22
22
  #define TUPLESORT_H
23
23
 
24
+ #include "access/brin_tuple.h"
24
25
  #include "access/itup.h"
25
26
  #include "executor/tuptable.h"
26
27
  #include "storage/dsm.h"
@@ -77,7 +78,7 @@ typedef enum
77
78
  SORT_TYPE_TOP_N_HEAPSORT = 1 << 0,
78
79
  SORT_TYPE_QUICKSORT = 1 << 1,
79
80
  SORT_TYPE_EXTERNAL_SORT = 1 << 2,
80
- SORT_TYPE_EXTERNAL_MERGE = 1 << 3
81
+ SORT_TYPE_EXTERNAL_MERGE = 1 << 3,
81
82
  } TuplesortMethod;
82
83
 
83
84
  #define NUM_TUPLESORTMETHODS 4
@@ -85,7 +86,7 @@ typedef enum
85
86
  typedef enum
86
87
  {
87
88
  SORT_SPACE_TYPE_DISK,
88
- SORT_SPACE_TYPE_MEMORY
89
+ SORT_SPACE_TYPE_MEMORY,
89
90
  } TuplesortSpaceType;
90
91
 
91
92
  /* Bitwise option flags for tuple sorts */
@@ -97,6 +98,15 @@ typedef enum
97
98
  /* specifies if the tuplesort is able to support bounded sorts */
98
99
  #define TUPLESORT_ALLOWBOUNDED (1 << 1)
99
100
 
101
+ /*
102
+ * For bounded sort, tuples get pfree'd when they fall outside of the bound.
103
+ * When bounded sorts are not required, we can use a bump context for tuple
104
+ * allocation as there's no risk that pfree will ever be called for a tuple.
105
+ * Define a macro to make it easier for code to figure out if we're using a
106
+ * bump allocator.
107
+ */
108
+ #define TupleSortUseBumpTupleCxt(opt) (((opt) & TUPLESORT_ALLOWBOUNDED) == 0)
109
+
100
110
  typedef struct TuplesortInstrumentation
101
111
  {
102
112
  TuplesortMethod sortMethod; /* sort algorithm used */
@@ -108,10 +118,11 @@ typedef struct TuplesortInstrumentation
108
118
  * The objects we actually sort are SortTuple structs. These contain
109
119
  * a pointer to the tuple proper (might be a MinimalTuple or IndexTuple),
110
120
  * which is a separate palloc chunk --- we assume it is just one chunk and
111
- * can be freed by a simple pfree() (except during merge, when we use a
112
- * simple slab allocator). SortTuples also contain the tuple's first key
113
- * column in Datum/nullflag format, and a source/input tape number that
114
- * tracks which tape each heap element/slot belongs to during merging.
121
+ * can be freed by a simple pfree() (except during merge, where we use a
122
+ * simple slab allocator, and during a non-bounded sort where we use a bump
123
+ * allocator). SortTuples also contain the tuple's first key column in
124
+ * Datum/nullflag format, and a source/input tape number that tracks which
125
+ * tape each heap element/slot belongs to during merging.
115
126
  *
116
127
  * Storing the first key column lets us save heap_getattr or index_getattr
117
128
  * calls during tuple comparisons. We could extract and save all the key
@@ -162,6 +173,13 @@ typedef struct
162
173
  */
163
174
  SortTupleComparator comparetup;
164
175
 
176
+ /*
177
+ * Fall back to the full tuple for comparison, but only compare the first
178
+ * sortkey if it was abbreviated. Otherwise, only compare second and later
179
+ * sortkeys.
180
+ */
181
+ SortTupleComparator comparetup_tiebreak;
182
+
165
183
  /*
166
184
  * Alter datum1 representation in the SortTuple's array back from the
167
185
  * abbreviated key to the first column value.
@@ -275,6 +293,9 @@ typedef struct
275
293
  * The "index_hash" API is similar to index_btree, but the tuples are
276
294
  * actually sorted by their hash codes not the raw data.
277
295
  *
296
+ * The "index_brin" API is similar to index_btree, but the tuples are
297
+ * BrinTuple and are sorted by their block number not the raw data.
298
+ *
278
299
  * Parallel sort callers are required to coordinate multiple tuplesort states
279
300
  * in a leader process and one or more worker processes. The leader process
280
301
  * must launch workers, and have each perform an independent "partial"
@@ -356,7 +377,8 @@ extern Tuplesortstate *tuplesort_begin_common(int workMem,
356
377
  extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound);
357
378
  extern bool tuplesort_used_bound(Tuplesortstate *state);
358
379
  extern void tuplesort_puttuple_common(Tuplesortstate *state,
359
- SortTuple *tuple, bool useAbbrev);
380
+ SortTuple *tuple, bool useAbbrev,
381
+ Size tuplen);
360
382
  extern void tuplesort_performsort(Tuplesortstate *state);
361
383
  extern bool tuplesort_gettuple_common(Tuplesortstate *state, bool forward,
362
384
  SortTuple *stup);
@@ -419,6 +441,8 @@ extern Tuplesortstate *tuplesort_begin_index_gist(Relation heapRel,
419
441
  Relation indexRel,
420
442
  int workMem, SortCoordinate coordinate,
421
443
  int sortopt);
444
+ extern Tuplesortstate *tuplesort_begin_index_brin(int workMem, SortCoordinate coordinate,
445
+ int sortopt);
422
446
  extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
423
447
  Oid sortOperator, Oid sortCollation,
424
448
  bool nullsFirstFlag,
@@ -430,7 +454,8 @@ extern void tuplesort_puttupleslot(Tuplesortstate *state,
430
454
  extern void tuplesort_putheaptuple(Tuplesortstate *state, HeapTuple tup);
431
455
  extern void tuplesort_putindextuplevalues(Tuplesortstate *state,
432
456
  Relation rel, ItemPointer self,
433
- Datum *values, bool *isnull);
457
+ const Datum *values, const bool *isnull);
458
+ extern void tuplesort_putbrintuple(Tuplesortstate *state, BrinTuple *tuple, Size size);
434
459
  extern void tuplesort_putdatum(Tuplesortstate *state, Datum val,
435
460
  bool isNull);
436
461
 
@@ -438,6 +463,8 @@ extern bool tuplesort_gettupleslot(Tuplesortstate *state, bool forward,
438
463
  bool copy, TupleTableSlot *slot, Datum *abbrev);
439
464
  extern HeapTuple tuplesort_getheaptuple(Tuplesortstate *state, bool forward);
440
465
  extern IndexTuple tuplesort_getindextuple(Tuplesortstate *state, bool forward);
466
+ extern BrinTuple *tuplesort_getbrintuple(Tuplesortstate *state, Size *len,
467
+ bool forward);
441
468
  extern bool tuplesort_getdatum(Tuplesortstate *state, bool forward, bool copy,
442
469
  Datum *val, bool *isNull, Datum *abbrev);
443
470