pg_query 2.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -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
@@ -34,6 +34,8 @@ extern void TwoPhaseShmemInit(void);
34
34
  extern void AtAbort_Twophase(void);
35
35
  extern void PostPrepare_Twophase(void);
36
36
 
37
+ extern TransactionId TwoPhaseGetXidByVirtualXID(VirtualTransactionId vxid,
38
+ bool *have_more);
37
39
  extern PGPROC *TwoPhaseGetDummyProc(TransactionId xid, bool lock_held);
38
40
  extern BackendId TwoPhaseGetDummyBackendId(TransactionId xid, bool lock_held);
39
41
 
@@ -58,4 +60,6 @@ extern void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
58
60
  XLogRecPtr end_lsn, RepOriginId origin_id);
59
61
  extern void PrepareRedoRemove(TransactionId xid, bool giveWarning);
60
62
  extern void restoreTwoPhaseData(void);
63
+ extern bool LookupGXact(const char *gid, XLogRecPtr prepare_at_lsn,
64
+ TimestampTz origin_prepare_timestamp);
61
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.
@@ -103,6 +107,12 @@ extern int MyXactFlags;
103
107
  */
104
108
  #define XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK (1U << 1)
105
109
 
110
+ /*
111
+ * XACT_FLAGS_NEEDIMMEDIATECOMMIT - records whether the top level statement
112
+ * is one that requires immediate commit, such as CREATE DATABASE.
113
+ */
114
+ #define XACT_FLAGS_NEEDIMMEDIATECOMMIT (1U << 2)
115
+
106
116
  /*
107
117
  * start- and end-of-transaction callbacks for dynamically loaded modules
108
118
  */
@@ -131,6 +141,14 @@ typedef enum
131
141
  typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
132
142
  SubTransactionId parentSubid, void *arg);
133
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
+
134
152
 
135
153
  /* ----------------
136
154
  * transaction-related XLOG entries
@@ -147,7 +165,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
147
165
  #define XLOG_XACT_COMMIT_PREPARED 0x30
148
166
  #define XLOG_XACT_ABORT_PREPARED 0x40
149
167
  #define XLOG_XACT_ASSIGNMENT 0x50
150
- /* free opcode 0x60 */
168
+ #define XLOG_XACT_INVALIDATIONS 0x60
151
169
  /* free opcode 0x70 */
152
170
 
153
171
  /* mask for filtering opcodes out of xl_info */
@@ -168,6 +186,7 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
168
186
  #define XACT_XINFO_HAS_ORIGIN (1U << 5)
169
187
  #define XACT_XINFO_HAS_AE_LOCKS (1U << 6)
170
188
  #define XACT_XINFO_HAS_GID (1U << 7)
189
+ #define XACT_XINFO_HAS_DROPPED_STATS (1U << 8)
171
190
 
172
191
  /*
173
192
  * Also stored in xinfo, these indicating a variety of additional actions that
@@ -218,9 +237,10 @@ typedef struct xl_xact_assignment
218
237
  typedef struct xl_xact_xinfo
219
238
  {
220
239
  /*
221
- * Even though we right now only require 1 byte of space in xinfo we use
222
- * four so following records don't have to care about alignment. Commit
223
- * 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.
224
244
  */
225
245
  uint32 xinfo;
226
246
  } xl_xact_xinfo;
@@ -245,6 +265,27 @@ typedef struct xl_xact_relfilenodes
245
265
  } xl_xact_relfilenodes;
246
266
  #define MinSizeOfXactRelfilenodes offsetof(xl_xact_relfilenodes, xnodes)
247
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
+
248
289
  typedef struct xl_xact_invals
