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
@@ -1,5 +1,5 @@
1
- #ifndef _REGEX_H_
2
- #define _REGEX_H_ /* never again */
1
+ #ifndef _PG_REGEX_H_
2
+ #define _PG_REGEX_H_ /* never again */
3
3
  /*
4
4
  * regular expressions
5
5
  *
@@ -32,6 +32,84 @@
32
32
  * src/include/regex/regex.h
33
33
  */
34
34
 
35
+ /*
36
+ * This is an implementation of POSIX regex_t, so it clashes with the
37
+ * system-provided <regex.h> header. That header might be unintentionally
38
+ * included already, so we force that to happen now on all systems to show that
39
+ * we can cope and that we completely replace the system regex interfaces.
40
+ *
41
+ * Note that we avoided using _REGEX_H_ as an include guard, as that confuses
42
+ * matters on BSD family systems including macOS that use the same include
43
+ * guard.
44
+ */
45
+ #ifndef _WIN32
46
+ #include <regex.h>
47
+ #endif
48
+
49
+ /* Avoid redefinition errors due to the system header. */
50
+ #undef REG_UBACKREF
51
+ #undef REG_ULOOKAROUND
52
+ #undef REG_UBOUNDS
53
+ #undef REG_UBRACES
54
+ #undef REG_UBSALNUM
55
+ #undef REG_UPBOTCH
56
+ #undef REG_UBBS
57
+ #undef REG_UNONPOSIX
58
+ #undef REG_UUNSPEC
59
+ #undef REG_UUNPORT
60
+ #undef REG_ULOCALE
61
+ #undef REG_UEMPTYMATCH
62
+ #undef REG_UIMPOSSIBLE
63
+ #undef REG_USHORTEST
64
+ #undef REG_BASIC
65
+ #undef REG_EXTENDED
66
+ #undef REG_ADVF
67
+ #undef REG_ADVANCED
68
+ #undef REG_QUOTE
69
+ #undef REG_NOSPEC
70
+ #undef REG_ICASE
71
+ #undef REG_NOSUB
72
+ #undef REG_EXPANDED
73
+ #undef REG_NLSTOP
74
+ #undef REG_NLANCH
75
+ #undef REG_NEWLINE
76
+ #undef REG_PEND
77
+ #undef REG_EXPECT
78
+ #undef REG_BOSONLY
79
+ #undef REG_DUMP
80
+ #undef REG_FAKE
81
+ #undef REG_PROGRESS
82
+ #undef REG_NOTBOL
83
+ #undef REG_NOTEOL
84
+ #undef REG_STARTEND
85
+ #undef REG_FTRACE
86
+ #undef REG_MTRACE
87
+ #undef REG_SMALL
88
+ #undef REG_OKAY
89
+ #undef REG_NOMATCH
90
+ #undef REG_BADPAT
91
+ #undef REG_ECOLLATE
92
+ #undef REG_ECTYPE
93
+ #undef REG_EESCAPE
94
+ #undef REG_ESUBREG
95
+ #undef REG_EBRACK
96
+ #undef REG_EPAREN
97
+ #undef REG_EBRACE
98
+ #undef REG_BADBR
99
+ #undef REG_ERANGE
100
+ #undef REG_ESPACE
101
+ #undef REG_BADRPT
102
+ #undef REG_ASSERT
103
+ #undef REG_INVARG
104
+ #undef REG_MIXED
105
+ #undef REG_BADOPT
106
+ #undef REG_ETOOBIG
107
+ #undef REG_ECOLORS
108
+ #undef REG_ATOI
109
+ #undef REG_ITOA
110
+ #undef REG_PREFIX
111
+ #undef REG_EXACT
112
+
35
113
  /*
36
114
  * Add your own defines, if needed, here.
37
115
  */
@@ -45,7 +123,7 @@
45
123
  * regoff_t has to be large enough to hold either off_t or ssize_t,
46
124
  * and must be signed; it's only a guess that long is suitable.
47
125
  */
48
- typedef long regoff_t;
126
+ typedef long pg_regoff_t;
49
127
 
