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
@@ -16,7 +16,7 @@
16
16
  * See src/backend/utils/misc/README for more information.
17
17
  *
18
18
  *
19
- * Copyright (c) 2000-2020, PostgreSQL Global Development Group
19
+ * Copyright (c) 2000-2022, PostgreSQL Global Development Group
20
20
  * Written by Peter Eisentraut <peter_e@gmx.net>.
21
21
  *
22
22
  * IDENTIFICATION
@@ -30,25 +30,37 @@
30
30
  #include <float.h>
31
31
  #include <math.h>
32
32
  #include <limits.h>
33
- #include <unistd.h>
33
+ #ifdef HAVE_POLL_H
34
+ #include <poll.h>
35
+ #endif
36
+ #ifndef WIN32
37
+ #include <sys/mman.h>
38
+ #endif
34
39
  #include <sys/stat.h>
35
40
  #ifdef HAVE_SYSLOG
36
41
  #include <syslog.h>
37
42
  #endif
43
+ #include <unistd.h>
38
44
 
39
45
  #include "access/commit_ts.h"
40
46
  #include "access/gin.h"
41
47
  #include "access/rmgr.h"
42
48
  #include "access/tableam.h"
49
+ #include "access/toast_compression.h"
43
50
  #include "access/transam.h"
44
51
  #include "access/twophase.h"
45
52
  #include "access/xact.h"
46
53
  #include "access/xlog_internal.h"
54
+ #include "access/xlogprefetcher.h"
55
+ #include "access/xlogrecovery.h"
47
56
  #include "catalog/namespace.h"
57
+ #include "catalog/objectaccess.h"
48
58
  #include "catalog/pg_authid.h"
59
+ #include "catalog/pg_parameter_acl.h"
49
60
  #include "catalog/storage.h"
50
61
  #include "commands/async.h"
51
62
  #include "commands/prepare.h"
63
+ #include "commands/tablespace.h"
52
64
  #include "commands/trigger.h"
53
65
  #include "commands/user.h"
54
66
  #include "commands/vacuum.h"
@@ -74,6 +86,7 @@
74
86
  #include "postmaster/bgworker_internals.h"
75
87
  #include "postmaster/bgwriter.h"
76
88
  #include "postmaster/postmaster.h"
89
+ #include "postmaster/startup.h"
77
90
  #include "postmaster/syslogger.h"
78
91
  #include "postmaster/walwriter.h"
79
92
  #include "replication/logicallauncher.h"
@@ -93,6 +106,7 @@
93
106
  #include "tcop/tcopprot.h"
94
107
  #include "tsearch/ts_cache.h"
95
108
  #include "utils/acl.h"
109
+ #include "utils/backend_status.h"
96
110
  #include "utils/builtins.h"
97
111
  #include "utils/bytea.h"
98
112
  #include "utils/float.h"
@@ -103,9 +117,11 @@
103
117
  #include "utils/plancache.h"
104
118
  #include "utils/portal.h"
105
119
  #include "utils/ps_status.h"
120
+ #include "utils/queryjumble.h"
106
121
  #include "utils/rls.h"
107
122
  #include "utils/snapmgr.h"
108
123
  #include "utils/tzparser.h"
124
+ #include "utils/inval.h"
109
125
  #include "utils/varlena.h"
110
126
  #include "utils/xml.h"
111
127
 
@@ -147,6 +163,8 @@ extern bool optimize_bounded_sort;
147
163
 
148
164
 
149
165
 
166
+
167
+
150
168
  /* global variables for check hook support */
151
169
 
152
170
 
@@ -208,13 +226,16 @@ static bool check_max_wal_senders(int *newval, void **extra, GucSource source);
208
226
  static bool check_autovacuum_work_mem(int *newval, void **extra, GucSource source);
209
227
  static bool check_effective_io_concurrency(int *newval, void **extra, GucSource source);
210
228
  static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source);
211
- static void assign_pgstat_temp_directory(const char *newval, void *extra);
229
+ static bool check_huge_page_size(int *newval, void **extra, GucSource source);
230
+ static bool check_client_connection_check_interval(int *newval, void **extra, GucSource source);
231
+ static void assign_maintenance_io_concurrency(int newval, void *extra);
212
232
  static bool check_application_name(char **newval, void **extra, GucSource source);
