pg_query 2.2.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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. 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
  */
@@ -51,20 +51,21 @@ typedef struct ReorderBufferTupleBuf
51
51
  * respectively. They're used by INSERT .. ON CONFLICT .. UPDATE. Users of
52
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,
65
- REORDER_BUFFER_CHANGE_TRUNCATE,
66
- REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT
67
- };
66
+ REORDER_BUFFER_CHANGE_INTERNAL_SPEC_ABORT,
67
+ REORDER_BUFFER_CHANGE_TRUNCATE
68
+ } ReorderBufferChangeType;
68
69
 
69
70
  /* forward declaration */
70
71
  struct ReorderBufferTXN;
@@ -81,7 +82,7 @@ typedef struct ReorderBufferChange
81
82
  XLogRecPtr lsn;
82
83
 
83
84
  /* The type of change. */
84
- enum ReorderBufferChangeType action;
85
+ ReorderBufferChangeType action;
85
86
 
86
87
  /* Transaction this change belongs to. */
87
88
  struct ReorderBufferTXN *txn;
@@ -150,6 +151,13 @@ typedef struct ReorderBufferChange
150
151
  CommandId cmax;
151
152
  CommandId combocid;
152
153
  } tuplecid;
154
+
155
+ /* Invalidation. */
156
+ struct
157
+ {
158
+ uint32 ninvalidations; /* Number of messages */
159
+ SharedInvalidationMessage *invalidations; /* invalidation message */
160
+ } inval;
153
161
  } data;
154
162
 
155
163
  /*
@@ -163,6 +171,11 @@ typedef struct ReorderBufferChange
163
171
  #define RBTXN_HAS_CATALOG_CHANGES 0x0001
164
172
  #define RBTXN_IS_SUBXACT 0x0002
165
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
166
179
 
167
180
  /* Does the transaction have catalog changes? */
168
181
  #define rbtxn_has_catalog_changes(txn) \
@@ -182,6 +195,44 @@ typedef struct ReorderBufferChange
182
195
  ((txn)->txn_flags & RBTXN_IS_SERIALIZED) != 0 \
183
196
  )
184
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
+
185
236
  typedef struct ReorderBufferTXN
186
237
  {
187
238
  /* See above */
@@ -193,6 +244,12 @@ typedef struct ReorderBufferTXN
193
244
  /* Xid of top-level transaction, if known */
194
245
  TransactionId toplevel_xid;
195
246
 
247
+ /*
248
+ * Global transaction id required for identification of prepared
249
+ * transactions.
250
+ */
251
+ char *gid;
252
+
196
253
  /*
197
254
  * LSN of the first data carrying, WAL record with knowledge about this
198
255
  * xid. This is allowed to *not* be first record adorned with this xid, if
@@ -201,10 +258,11 @@ typedef struct ReorderBufferTXN
201
258
  XLogRecPtr first_lsn;
202
259
 
203
260
  /* ----
204
- * 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
205
262
  * aborted. This can be a
206
263
  * * plain commit record
207
264
  * * plain commit record, of a parent transaction
265
+ * * prepared tansaction
208
266
  * * prepared transaction commit
209
267
  * * plain abort record
210
268
  * * prepared transaction abort
@@ -221,6 +279,9 @@ typedef struct ReorderBufferTXN
221
279
  */
222
280
  XLogRecPtr end_lsn;
223
281
 
282
+ /* Toplevel transaction for this subxact (NULL for top-level). */
283
+ struct ReorderBufferTXN *toptxn;
284
+
224
285
  /*
225
286
  * LSN of the last lsn at which snapshot information reside, so we can
226
287
  * restart decoding from there and fully recover this transaction from
@@ -233,9 +294,14 @@ typedef struct ReorderBufferTXN
233
294
  XLogRecPtr origin_lsn;
234
295
 
235
296
  /*
236
- * 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.
237
299
  */
238
- TimestampTz commit_time;
300
+ union
301
+ {
302
+ TimestampTz commit_time;
303
+ TimestampTz prepare_time;
304
+ } xact_time;
239
305
 
240
306
  /*
241
307
  * The base snapshot is used to decode all changes until either this
@@ -246,6 +312,13 @@ typedef struct ReorderBufferTXN
246
312
  XLogRecPtr base_snapshot_lsn;
247
313
  dlist_node base_snapshot_node; /* link in txns_by_base_snapshot_lsn */
248
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
+
249
322
  /*
250
323
  * How many ReorderBufferChange's do we have in this txn.
251
324
  *
@@ -260,8 +333,8 @@ typedef struct ReorderBufferTXN
260
333
  uint64 nentries_mem;
261
334
 
262
335
  /*
263
- * List of ReorderBufferChange structs, including new Snapshots and new
264
- * CommandIds
336
+ * List of ReorderBufferChange structs, including new Snapshots, new
337
+ * CommandIds and command invalidation messages.
265
338
  */
266
339
  dlist_head changes;
267
340
 
@@ -311,6 +384,17 @@ typedef struct ReorderBufferTXN
311
384
  * Size of this transaction (changes currently in memory, in bytes).
312
385
  */
313
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;
314
398
  } ReorderBufferTXN;
