pg_query 2.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. data/ext/pg_query/src_port_random.c +0 -31
@@ -3,7 +3,7 @@
3
3
  * pidfile.h
4
4
  * Declarations describing the data directory lock file (postmaster.pid)
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/pidfile.h
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * See plancache.c for comments.
7
7
  *
8
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
9
9
  * Portions Copyright (c) 1994, Regents of the University of California
10
10
  *
11
11
  * src/include/utils/plancache.h
@@ -35,7 +35,7 @@ typedef enum
35
35
  } PlanCacheMode;
36
36
 
37
37
  /* GUC parameter */
38
- extern int plan_cache_mode;
38
+ extern PGDLLIMPORT int plan_cache_mode;
39
39
 
40
40
  #define CACHEDPLANSOURCE_MAGIC 195726186
41
41
  #define CACHEDPLAN_MAGIC 953717834
@@ -130,7 +130,8 @@ typedef struct CachedPlanSource
130
130
  /* State kept to help decide whether to use custom or generic plans: */
131
131
  double generic_cost; /* cost of generic plan, or -1 if not known */
132
132
  double total_custom_cost; /* total cost of custom plans so far */
133
- int num_custom_plans; /* number of plans included in total */
133
+ int64 num_custom_plans; /* # of custom plans included in total */
134
+ int64 num_generic_plans; /* # of generic plans */
134
135
  } CachedPlanSource;
135
136
 
136
137
  /*
@@ -218,9 +219,9 @@ extern List *CachedPlanGetTargetList(CachedPlanSource *plansource,
218
219
 
219
220
  extern CachedPlan *GetCachedPlan(CachedPlanSource *plansource,
220
221
  ParamListInfo boundParams,
221
- bool useResOwner,
222
+ ResourceOwner owner,
222
223
  QueryEnvironment *queryEnv);
223
- extern void ReleaseCachedPlan(CachedPlan *plan, bool useResOwner);
224
+ extern void ReleaseCachedPlan(CachedPlan *plan, ResourceOwner owner);
224
225
 
225
226
  extern bool CachedPlanAllowsSimpleValidityCheck(CachedPlanSource *plansource,
226
227
  CachedPlan *plan,
@@ -36,7 +36,7 @@
36
36
  * to look like NO SCROLL cursors.
37
37
  *
38
38
  *
39
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
39
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
40
40
  * Portions Copyright (c) 1994, Regents of the University of California
41
41
  *
42
42
  * src/include/utils/portal.h
@@ -130,6 +130,7 @@ typedef struct PortalData
130
130
  */
131
131
  SubTransactionId createSubid; /* the creating subxact */
132
132
  SubTransactionId activeSubid; /* the last subxact with activity */
133
+ int createLevel; /* creating subxact's nesting level */
133
134
 
134
135
  /* The query or queries the portal will execute */
135
136
  const char *sourceText; /* text of query (as of 8.4, never NULL) */
@@ -160,6 +161,14 @@ typedef struct PortalData
160
161
  /* and these are the format codes to use for the columns: */
161
162
  int16 *formats; /* a format code for each column */
162
163
 
164
+ /*
165
+ * Outermost ActiveSnapshot for execution of the portal's queries. For
166
+ * all but a few utility commands, we require such a snapshot to exist.
167
+ * This ensures that TOAST references in query results can be detoasted,
168
+ * and helps to reduce thrashing of the process's exposed xmin.
169
+ */
170
+ Snapshot portalSnapshot; /* active snapshot, or NULL if none */
171
+
163
172
  /*
164
173
  * Where we store tuples for a held cursor or a PORTAL_ONE_RETURNING or
165
174
  * PORTAL_UTIL_SELECT query. (A cursor held past the end of its
@@ -194,17 +203,6 @@ typedef struct PortalData
194
203
  /* Presentation data, primarily used by the pg_cursors system view */
195
204
  TimestampTz creation_time; /* time at which this portal was defined */
196
205
  bool visible; /* include this portal in pg_cursors? */