213
233
  static void assign_application_name(const char *newval, void *extra);
214
234
  static bool check_cluster_name(char **newval, void **extra, GucSource source);
215
235
  static const char *show_unix_socket_permissions(void);
216
236
  static const char *show_log_file_mode(void);
217
237
  static const char *show_data_directory_mode(void);
238
+ static const char *show_in_hot_standby(void);
218
239
  static bool check_backtrace_functions(char **newval, void **extra, GucSource source);
219
240
  static void assign_backtrace_functions(const char *newval, void *extra);
220
241
  static bool check_recovery_target_timeline(char **newval, void **extra, GucSource source);
@@ -236,6 +257,11 @@ static bool check_default_with_oids(bool *newval, void **extra, GucSource source
236
257
  static ConfigVariable *ProcessConfigFileInternal(GucContext context,
237
258
  bool applySettings, int elevel);
238
259
 
260
+ /*
261
+ * Track whether there were any deferred checks for custom resource managers
262
+ * specified in wal_consistency_checking.
263
+ */
264
+
239
265
 
240
266
  /*
241
267
  * Options for enum values defined in this module.
@@ -290,6 +316,11 @@ StaticAssertDecl(lengthof(track_function_options) == (TRACK_FUNC_ALL + 2),
290
316
 
291
317
 
292
318
 
319
+ StaticAssertDecl(lengthof(stats_fetch_consistency) == (PGSTAT_FETCH_CONSISTENCY_SNAPSHOT + 2),
320
+ "array length mismatch");
321
+
322
+
323
+
293
324
  StaticAssertDecl(lengthof(xmlbinary_options) == (XMLBINARY_HEX + 2),
294
325
  "array length mismatch");
295
326
 
@@ -304,6 +335,12 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
304
335
  */
305
336
 
306
337
 
338
+ /*
339
+ * Although only "on", "off", and "auto" are documented, we accept
340
+ * all the likely variants of "on" and "off".
341
+ */
342
+
343
+
307
344
  /*
308
345
  * Although only "on", "off", and "partition" are documented, we
309
346
  * accept all the likely variants of "on" and "off".
@@ -326,11 +363,8 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
326
363
 
327
364
 
328
365
 
329
- /*
330
- * password_encryption used to be a boolean, so accept all the likely
331
- * variants of "on", too. "off" used to store passwords in plaintext,
332
- * but we don't support that anymore.
333
- */
366
+
367
+
334
368
 
335
369
 
336
370
 
@@ -338,6 +372,9 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
338
372
  StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2),
339
373
  "array length mismatch");
340
374
 
375
+ #ifdef HAVE_SYNCFS
376
+ #endif
377
+
341
378
  #ifndef WIN32
342
379
  #endif
343
380
  #ifndef EXEC_BACKEND
@@ -345,6 +382,14 @@ StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2)
345
382
  #ifdef WIN32
346
383
  #endif
347
384
 
385
+ #ifdef USE_LZ4
386
+ #endif
387
+
388
+ #ifdef USE_LZ4
389
+ #endif
390
+ #ifdef USE_ZSTD
391
+ #endif
392
+
348
393
  /*
349
394
  * Options for enum values stored in other modules
350
395
  */
@@ -433,6 +478,7 @@ __thread char *backtrace_symbol_list;
433
478
  */
434
479
 
435
480
 
481
+
436
482
  /*
437
483
  * These variables are all dummies that don't do anything, except in some
438
484
  * cases provide the value for SHOW to display. The real state is elsewhere
@@ -464,6 +510,9 @@ __thread char *backtrace_symbol_list;
464
510
 
465
511
 
466
512
 
513
+
514
+
515
+
467
516
 
468
517
 
469
518
 
@@ -609,6 +658,12 @@ typedef struct
609
658
  #ifdef USE_PREFETCH
610
659
  #else
611
660
  #endif
661
+ #ifdef DISCARD_CACHES_ENABLED
662
+ #if defined(CLOBBER_CACHE_RECURSIVELY)
663
+ #else
664
+ #endif
665
+ #else /* not DISCARD_CACHES_ENABLED */
666
+ #endif /* not DISCARD_CACHES_ENABLED */
612
667
 
613
668
 