315
399
 
316
400
  /* so we can define the callbacks used inside struct ReorderBuffer itself */
@@ -346,6 +430,80 @@ typedef void (*ReorderBufferMessageCB) (ReorderBuffer *rb,
346
430
  const char *prefix, Size sz,
347
431
  const char *message);
348
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
+
349
507
  struct ReorderBuffer
350
508
  {
351
509
  /*
@@ -384,6 +542,26 @@ struct ReorderBuffer
384
542
  ReorderBufferCommitCB commit;
385
543
  ReorderBufferMessageCB message;
386
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
+
387
565
  /*
388
566
  * Pointer that will be passed untouched to the callbacks.
389
567
  */
@@ -414,55 +592,94 @@ struct ReorderBuffer
414
592
 
415
593
  /* memory accounting */
416
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 */
417
618
  };
418
619
 
419
620
 
420
- ReorderBuffer *ReorderBufferAllocate(void);
421
- void ReorderBufferFree(ReorderBuffer *);
621
+ extern ReorderBuffer *ReorderBufferAllocate(void);
622
+ extern void ReorderBufferFree(ReorderBuffer *);
422
623
 
423
- ReorderBufferTupleBuf *ReorderBufferGetTupleBuf(ReorderBuffer *, Size tuple_len);
424
- void ReorderBufferReturnTupleBuf(ReorderBuffer *, ReorderBufferTupleBuf *tuple);
425
- ReorderBufferChange *ReorderBufferGetChange(ReorderBuffer *);
426
- 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);
427
628
 
428
- Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
429
- void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
629
+ extern Oid *ReorderBufferGetRelids(ReorderBuffer *, int nrelids);
630
+ extern void ReorderBufferReturnRelids(ReorderBuffer *, Oid *relids);
430
631
 
431
- void ReorderBufferQueueChange(ReorderBuffer *, TransactionId, XLogRecPtr lsn, ReorderBufferChange *);
432
- 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,
433
636
  bool transactional, const char *prefix,
434
637
  Size message_size, const char *message);
435
- void ReorderBufferCommit(ReorderBuffer *, TransactionId,
638
+ extern void ReorderBufferCommit(ReorderBuffer *, TransactionId,
436
639
  XLogRecPtr commit_lsn, XLogRecPtr end_lsn,
437
640
  TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn);
438
- void ReorderBufferAssignChild(ReorderBuffer *, TransactionId, TransactionId, XLogRecPtr commit_lsn);
439
- 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,
440
649
  XLogRecPtr commit_lsn, XLogRecPtr end_lsn);
441
- void ReorderBufferAbort(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
442
- void ReorderBufferAbortOld(ReorderBuffer *, TransactionId xid);
443
- void ReorderBufferForget(ReorderBuffer *, TransactionId, XLogRecPtr lsn);
444
-
445
- void ReorderBufferSetBaseSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
446
- void ReorderBufferAddSnapshot(ReorderBuffer *, TransactionId, XLogRecPtr lsn, struct SnapshotData *snap);
447
- 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,
448
658
  CommandId cid);
449
- void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
659
+ extern void ReorderBufferAddNewTupleCids(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
450
660
  RelFileNode node, ItemPointerData pt,
451
661
  CommandId cmin, CommandId cmax, CommandId combocid);
452
- void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
662
+ extern void ReorderBufferAddInvalidations(ReorderBuffer *, TransactionId, XLogRecPtr lsn,
453
663
  Size nmsgs, SharedInvalidationMessage *msgs);
454
- void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
664
+ extern void ReorderBufferImmediateInvalidation(ReorderBuffer *, uint32 ninvalidations,
455
665
  SharedInvalidationMessage *invalidations);
456
- void ReorderBufferProcessXid(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
457
- void ReorderBufferXidSetCatalogChanges(ReorderBuffer *, TransactionId xid, XLogRecPtr lsn);
458
- bool ReorderBufferXidHasCatalogChanges(ReorderBuffer *, TransactionId xid);
459
- 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);
460
671
 
461
- ReorderBufferTXN *ReorderBufferGetOldestTXN(ReorderBuffer *);
462
- 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);
463
680
 
464
- void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
681
+ extern void ReorderBufferSetRestartPoint(ReorderBuffer *, XLogRecPtr ptr);
465
682
 
466
- void StartupReorderBuffer(void);
683
+ extern void StartupReorderBuffer(void);
467
684
 
468
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);
@@ -210,10 +215,16 @@ extern XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN(void);
210
215
  extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive);
211
216
  extern void ReplicationSlotsDropDBSlots(Oid dboid);
212
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);