197
-
198
- /* Stuff added at the end to avoid ABI break in stable branches: */
199
-
200
- /*
201
- * Outermost ActiveSnapshot for execution of the portal's queries. For
202
- * all but a few utility commands, we require such a snapshot to exist.
203
- * This ensures that TOAST references in query results can be detoasted,
204
- * and helps to reduce thrashing of the process's exposed xmin.
205
- */
206
- Snapshot portalSnapshot; /* active snapshot, or NULL if none */
207
- int createLevel; /* creating subxact's nesting level */
208
206
  } PortalData;
209
207
 
210
208
  /*
@@ -12,7 +12,7 @@
12
12
  #ifndef PS_STATUS_H
13
13
  #define PS_STATUS_H
14
14
 
15
- extern bool update_process_title;
15
+ extern PGDLLIMPORT bool update_process_title;
16
16
 
17
17
  extern char **save_ps_display_args(int argc, char **argv);
18
18
 
@@ -4,7 +4,7 @@
4
4
  * Access to functions to mutate the query environment and retrieve the
5
5
  * actual data related to entries (if any).
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/utils/queryenvironment.h
@@ -0,0 +1,88 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * queryjumble.h
4
+ * Query normalization and fingerprinting.
5
+ *
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * IDENTIFICATION
10
+ * src/include/utils/queryjumble.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef QUERYJUBLE_H
15
+ #define QUERYJUBLE_H
16
+
17
+ #include "nodes/parsenodes.h"
18
+
19
+ #define JUMBLE_SIZE 1024 /* query serialization buffer size */
20
+
21
+ /*
22
+ * Struct for tracking locations/lengths of constants during normalization
23
+ */
24
+ typedef struct LocationLen
25
+ {
26
+ int location; /* start offset in query text */
27
+ int length; /* length in bytes, or -1 to ignore */
28
+ } LocationLen;
29
+
30
+ /*
31
+ * Working state for computing a query jumble and producing a normalized
32
+ * query string
33
+ */
34
+ typedef struct JumbleState
35
+ {
36
+ /* Jumble of current query tree */
37
+ unsigned char *jumble;
38
+
39
+ /* Number of bytes used in jumble[] */
40
+ Size jumble_len;
41
+
42
+ /* Array of locations of constants that should be removed */
43
+ LocationLen *clocations;
44
+
45
+ /* Allocated length of clocations array */
46
+ int clocations_buf_size;
47
+
48
+ /* Current number of valid entries in clocations array */
49
+ int clocations_count;
50
+
51
+ /* highest Param id we've seen, in order to start normalization correctly */
52
+ int highest_extern_param_id;
53
+ } JumbleState;
54
+
55
+ /* Values for the compute_query_id GUC */
56
+ enum ComputeQueryIdType
57
+ {
58
+ COMPUTE_QUERY_ID_OFF,
59
+ COMPUTE_QUERY_ID_ON,
60
+ COMPUTE_QUERY_ID_AUTO,
61
+ COMPUTE_QUERY_ID_REGRESS
62
+ };
63
+
64
+ /* GUC parameters */
65
+ extern PGDLLIMPORT int compute_query_id;
66
+
67
+
68
+ extern const char *CleanQuerytext(const char *query, int *location, int *len);
69
+ extern JumbleState *JumbleQuery(Query *query, const char *querytext);
70
+ extern void EnableQueryId(void);
71
+
72
+ extern PGDLLIMPORT bool query_id_enabled;
73
+
74
+ /*
75
+ * Returns whether query identifier computation has been enabled, either
76
+ * directly in the GUC or by a module when the setting is 'auto'.
77
+ */
78
+ static inline bool
79
+ IsQueryIdEnabled(void)
80
+ {
81
+ if (compute_query_id == COMPUTE_QUERY_ID_OFF)
82
+ return false;
83
+ if (compute_query_id == COMPUTE_QUERY_ID_ON)
84
+ return true;
85
+ return query_id_enabled;
86
+ }
87
+
88
+ #endif /* QUERYJUMBLE_H */
@@ -3,7 +3,7 @@
3
3
  * regproc.h
4
4
  * Functions for the built-in types regproc, regclass, regtype, etc.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/regproc.h
@@ -15,14 +15,25 @@
15
15
 
16
16
  #include "nodes/pg_list.h"