614
669
 
@@ -660,6 +715,8 @@ typedef struct
660
715
 
661
716
  /* true to enable GUC_REPORT */
662
717
 
718
+ /* true if any GUC_REPORT reports are needed */
719
+
663
720
  /* 1 when in main transaction */
664
721
 
665
722
 
@@ -673,7 +730,8 @@ static void reapply_stacked_values(struct config_generic *variable,
673
730
  struct config_string *pHolder,
674
731
  GucStack *stack,
675
732
  const char *curvalue,
676
- GucContext curscontext, GucSource cursource);
733
+ GucContext curscontext, GucSource cursource,
734
+ Oid cursrole);
677
735
  static void ShowGUCConfigOption(const char *name, DestReceiver *dest);
678
736
  static void ShowAllGUCConfig(DestReceiver *dest);
679
737
  static char *_ShowOption(struct config_generic *record, bool use_units);
@@ -753,15 +811,34 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
753
811
  */
754
812
 
755
813
 
814
+ /*
815
+ * Decide whether a proposed custom variable name is allowed.
816
+ *
817
+ * It must be two or more identifiers separated by dots, where the rules
818
+ * for what is an identifier agree with scan.l. (If you change this rule,
819
+ * adjust the errdetail in find_option().)
820
+ */
821
+
822
+
756
823
  /*
757
824
  * Create and add a placeholder variable for a custom variable name.
758
825
  */
759
826
 
760
827
 
761
828
  /*
762
- * Look up option NAME. If it exists, return a pointer to its record,
763
- * else return NULL. If create_placeholders is true, we'll create a
764
- * placeholder record for a valid-looking custom variable name.
829
+ * Look up option "name". If it exists, return a pointer to its record.
830
+ * Otherwise, if create_placeholders is true and name is a valid-looking
831
+ * custom variable name, we'll create and return a placeholder record.
832
+ * Otherwise, if skip_errors is true, then we silently return NULL for
833
+ * an unrecognized or invalid name. Otherwise, the error is reported at
834
+ * error level elevel (and we return NULL if that's less than ERROR).
835
+ *
836
+ * Note: internal errors, primarily out-of-memory, draw an elevel-level
837
+ * report and NULL return regardless of skip_errors. Hence, callers must
838
+ * handle a NULL return whenever elevel < ERROR, but they should not need
839
+ * to emit any additional error message. (In practice, internal errors
840
+ * can only happen when create_placeholders is true, so callers passing
841
+ * false need not think terribly hard about this.)
765
842
  */
766
843
 
767
844
 
@@ -777,6 +854,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
777
854
 
778
855
 
779
856
 
857
+ /*
858
+ * Convert a GUC name to the form that should be used in pg_parameter_acl.
859
+ *
860
+ * We need to canonicalize entries since, for example, case should not be
861
+ * significant. In addition, we apply the map_old_guc_names[] mapping so that
862
+ * any obsolete names will be converted when stored in a new PG version.
863
+ * Note however that this function does not verify legality of the name.
864
+ *
865
+ * The result is a palloc'd string.
866
+ */
867
+
868
+
869
+ /*
870
+ * Check whether we should allow creation of a pg_parameter_acl entry
871
+ * for the given name. (This can be applied either before or after
872
+ * canonicalizing it.)
873
+ */
874
+
875
+
876
+
780
877
  /*
781
878
  * Initialize GUC options during program startup.
782
879
  *
@@ -785,6 +882,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
785
882
  */
786
883
 
787
884
 
885
+ /*
886
+ * If any custom resource managers were specified in the
887
+ * wal_consistency_checking GUC, processing was deferred. Now that
888
+ * shared_preload_libraries have been loaded, process wal_consistency_checking
889
+ * again.
890
+ */
891
+
892
+
788
893
  /*
789
894
  * Assign any GUC values that can come from the server's environment.
790
895
  *
@@ -862,8 +967,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
862
967
  */
863
968
 
864
969
 
