pg_query 2.1.0 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
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)