50
128
  /*
51
129
  * other interface types
@@ -79,19 +157,19 @@ typedef struct
79
157
  /* the rest is opaque pointers to hidden innards */
80
158
  char *re_guts; /* `char *' is more portable than `void *' */
81
159
  char *re_fns;
82
- } regex_t;
160
+ } pg_regex_t;
83
161
 
84
162
  /* result reporting (may acquire more fields later) */
85
163
  typedef struct
86
164
  {
87
- regoff_t rm_so; /* start of substring */
88
- regoff_t rm_eo; /* end of substring */
89
- } regmatch_t;
165
+ pg_regoff_t rm_so; /* start of substring */
166
+ pg_regoff_t rm_eo; /* end of substring */
167
+ } pg_regmatch_t;
90
168
 
91
169
  /* supplementary control and reporting */
92
170
  typedef struct
93
171
  {
94
- regmatch_t rm_extend; /* see REG_EXPECT */
172
+ pg_regmatch_t rm_extend; /* see REG_EXPECT */
95
173
  } rm_detail_t;
96
174
 
97
175
 
@@ -164,6 +242,11 @@ typedef struct
164
242
  #define REG_EXACT (-2) /* identified an exact match */
165
243
 
166
244
 
245
+ /* Redirect the standard typenames to our typenames. */
246
+ #define regoff_t pg_regoff_t
247
+ #define regex_t pg_regex_t
248
+ #define regmatch_t pg_regmatch_t
249
+
167
250
 
168
251
  /*
169
252
  * the prototypes for exported functions
@@ -186,4 +269,4 @@ extern bool RE_compile_and_execute(text *text_re, char *dat, int dat_len,
186
269
  int cflags, Oid collation,
187
270
  int nmatch, regmatch_t *pmatch);
188
271
 
189
- #endif /* _REGEX_H_ */
272
+ #endif /* _PG_REGEX_H_ */
@@ -3,7 +3,7 @@
3
3
  * logicallauncher.h
4
4
  * Exports for logical replication launcher.
5
5
  *
6
- * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2016-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/replication/logicallauncher.h
9
9
  *
@@ -3,7 +3,7 @@
3
3
  * logicalproto.h
4
4
  * logical replication protocol
5
5
  *
6
- * Copyright (c) 2015-2023, PostgreSQL Global Development Group
6
+ * Copyright (c) 2015-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * IDENTIFICATION
9
9
  * src/include/replication/logicalproto.h
@@ -74,7 +74,7 @@ typedef enum LogicalRepMsgType
74
74
  LOGICAL_REP_MSG_STREAM_STOP = 'E',
75
75
  LOGICAL_REP_MSG_STREAM_COMMIT = 'c',
76
76
  LOGICAL_REP_MSG_STREAM_ABORT = 'A',
77
- LOGICAL_REP_MSG_STREAM_PREPARE = 'p'
77
+ LOGICAL_REP_MSG_STREAM_PREPARE = 'p',
78
78
  } LogicalRepMsgType;
79
79
 
80
80
  /*
@@ -3,7 +3,7 @@
3
3
  * logicalworker.h
4
4
  * Exports for logical replication workers.
5
5
  *
6
- * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2016-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/replication/logicalworker.h
9
9
  *
@@ -18,6 +18,7 @@ extern PGDLLIMPORT volatile sig_atomic_t ParallelApplyMessagePending;
18
18
 
19
19
  extern void ApplyWorkerMain(Datum main_arg);
20
20
  extern void ParallelApplyWorkerMain(Datum main_arg);
21
+ extern void TablesyncWorkerMain(Datum main_arg);
21
22
 
22
23
  extern bool IsLogicalWorker(void);
23
24
  extern bool IsLogicalParallelApplyWorker(void);
@@ -2,7 +2,7 @@
2
2
  * origin.h
3
3
  * Exports from replication/logical/origin.c
4
4
  *
5
- * Copyright (c) 2013-2023, PostgreSQL Global Development Group
5
+ * Copyright (c) 2013-2024, PostgreSQL Global Development Group
6
6
  *
7
7
  * src/include/replication/origin.h
8
8
  *-------------------------------------------------------------------------
@@ -2,7 +2,7 @@
2
2
  * reorderbuffer.h
3
3
  * PostgreSQL logical replay/reorder buffer management.
4
4
  *
5
- * Copyright (c) 2012-2023, PostgreSQL Global Development Group
5
+ * Copyright (c) 2012-2024, PostgreSQL Global Development Group
6
6
  *
7
7
  * src/include/replication/reorderbuffer.h
8
8
  */
