pg_query 2.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -3,7 +3,7 @@
3
3
  * 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
@@ -211,6 +220,7 @@ extern void AtCleanup_Portals(void);
211
220
  extern void PortalErrorCleanup(void);
212
221
  extern void AtSubCommit_Portals(SubTransactionId mySubid,
213
222
  SubTransactionId parentSubid,
223
+ int parentLevel,
214
224
  ResourceOwner parentXactOwner);
215
225
  extern void AtSubAbort_Portals(SubTransactionId mySubid,
216
226
  SubTransactionId parentSubid,
@@ -237,5 +247,6 @@ extern void PortalCreateHoldStore(Portal portal);
237
247
  extern void PortalHashTableDeleteAll(void);
238
248
  extern bool ThereAreNoReadyPortals(void);
239
249
  extern void HoldPinnedPortals(void);
250
+ extern void ForgetPortalSnapshots(void);
240
251
 
241
252
  #endif /* PORTAL_H */
@@ -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,16 +308,23 @@ 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!) */
300
322
  int fillfactor; /* page fill factor in percent (0..100) */
301
- /* fraction of newly inserted tuples prior to trigger index cleanup */
302
323
  int toast_tuple_target; /* target for tuple toasting */
303
324
  AutoVacOpts autovacuum; /* autovacuum-related options */
304
325
  bool user_catalog_table; /* use as an additional catalog relation */
305
326
  int parallel_workers; /* max number of parallel workers */
306
- bool vacuum_index_cleanup; /* enables index vacuuming and cleanup */
327
+ StdRdOptIndexCleanup vacuum_index_cleanup; /* controls index vacuuming */
307
328
  bool vacuum_truncate; /* enables vacuum to truncate a relation */
308
329
  } StdRdOptions;
309
330
 
@@ -376,6 +397,7 @@ typedef struct ViewOptions
376
397
  {
377
398
  int32 vl_len_; /* varlena header (do not touch directly!) */
378
399
  bool security_barrier;
400
+ bool security_invoker;
379
401
  ViewOptCheckOption check_option;
380
402
  } ViewOptions;
381
403
 
@@ -389,6 +411,16 @@ typedef struct ViewOptions
389
411
  (relation)->rd_options ? \
390
412
  ((ViewOptions *) (relation)->rd_options)->security_barrier : false)
391
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
+
392
424
  /*
393
425
  * RelationHasCheckOption
394
426
  * Returns true if the relation is a view defined with either the local
@@ -507,14 +539,25 @@ typedef struct ViewOptions
507
539
  ((relation)->rd_rel->relfilenode == InvalidOid))
508
540
 
509
541
  /*
510
- * RelationOpenSmgr
511
- * Open the relation at the smgr level, if not already done.
512
- */
513
- #define RelationOpenSmgr(relation) \
514
- do { \
515
- if ((relation)->rd_smgr == NULL) \
516
- smgrsetowner(&((relation)->rd_smgr), smgropen((relation)->rd_node, (relation)->rd_backend)); \
517
- } 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
+ }
518
561
 
519
562
  /*
520
563
  * RelationCloseSmgr
@@ -536,7 +579,8 @@ typedef struct ViewOptions
536
579
  * Fetch relation's current insertion target block.
537
580
  *
538
581
  * Returns InvalidBlockNumber if there is no current target block. Note
539
- * 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.
540
584
  */
541
585
  #define RelationGetTargetBlock(relation) \
542
586
  ( (relation)->rd_smgr != NULL ? (relation)->rd_smgr->smgr_targblock : InvalidBlockNumber )
@@ -547,10 +591,16 @@ typedef struct ViewOptions
547
591
  */
548
592
  #define RelationSetTargetBlock(relation, targblock) \
549
593
  do { \
550
- RelationOpenSmgr(relation); \
551
- (relation)->rd_smgr->smgr_targblock = (targblock); \
594
+ RelationGetSmgr(relation)->smgr_targblock = (targblock); \
552
595
  } while (0)
553
596
 
