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
@@ -4,7 +4,7 @@
4
4
  * postgres transaction access method support code
5
5
  *
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/transam.h
@@ -54,6 +54,8 @@
54
54
  #define FullTransactionIdFollowsOrEquals(a, b) ((a).value >= (b).value)
55
55
  #define FullTransactionIdIsValid(x) TransactionIdIsValid(XidFromFullTransactionId(x))
56
56
  #define InvalidFullTransactionId FullTransactionIdFromEpochAndXid(0, InvalidTransactionId)
57
+ #define FirstNormalFullTransactionId FullTransactionIdFromEpochAndXid(0, FirstNormalTransactionId)
58
+ #define FullTransactionIdIsNormal(x) FullTransactionIdFollowsOrEquals(x, FirstNormalFullTransactionId)
57
59
 
58
60
  /*
59
61
  * A 64 bit value that contains an epoch and a TransactionId. This is
@@ -93,11 +95,44 @@ FullTransactionIdFromU64(uint64 value)
93
95
  (dest) = FirstNormalTransactionId; \
94
96
  } while(0)
95
97
 
96
- /* advance a FullTransactionId variable, stepping over special XIDs */
98
+ /*
99
+ * Retreat a FullTransactionId variable, stepping over xids that would appear
100
+ * to be special only when viewed as 32bit XIDs.
101
+ */
102
+ static inline void
103
+ FullTransactionIdRetreat(FullTransactionId *dest)
104
+ {
105
+ dest->value--;
106
+
107
+ /*
108
+ * In contrast to 32bit XIDs don't step over the "actual" special xids.
109
+ * For 64bit xids these can't be reached as part of a wraparound as they
110
+ * can in the 32bit case.
111
+ */
112
+ if (FullTransactionIdPrecedes(*dest, FirstNormalFullTransactionId))
113
+ return;
114
+
115
+ /*
116
+ * But we do need to step over XIDs that'd appear special only for 32bit
117
+ * XIDs.
118
+ */
119
+ while (XidFromFullTransactionId(*dest) < FirstNormalTransactionId)
120
+ dest->value--;
121
+ }
122
+
123
+ /*
124
+ * Advance a FullTransactionId variable, stepping over xids that would appear
125
+ * to be special only when viewed as 32bit XIDs.
126
+ */
97
127
  static inline void
98
128
  FullTransactionIdAdvance(FullTransactionId *dest)
99
129
  {
100
130
  dest->value++;
131
+
132
+ /* see FullTransactionIdAdvance() */
133
+ if (FullTransactionIdPrecedes(*dest, FirstNormalFullTransactionId))
134
+ return;
135
+
101
136
  while (XidFromFullTransactionId(*dest) < FirstNormalTransactionId)
102
137
  dest->value++;
103
138
  }
@@ -128,10 +163,16 @@ FullTransactionIdAdvance(FullTransactionId *dest)
128
163
  *
129
164
  * OIDs 10000-11999 are reserved for assignment by genbki.pl, for use
130
165
  * when the .dat files in src/include/catalog/ do not specify an OID
131
- * for a catalog entry that requires one.
166
+ * for a catalog entry that requires one. Note that genbki.pl assigns
167
+ * these OIDs independently in each catalog, so they're not guaranteed
168
+ * to be globally unique. Furthermore, the bootstrap backend and
169
+ * initdb's post-bootstrap processing can also assign OIDs in this range.
170
+ * The normal OID-generation logic takes care of any OID conflicts that
171
+ * might arise from that.
132
172
  *
133
- * OIDS 12000-16383 are reserved for assignment during initdb
134
- * using the OID generator. (We start the generator at 12000.)
173
+ * OIDs 12000-16383 are reserved for unpinned objects created by initdb's
174
+ * post-bootstrap processing. initdb forces the OID generator up to
175
+ * 12000 as soon as it's made the pinned objects it's responsible for.
135
176
  *
