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
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * PostgreSQL write-ahead log manager
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/access/xlog.h
@@ -11,14 +11,11 @@
11
11
  #ifndef XLOG_H
12
12
  #define XLOG_H
13
13
 
14
- #include "access/rmgr.h"
15
14
  #include "access/xlogdefs.h"
16
- #include "access/xloginsert.h"
17
15
  #include "access/xlogreader.h"
18
16
  #include "datatype/timestamp.h"
19
17
  #include "lib/stringinfo.h"
20
18
  #include "nodes/pg_list.h"
21
- #include "storage/fd.h"
22
19
 
23
20
 
24
21
  /* Sync methods */
@@ -27,127 +24,35 @@
27
24
  #define SYNC_METHOD_OPEN 2 /* for O_SYNC */
28
25
  #define SYNC_METHOD_FSYNC_WRITETHROUGH 3
29
26
  #define SYNC_METHOD_OPEN_DSYNC 4 /* for O_DSYNC */
30
- extern int sync_method;
27
+ extern PGDLLIMPORT int sync_method;
31
28
 
32
- extern PGDLLIMPORT TimeLineID ThisTimeLineID; /* current TLI */
33
-
34
- /*
35
- * Prior to 8.4, all activity during recovery was carried out by the startup
36
- * process. This local variable continues to be used in many parts of the
37
- * code to indicate actions taken by RecoveryManagers. Other processes that
38
- * potentially perform work during recovery should check RecoveryInProgress().
39
- * See XLogCtl notes in xlog.c.
40
- */
41
- extern bool InRecovery;
42
-
43
- /*
44
- * Like InRecovery, standbyState is only valid in the startup process.
45
- * In all other processes it will have the value STANDBY_DISABLED (so
46
- * InHotStandby will read as false).
47
- *
48
- * In DISABLED state, we're performing crash recovery or hot standby was
49
- * disabled in postgresql.conf.
50
- *
51
- * In INITIALIZED state, we've run InitRecoveryTransactionEnvironment, but
52
- * we haven't yet processed a RUNNING_XACTS or shutdown-checkpoint WAL record
53
- * to initialize our master-transaction tracking system.
54
- *
55
- * When the transaction tracking is initialized, we enter the SNAPSHOT_PENDING
56
- * state. The tracked information might still be incomplete, so we can't allow
57
- * connections yet, but redo functions must update the in-memory state when
58
- * appropriate.
59
- *
60
- * In SNAPSHOT_READY mode, we have full knowledge of transactions that are
61
- * (or were) running in the master at the current WAL location. Snapshots
62
- * can be taken, and read-only queries can be run.
63
- */
64
- typedef enum
65
- {
66
- STANDBY_DISABLED,
67
- STANDBY_INITIALIZED,
68
- STANDBY_SNAPSHOT_PENDING,
69
- STANDBY_SNAPSHOT_READY
70
- } HotStandbyState;
71
-
72
- extern HotStandbyState standbyState;
73
-
74
- #define InHotStandby (standbyState >= STANDBY_SNAPSHOT_PENDING)
75
-
76
- /*
77
- * Recovery target type.
78
- * Only set during a Point in Time recovery, not when in standby mode.
79
- */
80
- typedef enum
81
- {
82
- RECOVERY_TARGET_UNSET,
83
- RECOVERY_TARGET_XID,
84
- RECOVERY_TARGET_TIME,
85
- RECOVERY_TARGET_NAME,
86
- RECOVERY_TARGET_LSN,
87
- RECOVERY_TARGET_IMMEDIATE
88
- } RecoveryTargetType;
89
-
90
- /*
91
- * Recovery target TimeLine goal
92
- */
93
- typedef enum
94
- {
95
- RECOVERY_TARGET_TIMELINE_CONTROLFILE,
96
- RECOVERY_TARGET_TIMELINE_LATEST,
97
- RECOVERY_TARGET_TIMELINE_NUMERIC
98
- } RecoveryTargetTimeLineGoal;
99
-
100
- extern XLogRecPtr ProcLastRecPtr;
101
- extern XLogRecPtr XactLastRecEnd;
29
+ extern PGDLLIMPORT XLogRecPtr ProcLastRecPtr;
30
+ extern PGDLLIMPORT XLogRecPtr XactLastRecEnd;
102
31
  extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd;