17
17
 
18
+ /* Control flags for format_procedure_extended */
19
+ #define FORMAT_PROC_INVALID_AS_NULL 0x01 /* NULL if undefined */
20
+ #define FORMAT_PROC_FORCE_QUALIFY 0x02 /* force qualification */
21
+ extern char *format_procedure_extended(Oid procedure_oid, bits16 flags);
22
+
23
+ /* Control flags for format_operator_extended */
24
+ #define FORMAT_OPERATOR_INVALID_AS_NULL 0x01 /* NULL if undefined */
25
+ #define FORMAT_OPERATOR_FORCE_QUALIFY 0x02 /* force qualification */
26
+ extern char *format_operator_extended(Oid operator_oid, bits16 flags);
27
+
18
28
  extern List *stringToQualifiedNameList(const char *string);
19
29
  extern char *format_procedure(Oid procedure_oid);
20
30
  extern char *format_procedure_qualified(Oid procedure_oid);
21
31
  extern void format_procedure_parts(Oid operator_oid, List **objnames,
22
- List **objargs);
32
+ List **objargs, bool missing_ok);
33
+
23
34
  extern char *format_operator(Oid operator_oid);
24
35
  extern char *format_operator_qualified(Oid operator_oid);
25
36
  extern void format_operator_parts(Oid operator_oid, List **objnames,
26
- List **objargs);
37
+ List **objargs, bool missing_ok);
27
38
 
28
39
  #endif
@@ -4,7 +4,7 @@
4
4
  * POSTGRES relation descriptor (a/k/a relcache entry) 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/utils/rel.h
@@ -24,6 +24,7 @@
24
24
  #include "rewrite/prs2lock.h"
25
25
  #include "storage/block.h"
26
26
  #include "storage/relfilenode.h"
27
+ #include "storage/smgr.h"
27
28
  #include "utils/relcache.h"
28
29
  #include "utils/reltrigger.h"
29
30
 
@@ -53,8 +54,7 @@ typedef LockInfoData *LockInfo;
53
54
  typedef struct RelationData
54
55
  {
55
56
  RelFileNode rd_node; /* relation physical identifier */
56
- /* use "struct" here to avoid needing to include smgr.h: */
57
- struct SMgrRelationData *rd_smgr; /* cached file handle, or NULL */
57
+ SMgrRelation rd_smgr; /* cached file handle, or NULL */
58
58
  int rd_refcnt; /* reference count */
59
59
  BackendId rd_backend; /* owning backend id, if temporary relation */
60
60
  bool rd_islocaltemp; /* rel is a temp rel of this session */
@@ -128,6 +128,19 @@ typedef struct RelationData
128
128
  PartitionDesc rd_partdesc; /* partition descriptor, or NULL */
129
129
  MemoryContext rd_pdcxt; /* private context for rd_partdesc, if any */
130
130
 
131
+ /* Same as above, for partdescs that omit detached partitions */
132
+ PartitionDesc rd_partdesc_nodetached; /* partdesc w/o detached parts */
133
+ MemoryContext rd_pddcxt; /* for rd_partdesc_nodetached, if any */
134
+
135
+ /*
136
+ * pg_inherits.xmin of the partition that was excluded in
137
+ * rd_partdesc_nodetached. This informs a future user of that partdesc:
138
+ * if this value is not in progress for the active snapshot, then the
139
+ * partdesc can be used, otherwise they have to build a new one. (This
140
+ * matches what find_inheritance_children_extended would do).
141
+ */
142
+ TransactionId rd_partdesc_nodetached_xmin;
143
+
131
144
  /* data managed by RelationGetPartitionQual: */
132
145
  List *rd_partcheck; /* partition CHECK quals */
133
146
  bool rd_partcheckvalid; /* true if list has been computed */
@@ -147,7 +160,7 @@ typedef struct RelationData
147
160
  Bitmapset *rd_pkattr; /* cols included in primary key */
148
161
  Bitmapset *rd_idattr; /* included in replica identity index */
149
162
 
150
- PublicationActions *rd_pubactions; /* publication actions */
163
+ PublicationDesc *rd_pubdesc; /* publication descriptor, or NULL */
151
164
 
152
165
  /*
153
166
  * rd_options is set whenever rd_rel is loaded into the relcache entry.
@@ -232,6 +245,7 @@ typedef struct RelationData
232
245
  */
233
246
  Oid rd_toastoid; /* Real TOAST table's OID, or InvalidOid */
234
247
 
248
+ bool pgstat_enabled; /* should relation stats be counted */
235
249
  /* use "struct" here to avoid needing to include pgstat.h: */
236
250
  struct PgStat_TableStatus *pgstat_info; /* statistics collection area */
237
251
  } RelationData;