136
177
  * OIDs beginning at 16384 are assigned from the OID generator
137
178
  * during normal multiuser operation. (We force the generator up to
@@ -147,11 +188,12 @@ FullTransactionIdAdvance(FullTransactionId *dest)
147
188
  *
148
189
  * NOTE: if the OID generator wraps around, we skip over OIDs 0-16383
149
190
  * and resume with 16384. This minimizes the odds of OID conflict, by not
150
- * reassigning OIDs that might have been assigned during initdb.
191
+ * reassigning OIDs that might have been assigned during initdb. Critically,
192
+ * it also ensures that no user-created object will be considered pinned.
151
193
  * ----------
152
194
  */
153
195
  #define FirstGenbkiObjectId 10000
154
- #define FirstBootstrapObjectId 12000
196
+ #define FirstUnpinnedObjectId 12000
155
197
  #define FirstNormalObjectId 16384
156
198
 
157
199
  /*
@@ -175,12 +217,12 @@ typedef struct VariableCacheData
175
217
  /*
176
218
  * These fields are protected by XidGenLock.
177
219
  */
178
- FullTransactionId nextFullXid; /* next full XID to assign */
220
+ FullTransactionId nextXid; /* next XID to assign */
179
221
 
180
222
  TransactionId oldestXid; /* cluster-wide minimum datfrozenxid */
181
223
  TransactionId xidVacLimit; /* start forcing autovacuums here */
182
224
  TransactionId xidWarnLimit; /* start complaining here */
183
- TransactionId xidStopLimit; /* refuse to advance nextFullXid beyond here */
225
+ TransactionId xidStopLimit; /* refuse to advance nextXid beyond here */
184
226
  TransactionId xidWrapLimit; /* where the world ends */
185
227
  Oid oldestXidDB; /* database with minimum datfrozenxid */
186
228
 
@@ -193,8 +235,17 @@ typedef struct VariableCacheData
193
235
  /*
194
236
  * These fields are protected by ProcArrayLock.
195
237
  */
196
- TransactionId latestCompletedXid; /* newest XID that has committed or
197
- * aborted */
238
+ FullTransactionId latestCompletedXid; /* newest full XID that has
239
+ * committed or aborted */
240
+
241
+ /*
242
+ * Number of top-level transactions with xids (i.e. which may have
243
+ * modified the database) that completed in some form since the start of
244
+ * the server. This currently is solely used to check whether
245
+ * GetSnapshotData() needs to recompute the contents of the snapshot, or
246
+ * not. There are likely other users of this. Always above 1.
247
+ */
248
+ uint64 xactCompletionCount;
198
249
 
199
250
  /*
200
251
  * These fields are protected by XactTruncationLock
@@ -222,7 +273,6 @@ extern PGDLLIMPORT VariableCache ShmemVariableCache;
222
273
  */
223
274
  extern bool TransactionIdDidCommit(TransactionId transactionId);
224
275
  extern bool TransactionIdDidAbort(TransactionId transactionId);
225
- extern bool TransactionIdIsKnownCompleted(TransactionId transactionId);
226
276
  extern void TransactionIdCommitTree(TransactionId xid, int nxids, TransactionId *xids);
227
277
  extern void TransactionIdAsyncCommitTree(TransactionId xid, int nxids, TransactionId *xids, XLogRecPtr lsn);
228
278
  extern void TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids);
