pg_query 2.1.0 → 4.2.1

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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -2,7 +2,7 @@
2
2
  * reorderbuffer.h
3
3
  * PostgreSQL logical replay/reorder buffer management.
4
4
  *
5
- * Copyright (c) 2012-2020, PostgreSQL Global Development Group
5
+ * Copyright (c) 2012-2022, PostgreSQL Global Development Group
6
6
  *
7
7
  * src/include/replication/reorderbuffer.h
8
8
  */
@@ -46,24 +46,26 @@ typedef struct ReorderBufferTupleBuf
46
46
  * changes. Users of the decoding facilities will never see changes with
47
47
  * *_INTERNAL_* actions.
48
48
  *
49
- * The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM changes concern
50
- * "speculative insertions", and their confirmation respectively. They're
51
- * used by INSERT .. ON CONFLICT .. UPDATE. Users of logical decoding don't
52
- * have to care about these.
49
+ * The INTERNAL_SPEC_INSERT and INTERNAL_SPEC_CONFIRM, and INTERNAL_SPEC_ABORT
50
+ * changes concern "speculative insertions", their confirmation, and abort
51
+ * respectively. They're used by INSERT .. ON CONFLICT .. UPDATE. Users of
52
+ * logical decoding don't have to care about these.
53
53
  */
54
- enum ReorderBufferChangeType
54
+ typedef enum ReorderBufferChangeType
55
55
  {
56
56
  REORDER_BUFFER_CHANGE_INSERT,
57
57
  REORDER_BUFFER_CHANGE_UPDATE,
58
58
  REORDER_BUFFER_CHANGE_DELETE,
59
59
  REORDER_BUFFER_CHANGE_MESSAGE,
60
+ REORDER_BUFFER_CHANGE_INVALIDATION,
60
61
  REORDER_BUFFER_CHANGE_INTERNAL_SNAPSHOT,
61
62
  REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID,
62
63
  REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID,
63
64
  REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT,
64
65
  REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM,
66
+ REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
65
67
  REORDER_BUFFER_CHANGE_TRUNCATE
66
- };
68
+ } ReorderBufferChangeType;
67
69
 
68
70
  /* forward declaration */
69
71
  struct ReorderBufferTXN;
@@ -80,7 +82,7 @@ typedef struct ReorderBufferChange
80
82
  XLogRecPtr lsn;
81
83
 
82
84
  /* The type of change. */
83
- enum ReorderBufferChangeType action;
85
+ ReorderBufferChangeType action;
84
86
 
85
87
  /* Transaction this change belongs to. */
86
88
  struct ReorderBufferTXN *txn;
@@ -149,6 +151,13 @@ typedef struct ReorderBufferChange
149
151
  CommandId cmax;
150
152
  CommandId combocid;
151
153
  } tuplecid;
154
+
155
+ /* Invalidation. */
156
+ struct
157
+ {
158
+ uint32 ninvalidations; /* Number of messages */
159
+ SharedInvalidationMessage *invalidations; /* invalidation message */
160
+ } inval;
152
161
  } data;
153
162
 
154
163
  /*
@@ -162,6 +171,11 @@ typedef struct ReorderBufferChange
162
171
  #define RBTXN_HAS_CATALOG_CHANGES 0x0001
163
172
  #define RBTXN_IS_SUBXACT 0x0002
164
173
  #define RBTXN_IS_SERIALIZED 0x0004
174
+ #define RBTXN_IS_SERIALIZED_CLEAR 0x0008
175
+ #define RBTXN_IS_STREAMED 0x0010
176
+ #define RBTXN_HAS_PARTIAL_CHANGE 0x0020
177
+ #define RBTXN_PREPARE 0x0040
178
+ #define RBTXN_SKIPPED_PREPARE 0x0080
165
179
 
166
180
  /* Does the transaction have catalog changes? */
167
181
  #define rbtxn_has_catalog_changes(txn) \
@@ -181,6 +195,44 @@ typedef struct ReorderBufferChange
181
195
  ((txn)->txn_flags & RBTXN_IS_SERIALIZED) != 0 \
182
196
  )
183
197
 