@@ -294,6 +308,14 @@ typedef struct AutoVacOpts
294
308
  float8 analyze_scale_factor;
295
309
  } AutoVacOpts;
296
310
 
311
+ /* StdRdOptions->vacuum_index_cleanup values */
312
+ typedef enum StdRdOptIndexCleanup
313
+ {
314
+ STDRD_OPTION_VACUUM_INDEX_CLEANUP_AUTO = 0,
315
+ STDRD_OPTION_VACUUM_INDEX_CLEANUP_OFF,
316
+ STDRD_OPTION_VACUUM_INDEX_CLEANUP_ON
317
+ } StdRdOptIndexCleanup;
318
+
297
319
  typedef struct StdRdOptions
298
320
  {
299
321
  int32 vl_len_; /* varlena header (do not touch directly!) */
@@ -302,7 +324,7 @@ typedef struct StdRdOptions
302
324
  AutoVacOpts autovacuum; /* autovacuum-related options */
303
325
  bool user_catalog_table; /* use as an additional catalog relation */
304
326
  int parallel_workers; /* max number of parallel workers */
305
- bool vacuum_index_cleanup; /* enables index vacuuming and cleanup */
327
+ StdRdOptIndexCleanup vacuum_index_cleanup; /* controls index vacuuming */
306
328
  bool vacuum_truncate; /* enables vacuum to truncate a relation */
307
329
  } StdRdOptions;
308
330
 
@@ -375,6 +397,7 @@ typedef struct ViewOptions
375
397
  {
376
398
  int32 vl_len_; /* varlena header (do not touch directly!) */
377
399
  bool security_barrier;
400
+ bool security_invoker;
378
401
  ViewOptCheckOption check_option;
379
402
  } ViewOptions;
380
403
 
@@ -388,6 +411,16 @@ typedef struct ViewOptions
388
411
  (relation)->rd_options ? \
389
412
  ((ViewOptions *) (relation)->rd_options)->security_barrier : false)
390
413
 
414
+ /*
415
+ * RelationHasSecurityInvoker
416
+ * Returns true if the relation has the security_invoker property set.
417
+ * Note multiple eval of argument!
418
+ */
419
+ #define RelationHasSecurityInvoker(relation) \
420
+ (AssertMacro(relation->rd_rel->relkind == RELKIND_VIEW), \
421
+ (relation)->rd_options ? \
422
+ ((ViewOptions *) (relation)->rd_options)->security_invoker : false)
423
+
391
424
  /*
392
425
  * RelationHasCheckOption
393
426
  * Returns true if the relation is a view defined with either the local
@@ -506,14 +539,25 @@ typedef struct ViewOptions
506
539
  ((relation)->rd_rel->relfilenode == InvalidOid))
507
540
 
508
541
  /*
509
- * RelationOpenSmgr
510
- * Open the relation at the smgr level, if not already done.
511
- */
512
- #define RelationOpenSmgr(relation) \
513
- do { \
514
- if ((relation)->rd_smgr == NULL) \
515
- smgrsetowner(&((relation)->rd_smgr), smgropen((relation)->rd_node, (relation)->rd_backend)); \
516
- } while (0)
542
+ * RelationGetSmgr
543
+ * Returns smgr file handle for a relation, opening it if needed.
544
+ *
545
+ * Very little code is authorized to touch rel->rd_smgr directly. Instead
546
+ * use this function to fetch its value.
547
+ *
548
+ * Note: since a relcache flush can cause the file handle to be closed again,
549
+ * it's unwise to hold onto the pointer returned by this function for any
550
+ * long period. Recommended practice is to just re-execute RelationGetSmgr
551
+ * each time you need to access the SMgrRelation. It's quite cheap in
552
+ * comparison to whatever an smgr function is going to do.
553
+ */
554
+ static inline SMgrRelation
555
+ RelationGetSmgr(Relation rel)
556
+ {
557
+ if (unlikely(rel->rd_smgr == NULL))
558
+ smgrsetowner(&(rel->rd_smgr), smgropen(rel->rd_node, rel->rd_backend));
559
+ return rel->rd_smgr;
560
+ }
517
561
 