@@ -243,6 +293,13 @@ extern void SetTransactionIdLimit(TransactionId oldest_datfrozenxid,
243
293
  extern void AdvanceOldestClogXid(TransactionId oldest_datfrozenxid);
244
294
  extern bool ForceTransactionIdLimitUpdate(void);
245
295
  extern Oid GetNewObjectId(void);
296
+ extern void StopGeneratingPinnedObjectIds(void);
297
+
298
+ #ifdef USE_ASSERT_CHECKING
299
+ extern void AssertTransactionIdInAllowableRange(TransactionId xid);
300
+ #else
301
+ #define AssertTransactionIdInAllowableRange(xid) ((void)true)
302
+ #endif
246
303
 
247
304
  /*
248
305
  * Some frontend programs include this header. For compilers that emit static
@@ -255,11 +312,64 @@ extern Oid GetNewObjectId(void);
255
312
  * For callers that just need the XID part of the next transaction ID.
256
313
  */
257
314
  static inline TransactionId
258
- ReadNewTransactionId(void)
315
+ ReadNextTransactionId(void)
259
316
  {
260
317
  return XidFromFullTransactionId(ReadNextFullTransactionId());
261
318
  }
262
319
 
320
+ /* return transaction ID backed up by amount, handling wraparound correctly */
321
+ static inline TransactionId
322
+ TransactionIdRetreatedBy(TransactionId xid, uint32 amount)
323
+ {
324
+ xid -= amount;
325
+
326
+ while (xid < FirstNormalTransactionId)
327
+ xid--;
328
+
329
+ return xid;
330
+ }
331
+
332
+ /* return the older of the two IDs */
333
+ static inline TransactionId
334
+ TransactionIdOlder(TransactionId a, TransactionId b)
335
+ {
336
+ if (!TransactionIdIsValid(a))
337
+ return b;
338
+
339
+ if (!TransactionIdIsValid(b))
340
+ return a;
341
+
342
+ if (TransactionIdPrecedes(a, b))
343
+ return a;
344
+ return b;
345
+ }
346
+
347
+ /* return the older of the two IDs, assuming they're both normal */
348
+ static inline TransactionId
349
+ NormalTransactionIdOlder(TransactionId a, TransactionId b)
350
+ {
351
+ Assert(TransactionIdIsNormal(a));
352
+ Assert(TransactionIdIsNormal(b));
353
+ if (NormalTransactionIdPrecedes(a, b))
354
+ return a;
355
+ return b;
356
+ }
357
+
358
+ /* return the newer of the two IDs */
359
+ static inline FullTransactionId
360
+ FullTransactionIdNewer(FullTransactionId a, FullTransactionId b)
361
+ {
362
+ if (!FullTransactionIdIsValid(a))
363
+ return b;
364
+
365
+ if (!FullTransactionIdIsValid(b))
366
+ return a;
367
+
368
+ if (FullTransactionIdFollows(a, b))
369
+ return a;
370
+ return b;
371
+ }
372
+
263
373
  #endif /* FRONTEND */
264
374
 
265
375
  #endif /* TRANSAM_H */
@@ -4,7 +4,7 @@
4
4
  * Tuple conversion support.
5
5
  *
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/tupconvert.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES tuple descriptor definitions.
5
5
  *
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/tupdesc.h
@@ -4,7 +4,7 @@
4
4
  * Tuple macros used by both index tuples and heap tuples.
5
5
  *
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/tupmacs.h
@@ -139,8 +139,8 @@
139
139
  * * we need to estimate alignment padding cost abstractly, ie without
140
140
  * reference to a real tuple. We must assume the worst case that
141
141
  * all varlenas are aligned.
142
- * * within arrays, we unconditionally align varlenas (XXX this should be
143
- * revisited, probably).
142
+ * * within arrays and multiranges, we unconditionally align varlenas (XXX this
143
+ * should be revisited, probably).
144
144
  *
145
145
  * The attalign cases are tested in what is hopefully something like their
146
146
  * frequency of occurrence.
@@ -4,7 +4,7 @@
4
4
  * Two-phase-commit related declarations.
5
5
  *
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/twophase.h
@@ -60,4 +60,6 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
60
60
  XLogRecPtr end_lsn, RepOriginId origin_id);
61
61
  extern void PrepareRedoRemove(TransactionId xid, bool giveWarning);
62
62
  extern void restoreTwoPhaseData(void);
63
+ extern bool LookupGXact(const char *gid, XLogRecPtr prepare_at_lsn,
64
+ TimestampTz origin_prepare_timestamp);
63
65
  #endif /* TWOPHASE_H */