103
32
 
104
- extern bool reachedConsistency;
105
-
106
33
  /* these variables are GUC parameters related to XLOG */
107
- extern int wal_segment_size;
108
- extern int min_wal_size_mb;
109
- extern int max_wal_size_mb;
110
- extern int wal_keep_size_mb;
111
- extern int max_slot_wal_keep_size_mb;
112
- extern int XLOGbuffers;
113
- extern int XLogArchiveTimeout;
114
- extern int wal_retrieve_retry_interval;
115
- extern char *XLogArchiveCommand;
116
- extern bool EnableHotStandby;
117
- extern bool fullPageWrites;
118
- extern bool wal_log_hints;
119
- extern bool wal_compression;
120
- extern bool wal_init_zero;
121
- extern bool wal_recycle;
122
- extern bool *wal_consistency_checking;
123
- extern char *wal_consistency_checking_string;
124
- extern bool log_checkpoints;
125
- extern char *recoveryRestoreCommand;
126
- extern char *recoveryEndCommand;
127
- extern char *archiveCleanupCommand;
128
- extern bool recoveryTargetInclusive;
129
- extern int recoveryTargetAction;
130
- extern int recovery_min_apply_delay;
131
- extern char *PrimaryConnInfo;
132
- extern char *PrimarySlotName;
133
- extern bool wal_receiver_create_temp_slot;
134
-
135
- /* indirectly set via GUC system */
136
- extern TransactionId recoveryTargetXid;
137
- extern char *recovery_target_time_string;
138
- extern const char *recoveryTargetName;
139
- extern XLogRecPtr recoveryTargetLSN;
140
- extern RecoveryTargetType recoveryTarget;
141
- extern char *PromoteTriggerFile;
142
- extern RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
143
- extern TimeLineID recoveryTargetTLIRequested;
144
- extern TimeLineID recoveryTargetTLI;
145
-
146
- extern int CheckPointSegments;
147
-
148
- /* option set locally in startup process only when signal files exist */
149
- extern bool StandbyModeRequested;
150
- extern bool StandbyMode;
34
+ extern PGDLLIMPORT int wal_segment_size;
35
+ extern PGDLLIMPORT int min_wal_size_mb;
36
+ extern PGDLLIMPORT int max_wal_size_mb;
37
+ extern PGDLLIMPORT int wal_keep_size_mb;
38
+ extern PGDLLIMPORT int max_slot_wal_keep_size_mb;
39
+ extern PGDLLIMPORT int XLOGbuffers;
40
+ extern PGDLLIMPORT int XLogArchiveTimeout;
41
+ extern PGDLLIMPORT int wal_retrieve_retry_interval;
42
+ extern PGDLLIMPORT char *XLogArchiveCommand;
43
+ extern PGDLLIMPORT bool EnableHotStandby;
44
+ extern PGDLLIMPORT bool fullPageWrites;
45
+ extern PGDLLIMPORT bool wal_log_hints;
46
+ extern PGDLLIMPORT int wal_compression;
47
+ extern PGDLLIMPORT bool wal_init_zero;
48
+ extern PGDLLIMPORT bool wal_recycle;
49
+ extern PGDLLIMPORT bool *wal_consistency_checking;
50
+ extern PGDLLIMPORT char *wal_consistency_checking_string;
51
+ extern PGDLLIMPORT bool log_checkpoints;
52
+ extern PGDLLIMPORT bool track_wal_io_timing;
53
+ extern PGDLLIMPORT int wal_decode_buffer_size;
54
+
55
+ extern PGDLLIMPORT int CheckPointSegments;
151
56
 
152
57
  /* Archive modes */