198
+ /* Has this transaction ever been spilled to disk? */
199
+ #define rbtxn_is_serialized_clear(txn) \
200
+ ( \
201
+ ((txn)->txn_flags & RBTXN_IS_SERIALIZED_CLEAR) != 0 \
202
+ )
203
+
204
+ /* Has this transaction contains partial changes? */
205
+ #define rbtxn_has_partial_change(txn) \
206
+ ( \
207
+ ((txn)->txn_flags & RBTXN_HAS_PARTIAL_CHANGE) != 0 \
208
+ )
209
+
210
+ /*
211
+ * Has this transaction been streamed to downstream?
212
+ *
213
+ * (It's not possible to deduce this from nentries and nentries_mem for
214
+ * various reasons. For example, all changes may be in subtransactions in
215
+ * which case we'd have nentries==0 for the toplevel one, which would say
216
+ * nothing about the streaming. So we maintain this flag, but only for the
217
+ * toplevel transaction.)
218
+ */
219
+ #define rbtxn_is_streamed(txn) \
220
+ ( \
221
+ ((txn)->txn_flags & RBTXN_IS_STREAMED) != 0 \
222
+ )
223
+
224
+ /* Has this transaction been prepared? */
225
+ #define rbtxn_prepared(txn) \
226
+ ( \
227
+ ((txn)->txn_flags & RBTXN_PREPARE) != 0 \
228
+ )
229
+
230
+ /* prepare for this transaction skipped? */
231
+ #define rbtxn_skip_prepared(txn) \
232
+ ( \
233
+ ((txn)->txn_flags & RBTXN_SKIPPED_PREPARE) != 0 \
234
+ )
235
+
184
236
  typedef struct ReorderBufferTXN
185
237
  {
186
238
  /* See above */
@@ -192,6 +244,12 @@ typedef struct ReorderBufferTXN
192
244
  /* Xid of top-level transaction, if known */
193
245
  TransactionId toplevel_xid;
194
246
 
247
+ /*
248
+ * Global transaction id required for identification of prepared
249
+ * transactions.
250
+ */
251
+ char *gid;
252
+
195
253
  /*
196
254
  * LSN of the first data carrying, WAL record with knowledge about this
197
255
  * xid. This is allowed to *not* be first record adorned with this xid, if
@@ -200,10 +258,11 @@ typedef struct ReorderBufferTXN
200
258
  XLogRecPtr first_lsn;
201
259
 
202
260
  /* ----
203
- * LSN of the record that lead to this xact to be committed or
261
+ * LSN of the record that lead to this xact to be prepared or committed or
204
262
  * aborted. This can be a
205
263
  * * plain commit record
206
264
  * * plain commit record, of a parent transaction
265
+ * * prepared tansaction
207
266
  * * prepared transaction commit
208
267
  * * plain abort record
209
268
  * * prepared transaction abort
@@ -220,6 +279,9 @@ typedef struct ReorderBufferTXN
220
279
  */
221
280
  XLogRecPtr end_lsn;
222
281
 
282
+ /* Toplevel transaction for this subxact (NULL for top-level). */
283
+ struct ReorderBufferTXN *toptxn;
284
+
223
285
  /*
224
286
  * LSN of the last lsn at which snapshot information reside, so we can
225
287
  * restart decoding from there and fully recover this transaction from
@@ -232,9 +294,14 @@ typedef struct ReorderBufferTXN
232
294
  XLogRecPtr origin_lsn;
233
295
 
234
296
  /*
235
- * Commit time, only known when we read the actual commit record.
297
+ * Commit or Prepare time, only known when we read the actual commit or
298
+ * prepare record.
236
299
  */
237
- TimestampTz commit_time;
300
+ union
301
+ {
302
+ TimestampTz commit_time;
303
+ TimestampTz prepare_time;
304
+ } xact_time;
238
305
 
239
306
  /*
240
307
  * The base snapshot is used to decode all changes until either this
@@ -245,6 +312,13 @@ typedef struct ReorderBufferTXN
245
312
  XLogRecPtr base_snapshot_lsn;
246
313
  dlist_node base_snapshot_node; /* link in txns_by_base_snapshot_lsn */
247
314
 
315
+ /*
316
+ * Snapshot/CID from the previous streaming run. Only valid for already
317
+ * streamed transactions (NULL/InvalidCommandId otherwise).
318
+ */
319
+ Snapshot snapshot_now;
320
+ CommandId command_id;
321
+
248
322
  /*
249
323
  * How many ReorderBufferChange's do we have in this txn.
250
324
  *
@@ -259,8 +333,8 @@ typedef struct ReorderBufferTXN
259
333
  uint64 nentries_mem;
260
334
 
261
335
  /*
262
- * List of ReorderBufferChange structs, including new Snapshots and new
263
- * CommandIds
336
+ * List of ReorderBufferChange structs, including new Snapshots, new
337
+ * CommandIds and command invalidation messages.
264
338
  */
265
339
  dlist_head changes;
266
340
 
@@ -310,6 +384,17 @@ typedef struct ReorderBufferTXN
310
384
  * Size of this transaction (changes currently in memory, in bytes).
311
385
  */
312
386
  Size size;
387
+
388
+ /* Size of top-transaction including sub-transactions. */
389
+ Size total_size;
390
+
391
+ /* If we have detected concurrent abort then ignore future changes. */
392
+ bool concurrent_abort;
393
+
394
+ /*
395
+ * Private data pointer of the output plugin.
396
+ */
397
+ void *output_plugin_private;
313
398
  } ReorderBufferTXN;