@@ -4,7 +4,7 @@
4
4
  * postgres transaction system definitions
5
5
  *
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/xact.h
@@ -16,11 +16,11 @@
16
16
 
17
17
  #include "access/transam.h"
18
18
  #include "access/xlogreader.h"
19
+ #include "datatype/timestamp.h"
19
20
  #include "lib/stringinfo.h"
20
21
  #include "nodes/pg_list.h"
21
22
  #include "storage/relfilenode.h"
22
23
  #include "storage/sinval.h"
23
- #include "utils/datetime.h"
24
24
 
25
25
  /*
26
26
  * Maximum size of Global Transaction ID (including '\0').
@@ -38,7 +38,7 @@
38
38
  #define XACT_REPEATABLE_READ 2
39
39
  #define XACT_SERIALIZABLE 3
40
40
 
41
- extern int DefaultXactIsoLevel;
41
+ extern PGDLLIMPORT int DefaultXactIsoLevel;
42
42
  extern PGDLLIMPORT int XactIsoLevel;
43
43
 
44
44
  /*
@@ -52,18 +52,18 @@ extern PGDLLIMPORT int XactIsoLevel;
52
52
  #define IsolationIsSerializable() (XactIsoLevel == XACT_SERIALIZABLE)
53
53
 
54
54
  /* Xact read-only state */
55
- extern bool DefaultXactReadOnly;
56
- extern bool XactReadOnly;
55
+ extern PGDLLIMPORT bool DefaultXactReadOnly;
56
+ extern PGDLLIMPORT bool XactReadOnly;
57
57
 
58
58
  /* flag for logging statements in this transaction */
59
- extern bool xact_is_sampled;
59
+ extern PGDLLIMPORT bool xact_is_sampled;
60
60
 
61
61
  /*
62
62
  * Xact is deferrable -- only meaningful (currently) for read only
63
63
  * SERIALIZABLE transactions
64
64
  */
65
- extern bool DefaultXactDeferrable;
66
- extern bool XactDeferrable;
65
+ extern PGDLLIMPORT bool DefaultXactDeferrable;
66
+ extern PGDLLIMPORT bool XactDeferrable;
67
67
 
68
68
  typedef enum
69
69
  {
@@ -72,15 +72,19 @@ typedef enum
72
72
  SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote
73
73
  * write */
74
74
  SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */
75
- SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush
76
- and remote apply */
75
+ SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush and
76
+ * remote apply */
77
77
  } SyncCommitLevel;
78
78
 
79
79
  /* Define the default setting for synchronous_commit */
80
80
  #define SYNCHRONOUS_COMMIT_ON SYNCHRONOUS_COMMIT_REMOTE_FLUSH
81
81
 
82
82
  /* Synchronous commit level */
83
- extern int synchronous_commit;
83
+ extern PGDLLIMPORT int synchronous_commit;
84
+
85
+ /* used during logical streaming of a transaction */
86
+ extern PGDLLIMPORT TransactionId CheckXidAlive;
87
+ extern PGDLLIMPORT bool bsysscan;
84
88
 
85
89
  /*
86
90
  * Miscellaneous flag bits to record events which occur on the top level
@@ -89,7 +93,7 @@ extern int synchronous_commit;
89
93
  * globally accessible, so can be set from anywhere in the code which requires
90
94
  * recording flags.
91
95
  */
92
- extern int MyXactFlags;
96
+ extern PGDLLIMPORT int MyXactFlags;
93
97
 
94
98
  /*
95
99
  * XACT_FLAGS_ACCESSEDTEMPNAMESPACE - set when a temporary object is accessed.
@@ -137,6 +141,14 @@ typedef enum
137
141
  typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
138
142
  SubTransactionId parentSubid, void *arg);
139
143
 
144
+ /* Data structure for Save/RestoreTransactionCharacteristics */
145
+ typedef struct SavedTransactionCharacteristics
146
+ {
147
+ int save_XactIsoLevel;
148
+ bool save_XactReadOnly;
149
+ bool save_XactDeferrable;
150
+ } SavedTransactionCharacteristics;
151
+
140
152
 