153
58
  typedef enum ArchiveMode
@@ -156,7 +61,7 @@ typedef enum ArchiveMode
156
61
  ARCHIVE_MODE_ON, /* enabled while server is running normally */
157
62
  ARCHIVE_MODE_ALWAYS /* enabled always (even during recovery) */
158
63
  } ArchiveMode;
159
- extern int XLogArchiveMode;
64
+ extern PGDLLIMPORT int XLogArchiveMode;
160
65
 
161
66
  /* WAL levels */
162
67
  typedef enum WalLevel
@@ -166,6 +71,15 @@ typedef enum WalLevel
166
71
  WAL_LEVEL_LOGICAL
167
72
  } WalLevel;
168
73
 
74
+ /* Compression algorithms for WAL */
75
+ typedef enum WalCompression
76
+ {
77
+ WAL_COMPRESSION_NONE = 0,
78
+ WAL_COMPRESSION_PGLZ,
79
+ WAL_COMPRESSION_LZ4,
80
+ WAL_COMPRESSION_ZSTD
81
+ } WalCompression;
82
+
169
83
  /* Recovery states */
170
84
  typedef enum RecoveryState
171
85
  {
@@ -182,7 +96,6 @@ extern PGDLLIMPORT int wal_level;
182
96
  /* Is WAL archiving enabled always (even during recovery)? */
183
97
  #define XLogArchivingAlways() \
184
98
  (AssertMacro(XLogArchiveMode == ARCHIVE_MODE_OFF || wal_level >= WAL_LEVEL_REPLICA), XLogArchiveMode == ARCHIVE_MODE_ALWAYS)
185
- #define XLogArchiveCommandSet() (XLogArchiveCommand[0] != '\0')
186
99
 
187
100
  /*
188
101
  * Is WAL-logging necessary for archival or log-shipping, or can we skip
@@ -208,7 +121,7 @@ extern PGDLLIMPORT int wal_level;
208
121
  #define XLogLogicalInfoActive() (wal_level >= WAL_LEVEL_LOGICAL)
209
122
 
210
123
  #ifdef WAL_DEBUG
211
- extern bool XLOG_DEBUG;
124
+ extern PGDLLIMPORT bool XLOG_DEBUG;
212
125
  #endif
213
126
 
214
127
  /*
@@ -262,7 +175,7 @@ typedef struct CheckpointStatsData
262
175
  * entire sync phase. */
263
176
  } CheckpointStatsData;
264
177
 
265
- extern CheckpointStatsData CheckpointStats;
178
+ extern PGDLLIMPORT CheckpointStatsData CheckpointStats;
266
179
 