518
562
  /*
519
563
  * RelationCloseSmgr
@@ -535,7 +579,8 @@ typedef struct ViewOptions
535
579
  * Fetch relation's current insertion target block.
536
580
  *
537
581
  * Returns InvalidBlockNumber if there is no current target block. Note
538
- * that the target block status is discarded on any smgr-level invalidation.
582
+ * that the target block status is discarded on any smgr-level invalidation,
583
+ * so there's no need to re-open the smgr handle if it's not currently open.
539
584
  */
540
585
  #define RelationGetTargetBlock(relation) \
541
586
  ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
@@ -546,10 +591,16 @@ typedef struct ViewOptions
546
591
  */
547
592
  #define RelationSetTargetBlock(relation, targblock) \
548
593
  do { \
549
- RelationOpenSmgr(relation); \
550
- (relation)->rd_smgr->smgr_targblock = (targblock); \
594
+ RelationGetSmgr(relation)->smgr_targblock = (targblock); \
551
595
  } while (0)
552
596
 
597
+ /*
598
+ * RelationIsPermanent
599
+ * True if relation is permanent.
600
+ */
601
+ #define RelationIsPermanent(relation) \
602
+ ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
603
+
553
604
  /*
554
605
  * RelationNeedsWAL
555
606
  * True if relation needs WAL.
@@ -559,8 +610,7 @@ typedef struct ViewOptions
559
610
  * RelFileNode" in src/backend/access/transam/README.
560
611
  */
561
612
  #define RelationNeedsWAL(relation) \