141
153
  /* ----------------
142
154
  * transaction-related XLOG entries
@@ -153,7 +165,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
153
165
  #define XLOG_XACT_COMMIT_PREPARED 0x30
154
166
  #define XLOG_XACT_ABORT_PREPARED 0x40
155
167
  #define XLOG_XACT_ASSIGNMENT 0x50
156
- /* free opcode 0x60 */
168
+ #define XLOG_XACT_INVALIDATIONS 0x60
157
169
  /* free opcode 0x70 */
158
170
 
159
171
  /* mask for filtering opcodes out of xl_info */
@@ -174,6 +186,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
174
186
  #define XACT_XINFO_HAS_ORIGIN (1U << 5)
175
187
  #define XACT_XINFO_HAS_AE_LOCKS (1U << 6)
176
188
  #define XACT_XINFO_HAS_GID (1U << 7)
189
+ #define XACT_XINFO_HAS_DROPPED_STATS (1U << 8)
177
190
 
178
191
  /*
179
192
  * Also stored in xinfo, these indicating a variety of additional actions that
@@ -224,9 +237,10 @@ typedef struct xl_xact_assignment
224
237
  typedef struct xl_xact_xinfo
225
238
  {
226
239
  /*
227
- * Even though we right now only require 1 byte of space in xinfo we use
228
- * four so following records don't have to care about alignment. Commit
229
- * records can be large, so copying large portions isn't attractive.
240
+ * Even though we right now only require two bytes of space in xinfo we
241
+ * use four so following records don't have to care about alignment.
242
+ * Commit records can be large, so copying large portions isn't
243
+ * attractive.
230
244
  */
231
245
  uint32 xinfo;
232
246
  } xl_xact_xinfo;
@@ -251,6 +265,27 @@ typedef struct xl_xact_relfilenodes
251
265
  } xl_xact_relfilenodes;
252
266
  #define MinSizeOfXactRelfilenodes offsetof(xl_xact_relfilenodes, xnodes)
253
267
 
268
+ /*
269
+ * A transactionally dropped statistics entry.
270
+ *
271
+ * Declared here rather than pgstat.h because pgstat.h can't be included from
272
+ * frontend code, but the WAL format needs to be readable by frontend
273
+ * programs.
274
+ */
275
+ typedef struct xl_xact_stats_item
276
+ {
277
+ int kind;
278
+ Oid dboid;
279
+ Oid objoid;
280
+ } xl_xact_stats_item;
281
+
282
+ typedef struct xl_xact_stats_items
283
+ {
284
+ int nitems;
285
+ xl_xact_stats_item items[FLEXIBLE_ARRAY_MEMBER];
286
+ } xl_xact_stats_items;
287
+ #define MinSizeOfXactStatsItems offsetof(xl_xact_stats_items, items)
288
+
254
289
  typedef struct xl_xact_invals