314
399
 
315
400
  /* so we can define the callbacks used inside struct ReorderBuffer itself */
@@ -345,6 +430,80 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
345
430
  const char *prefix, Size sz,
346
431
  const char *message);
347
432
 
433
+ /* begin prepare callback signature */
434
+ typedef void (*ReorderBufferBeginPrepareCB) (ReorderBuffer *rb,
435
+ ReorderBufferTXN *txn);
436
+
437
+ /* prepare callback signature */
438
+ typedef void (*ReorderBufferPrepareCB) (ReorderBuffer *rb,
439
+ ReorderBufferTXN *txn,
440
+ XLogRecPtr prepare_lsn);
441
+
442
+ /* commit prepared callback signature */
443
+ typedef void (*ReorderBufferCommitPreparedCB) (ReorderBuffer *rb,
444
+ ReorderBufferTXN *txn,
445
+ XLogRecPtr commit_lsn);
446
+
447
+ /* rollback prepared callback signature */
448
+ typedef void (*ReorderBufferRollbackPreparedCB) (ReorderBuffer *rb,
449
+ ReorderBufferTXN *txn,
450
+ XLogRecPtr prepare_end_lsn,
451
+ TimestampTz prepare_time);
452
+
453
+ /* start streaming transaction callback signature */
454
+ typedef void (*ReorderBufferStreamStartCB) (
455
+ ReorderBuffer *rb,
456
+ ReorderBufferTXN *txn,
457
+ XLogRecPtr first_lsn);
458
+
459
+ /* stop streaming transaction callback signature */
460
+ typedef void (*ReorderBufferStreamStopCB) (
461
+ ReorderBuffer *rb,
462
+ ReorderBufferTXN *txn,
463
+ XLogRecPtr last_lsn);
464
+
465
+ /* discard streamed transaction callback signature */
466
+ typedef void (*ReorderBufferStreamAbortCB) (
467
+ ReorderBuffer *rb,
468
+ ReorderBufferTXN *txn,
469
+ XLogRecPtr abort_lsn);
470
+
471
+ /* prepare streamed transaction callback signature */
472
+ typedef void (*ReorderBufferStreamPrepareCB) (
473
+ ReorderBuffer *rb,
474
+ ReorderBufferTXN *txn,
475
+ XLogRecPtr prepare_lsn);
476
+
477
+ /* commit streamed transaction callback signature */
478
+ typedef void (*ReorderBufferStreamCommitCB) (
479
+ ReorderBuffer *rb,
480
+ ReorderBufferTXN *txn,
481
+ XLogRecPtr commit_lsn);
482
+
483
+ /* stream change callback signature */
484
+ typedef void (*ReorderBufferStreamChangeCB) (
485
+ ReorderBuffer *rb,
486
+ ReorderBufferTXN *txn,
487
+ Relation relation,
488
+ ReorderBufferChange *change);
489
+
490
+ /* stream message callback signature */
491
+ typedef void (*ReorderBufferStreamMessageCB) (
492
+ ReorderBuffer *rb,
493
+ ReorderBufferTXN *txn,
494
+ XLogRecPtr message_lsn,
495
+ bool transactional,
496
+ const char *prefix, Size sz,
497
+ const char *message);
498
+
499
+ /* stream truncate callback signature */
500
+ typedef void (*ReorderBufferStreamTruncateCB) (
501
+ ReorderBuffer *rb,
502
+ ReorderBufferTXN *txn,
503
+ int nrelations,
504
+ Relation relations[],
505
+ ReorderBufferChange *change);
506
+
348
507
  struct ReorderBuffer