249
290
  {
250
291
  int nmsgs; /* number of shared inval msgs */
@@ -271,6 +312,7 @@ typedef struct xl_xact_commit
271
312
  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
272
313
  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
273
314
  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
315
+ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
274
316
  /* xl_xact_invals follows if XINFO_HAS_INVALS */
275
317
  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
276
318
  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
@@ -286,6 +328,7 @@ typedef struct xl_xact_abort
286
328
  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
287
329
  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
288
330
  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
331
+ /* xl_xact_stats_items follows if XINFO_HAS_DROPPED_STATS */
289
332
  /* No invalidation messages needed. */
290
333
  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
291
334
  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
@@ -304,6 +347,8 @@ typedef struct xl_xact_prepare
304
347
  int32 nsubxacts; /* number of following subxact XIDs */
305
348
  int32 ncommitrels; /* number of delete-on-commit rels */
306
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 */
307
352
  int32 ninvalmsgs; /* number of cache invalidation messages */
308
353
  bool initfileinval; /* does relcache init file need invalidation? */
309
354
  uint16 gidlen; /* length of the GID - GID follows the header */
@@ -330,6 +375,9 @@ typedef struct xl_xact_parsed_commit
330
375
  int nrels;
331
376
  RelFileNode *xnodes;
332
377
 
378
+ int nstats;
379
+ xl_xact_stats_item *stats;
380
+
333
381
  int nmsgs;
334
382
  SharedInvalidationMessage *msgs;
335
383
 
@@ -337,6 +385,8 @@ typedef struct xl_xact_parsed_commit
337
385
  char twophase_gid[GIDSIZE]; /* only for 2PC */
338
386
  int nabortrels; /* only for 2PC */
339
387
  RelFileNode *abortnodes; /* only for 2PC */
388
+ int nabortstats; /* only for 2PC */
389
+ xl_xact_stats_item *abortstats; /* only for 2PC */
340
390
 
341
391
  XLogRecPtr origin_lsn;
342
392
  TimestampTz origin_timestamp;
@@ -358,6 +408,9 @@ typedef struct xl_xact_parsed_abort
358
408
  int nrels;
359
409
  RelFileNode *xnodes;
360
410
 
411
+ int nstats;
412
+ xl_xact_stats_item *stats;
413
+
361
414
  TransactionId twophase_xid; /* only for 2PC */
362
415
  char twophase_gid[GIDSIZE]; /* only for 2PC */
363
416
 
@@ -395,8 +448,8 @@ extern bool TransactionIdIsCurrentTransactionId(TransactionId xid);
395
448
  extern void CommandCounterIncrement(void);
396
449
  extern void ForceSyncCommit(void);
397
450
  extern void StartTransactionCommand(void);
398
- extern void SaveTransactionCharacteristics(void);
399
- extern void RestoreTransactionCharacteristics(void);
451
+ extern void SaveTransactionCharacteristics(SavedTransactionCharacteristics *s);
452
+ extern void RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s);
400
453
  extern void CommitTransactionCommand(void);
401
454
  extern void AbortCurrentTransaction(void);
402
455
  extern void BeginTransactionBlock(void);
@@ -429,13 +482,18 @@ extern void UnregisterXactCallback(XactCallback callback, void *arg);
429
482
  extern void RegisterSubXactCallback(SubXactCallback callback, void *arg);
430
483
  extern void UnregisterSubXactCallback(SubXactCallback callback, void *arg);
431
484
 
485
+ extern bool IsSubxactTopXidLogPending(void);
486
+ extern void MarkSubxactTopXidLogged(void);
487
+
432
488
  extern int xactGetCommittedChildren(TransactionId **ptr);
433
489
 
434
490
  extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
435
491
  int nsubxacts, TransactionId *subxacts,
436
492
  int nrels, RelFileNode *rels,
493
+ int nstats,
494
+ xl_xact_stats_item *stats,
437
495
  int nmsgs, SharedInvalidationMessage *msgs,
438
- bool relcacheInval, bool forceSync,
496
+ bool relcacheInval,
439
497
  int xactflags,
440
498
  TransactionId twophase_xid,
441
499
  const char *twophase_gid);
@@ -443,6 +501,8 @@ extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
443
501
  extern XLogRecPtr XactLogAbortRecord(TimestampTz abort_time,
444
502
  int nsubxacts, TransactionId *subxacts,
445
503
  int nrels, RelFileNode *rels,
504
+ int nstats,
505
+ xl_xact_stats_item *stats,
446
506
  int xactflags, TransactionId twophase_xid,
447
507
  const char *twophase_gid);
448
508
  extern void xact_redo(XLogReaderState *record);