255
290
  {
256
291
  int nmsgs; /* number of shared inval msgs */
@@ -277,6 +312,7 @@ typedef struct xl_xact_commit
277
312
  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
278
313
  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
279
314
  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
315
+ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
280
316
  /* xl_xact_invals follows if XINFO_HAS_INVALS */
281
317
  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
282
318
  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
@@ -292,6 +328,7 @@ typedef struct xl_xact_abort
292
328
  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
293
329
  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
294
330
  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
331
+ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
295
332
  /* No invalidation messages needed. */
296
333
  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
297
334
  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
@@ -310,6 +347,8 @@ typedef struct xl_xact_prepare
310
347
  int32 nsubxacts; /* number of following subxact XIDs */
311
348
  int32 ncommitrels; /* number of delete-on-commit rels */
312
349
  int32 nabortrels; /* number of delete-on-abort rels */
350
+ int32 ncommitstats; /* number of stats to drop on commit */
351
+ int32 nabortstats; /* number of stats to drop on abort */
313
352
  int32 ninvalmsgs; /* number of cache invalidation messages */
314
353
  bool initfileinval; /* does relcache init file need invalidation? */
315
354
  uint16 gidlen; /* length of the GID - GID follows the header */
@@ -336,6 +375,9 @@ typedef struct xl_xact_parsed_commit
336
375
  int nrels;
337
376
  RelFileNode *xnodes;
338
377
 
378
+ int nstats;
379
+ xl_xact_stats_item *stats;
380
+
339
381
  int nmsgs;
340
382
  SharedInvalidationMessage *msgs;
341
383
 
@@ -343,6 +385,8 @@ typedef struct xl_xact_parsed_commit
343
385
  char twophase_gid[GIDSIZE]; /* only for 2PC */
344
386
  int nabortrels; /* only for 2PC */
345
387
  RelFileNode *abortnodes; /* only for 2PC */
388
+ int nabortstats; /* only for 2PC */
389
+ xl_xact_stats_item *abortstats; /* only for 2PC */
346
390
 
347
391
  XLogRecPtr origin_lsn;
348
392
  TimestampTz origin_timestamp;
@@ -364,6 +408,9 @@ typedef struct xl_xact_parsed_abort
364
408
  int nrels;
365
409
  RelFileNode *xnodes;
366
410
 
411
+ int nstats;
412
+ xl_xact_stats_item *stats;
413
+
367
414
  TransactionId twophase_xid; /* only for 2PC */
368
415
  char twophase_gid[GIDSIZE]; /* only for 2PC */
369
416
 
@@ -401,8 +448,8 @@ extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
401
448
  extern void CommandCounterIncrement(void);
402
449
  extern void ForceSyncCommit(void);
403
450
  extern void StartTransactionCommand(void);
404
- extern void SaveTransactionCharacteristics(void);
405
- extern void RestoreTransactionCharacteristics(void);
451
+ extern void SaveTransactionCharacteristics(SavedTransactionCharacteristics *s);
452
+ extern void RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s);
406
453
  extern void CommitTransactionCommand(void);
407
454
  extern void AbortCurrentTransaction(void);
408
455
  extern void BeginTransactionBlock(void);
@@ -435,13 +482,18 @@ extern void UnregisterXactCallback(XactCallback callback, void *arg);
435
482
  extern void RegisterSubXactCallback(SubXactCallback callback, void *arg);
436
483
  extern void UnregisterSubXactCallback(SubXactCallback callback, void *arg);
437
484
 
485
+ extern bool IsSubxactTopXidLogPending(void);
486
+ extern void MarkSubxactTopXidLogged(void);
487
+
438
488
  extern int xactGetCommittedChildren(TransactionId **ptr);
439
489
 
440
490
  extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
441
491
  int nsubxacts, TransactionId *subxacts,
442
492
  int nrels, RelFileNode *rels,
493
+ int nstats,
494
+ xl_xact_stats_item *stats,
443
495
  int nmsgs, SharedInvalidationMessage *msgs,
444
- bool relcacheInval, bool forceSync,
496
+ bool relcacheInval,
445
497
  int xactflags,
446
498
  TransactionId twophase_xid,
447
499
  const char *twophase_gid);
@@ -449,6 +501,8 @@ extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
449
501
  extern XLogRecPtr XactLogAbortRecord(TimestampTz abort_time,
450
502
  int nsubxacts, TransactionId *subxacts,
451
503
  int nrels, RelFileNode *rels,
504
+ int nstats,
505
+ xl_xact_stats_item *stats,
452
506
  int xactflags, TransactionId twophase_xid,
453
507
  const char *twophase_gid);
454
508
  extern void xact_redo(XLogReaderState *record);