349
508
  {
350
509
  /*
@@ -383,6 +542,26 @@ struct ReorderBuffer
383
542
  ReorderBufferCommitCB commit;
384
543
  ReorderBufferMessageCB message;
385
544
 
545
+ /*
546
+ * Callbacks to be called when streaming a transaction at prepare time.
547
+ */
548
+ ReorderBufferBeginCB begin_prepare;
549
+ ReorderBufferPrepareCB prepare;
550
+ ReorderBufferCommitPreparedCB commit_prepared;
551
+ ReorderBufferRollbackPreparedCB rollback_prepared;
552
+
553
+ /*
554
+ * Callbacks to be called when streaming a transaction.
555
+ */
556
+ ReorderBufferStreamStartCB stream_start;
557
+ ReorderBufferStreamStopCB stream_stop;
558
+ ReorderBufferStreamAbortCB stream_abort;
559
+ ReorderBufferStreamPrepareCB stream_prepare;
560
+ ReorderBufferStreamCommitCB stream_commit;
561
+ ReorderBufferStreamChangeCB stream_change;
562
+ ReorderBufferStreamMessageCB stream_message;
563
+ ReorderBufferStreamTruncateCB stream_truncate;
564
+
386
565
  /*
387
566
  * Pointer that will be passed untouched to the callbacks.
388
567
  */
@@ -413,55 +592,94 @@ struct ReorderBuffer
413
592
 
414
593
  /* memory accounting */
415
594
  Size size;
595
+
596
+ /*
597
+ * Statistics about transactions spilled to disk.
598
+ *
599
+ * A single transaction may be spilled repeatedly, which is why we keep
600
+ * two different counters. For spilling, the transaction counter includes
601
+ * both toplevel transactions and subtransactions.
602
+ */
603
+ int64 spillTxns; /* number of transactions spilled to disk */
604
+ int64 spillCount; /* spill-to-disk invocation counter */
605
+ int64 spillBytes; /* amount of data spilled to disk */
606
+
607
+ /* Statistics about transactions streamed to the decoding output plugin */
608
+ int64 streamTxns; /* number of transactions streamed */
609
+ int64 streamCount; /* streaming invocation counter */
610
+ int64 streamBytes; /* amount of data decoded */
611
+
612
+ /*
613
+ * Statistics about all the transactions sent to the decoding output
614
+ * plugin
615
+ */
616
+ int64 totalTxns; /* total number of transactions sent */
617
+ int64 totalBytes; /* total amount of data decoded */
416
618
  };
417
619
 
418
620
 
419
- ReorderBuffer *ReorderBufferAllocate(void);
420
- void ReorderBufferFree(ReorderBuffer *);
621
+ extern ReorderBuffer *ReorderBufferAllocate(void);
622
+ extern void ReorderBufferFree(ReorderBuffer *);
421
623
 
422
- ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
423
- void ReorderBufferReturnTupleBuf(ReorderBuffer *, ReorderBufferTupleBuf *tuple);
424
- ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
425
- void ReorderBufferReturnChange(ReorderBuffer *, ReorderBufferChange *);
624
+ extern ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
625
+ extern void ReorderBufferReturnTupleBuf(ReorderBuffer *, ReorderBufferTupleBuf *tuple);
626
+ extern ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
627
+ extern void ReorderBufferReturnChange(ReorderBuffer *, ReorderBufferChange *, bool);
426
628
 
427
- Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
428
- void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
629
+ extern Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
630
+ extern void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
429
631
 
430
- void ReorderBufferQueueChange(ReorderBuffer *, TransactionId, XLogRecPtr lsn, ReorderBufferChange *);
431
- void ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn,
632
+ extern void ReorderBufferQueueChange(ReorderBuffer *, TransactionId,
633
+ XLogRecPtr lsn, ReorderBufferChange *,
634
+ bool toast_insert);
635
+ extern void ReorderBufferQueueMessage(ReorderBuffer *, TransactionId, Snapshot snapshot, XLogRecPtr lsn,
432
636
  bool transactional, const char *prefix,
433
637
  Size message_size, const char *message);