267
180
  /*
268
181
  * GetWALAvailability return codes
@@ -282,12 +195,13 @@ struct XLogRecData;
282
195
  extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata,
283
196
  XLogRecPtr fpw_lsn,
284
197
  uint8 flags,
285
- int num_fpi);
198
+ int num_fpi,
199
+ bool topxid_included);
286
200
  extern void XLogFlush(XLogRecPtr RecPtr);
287
201
  extern bool XLogBackgroundFlush(void);
288
202
  extern bool XLogNeedsFlush(XLogRecPtr RecPtr);
289
- extern int XLogFileInit(XLogSegNo segno, bool *use_existent, bool use_lock);
290
- extern int XLogFileOpen(XLogSegNo segno);
203
+ extern int XLogFileInit(XLogSegNo segno, TimeLineID tli);
204
+ extern int XLogFileOpen(XLogSegNo segno, TimeLineID tli);
291
205
 
292
206
  extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli);
293
207
  extern XLogSegNo XLogGetLastRemovedSegno(void);
@@ -298,23 +212,14 @@ extern void xlog_redo(XLogReaderState *record);
298
212
  extern void xlog_desc(StringInfo buf, XLogReaderState *record);
299
213
  extern const char *xlog_identify(uint8 info);
300
214
 
301
- extern void issue_xlog_fsync(int fd, XLogSegNo segno);
215
+ extern void issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli);
302
216
 
303
217
  extern bool RecoveryInProgress(void);
304
218
  extern RecoveryState GetRecoveryState(void);
305
- extern bool HotStandbyActive(void);
306
- extern bool HotStandbyActiveInReplay(void);
307
219
  extern bool XLogInsertAllowed(void);
308
- extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream);
309
- extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI);
310
220
  extern XLogRecPtr GetXLogInsertRecPtr(void);
311
221
  extern XLogRecPtr GetXLogWriteRecPtr(void);
312
- extern bool RecoveryIsPaused(void);
313
- extern void SetRecoveryPause(bool recoveryPause);
314
- extern TimestampTz GetLatestXTime(void);
315
- extern TimestampTz GetCurrentChunkReplayStartTime(void);
316
222
 
317
- extern void UpdateControlFile(void);
318
223
  extern uint64 GetSystemIdentifier(void);
319
224
  extern char *GetMockAuthenticationNonce(void);
320
225
  extern bool DataChecksumsEnabled(void);
@@ -325,32 +230,35 @@ extern void BootStrapXLOG(void);
325
230
  extern void LocalProcessControlFile(bool reset);
326
231
  extern void StartupXLOG(void);
327
232
  extern void ShutdownXLOG(int code, Datum arg);
328
- extern void InitXLOGAccess(void);
329
233
  extern void CreateCheckPoint(int flags);
330
234
  extern bool CreateRestartPoint(int flags);
331
235
  extern WALAvailability GetWALAvailability(XLogRecPtr targetLSN);
332
- extern XLogRecPtr CalculateMaxmumSafeLSN(void);
333
236
  extern void XLogPutNextOid(Oid nextOid);
334
237
  extern XLogRecPtr XLogRestorePoint(const char *rpName);
335
238
  extern void UpdateFullPageWrites(void);
336
239
  extern void GetFullPageWriteInfo(XLogRecPtr *RedoRecPtr_p, bool *doPageWrites_p);
337
240
  extern XLogRecPtr GetRedoRecPtr(void);
338
241
  extern XLogRecPtr GetInsertRecPtr(void);
339
- extern XLogRecPtr GetFlushRecPtr(void);
242
+ extern XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI);
243
+ extern TimeLineID GetWALInsertionTimeLine(void);
340
244
  extern XLogRecPtr GetLastImportantRecPtr(void);
341
- extern void RemovePromoteSignalFiles(void);
342
245
 
343
- extern bool PromoteIsTriggered(void);
344
- extern bool CheckPromoteSignal(void);
345
- extern void WakeupRecovery(void);
346
246
  extern void SetWalWriterSleeping(bool sleeping);
347
247
 
348
- extern void StartupRequestWalReceiverRestart(void);
349
- extern void XLogRequestWalReceiverReply(void);
350
-
351
248
  extern void assign_max_wal_size(int newval, void *extra);
352
249
  extern void assign_checkpoint_completion_target(double newval, void *extra);
353
250
 
251
+ /*
252
+ * Routines used by xlogrecovery.c to call back into xlog.c during recovery.
253
+ */
254
+ extern void RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI);
255
+ extern bool XLogCheckpointNeeded(XLogSegNo new_segno);
256
+ extern void SwitchIntoArchiveRecovery(XLogRecPtr EndRecPtr, TimeLineID replayTLI);
257
+ extern void ReachedEndOfBackup(XLogRecPtr EndRecPtr, TimeLineID tli);
258
+ extern void SetInstallXLogFileSegmentActive(void);
259
+ extern bool IsInstallXLogFileSegmentActive(void);
260
+ extern void XLogShutdownWalRcv(void);
261
+
354
262
  /*
355
263
  * Routines to start, stop, and get status of a base backup.
356
264
  */
@@ -368,15 +276,13 @@ extern void assign_checkpoint_completion_target(double newval, void *extra);
368
276
  typedef enum SessionBackupState