970
+ /*
971
+ * ReportChangedGUCOptions: report recently-changed GUC_REPORT variables
972
+ *
973
+ * This is called just before we wait for a new client query.
974
+ *
975
+ * By handling things this way, we ensure that a ParameterStatus message
976
+ * is sent at most once per variable per query, even if the variable
977
+ * changed multiple times within the query. That's quite possible when
978
+ * using features such as function SET clauses. Function SET clauses
979
+ * also tend to cause values to change intraquery but eventually revert
980
+ * to their prevailing values; ReportGUCOption is responsible for avoiding
981
+ * redundant reports in such cases.
982
+ */
983
+
984
+
865
985
  /*
866
986
  * ReportGUCOption: if appropriate, transmit option value to frontend
987
+ *
988
+ * We need not transmit the value if it's the same as what we last
989
+ * transmitted. However, clear the NEEDS_REPORT flag in any case.
867
990
  */
868
991
 
869
992
 
@@ -980,7 +1103,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
980
1103
 
981
1104
 
982
1105
  /*
983
- * Sets option `name' to given value.
1106
+ * set_config_option: sets option `name' to given value.
984
1107
  *
985
1108
  * The value should be a string, which will be parsed and converted to
986
1109
  * the appropriate data type. The context and source parameters indicate
@@ -1000,6 +1123,10 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1000
1123
  * its standard choice of ereport level. However some callers need to be
1001
1124
  * able to override that choice; they should pass the ereport level to use.
1002
1125
  *
1126
+ * is_reload should be true only when called from read_nondefault_variables()
1127
+ * or RestoreGUCState(), where we are trying to load some other process's
1128
+ * GUC settings into a new process.
1129
+ *
1003
1130
  * Return value:
1004
1131
  * +1: the value is valid and was successfully applied.
1005
1132
  * 0: the name or value is invalid (but see below).
@@ -1014,6 +1141,23 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1014
1141
  *
1015
1142
  * See also SetConfigOption for an external interface.
1016
1143
  */
1144
+
1145
+
1146
+ /*
1147
+ * set_config_option_ext: sets option `name' to given value.
1148
+ *
1149
+ * This API adds the ability to explicitly specify which role OID
1150
+ * is considered to be setting the value. Most external callers can use
1151
+ * set_config_option() and let it determine that based on the GucSource,
1152
+ * but there are a few that are supplying a value that was determined
1153
+ * in some special way and need to override the decision. Also, when
1154
+ * restoring a previously-assigned value, it's important to supply the
1155
+ * same role OID that set the value originally; so all guc.c callers
1156
+ * that are doing that type of thing need to call this directly.
1157
+ *
1158
+ * Generally, srole should be GetUserId() when the source is a SQL operation,
1159
+ * or BOOTSTRAP_SUPERUSERID if the source is a config file or similar.
1160
+ */
1017
1161
  #define newval (newval_union.boolval)
1018
1162
  #undef newval
1019
1163
  #define newval (newval_union.intval)
@@ -1168,6 +1312,9 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1168
1312
  */
1169
1313
 
1170
1314
 
1315
+ /*
1316
+ * Functions for extensions to call to define their custom GUC variables.
1317
+ */
1171
1318
 
1172
1319
 
1173
1320
 
@@ -1178,6 +1325,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1178
1325
 
1179
1326
 
1180
1327
 
1328
+ /*
1329
+ * Mark the given GUC prefix as "reserved".
1330
+ *
1331
+ * This deletes any existing placeholders matching the prefix,
1332
+ * and then prevents new ones from being created.
1333
+ * Extensions should call this after they've defined all of their custom
1334
+ * GUCs, to help catch misspelled config-file entries.
1335
+ */
1181
1336
 
1182
1337
 
1183
1338
 
@@ -1214,6 +1369,13 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1214
1369
  */
1215
1370
 
1216
1371
 
1372
+ /*
1373
+ * Return some of the flags associated to the specified GUC in the shape of
1374
+ * a text array, and NULL if it does not exist. An empty array is returned
1375
+ * if the GUC exists without any meaningful flags to show.
1376
+ */
1377
+ #define MAX_GUC_FLAGS 5
1378
+
1217
1379
  /*
1218
1380
  * Return GUC variable value by variable number; optionally return canonical
1219
1381
  * form of name. Return value is palloc'd.
@@ -1277,6 +1439,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1277
1439
  * variable sourceline, integer
1278
1440
  * variable source, integer
1279
1441
  * variable scontext, integer
1442
+ * variable srole, OID
1280
1443
  */
1281
1444
  static void