434
- void ReorderBufferCommit(ReorderBuffer *, TransactionId,
638
+ extern void ReorderBufferCommit(ReorderBuffer *, TransactionId,
435
639
  XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
436
640
  TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn);
437
- void ReorderBufferAssignChild(ReorderBuffer *, TransactionId, TransactionId, XLogRecPtr commit_lsn);
438
- void ReorderBufferCommitChild(ReorderBuffer *, TransactionId, TransactionId,
641
+ extern void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid,
642
+ XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
643
+ XLogRecPtr two_phase_at,
644
+ TimestampTz commit_time,
645
+ RepOriginId origin_id, XLogRecPtr origin_lsn,
646
+ char *gid, bool is_commit);
647
+ extern void ReorderBufferAssignChild(ReorderBuffer *, TransactionId, TransactionId, XLogRecPtr commit_lsn);
648
+ extern void ReorderBufferCommitChild(ReorderBuffer *, TransactionId, TransactionId,
439
649
  XLogRecPtr commit_lsn, XLogRecPtr end_lsn);
440
- void ReorderBufferAbort(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
441
- void ReorderBufferAbortOld(ReorderBuffer *, TransactionId xid);
442
- void ReorderBufferForget(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
443
-
444
- void ReorderBufferSetBaseSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
445
- void ReorderBufferAddSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
446
- void ReorderBufferAddNewCommandId(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
650
+ extern void ReorderBufferAbort(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
651
+ extern void ReorderBufferAbortOld(ReorderBuffer *, TransactionId xid);
652
+ extern void ReorderBufferForget(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
653
+ extern void ReorderBufferInvalidate(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
654
+
655
+ extern void ReorderBufferSetBaseSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
656
+ extern void ReorderBufferAddSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
657
+ extern void ReorderBufferAddNewCommandId(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
447
658
  CommandId cid);
448
- void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
659
+ extern void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
449
660
  RelFileNode node, ItemPointerData pt,
450
661
  CommandId cmin, CommandId cmax, CommandId combocid);
451
- void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
662
+ extern void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
452
663
  Size nmsgs, SharedInvalidationMessage *msgs);
453
- void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
664
+ extern void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
454
665
  SharedInvalidationMessage *invalidations);
455
- void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
456
- void ReorderBufferXidSetCatalogChanges(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
457
- bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *, TransactionId xid);
458
- bool ReorderBufferXidHasBaseSnapshot(ReorderBuffer *, TransactionId xid);
666
+ extern void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
667
+
668
+ extern void ReorderBufferXidSetCatalogChanges(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
669
+ extern bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *, TransactionId xid);
670
+ extern bool ReorderBufferXidHasBaseSnapshot(ReorderBuffer *, TransactionId xid);
459
671
 
460
- ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *);
461
- TransactionId ReorderBufferGetOldestXmin(ReorderBuffer *rb);
672
+ extern bool ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xid,
673
+ XLogRecPtr prepare_lsn, XLogRecPtr end_lsn,
674
+ TimestampTz prepare_time,
675
+ RepOriginId origin_id, XLogRecPtr origin_lsn);
676
+ extern void ReorderBufferSkipPrepare(ReorderBuffer *rb, TransactionId xid);
677
+ extern void ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, char *gid);
678
+ extern ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *);
679
+ extern TransactionId ReorderBufferGetOldestXmin(ReorderBuffer *rb);
462
680
 
463
- void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
681
+ extern void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
464
682
 
465
- void StartupReorderBuffer(void);
683
+ extern void StartupReorderBuffer(void);
466
684
 
467
685
  #endif
@@ -2,7 +2,7 @@
2
2
  * slot.h
3
3
  * Replication slot management.
4
4
  *
5
- * Copyright (c) 2012-2020, PostgreSQL Global Development Group
5
+ * Copyright (c) 2012-2022, PostgreSQL Global Development Group
6
6
  *
7
7
  *-------------------------------------------------------------------------
8
8
  */
@@ -15,6 +15,7 @@
15
15
  #include "storage/lwlock.h"
16
16
  #include "storage/shmem.h"
17
17
  #include "storage/spin.h"
18
+ #include "replication/walreceiver.h"
18
19
 
19
20
  /*
20
21
  * Behaviour of replication slots, upon release or crash.
@@ -36,14 +37,6 @@ typedef enum ReplicationSlotPersistency
36
37
  RS_TEMPORARY
37
38
  } ReplicationSlotPersistency;
38
39
 
39
- /* For ReplicationSlotAcquire, q.v. */
40
- typedef enum SlotAcquireBehavior
41
- {
42
- SAB_Error,
43
- SAB_Block,
44
- SAB_Inquire
45
- } SlotAcquireBehavior;
46
-
47
40
  /*
48
41
  * On-Disk data of a replication slot, preserved across restarts.
49
42
  */