369
277
  {
370
278
  SESSION_BACKUP_NONE,
371
- SESSION_BACKUP_EXCLUSIVE,
372
- SESSION_BACKUP_NON_EXCLUSIVE
279
+ SESSION_BACKUP_RUNNING,
373
280
  } SessionBackupState;
374
281
 
375
- extern XLogRecPtr do_pg_start_backup(const char *backupidstr, bool fast,
282
+ extern XLogRecPtr do_pg_backup_start(const char *backupidstr, bool fast,
376
283
  TimeLineID *starttli_p, StringInfo labelfile,
377
- List **tablespaces, StringInfo tblspcmapfile, bool infotbssize,
378
- bool needtblspcmapfile);
379
- extern XLogRecPtr do_pg_stop_backup(char *labelfile, bool waitforarchive,
284
+ List **tablespaces, StringInfo tblspcmapfile);
285
+ extern XLogRecPtr do_pg_backup_stop(char *labelfile, bool waitforarchive,
380
286
  TimeLineID *stoptli_p);
381
287
  extern void do_pg_abort_backup(int code, Datum arg);
382
288
  extern void register_persistent_abort_backup_handler(void);
@@ -393,6 +299,5 @@ extern SessionBackupState get_backup_status(void);
393
299
 
394
300
  /* files to signal promotion to primary */
395
301
  #define PROMOTE_SIGNAL_FILE "promote"
396
- #define FALLBACK_PROMOTE_SIGNAL_FILE "fallback_promote"
397
302
 
398
303
  #endif /* XLOG_H */
@@ -11,7 +11,7 @@
11
11
  * Note: This file must be includable in both frontend and backend contexts,
12
12
  * to allow stand-alone tools like pg_receivewal to deal with WAL files.
13
13
  *
14
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  * src/include/access/xlog_internal.h
@@ -31,7 +31,7 @@
31
31
  /*
32
32
  * Each page of XLOG file has a header like this:
33
33
  */
34
- #define XLOG_PAGE_MAGIC 0xD106 /* can be used as WAL version indicator */
34
+ #define XLOG_PAGE_MAGIC 0xD110 /* can be used as WAL version indicator */
35
35
 
36
36
  typedef struct XLogPageHeaderData
37
37
  {
@@ -43,11 +43,8 @@ typedef struct XLogPageHeaderData
43
43
  /*
44
44
  * When there is not enough space on current page for whole record, we
45
45
  * continue on the next page. xlp_rem_len is the number of bytes
46
- * remaining from a previous page.
47
- *
48
- * Note that xlp_rem_len includes backup-block data; that is, it tracks
49
- * xl_tot_len not xl_len in the initial header. Also note that the
50
- * continuation data isn't necessarily aligned.
46
+ * remaining from a previous page; it tracks xl_tot_len in the initial
47
+ * header. Note that the continuation data isn't necessarily aligned.
51
48
  */
52
49
  uint32 xlp_rem_len; /* total len of remaining data for record */
53
50
  } XLogPageHeaderData;
@@ -79,8 +76,10 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader;
79
76
  #define XLP_LONG_HEADER 0x0002
80
77
  /* This flag indicates backup blocks starting in this page are optional */
81
78
  #define XLP_BKP_REMOVABLE 0x0004
79
+ /* Replaces a missing contrecord; see CreateOverwriteContrecordRecord */
80
+ #define XLP_FIRST_IS_OVERWRITE_CONTRECORD 0x0008
82
81
  /* All defined flag bits in xlp_info (used for validity checking of header) */
83
- #define XLP_ALL_FLAGS 0x0007
82
+ #define XLP_ALL_FLAGS 0x000F
84
83
 
85
84
  #define XLogPageHeaderSize(hdr) \
86
85
  (((hdr)->xlp_info & XLP_LONG_HEADER) ? SizeOfXLogLongPHD : SizeOfXLogShortPHD)
@@ -252,6 +251,13 @@ typedef struct xl_restore_point
252
251
  char rp_name[MAXFNAMELEN];
253
252
  } xl_restore_point;