1282
1445
  write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
@@ -1343,6 +1506,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
1343
1506
  fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
1344
1507
  fwrite(&gconf->source, 1, sizeof(gconf->source), fp);
1345
1508
  fwrite(&gconf->scontext, 1, sizeof(gconf->scontext), fp);
1509
+ fwrite(&gconf->srole, 1, sizeof(gconf->srole), fp);
1346
1510
  }
1347
1511
 
1348
1512
  void
@@ -1438,12 +1602,7 @@ read_nondefault_variables(void)
1438
1602
  int varsourceline;
1439
1603
  GucSource varsource;
1440
1604
  GucContext varscontext;
1441
-
1442
- /*
1443
- * Assert that PGC_BACKEND/PGC_SU_BACKEND case in set_config_option() will
1444
- * do the right thing.
1445
- */
1446
- Assert(IsInitProcessingMode());
1605
+ Oid varsrole;
1447
1606
 
1448
1607
  /*
1449
1608
  * Open file
@@ -1467,7 +1626,7 @@ read_nondefault_variables(void)
1467
1626
  if ((varname = read_string_with_null(fp)) == NULL)
1468
1627
  break;
1469
1628
 
1470
- if ((record = find_option(varname, true, FATAL)) == NULL)
1629
+ if ((record = find_option(varname, true, false, FATAL)) == NULL)
1471
1630
  elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname);
1472
1631
 
1473
1632
  if ((varvalue = read_string_with_null(fp)) == NULL)
@@ -1480,10 +1639,12 @@ read_nondefault_variables(void)
1480
1639
  elog(FATAL, "invalid format of exec config params file");
1481
1640
  if (fread(&varscontext, 1, sizeof(varscontext), fp) != sizeof(varscontext))
1482
1641
  elog(FATAL, "invalid format of exec config params file");
1642
+ if (fread(&varsrole, 1, sizeof(varsrole), fp) != sizeof(varsrole))
1643
+ elog(FATAL, "invalid format of exec config params file");
1483
1644
 
1484
- (void) set_config_option(varname, varvalue,
1485
- varscontext, varsource,
1486
- GUC_ACTION_SET, true, 0, true);
1645
+ (void) set_config_option_ext(varname, varvalue,
1646
+ varscontext, varsource, varsrole,
1647
+ GUC_ACTION_SET, true, 0, true);
1487
1648
  if (varsourcefile[0])
1488
1649
  set_config_sourcefile(varname, varsourcefile, varsourceline);
1489
1650
 
@@ -1498,26 +1659,13 @@ read_nondefault_variables(void)
1498
1659
 
1499
1660
  /*
1500
1661
  * can_skip_gucvar:
1501
- * When serializing, determine whether to skip this GUC. When restoring, the
1502
- * negation of this test determines whether to restore the compiled-in default
1503
- * value before processing serialized values.
1504
- *
1505
- * A PGC_S_DEFAULT setting on the serialize side will typically match new
1506
- * postmaster children, but that can be false when got_SIGHUP == true and the
1507
- * pending configuration change modifies this setting. Nonetheless, we omit
1508
- * PGC_S_DEFAULT settings from serialization and make up for that by restoring
1509
- * defaults before applying serialized values.
1510
- *
1511
- * PGC_POSTMASTER variables always have the same value in every child of a
1512
- * particular postmaster. Most PGC_INTERNAL variables are compile-time
1513
- * constants; a few, like server_encoding and lc_ctype, are handled specially
1514
- * outside the serialize/restore procedure. Therefore, SerializeGUCState()
1515
- * never sends these, and RestoreGUCState() never changes them.
1662
+ * Decide whether SerializeGUCState can skip sending this GUC variable,
1663
+ * or whether RestoreGUCState can skip resetting this GUC to default.
1516
1664
  *
1517
- * Role is a special variable in the sense that its current value can be an
1518
- * invalid value and there are multiple ways by which that can happen (like
1519
- * after setting the role, someone drops it). So we handle it outside of
1520
- * serialize/restore machinery.
1665
+ * It is somewhat magical and fragile that the same test works for both cases.
1666
+ * Realize in particular that we are very likely selecting different sets of
1667
+ * GUCs on the leader and worker sides! Be sure you've understood the
1668
+ * comments here and in RestoreGUCState thoroughly before changing this.
1521
1669
  */