@@ -90,6 +83,17 @@ typedef struct ReplicationSlotPersistentData
90
83
  */
91
84
  XLogRecPtr confirmed_flush;
92
85
 
86
+ /*
87
+ * LSN at which we enabled two_phase commit for this slot or LSN at which
88
+ * we found a consistent point at the time of slot creation.
89
+ */
90
+ XLogRecPtr two_phase_at;
91
+
92
+ /*
93
+ * Allow decoding of prepared transactions?
94
+ */
95
+ bool two_phase;
96
+
93
97
  /* plugin name */
94
98
  NameData plugin;
95
99
  } ReplicationSlotPersistentData;
@@ -191,17 +195,18 @@ extern void ReplicationSlotsShmemInit(void);
191
195
 
192
196
  /* management of individual slots */
193
197
  extern void ReplicationSlotCreate(const char *name, bool db_specific,
194
- ReplicationSlotPersistency p);
198
+ ReplicationSlotPersistency p, bool two_phase);
195
199
  extern void ReplicationSlotPersist(void);
196
200
  extern void ReplicationSlotDrop(const char *name, bool nowait);
197
201
 
198
- extern int ReplicationSlotAcquire(const char *name, SlotAcquireBehavior behavior);
202
+ extern void ReplicationSlotAcquire(const char *name, bool nowait);
199
203
  extern void ReplicationSlotRelease(void);
200
204
  extern void ReplicationSlotCleanup(void);
201
205
  extern void ReplicationSlotSave(void);
202
206
  extern void ReplicationSlotMarkDirty(void);
203
207
 
204
208
  /* misc stuff */
209
+ extern void ReplicationSlotInitialize(void);
205
210
  extern bool ReplicationSlotValidateName(const char *name, int elevel);
206
211
  extern void ReplicationSlotReserveWal(void);
207
212
  extern void ReplicationSlotsComputeRequiredXmin(bool already_locked);
@@ -209,11 +214,17 @@ extern void ReplicationSlotsComputeRequiredLSN(void);
209
214
  extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void);
210
215
  extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive);
211
216
  extern void ReplicationSlotsDropDBSlots(Oid dboid);
212
- extern void InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno);
217
+ extern bool InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno);
218
+ extern ReplicationSlot *SearchNamedReplicationSlot(const char *name, bool need_lock);
219
+ extern int ReplicationSlotIndex(ReplicationSlot *slot);
220
+ extern bool ReplicationSlotName(int index, Name name);
221
+ extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, int szslot);
222
+ extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok);
213
223
 
214
224
  extern void StartupReplicationSlots(void);
215
225
  extern void CheckPointReplicationSlots(void);
216
226
 
217
227
  extern void CheckSlotRequirements(void);
228
+ extern void CheckSlotPermissions(void);
218
229
 
219
230
  #endif /* SLOT_H */
@@ -3,7 +3,7 @@
3
3
  * syncrep.h
4
4
  * Exports from replication/syncrep.c.
5
5
  *
6
- * Portions Copyright (c) 2010-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group
7
7
  *
8
8
  * IDENTIFICATION
9
9
  * src/include/replication/syncrep.h
@@ -72,14 +72,14 @@ typedef struct SyncRepConfigData
72
72
  char member_names[FLEXIBLE_ARRAY_MEMBER];
73
73
  } SyncRepConfigData;
74
74
 
75
- extern SyncRepConfigData *SyncRepConfig;
75
+ extern PGDLLIMPORT SyncRepConfigData *SyncRepConfig;
76
76
 
77
77
  /* communication variables for parsing synchronous_standby_names GUC */
78
- extern SyncRepConfigData *syncrep_parse_result;
79
- extern char *syncrep_parse_error_msg;
78
+ extern PGDLLIMPORT SyncRepConfigData *syncrep_parse_result;
79
+ extern PGDLLIMPORT char *syncrep_parse_error_msg;
80
80
 
81
81
  /* user-settable parameters for synchronous replication */
82
- extern char *SyncRepStandbyNames;
82
+ extern PGDLLIMPORT char *SyncRepStandbyNames;
83
83
 
84
84
  /* called by user backend */
85
85
  extern void SyncRepWaitForLSN(XLogRecPtr lsn, bool commit);