254
253
 
254
+ /* Overwrite of prior contrecord */
255
+ typedef struct xl_overwrite_contrecord
256
+ {
257
+ XLogRecPtr overwritten_lsn;
258
+ TimestampTz overwrite_time;
259
+ } xl_overwrite_contrecord;
260
+
255
261
  /* End of recovery mark, when we don't do an END_OF_RECOVERY checkpoint */
256
262
  typedef struct xl_end_of_recovery
257
263
  {
@@ -281,6 +287,9 @@ typedef enum
281
287
  RECOVERY_TARGET_ACTION_SHUTDOWN
282
288
  } RecoveryTargetAction;
283
289
 
290
+ struct LogicalDecodingContext;
291
+ struct XLogRecordBuffer;
292
+
284
293
  /*
285
294
  * Method table for resource managers.
286
295
  *
@@ -295,7 +304,8 @@ typedef enum
295
304
  * rm_mask takes as input a page modified by the resource manager and masks
296
305
  * out bits that shouldn't be flagged by wal_consistency_checking.
297
306
  *
298
- * RmgrTable[] is indexed by RmgrId values (see rmgrlist.h).
307
+ * RmgrTable[] is indexed by RmgrId values (see rmgrlist.h). If rm_name is
308
+ * NULL, the corresponding RmgrTable entry is considered invalid.
299
309
  */
300
310
  typedef struct RmgrData
301
311
  {
@@ -306,9 +316,31 @@ typedef struct RmgrData
306
316
  void (*rm_startup) (void);
307
317
  void (*rm_cleanup) (void);
308
318
  void (*rm_mask) (char *pagedata, BlockNumber blkno);
319
+ void (*rm_decode) (struct LogicalDecodingContext *ctx,
320
+ struct XLogRecordBuffer *buf);
309
321
  } RmgrData;
310
322
 
311
- extern const RmgrData RmgrTable[];
323
+ extern PGDLLIMPORT RmgrData RmgrTable[];
324
+ extern void RmgrStartup(void);
325
+ extern void RmgrCleanup(void);
326
+ extern void RmgrNotFound(RmgrId rmid);
327
+ extern void RegisterCustomRmgr(RmgrId rmid, RmgrData *rmgr);
328
+
329
+ #ifndef FRONTEND
330
+ static inline bool
331
+ RmgrIdExists(RmgrId rmid)
332
+ {
333
+ return RmgrTable[rmid].rm_name != NULL;
334
+ }
335
+
336
+ static inline RmgrData
337
+ GetRmgr(RmgrId rmid)
338
+ {
339
+ if (unlikely(!RmgrIdExists(rmid)))
340
+ RmgrNotFound(rmid);
341
+ return RmgrTable[rmid];
342
+ }
343
+ #endif
312
344
 
313
345
  /*
314
346
  * Exported to support xlog switching from checkpointer
@@ -318,13 +350,17 @@ extern XLogRecPtr RequestXLogSwitch(bool mark_unimportant);
318
350
 
319
351
  extern void GetOldestRestartPoint(XLogRecPtr *oldrecptr, TimeLineID *oldtli);
320
352
 
353
+ extern void XLogRecGetBlockRefInfo(XLogReaderState *record, bool pretty,
354
+ bool detailed_format, StringInfo buf,
355
+ uint32 *fpi_len);
356
+
321
357
  /*
322
358
  * Exported for the functions in timeline.c and xlogarchive.c. Only valid
323
359
  * in the startup process.
324
360
  */
325
- extern bool ArchiveRecoveryRequested;
326
- extern bool InArchiveRecovery;
327
- extern bool StandbyMode;
328
- extern char *recoveryRestoreCommand;
361
+ extern PGDLLIMPORT bool ArchiveRecoveryRequested;
362
+ extern PGDLLIMPORT bool InArchiveRecovery;
363
+ extern PGDLLIMPORT bool StandbyMode;
364
+ extern PGDLLIMPORT char *recoveryRestoreCommand;
329
365
 