@@ -11,6 +11,7 @@
11
11
 
12
12
  #include "access/htup_details.h"
13
13
  #include "lib/ilist.h"
14
+ #include "lib/pairingheap.h"
14
15
  #include "storage/sinval.h"
15
16
  #include "utils/hsearch.h"
16
17
  #include "utils/relcache.h"
@@ -25,28 +26,9 @@ extern PGDLLIMPORT int debug_logical_replication_streaming;
25
26
  typedef enum
26
27
  {
27
28
  DEBUG_LOGICAL_REP_STREAMING_BUFFERED,
28
- DEBUG_LOGICAL_REP_STREAMING_IMMEDIATE
29
+ DEBUG_LOGICAL_REP_STREAMING_IMMEDIATE,
29
30
  } DebugLogicalRepStreamingMode;
30
31
 
31
- /* an individual tuple, stored in one chunk of memory */
32
- typedef struct ReorderBufferTupleBuf
33
- {
34
- /* position in preallocated list */
35
- slist_node node;
36
-
37
- /* tuple header, the interesting bit for users of logical decoding */
38
- HeapTupleData tuple;
39
-
40
- /* pre-allocated size of tuple buffer, different from tuple size */
41
- Size alloc_tuple_size;
42
-
43
- /* actual tuple data follows */
44
- } ReorderBufferTupleBuf;
45
-
46
- /* pointer to the data stored in a TupleBuf */
47
- #define ReorderBufferTupleBufData(p) \
48
- ((HeapTupleHeader) MAXALIGN(((char *) p) + sizeof(ReorderBufferTupleBuf)))
49
-
50
32
  /*
51
33
  * Types of the change passed to a 'change' callback.
52
34
  *
@@ -73,7 +55,7 @@ typedef enum ReorderBufferChangeType
73
55
  REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT,
74
56
  REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM,
75
57
  REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
76
- REORDER_BUFFER_CHANGE_TRUNCATE
58
+ REORDER_BUFFER_CHANGE_TRUNCATE,
77
59
  } ReorderBufferChangeType;
78
60
 
79
61
  /* forward declaration */
@@ -114,9 +96,9 @@ typedef struct ReorderBufferChange
114
96
  bool clear_toast_afterwards;
115
97
 
116
98
  /* valid for DELETE || UPDATE */
117
- ReorderBufferTupleBuf *oldtuple;
99
+ HeapTuple oldtuple;
118
100
  /* valid for INSERT || UPDATE */
119
- ReorderBufferTupleBuf *newtuple;
101
+ HeapTuple newtuple;
120
102
  } tp;
121
103
 
122
104
  /*
@@ -420,6 +402,11 @@ typedef struct ReorderBufferTXN
420
402
  */
421
403
  dlist_node catchange_node;
422
404
 
405
+ /*
406
+ * A node in txn_heap
407
+ */
408
+ pairingheap_node txn_node;
409
+
423
410
  /*
424
411
  * Size of this transaction (changes currently in memory, in bytes).
425
412
  */
@@ -491,45 +478,38 @@ typedef void (*ReorderBufferRollbackPreparedCB) (ReorderBuffer *rb,
491
478
  TimestampTz prepare_time);
492
479
 
493
480
  /* start streaming transaction callback signature */
