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
@@ -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;
@@ -290,6 +287,9 @@ typedef enum
290
287
  RECOVERY_TARGET_ACTION_SHUTDOWN
291
288
  } RecoveryTargetAction;
292
289
 
290
+ struct LogicalDecodingContext;
291
+ struct XLogRecordBuffer;
292
+
293
293
  /*
294
294
  * Method table for resource managers.
295
295
  *
@@ -304,7 +304,8 @@ typedef enum
304
304
  * rm_mask takes as input a page modified by the resource manager and masks
305
305
  * out bits that shouldn't be flagged by wal_consistency_checking.
306
306
  *
307
- * 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.
308
309
  */
309
310
  typedef struct RmgrData
310
311
  {
@@ -315,9 +316,31 @@ typedef struct RmgrData
315
316
  void (*rm_startup) (void);
316
317
  void (*rm_cleanup) (void);
317
318
  void (*rm_mask) (char *pagedata, BlockNumber blkno);
319
+ void (*rm_decode) (struct LogicalDecodingContext *ctx,
320
+ struct XLogRecordBuffer *buf);
318
321
  } RmgrData;
319
322
 
320
- 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
321
344
 
322
345
  /*
323
346
  * Exported to support xlog switching from checkpointer
@@ -327,13 +350,17 @@ extern XLogRecPtr RequestXLogSwitch(bool mark_unimportant);
327
350
 
328
351
  extern void GetOldestRestartPoint(XLogRecPtr *oldrecptr, TimeLineID *oldtli);
329
352
 
353
+ extern void XLogRecGetBlockRefInfo(XLogReaderState *record, bool pretty,
354
+ bool detailed_format, StringInfo buf,
355
+ uint32 *fpi_len);
356
+
330
357
  /*
331
358
  * Exported for the functions in timeline.c and xlogarchive.c. Only valid
332
359
  * in the startup process.
333
360
  */
334
- extern bool ArchiveRecoveryRequested;
335
- extern bool InArchiveRecovery;
336
- extern bool StandbyMode;
337
- extern char *recoveryRestoreCommand;
361
+ extern PGDLLIMPORT bool ArchiveRecoveryRequested;
362
+ extern PGDLLIMPORT bool InArchiveRecovery;
363
+ extern PGDLLIMPORT bool StandbyMode;
364
+ extern PGDLLIMPORT char *recoveryRestoreCommand;
338
365
 
339
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