330
366
  #endif /* XLOG_INTERNAL_H */
@@ -4,7 +4,7 @@
4
4
  * Postgres write-ahead log manager record pointer and
5
5
  * timeline number definitions
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/access/xlogdefs.h
@@ -35,6 +35,13 @@ typedef uint64 XLogRecPtr;
35
35
  */
36
36
  #define FirstNormalUnloggedLSN ((XLogRecPtr) 1000)
37
37
 
38
+ /*
39
+ * Handy macro for printing XLogRecPtr in conventional format, e.g.,
40
+ *
41
+ * printf("%X/%X", LSN_FORMAT_ARGS(lsn));
42
+ */
43
+ #define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
44
+
38
45
  /*
39
46
  * XLogSegNo - physical log file sequence number.
40
47
  */
@@ -57,21 +64,6 @@ typedef uint32 TimeLineID;
57
64
  */
58
65
  typedef uint16 RepOriginId;
59
66
 
60
- /*
61
- * Because O_DIRECT bypasses the kernel buffers, and because we never
62
- * read those buffers except during crash recovery or if wal_level != minimal,
63
- * it is a win to use it in all cases where we sync on each write(). We could
64
- * allow O_DIRECT with fsync(), but it is unclear if fsync() could process
65
- * writes not buffered in the kernel. Also, O_DIRECT is never enough to force
66
- * data to the drives, it merely tries to bypass the kernel cache, so we still
67
- * need O_SYNC/O_DSYNC.
68
- */
69
- #ifdef O_DIRECT
70
- #define PG_O_DIRECT O_DIRECT
71
- #else
72
- #define PG_O_DIRECT 0
73
- #endif
74
-
75
67
  /*
76
68
  * This chunk of hackery attempts to determine which file sync methods
77
69
  * are available on the current platform, and to choose an appropriate
@@ -0,0 +1,55 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * xlogprefetcher.h
4
+ * Declarations for the recovery prefetching module.
5
+ *
6
+ * Portions Copyright (c) 2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * IDENTIFICATION
10
+ * src/include/access/xlogprefetcher.h
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef XLOGPREFETCHER_H
14
+ #define XLOGPREFETCHER_H
15
+
16
+ #include "access/xlogdefs.h"
17
+ #include "access/xlogreader.h"
18
+ #include "access/xlogrecord.h"
19
+
20
+ /* GUCs */
21
+ extern PGDLLIMPORT int recovery_prefetch;
22
+
23
+ /* Possible values for recovery_prefetch */
24
+ typedef enum
25
+ {
26
+ RECOVERY_PREFETCH_OFF,
27
+ RECOVERY_PREFETCH_ON,
28
+ RECOVERY_PREFETCH_TRY
29
+ } RecoveryPrefetchValue;
30
+
31
+ struct XLogPrefetcher;
32
+ typedef struct XLogPrefetcher XLogPrefetcher;
33
+
34
+
35
+ extern void XLogPrefetchReconfigure(void);
36
+
37
+ extern size_t XLogPrefetchShmemSize(void);
38
+ extern void XLogPrefetchShmemInit(void);
39
+
40
+ extern void XLogPrefetchResetStats(void);
41
+
42
+ extern XLogPrefetcher *XLogPrefetcherAllocate(XLogReaderState *reader);
43
+ extern void XLogPrefetcherFree(XLogPrefetcher *prefetcher);
44
+
45
+ extern XLogReaderState *XLogPrefetcherGetReader(XLogPrefetcher *prefetcher);
46
+
47
+ extern void XLogPrefetcherBeginRead(XLogPrefetcher *prefetcher,
48
+ XLogRecPtr recPtr);
49
+
50
+ extern XLogRecord *XLogPrefetcherReadRecord(XLogPrefetcher *prefetcher,
51
+ char **errmsg);
52
+
53
+ extern void XLogPrefetcherComputeStats(XLogPrefetcher *prefetcher);
54
+
55
+ #endif