494
- typedef void (*ReorderBufferStreamStartCB) (
495
- ReorderBuffer *rb,
481
+ typedef void (*ReorderBufferStreamStartCB) (ReorderBuffer *rb,
496
482
  ReorderBufferTXN *txn,
497
483
  XLogRecPtr first_lsn);
498
484
 
499
485
  /* stop streaming transaction callback signature */
500
- typedef void (*ReorderBufferStreamStopCB) (
501
- ReorderBuffer *rb,
486
+ typedef void (*ReorderBufferStreamStopCB) (ReorderBuffer *rb,
502
487
  ReorderBufferTXN *txn,
503
488
  XLogRecPtr last_lsn);
504
489
 
505
490
  /* discard streamed transaction callback signature */
506
- typedef void (*ReorderBufferStreamAbortCB) (
507
- ReorderBuffer *rb,
491
+ typedef void (*ReorderBufferStreamAbortCB) (ReorderBuffer *rb,
508
492
  ReorderBufferTXN *txn,
509
493
  XLogRecPtr abort_lsn);
510
494
 
511
495
  /* prepare streamed transaction callback signature */
512
- typedef void (*ReorderBufferStreamPrepareCB) (
513
- ReorderBuffer *rb,
496
+ typedef void (*ReorderBufferStreamPrepareCB) (ReorderBuffer *rb,
514
497
  ReorderBufferTXN *txn,
515
498
  XLogRecPtr prepare_lsn);
516
499
 
517
500
  /* commit streamed transaction callback signature */
518
- typedef void (*ReorderBufferStreamCommitCB) (
519
- ReorderBuffer *rb,
501
+ typedef void (*ReorderBufferStreamCommitCB) (ReorderBuffer *rb,
520
502
  ReorderBufferTXN *txn,
521
503
  XLogRecPtr commit_lsn);
522
504
 
523
505
  /* stream change callback signature */
524
- typedef void (*ReorderBufferStreamChangeCB) (
525
- ReorderBuffer *rb,
506
+ typedef void (*ReorderBufferStreamChangeCB) (ReorderBuffer *rb,
526
507
  ReorderBufferTXN *txn,
527
508
  Relation relation,
528
509
  ReorderBufferChange *change);
529
510
 
530
511
  /* stream message callback signature */
531
- typedef void (*ReorderBufferStreamMessageCB) (
532
- ReorderBuffer *rb,
512
+ typedef void (*ReorderBufferStreamMessageCB) (ReorderBuffer *rb,
533
513
  ReorderBufferTXN *txn,
534
514
  XLogRecPtr message_lsn,
535
515
  bool transactional,
@@ -537,16 +517,14 @@ typedef void (*ReorderBufferStreamMessageCB) (
537
517
  const char *message);
538
518
 
539
519
  /* stream truncate callback signature */
540
- typedef void (*ReorderBufferStreamTruncateCB) (
541
- ReorderBuffer *rb,
520
+ typedef void (*ReorderBufferStreamTruncateCB) (ReorderBuffer *rb,
542
521
  ReorderBufferTXN *txn,
543
522
  int nrelations,
544
523
  Relation relations[],
545
524
  ReorderBufferChange *change);
546
525
 
547
526
  /* update progress txn callback signature */
548
- typedef void (*ReorderBufferUpdateProgressTxnCB) (
549
- ReorderBuffer *rb,
527
+ typedef void (*ReorderBufferUpdateProgressTxnCB) (ReorderBuffer *rb,
550
528
  ReorderBufferTXN *txn,
551
529
  XLogRecPtr lsn);
552
530
 
@@ -650,6 +628,9 @@ struct ReorderBuffer
650
628
  /* memory accounting */
651
629
  Size size;
652
630
 
631
+ /* Max-heap for sizes of all top-level and sub transactions */
632
+ pairingheap *txn_heap;
633
+
653
634
  /*
654
635
  * Statistics about transactions spilled to disk.
655
636
  *
@@ -678,10 +659,10 @@ struct ReorderBuffer
678
659
  extern ReorderBuffer *ReorderBufferAllocate(void);
679
660
  extern void ReorderBufferFree(ReorderBuffer *rb);
680
661
 
681
- extern ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *rb,
682
- Size tuple_len);
683
- extern void ReorderBufferReturnTupleBuf(ReorderBuffer *rb,
684
- ReorderBufferTupleBuf *tuple);
662
+ extern HeapTuple ReorderBufferGetTupleBuf(ReorderBuffer *rb,
663
+ Size tuple_len);
664
+ extern void ReorderBufferReturnTupleBuf(HeapTuple tuple);
665
+
685
666
  extern ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *rb);
686
667
  extern void ReorderBufferReturnChange(ReorderBuffer *rb,
687
668
  ReorderBufferChange *change, bool upd_mem);
@@ -2,7 +2,7 @@
2
2
  * slot.h
3
3
  * Replication slot management.
4
4
  *
5
- * Copyright (c) 2012-2023, PostgreSQL Global Development Group
5
+ * Copyright (c) 2012-2024, PostgreSQL Global Development Group
6
6
  *
7
7
  *-------------------------------------------------------------------------
8
8
  */
@@ -34,12 +34,15 @@ typedef enum ReplicationSlotPersistency
34
34
  {
35
35
  RS_PERSISTENT,
36
36
  RS_EPHEMERAL,
37
- RS_TEMPORARY
37
+ RS_TEMPORARY,
38
38
  } ReplicationSlotPersistency;
39
39
 
40
40
  /*
41
41
  * Slots can be invalidated, e.g. due to max_slot_wal_keep_size. If so, the
42
42
  * 'invalidated' field is set to a value other than _NONE.
43
+ *
44
+ * When adding a new invalidation cause here, remember to update
45
+ * SlotInvalidationCauses and RS_INVAL_MAX_CAUSES.
43
46
  */
44
47
  typedef enum ReplicationSlotInvalidationCause
45
48
  {
@@ -52,6 +55,8 @@ typedef enum ReplicationSlotInvalidationCause
52
55
  RS_INVAL_WAL_LEVEL,
53
56
  } ReplicationSlotInvalidationCause;
54
57
 
58
+ extern PGDLLIMPORT const char *const SlotInvalidationCauses[];
59
+
55
60
  /*
56
61
  * On-Disk data of a replication slot, preserved across restarts.
57
62
  */
@@ -111,6 +116,17 @@ typedef struct ReplicationSlotPersistentData
111
116
 
112
117
  /* plugin name */
113
118
  NameData plugin;
119
+
120
+ /*
121
+ * Was this slot synchronized from the primary server?
122
+ */
123
+ char synced;
124
+
125
+ /*
126
+ * Is this a failover slot (sync candidate for standbys)? Only relevant
127
+ * for logical slots on the primary server.
128
+ */
129
+ bool failover;
114
130
  } ReplicationSlotPersistentData;
115
131
 
116
132
  /*
@@ -178,6 +194,20 @@ typedef struct ReplicationSlot
178
194
  XLogRecPtr candidate_xmin_lsn;
179
195
  XLogRecPtr candidate_restart_valid;
180
196
  XLogRecPtr candidate_restart_lsn;
197
+
198
+ /*
199
+ * This value tracks the last confirmed_flush LSN flushed which is used
200
+ * during a shutdown checkpoint to decide if logical's slot data should be
201
+ * forcibly flushed or not.
202
+ */
203
+ XLogRecPtr last_saved_confirmed_flush;
204
+
205
+ /*
206
+ * The time when the slot became inactive. For synced slots on a standby
207
+ * server, it represents the time when slot synchronization was most
208
+ * recently stopped.
209
+ */
210
+ TimestampTz inactive_since;
181
211
  } ReplicationSlot;
182
212
 
183
213
  #define SlotIsPhysical(slot) ((slot)->data.database == InvalidOid)
@@ -203,6 +233,7 @@ extern PGDLLIMPORT ReplicationSlot *MyReplicationSlot;
203
233
 
204
234
  /* GUCs */
205
235
  extern PGDLLIMPORT int max_replication_slots;
236
+ extern PGDLLIMPORT char *synchronized_standby_slots;
206
237
 
207
238
  /* shmem initialization functions */
208
239
  extern Size ReplicationSlotsShmemSize(void);
@@ -211,13 +242,16 @@ extern void ReplicationSlotsShmemInit(void);
211
242
  /* management of individual slots */
212
243
  extern void ReplicationSlotCreate(const char *name, bool db_specific,
213
244
  ReplicationSlotPersistency persistency,
214
- bool two_phase);
245
+ bool two_phase, bool failover,
246
+ bool synced);
215
247
  extern void ReplicationSlotPersist(void);
216
248
  extern void ReplicationSlotDrop(const char *name, bool nowait);
249
+ extern void ReplicationSlotDropAcquired(void);
250
+ extern void ReplicationSlotAlter(const char *name, bool failover);
217
251
 
218
252
  extern void ReplicationSlotAcquire(const char *name, bool nowait);
219
253
  extern void ReplicationSlotRelease(void);
220
- extern void ReplicationSlotCleanup(void);
254
+ extern void ReplicationSlotCleanup(bool synced_only);
221
255
  extern void ReplicationSlotSave(void);
222
256
  extern void ReplicationSlotMarkDirty(void);
223
257
 
@@ -241,9 +275,15 @@ extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslo
241
275
  extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok);
242
276
 
243
277
  extern void StartupReplicationSlots(void);
244
- extern void CheckPointReplicationSlots(void);
278
+ extern void CheckPointReplicationSlots(bool is_shutdown);
245
279
 
246
280
  extern void CheckSlotRequirements(void);
247
281
  extern void CheckSlotPermissions(void);
282
+ extern ReplicationSlotInvalidationCause
283
+ GetSlotInvalidationCause(const char *invalidation_reason);
284
+
285
+ extern bool SlotExistsInSyncStandbySlots(const char *slot_name);
286
+ extern bool StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel);
287
+ extern void WaitForStandbyConfirmation(XLogRecPtr wait_for_lsn);
248
288
 
249
289
  #endif /* SLOT_H */
@@ -0,0 +1,38 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * slotsync.h
4
+ * Exports for slot synchronization.
5
+ *
6
+ * Portions Copyright (c) 2016-2024, PostgreSQL Global Development Group
7
+ *
8
+ * src/include/replication/slotsync.h
9
+ *
10
+ *-------------------------------------------------------------------------
11
+ */
12
+ #ifndef SLOTSYNC_H
13
+ #define SLOTSYNC_H
14
+
15
+ #include "replication/walreceiver.h"
16
+
17
+ extern PGDLLIMPORT bool sync_replication_slots;
18
+
19
+ /*
20
+ * GUCs needed by slot sync worker to connect to the primary
21
+ * server and carry on with slots synchronization.
22
+ */
23
+ extern PGDLLIMPORT char *PrimaryConnInfo;
24
+ extern PGDLLIMPORT char *PrimarySlotName;
25
+
26
+ extern char *CheckAndGetDbnameFromConninfo(void);
27
+ extern bool ValidateSlotSyncParams(int elevel);
28
+
29
+ extern void ReplSlotSyncWorkerMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn();
30
+
31
+ extern void ShutDownSlotSync(void);
32
+ extern bool SlotSyncWorkerCanRestart(void);
33
+ extern bool IsSyncingReplicationSlots(void);
34
+ extern Size SlotSyncShmemSize(void);
35
+ extern void SlotSyncShmemInit(void);
36
+ extern void SyncReplicationSlots(WalReceiverConn *wrconn);
37
+
38
+ #endif /* SLOTSYNC_H */
@@ -3,7 +3,7 @@
3
3
  * syncrep.h
4
4
  * Exports from replication/syncrep.c.
5
5
  *
6
- * Portions Copyright (c) 2010-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2010-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * IDENTIFICATION
9
9
  * src/include/replication/syncrep.h
@@ -3,7 +3,7 @@
3
3
  * walreceiver.h
4
4
  * Exports from replication/walreceiverfuncs.c.
5
5
  *
6
- * Portions Copyright (c) 2010-2023, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2010-2024, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/replication/walreceiver.h
9
9
  *
@@ -13,7 +13,6 @@
13
13
  #define _WALRECEIVER_H
14
14
 
15
15
  #include <netdb.h>
16
- #include <sys/socket.h>
17
16
 
18
17
  #include "access/xlog.h"
19
18
  #include "access/xlogdefs.h"
@@ -52,7 +51,7 @@ typedef enum
52
51
  WALRCV_STREAMING, /* walreceiver is streaming */
53
52
  WALRCV_WAITING, /* stopped streaming, waiting for orders */
54
53
  WALRCV_RESTARTING, /* asked to restart streaming */
55
- WALRCV_STOPPING /* requested to stop, but still running */
54
+ WALRCV_STOPPING, /* requested to stop, but still running */
56
55
  } WalRcvState;
57
56
 
58
57
  /* Shared memory area for management of walreceiver process */
@@ -207,7 +206,7 @@ typedef enum
207
206
  WALRCV_OK_TUPLES, /* Query returned tuples. */
208
207
  WALRCV_OK_COPY_IN, /* Query started COPY FROM. */
209
208
  WALRCV_OK_COPY_OUT, /* Query started COPY TO. */
210
- WALRCV_OK_COPY_BOTH /* Query started COPY BOTH replication
209
+ WALRCV_OK_COPY_BOTH, /* Query started COPY BOTH replication
211
210
  * protocol. */
212
211
  } WalRcvExecStatus;
213
212
 
@@ -229,8 +228,10 @@ typedef struct WalRcvExecResult
229
228
  /*
230
229
  * walrcv_connect_fn
231
230
  *
232
- * Establish connection to a cluster. 'logical' is true if the
233
- * connection is logical, and false if the connection is physical.
231
+ * Establish connection to a cluster. 'replication' is true if the
232
+ * connection is a replication connection, and false if it is a
233
+ * regular connection. If it is a replication connection, it could
234
+ * be either logical or physical based on input argument 'logical'.
234
235
  * 'appname' is a name associated to the connection, to use for example
235
236
  * with fallback_application_name or application_name. Returns the
236
237
  * details about the connection established, as defined by
@@ -238,6 +239,7 @@ typedef struct WalRcvExecResult
238
239
  * returned with 'err' including the error generated.
239
240
  */
240
241
  typedef WalReceiverConn *(*walrcv_connect_fn) (const char *conninfo,
242
+ bool replication,
241
243
  bool logical,
242
244
  bool must_use_password,
243
245
  const char *appname,
@@ -280,6 +282,13 @@ typedef void (*walrcv_get_senderinfo_fn) (WalReceiverConn *conn,
280
282
  typedef char *(*walrcv_identify_system_fn) (WalReceiverConn *conn,
281
283
  TimeLineID *primary_tli);
282
284
 
285
+ /*
286
+ * walrcv_get_dbname_from_conninfo_fn
287
+ *
288
+ * Returns the database name from the primary_conninfo
289
+ */
290
+ typedef char *(*walrcv_get_dbname_from_conninfo_fn) (const char *conninfo);
291
+
283
292
  /*
284
293
  * walrcv_server_version_fn
285
294
  *
@@ -356,9 +365,20 @@ typedef char *(*walrcv_create_slot_fn) (WalReceiverConn *conn,
356
365
  const char *slotname,
357
366
  bool temporary,
358
367
  bool two_phase,
368
+ bool failover,
359
369
  CRSSnapshotAction snapshot_action,
360
370
  XLogRecPtr *lsn);
361
371
 
372
+ /*
373
+ * walrcv_alter_slot_fn
374
+ *
375
+ * Change the definition of a replication slot. Currently, it only supports
376
+ * changing the failover property of the slot.
377
+ */
378
+ typedef void (*walrcv_alter_slot_fn) (WalReceiverConn *conn,
379
+ const char *slotname,
380
+ bool failover);
381
+
362
382
  /*
363
383
  * walrcv_get_backend_pid_fn
364
384
  *
@@ -393,6 +413,7 @@ typedef struct WalReceiverFunctionsType
393
413
  walrcv_get_conninfo_fn walrcv_get_conninfo;
394
414
  walrcv_get_senderinfo_fn walrcv_get_senderinfo;
395
415
  walrcv_identify_system_fn walrcv_identify_system;
416
+ walrcv_get_dbname_from_conninfo_fn walrcv_get_dbname_from_conninfo;
396
417
  walrcv_server_version_fn walrcv_server_version;
397
418
  walrcv_readtimelinehistoryfile_fn walrcv_readtimelinehistoryfile;
398
419
  walrcv_startstreaming_fn walrcv_startstreaming;
@@ -400,6 +421,7 @@ typedef struct WalReceiverFunctionsType
400
421
  walrcv_receive_fn walrcv_receive;
401
422
  walrcv_send_fn walrcv_send;
402
423
  walrcv_create_slot_fn walrcv_create_slot;
424
+ walrcv_alter_slot_fn walrcv_alter_slot;
403
425
  walrcv_get_backend_pid_fn walrcv_get_backend_pid;
404
426
  walrcv_exec_fn walrcv_exec;
405
427
  walrcv_disconnect_fn walrcv_disconnect;
@@ -407,8 +429,8 @@ typedef struct WalReceiverFunctionsType
407
429
 
408
430
  extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions;
409
431
 
410
- #define walrcv_connect(conninfo, logical, must_use_password, appname, err) \
411
- WalReceiverFunctions->walrcv_connect(conninfo, logical, must_use_password, appname, err)
432
+ #define walrcv_connect(conninfo, replication, logical, must_use_password, appname, err) \
433
+ WalReceiverFunctions->walrcv_connect(conninfo, replication, logical, must_use_password, appname, err)
412
434
  #define walrcv_check_conninfo(conninfo, must_use_password) \
413
435
  WalReceiverFunctions->walrcv_check_conninfo(conninfo, must_use_password)
414
436
  #define walrcv_get_conninfo(conn) \
@@ -417,6 +439,8 @@ extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions;
417
439
  WalReceiverFunctions->walrcv_get_senderinfo(conn, sender_host, sender_port)
418
440
  #define walrcv_identify_system(conn, primary_tli) \
419
441
  WalReceiverFunctions->walrcv_identify_system(conn, primary_tli)
442
+ #define walrcv_get_dbname_from_conninfo(conninfo) \
443
+ WalReceiverFunctions->walrcv_get_dbname_from_conninfo(conninfo)
420
444
  #define walrcv_server_version(conn) \
421
445
  WalReceiverFunctions->walrcv_server_version(conn)
422
446
  #define walrcv_readtimelinehistoryfile(conn, tli, filename, content, size) \
@@ -429,8 +453,10 @@ extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions;
429
453
  WalReceiverFunctions->walrcv_receive(conn, buffer, wait_fd)
430
454
  #define walrcv_send(conn, buffer, nbytes) \
431
455
  WalReceiverFunctions->walrcv_send(conn, buffer, nbytes)
432
- #define walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn) \
433
- WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn)
456
+ #define walrcv_create_slot(conn, slotname, temporary, two_phase, failover, snapshot_action, lsn) \
457
+ WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, two_phase, failover, snapshot_action, lsn)
458
+ #define walrcv_alter_slot(conn, slotname, failover) \
459
+ WalReceiverFunctions->walrcv_alter_slot(conn, slotname, failover)
434
460
  #define walrcv_get_backend_pid(conn) \
435
461
  WalReceiverFunctions->walrcv_get_backend_pid(conn)
436
462
  #define walrcv_exec(conn, exec, nRetTypes, retTypes) \
@@ -457,7 +483,7 @@ walrcv_clear_result(WalRcvExecResult *walres)
457
483
  }
458
484
 
459
485
  /* prototypes for functions in walreceiver.c */
460
- extern void WalReceiverMain(void) pg_attribute_noreturn();
486
+ extern void WalReceiverMain(char *startup_data, size_t startup_data_len) pg_attribute_noreturn();
461
487
  extern void ProcessWalRcvInterrupts(void);
462
488
  extern void WalRcvForceReply(void);
463
489