1522
1670
 
1523
1671
 
@@ -1577,8 +1725,14 @@ read_nondefault_variables(void)
1577
1725
 
1578
1726
  /*
1579
1727
  * RestoreGUCState:
1580
- * Reads the GUC state at the specified address and updates the GUCs with the
1581
- * values read from the GUC state.
1728
+ * Reads the GUC state at the specified address and sets this process's
1729
+ * GUCs to match.
1730
+ *
1731
+ * Note that this provides the worker with only a very shallow view of the
1732
+ * leader's GUC state: we'll know about the currently active values, but not
1733
+ * about stacked or reset values. That's fine since the worker is just
1734
+ * executing one part of a query, within which the active values won't change
1735
+ * and the stacked values are invisible.
1582
1736
  */
1583
1737
 
1584
1738
 
@@ -1619,7 +1773,7 @@ read_nondefault_variables(void)
1619
1773
  /*
1620
1774
  * Given a GUC array, delete all settings from it that our permission
1621
1775
  * level allows: if superuser, delete them all; if regular user, only
1622
- * those that are PGC_USERSET
1776
+ * those that are PGC_USERSET or we have permission to set
1623
1777
  */
1624
1778
 
1625
1779
 
@@ -1753,6 +1907,14 @@ read_nondefault_variables(void)
1753
1907
  #ifndef USE_PREFETCH
1754
1908
  #endif /* USE_PREFETCH */
1755
1909
 
1910
+ #if !(defined(MAP_HUGE_MASK) && defined(MAP_HUGE_SHIFT))
1911
+ #endif
1912
+
1913
+
1914
+
1915
+ #ifdef USE_PREFETCH
1916
+ #endif
1917
+
1756
1918
 
1757
1919
 
1758
1920
 
@@ -26,7 +26,7 @@
26
26
  * type.
27
27
  *
28
28
  *
29
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
29
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
30
30
  * Portions Copyright (c) 1994, Regents of the University of California
31
31
  *
32
32
  * IDENTIFICATION
@@ -292,7 +292,8 @@ static Size AllocSetGetChunkSpace(MemoryContext context, void *pointer);
292
292
  static bool AllocSetIsEmpty(MemoryContext context);
293
293
  static void AllocSetStats(MemoryContext context,
294
294
  MemoryStatsPrintFunc printfunc, void *passthru,
295
- MemoryContextCounters *totals);
295
+ MemoryContextCounters *totals,
296
+ bool print_to_stderr);
296
297
 
297
298
  #ifdef MEMORY_CONTEXT_CHECKING
298
299
  static void AllocSetCheck(MemoryContext context);
@@ -1356,11 +1357,12 @@ AllocSetIsEmpty(MemoryContext context)
1356
1357
  * printfunc: if not NULL, pass a human-readable stats string to this.
1357
1358
  * passthru: pass this pointer through to printfunc.
1358
1359
  * totals: if not NULL, add stats about this context into *totals.
1360
+ * print_to_stderr: print stats to stderr if true, elog otherwise.
1359
1361
  */
1360
1362
  static void
1361
1363
  AllocSetStats(MemoryContext context,
1362
1364
  MemoryStatsPrintFunc printfunc, void *passthru,
1363
- MemoryContextCounters *totals)
1365
+ MemoryContextCounters *totals, bool print_to_stderr)
1364
1366
  {
1365
1367
  AllocSet set = (AllocSet) context;
1366
1368
  Size nblocks = 0;
@@ -1396,10 +1398,10 @@ AllocSetStats(MemoryContext context,
1396
1398
  char stats_string[200];
1397
1399
 
1398
1400
  snprintf(stats_string, sizeof(stats_string),
1399
- "%zu total in %zd blocks; %zu free (%zd chunks); %zu used",
1401
+ "%zu total in %zu blocks; %zu free (%zu chunks); %zu used",
1400
1402
  totalspace, nblocks, freespace, freechunks,
1401
1403
  totalspace - freespace);
1402
- printfunc(context, passthru, stats_string);
1404
+ printfunc(context, passthru, stats_string, print_to_stderr);
1403
1405
  }
1404
1406
 
1405
1407
  if (totals)