562
- ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT && \
563
- (XLogIsNeeded() || \
613
+ (RelationIsPermanent(relation) && (XLogIsNeeded() || \
564
614
  (relation->rd_createSubid == InvalidSubTransactionId && \
565
615
  relation->rd_firstRelfilenodeSubid == InvalidSubTransactionId)))
566
616
 
@@ -626,7 +676,8 @@ typedef struct ViewOptions
626
676
  * WAL stream.
627
677
  *
628
678
  * We don't log information for unlogged tables (since they don't WAL log
629
- * anyway) and for system tables (their content is hard to make sense of, and
679
+ * anyway), for foreign tables (since they don't WAL log, either),
680
+ * and for system tables (their content is hard to make sense of, and
630
681
  * it would complicate decoding slightly for little gain). Note that we *do*
631
682
  * log information for user defined catalog tables since they presumably are
632
683
  * interesting to the user...
@@ -634,6 +685,7 @@ typedef struct ViewOptions
634
685
  #define RelationIsLogicallyLogged(relation) \
635
686
  (XLogLogicalInfoActive() && \
636
687
  RelationNeedsWAL(relation) && \
688
+ (relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
637
689
  !IsCatalogRelation(relation))
638
690
 
639
691
  /* routines in utils/cache/relcache.c */
@@ -4,7 +4,7 @@
4
4
  * Relation descriptor cache 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/utils/relcache.h
@@ -64,6 +64,8 @@ typedef enum IndexAttrBitmapKind
64
64
  extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
65
65
  IndexAttrBitmapKind attrKind);
66
66
 
67
+ extern Bitmapset *RelationGetIdentityKeyBitmap(Relation relation);
68
+
67
69
  extern void RelationGetExclusionInfo(Relation indexRelation,
68
70
  Oid **operators,
69
71
  Oid **procs,
@@ -72,8 +74,9 @@ extern void RelationGetExclusionInfo(Relation indexRelation,
72
74
  extern void RelationInitIndexAccessInfo(Relation relation);
73
75
 
74
76
  /* caller must include pg_publication.h */
75
- struct PublicationActions;
76
- extern struct PublicationActions *GetRelationPublicationActions(Relation relation);
77
+ struct PublicationDesc;
78
+ extern void RelationBuildPublicationDesc(Relation relation,
79
+ struct PublicationDesc *pubdesc);
77
80
 
78
81
  extern void RelationInitTableAccessMethod(Relation relation);
79
82
 
@@ -142,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void);
142
145
  extern void RelationCacheInitFileRemove(void);
143
146
 
144
147
  /* should be used only by relcache.c and catcache.c */
145
- extern bool criticalRelcachesBuilt;
148
+ extern PGDLLIMPORT bool criticalRelcachesBuilt;
146
149
 
147
150
  /* should be used only by relcache.c and postinit.c */
148
- extern bool criticalSharedRelcachesBuilt;
151
+ extern PGDLLIMPORT bool criticalSharedRelcachesBuilt;
149
152
 
150
153
  #endif /* RELCACHE_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES relation trigger 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/utils/reltrigger.h
@@ -9,7 +9,7 @@
9
9
  * See utils/resowner/README for more info.
10
10
  *
11
11
  *
12
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  * src/include/utils/resowner.h
@@ -4,7 +4,7 @@
4
4
  * Header file for Row Level Security (RLS) utility commands to be used
5
5
  * with the rowsecurity feature.
6
6
  *
7
- * Copyright (c) 2007-2020, PostgreSQL Global Development Group
7
+ * Copyright (c) 2007-2022, PostgreSQL Global Development Group
8
8
  *
9
9
  * src/include/utils/rls.h
10
10
  *
@@ -14,7 +14,7 @@
14
14
  #define RLS_H
15
15
 
16
16
  /* GUC variable */
17
- extern bool row_security;
17
+ extern PGDLLIMPORT bool row_security;
18
18
 
19
19
  /*
20
20
  * Used by callers of check_enable_rls.
@@ -3,7 +3,7 @@
3
3
  * ruleutils.h
4
4
  * Declarations for ruleutils.c
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/ruleutils.h
@@ -23,6 +23,7 @@ struct PlannedStmt;
23
23
 
24
24
  extern char *pg_get_indexdef_string(Oid indexrelid);
25
25
  extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty);
26
+ extern char *pg_get_querydef(Query *query, bool pretty);
26
27
 
27
28
  extern char *pg_get_partkeydef_columns(Oid relid, bool pretty);
28
29
  extern char *pg_get_partconstrdef_string(Oid partitionId, char *aliasname);
@@ -41,4 +42,6 @@ extern char *generate_collation_name(Oid collid);
41
42
  extern char *generate_opclass_name(Oid opclass);
42
43
  extern char *get_range_partbound_string(List *bound_datums);
43
44
 
45
+ extern char *pg_get_statisticsobjdef_string(Oid statextid);
46
+
44
47
  #endif /* RULEUTILS_H */
@@ -3,7 +3,7 @@
3
3
  * sharedtuplestore.h
4
4
  * Simple mechanism for sharing tuples between backends.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/sharedtuplestore.h
@@ -3,7 +3,7 @@
3
3
  * snapmgr.h
4
4
  * POSTGRES snapshot manager
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/snapmgr.h
@@ -37,8 +37,7 @@
37
37
  */
38
38
  #define RelationAllowsEarlyPruning(rel) \
39
39
  ( \
40
- (rel)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT \
41
- && !IsCatalogRelation(rel) \
40
+ RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
42
41
  && !RelationIsAccessibleInLogicalDecoding(rel) \
43
42
  )
44
43
 
@@ -52,13 +51,12 @@ extern Size SnapMgrShmemSize(void);
52
51
  extern void SnapMgrInit(void);
53
52
  extern TimestampTz GetSnapshotCurrentTimestamp(void);
54
53
  extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
54
+ extern void SnapshotTooOldMagicForTest(void);
55
55
 
56
- extern bool FirstSnapshotSet;
56
+ extern PGDLLIMPORT bool FirstSnapshotSet;
57
57
 
58
58
  extern PGDLLIMPORT TransactionId TransactionXmin;
59
59
  extern PGDLLIMPORT TransactionId RecentXmin;
60
- extern PGDLLIMPORT TransactionId RecentGlobalXmin;
61
- extern PGDLLIMPORT TransactionId RecentGlobalDataXmin;
62
60
 
63
61
  /* Variables representing various special snapshot semantics */
64
62
  extern PGDLLIMPORT SnapshotData SnapshotSelfData;
@@ -78,11 +76,12 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
78
76
 
79
77
  /*
80
78
  * Similarly, some initialization is required for a NonVacuumable snapshot.
81
- * The caller must supply the xmin horizon to use (e.g., RecentGlobalXmin).
79
+ * The caller must supply the visibility cutoff state to use (c.f.
80
+ * GlobalVisTestFor()).
82
81
  */
83
- #define InitNonVacuumableSnapshot(snapshotdata, xmin_horizon) \
82
+ #define InitNonVacuumableSnapshot(snapshotdata, vistestp) \
84
83
  ((snapshotdata).snapshot_type = SNAPSHOT_NON_VACUUMABLE, \
85
- (snapshotdata).xmin = (xmin_horizon))
84
+ (snapshotdata).vistest = (vistestp))
86
85
 
87
86
  /*
88
87
  * Similarly, some initialization is required for SnapshotToast. We need
@@ -98,6 +97,11 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
98
97
  ((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
99
98
  (snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
100
99
 
100
+ static inline bool
101
+ OldSnapshotThresholdActive(void)
102
+ {
103
+ return old_snapshot_threshold >= 0;
104
+ }
101
105
 
102
106
  extern Snapshot GetTransactionSnapshot(void);
103
107
  extern Snapshot GetLatestSnapshot(void);
@@ -122,8 +126,6 @@ extern void UnregisterSnapshot(Snapshot snapshot);
122
126
  extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
123
127
  extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
124
128
 
125
- extern FullTransactionId GetFullRecentGlobalXmin(void);
126
-
127
129
  extern void AtSubCommit_Snapshot(int level);
128
130
  extern void AtSubAbort_Snapshot(int level);
129
131
  extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
@@ -131,14 +133,32 @@ extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
131
133
  extern void ImportSnapshot(const char *idstr);
132
134
  extern bool XactHasExportedSnapshots(void);
133
135
  extern void DeleteAllExportedSnapshotFiles(void);
136
+ extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
134
137
  extern bool ThereAreNoPriorRegisteredSnapshots(void);
135
- extern TransactionId TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
136
- Relation relation);
138
+ extern bool HaveRegisteredOrActiveSnapshot(void);
139
+ extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
140
+ Relation relation,
141
+ TransactionId *limit_xid,
142
+ TimestampTz *limit_ts);
143
+ extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
137
144
  extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
138
145
  TransactionId xmin);
139
146
 
140
147
  extern char *ExportSnapshot(Snapshot snapshot);
141
148
 
149
+ /*
150
+ * These live in procarray.c because they're intimately linked to the
151
+ * procarray contents, but thematically they better fit into snapmgr.h.
152
+ */
153
+ typedef struct GlobalVisState GlobalVisState;
154
+ extern GlobalVisState *GlobalVisTestFor(Relation rel);
155
+ extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
156
+ extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
157
+ extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
158
+ extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
159
+ extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
160
+ extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
161
+
142
162
  /*
143
163
  * Utility functions for implementing visibility routines in table AMs.
144
164
  */
@@ -154,6 +174,6 @@ extern bool HistoricSnapshotActive(void);
154
174
  extern Size EstimateSnapshotSpace(Snapshot snapshot);
155
175
  extern void SerializeSnapshot(Snapshot snapshot, char *start_address);
156
176
  extern Snapshot RestoreSnapshot(char *start_address);
157
- extern void RestoreTransactionSnapshot(Snapshot snapshot, void *master_pgproc);
177
+ extern void RestoreTransactionSnapshot(Snapshot snapshot, void *source_pgproc);
158
178
 
159
179
  #endif /* SNAPMGR_H */