597
+ /*
598
+ * RelationIsPermanent
599
+ * True if relation is permanent.
600
+ */
601
+ #define RelationIsPermanent(relation) \
602
+ ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
603
+
554
604
  /*
555
605
  * RelationNeedsWAL
556
606
  * True if relation needs WAL.
@@ -560,8 +610,7 @@ typedef struct ViewOptions
560
610
  * RelFileNode" in src/backend/access/transam/README.
561
611
  */
562
612
  #define RelationNeedsWAL(relation) \
563
- ((relation)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT && \
564
- (XLogIsNeeded() || \
613
+ (RelationIsPermanent(relation) && (XLogIsNeeded() || \
565
614
  (relation->rd_createSubid == InvalidSubTransactionId && \
566
615
  relation->rd_firstRelfilenodeSubid == InvalidSubTransactionId)))
567
616
 
@@ -627,7 +676,8 @@ typedef struct ViewOptions
627
676
  * WAL stream.
628
677
  *
629
678
  * We don't log information for unlogged tables (since they don't WAL log
630
- * 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
631
681
  * it would complicate decoding slightly for little gain). Note that we *do*
632
682
  * log information for user defined catalog tables since they presumably are
633
683
  * interesting to the user...
@@ -635,6 +685,7 @@ typedef struct ViewOptions
635
685
  #define RelationIsLogicallyLogged(relation) \
636
686
  (XLogLogicalInfoActive() && \
637
687
  RelationNeedsWAL(relation) && \
688
+ (relation)->rd_rel->relkind != RELKIND_FOREIGN_TABLE && \
638
689
  !IsCatalogRelation(relation))
639
690
 
640
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
@@ -14,7 +14,6 @@
14
14
  #ifndef RELCACHE_H
15
15
  #define RELCACHE_H
16
16
 
17
- #include "postgres.h"
18
17
  #include "access/tupdesc.h"
19
18
  #include "nodes/bitmapset.h"
20
19
 
@@ -65,6 +64,8 @@ typedef enum IndexAttrBitmapKind
65
64
  extern Bitmapset *RelationGetIndexAttrBitmap(Relation relation,
66
65
  IndexAttrBitmapKind attrKind);
67
66
 
67
+ extern Bitmapset *RelationGetIdentityKeyBitmap(Relation relation);
68
+
68
69
  extern void RelationGetExclusionInfo(Relation indexRelation,
69
70
  Oid **operators,
70
71
  Oid **procs,
@@ -73,8 +74,9 @@ extern void RelationGetExclusionInfo(Relation indexRelation,
73
74
  extern void RelationInitIndexAccessInfo(Relation relation);
74
75
 
75
76
  /* caller must include pg_publication.h */
76
- struct PublicationActions;
77
- extern struct PublicationActions *GetRelationPublicationActions(Relation relation);
77
+ struct PublicationDesc;
78
+ extern void RelationBuildPublicationDesc(Relation relation,
79
+ struct PublicationDesc *pubdesc);
78
80
 
79
81
  extern void RelationInitTableAccessMethod(Relation relation);
80
82
 
@@ -121,7 +123,7 @@ extern void RelationForgetRelation(Oid rid);
121
123
 
122
124
  extern void RelationCacheInvalidateEntry(Oid relationId);
123
125
 
124
- extern void RelationCacheInvalidate(void);
126
+ extern void RelationCacheInvalidate(bool debug_discard);
125
127
 
126
128
  extern void RelationCloseSmgrByOid(Oid relationId);
127
129
 
@@ -143,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void);
143
145
  extern void RelationCacheInitFileRemove(void);
144
146
 
145
147
  /* should be used only by relcache.c and catcache.c */
146
- extern bool criticalRelcachesBuilt;
148
+ extern PGDLLIMPORT bool criticalRelcachesBuilt;
147
149
 
148
150
  /* should be used only by relcache.c and postinit.c */
149
- extern bool criticalSharedRelcachesBuilt;
151
+ extern PGDLLIMPORT bool criticalSharedRelcachesBuilt;
150
152
 
151
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