pg_query 2.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. data/ext/pg_query/src_port_random.c +0 -31
@@ -5,7 +5,7 @@
5
5
  * - cliplen
6
6
  * - DatabaseEncoding
7
7
  * - pg_verifymbstr
8
- * - pg_verify_mbstr_len
8
+ * - pg_verify_mbstr
9
9
  * - report_invalid_encoding
10
10
  * - GetDatabaseEncoding
11
11
  * - pg_get_client_encoding
@@ -45,7 +45,7 @@
45
45
  * the result is validly encoded according to the destination encoding.
46
46
  *
47
47
  *
48
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
48
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
49
49
  * Portions Copyright (c) 1994, Regents of the University of California
50
50
  *
51
51
  *
@@ -168,6 +168,37 @@ pg_get_client_encoding(void)
168
168
  */
169
169
 
170
170
 
171
+ /*
172
+ * Convert src string to another encoding.
173
+ *
174
+ * This function has a different API than the other conversion functions.
175
+ * The caller should've looked up the conversion function using
176
+ * FindDefaultConversionProc(). Unlike the other functions, the converted
177
+ * result is not palloc'd. It is written to the caller-supplied buffer
178
+ * instead.
179
+ *
180
+ * src_encoding - encoding to convert from
181
+ * dest_encoding - encoding to convert to
182
+ * src, srclen - input buffer and its length in bytes
183
+ * dest, destlen - destination buffer and its size in bytes
184
+ *
185
+ * The output is null-terminated.
186
+ *
187
+ * If destlen < srclen * MAX_CONVERSION_LENGTH + 1, the converted output
188
+ * wouldn't necessarily fit in the output buffer, and the function will not
189
+ * convert the whole input.
190
+ *
191
+ * TODO: The conversion function interface is not great. Firstly, it
192
+ * would be nice to pass through the destination buffer size to the
193
+ * conversion function, so that if you pass a shorter destination buffer, it
194
+ * could still continue to fill up the whole buffer. Currently, we have to
195
+ * assume worst case expansion and stop the conversion short, even if there
196
+ * is in fact space left in the destination buffer. Secondly, it would be
197
+ * nice to return the number of bytes written to the caller, to avoid a call
198
+ * to strlen().
199
+ */
200
+
201
+
171
202
  /*
172
203
  * Convert string to encoding encoding_name. The source
173
204
  * encoding is the DB encoding.
@@ -305,12 +336,13 @@ pg_unicode_to_server(pg_wchar c, unsigned char *s)
305
336
  c_as_utf8[c_as_utf8_len] = '\0';
306
337
 
307
338
  /* Convert, or throw error if we can't */
308
- FunctionCall5(Utf8ToServerConvProc,
339
+ FunctionCall6(Utf8ToServerConvProc,
309
340
  Int32GetDatum(PG_UTF8),
310
341
  Int32GetDatum(server_encoding),
311
342
  CStringGetDatum(c_as_utf8),
312
343
  CStringGetDatum(s),
313
- Int32GetDatum(c_as_utf8_len));
344
+ Int32GetDatum(c_as_utf8_len),
345
+ BoolGetDatum(false));
314
346
  }
315
347
 
316
348
 
@@ -629,15 +661,29 @@ pg_database_encoding_max_length(void)
629
661
  bool
630
662
  pg_verifymbstr(const char *mbstr, int len, bool noError)
631
663
  {
632
- return
633
- pg_verify_mbstr_len(GetDatabaseEncoding(), mbstr, len, noError) >= 0;
664
+ return pg_verify_mbstr(GetDatabaseEncoding(), mbstr, len, noError);
634
665
  }
635
666
 
636
667
  /*
637
668
  * Verify mbstr to make sure that it is validly encoded in the specified
638
669
  * encoding.
639
670
  */
671
+ bool
672
+ pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError)
673
+ {
674
+ int oklen;
640
675
 
676
+ Assert(PG_VALID_ENCODING(encoding));
677
+
678
+ oklen = pg_wchar_table[encoding].mbverifystr((const unsigned char *) mbstr, len);
679
+ if (oklen != len)
680
+ {
681
+ if (noError)
682
+ return false;
683
+ report_invalid_encoding(encoding, mbstr + oklen, len - oklen);
684
+ }
685
+ return true;
686
+ }
641
687
 
642
688
  /*
643
689
  * Verify mbstr to make sure that it is validly encoded in the specified
@@ -649,68 +695,11 @@ pg_verifymbstr(const char *mbstr, int len, bool noError)
649
695
  * If OK, return length of string in the encoding.
650
696
  * If a problem is found, return -1 when noError is
651
697
  * true; when noError is false, ereport() a descriptive message.
698
+ *
699
+ * Note: We cannot use the faster encoding-specific mbverifystr() function
700
+ * here, because we need to count the number of characters in the string.
652
701
  */
653
- int
654
- pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError)
655
- {
656
- mbverifier mbverify;
657
- int mb_len;
658
-
659
- Assert(PG_VALID_ENCODING(encoding));
660
702
 
661
- /*
662
- * In single-byte encodings, we need only reject nulls (\0).
663
- */
664
- if (pg_encoding_max_length(encoding) <= 1)
665
- {
666
- const char *nullpos = memchr(mbstr, 0, len);
667
-
668
- if (nullpos == NULL)
669
- return len;
670
- if (noError)
671
- return -1;
672
- report_invalid_encoding(encoding, nullpos, 1);
673
- }
674
-
675
- /* fetch function pointer just once */
676
- mbverify = pg_wchar_table[encoding].mbverify;
677
-
678
- mb_len = 0;
679
-
680
- while (len > 0)
681
- {
682
- int l;
683
-
684
- /* fast path for ASCII-subset characters */
685
- if (!IS_HIGHBIT_SET(*mbstr))
686
- {
687
- if (*mbstr != '\0')
688
- {
689
- mb_len++;
690
- mbstr++;
691
- len--;
692
- continue;
693
- }
694
- if (noError)
695
- return -1;
696
- report_invalid_encoding(encoding, mbstr, len);
697
- }
698
-
699
- l = (*mbverify) ((const unsigned char *) mbstr, len);
700
-
701
- if (l < 0)
702
- {
703
- if (noError)
704
- return -1;
705
- report_invalid_encoding(encoding, mbstr, len);
706
- }
707
-
708
- mbstr += l;
709
- len -= l;
710
- mb_len++;
711
- }
712
- return mb_len;
713
- }
714
703
 
715
704
  /*
716
705
  * check_encoding_conversion_args: check arguments of a conversion function
@@ -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,22 +30,33 @@
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"
@@ -75,6 +86,7 @@
75
86
  #include "postmaster/bgworker_internals.h"
76
87
  #include "postmaster/bgwriter.h"
77
88
  #include "postmaster/postmaster.h"
89
+ #include "postmaster/startup.h"
78
90
  #include "postmaster/syslogger.h"
79
91
  #include "postmaster/walwriter.h"
80
92
  #include "replication/logicallauncher.h"
@@ -94,6 +106,7 @@
94
106
  #include "tcop/tcopprot.h"
95
107
  #include "tsearch/ts_cache.h"
96
108
  #include "utils/acl.h"
109
+ #include "utils/backend_status.h"
97
110
  #include "utils/builtins.h"
98
111
  #include "utils/bytea.h"
99
112
  #include "utils/float.h"
@@ -104,9 +117,11 @@
104
117
  #include "utils/plancache.h"
105
118
  #include "utils/portal.h"
106
119
  #include "utils/ps_status.h"
120
+ #include "utils/queryjumble.h"
107
121
  #include "utils/rls.h"
108
122
  #include "utils/snapmgr.h"
109
123
  #include "utils/tzparser.h"
124
+ #include "utils/inval.h"
110
125
  #include "utils/varlena.h"
111
126
  #include "utils/xml.h"
112
127
 
@@ -148,6 +163,8 @@ extern bool optimize_bounded_sort;
148
163
 
149
164
 
150
165
 
166
+
167
+
151
168
  /* global variables for check hook support */
152
169
 
153
170
 
@@ -209,13 +226,16 @@ static bool check_max_wal_senders(int *newval, void **extra, GucSource source);
209
226
  static bool check_autovacuum_work_mem(int *newval, void **extra, GucSource source);
210
227
  static bool check_effective_io_concurrency(int *newval, void **extra, GucSource source);
211
228
  static bool check_maintenance_io_concurrency(int *newval, void **extra, GucSource source);
212
- 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);
213
232
  static bool check_application_name(char **newval, void **extra, GucSource source);
214
233
  static void assign_application_name(const char *newval, void *extra);
215
234
  static bool check_cluster_name(char **newval, void **extra, GucSource source);
216
235
  static const char *show_unix_socket_permissions(void);
217
236
  static const char *show_log_file_mode(void);
218
237
  static const char *show_data_directory_mode(void);
238
+ static const char *show_in_hot_standby(void);
219
239
  static bool check_backtrace_functions(char **newval, void **extra, GucSource source);
220
240
  static void assign_backtrace_functions(const char *newval, void *extra);
221
241
  static bool check_recovery_target_timeline(char **newval, void **extra, GucSource source);
@@ -237,6 +257,11 @@ static bool check_default_with_oids(bool *newval, void **extra, GucSource source
237
257
  static ConfigVariable *ProcessConfigFileInternal(GucContext context,
238
258
  bool applySettings, int elevel);
239
259
 
260
+ /*
261
+ * Track whether there were any deferred checks for custom resource managers
262
+ * specified in wal_consistency_checking.
263
+ */
264
+
240
265
 
241
266
  /*
242
267
  * Options for enum values defined in this module.
@@ -291,6 +316,11 @@ StaticAssertDecl(lengthof(track_function_options) == (TRACK_FUNC_ALL + 2),
291
316
 
292
317
 
293
318
 
319
+ StaticAssertDecl(lengthof(stats_fetch_consistency) == (PGSTAT_FETCH_CONSISTENCY_SNAPSHOT + 2),
320
+ "array length mismatch");
321
+
322
+
323
+
294
324
  StaticAssertDecl(lengthof(xmlbinary_options) == (XMLBINARY_HEX + 2),
295
325
  "array length mismatch");
296
326
 
@@ -305,6 +335,12 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
305
335
  */
306
336
 
307
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
+
308
344
  /*
309
345
  * Although only "on", "off", and "partition" are documented, we
310
346
  * accept all the likely variants of "on" and "off".
@@ -327,11 +363,8 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
327
363
 
328
364
 
329
365
 
330
- /*
331
- * password_encryption used to be a boolean, so accept all the likely
332
- * variants of "on", too. "off" used to store passwords in plaintext,
333
- * but we don't support that anymore.
334
- */
366
+
367
+
335
368
 
336
369
 
337
370
 
@@ -339,6 +372,9 @@ StaticAssertDecl(lengthof(xmloption_options) == (XMLOPTION_CONTENT + 2),
339
372
  StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2),
340
373
  "array length mismatch");
341
374
 
375
+ #ifdef HAVE_SYNCFS
376
+ #endif
377
+
342
378
  #ifndef WIN32
343
379
  #endif
344
380
  #ifndef EXEC_BACKEND
@@ -346,6 +382,14 @@ StaticAssertDecl(lengthof(ssl_protocol_versions_info) == (PG_TLS1_3_VERSION + 2)
346
382
  #ifdef WIN32
347
383
  #endif
348
384
 
385
+ #ifdef USE_LZ4
386
+ #endif
387
+
388
+ #ifdef USE_LZ4
389
+ #endif
390
+ #ifdef USE_ZSTD
391
+ #endif
392
+
349
393
  /*
350
394
  * Options for enum values stored in other modules
351
395
  */
@@ -434,6 +478,7 @@ __thread char *backtrace_symbol_list;
434
478
  */
435
479
 
436
480
 
481
+
437
482
  /*
438
483
  * These variables are all dummies that don't do anything, except in some
439
484
  * cases provide the value for SHOW to display. The real state is elsewhere
@@ -465,6 +510,9 @@ __thread char *backtrace_symbol_list;
465
510
 
466
511
 
467
512
 
513
+
514
+
515
+
468
516
 
469
517
 
470
518
 
@@ -610,6 +658,12 @@ typedef struct
610
658
  #ifdef USE_PREFETCH
611
659
  #else
612
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 */
613
667
 
614
668
 
615
669
 
@@ -661,6 +715,8 @@ typedef struct
661
715
 
662
716
  /* true to enable GUC_REPORT */
663
717
 
718
+ /* true if any GUC_REPORT reports are needed */
719
+
664
720
  /* 1 when in main transaction */
665
721
 
666
722
 
@@ -674,7 +730,8 @@ static void reapply_stacked_values(struct config_generic *variable,
674
730
  struct config_string *pHolder,
675
731
  GucStack *stack,
676
732
  const char *curvalue,
677
- GucContext curscontext, GucSource cursource);
733
+ GucContext curscontext, GucSource cursource,
734
+ Oid cursrole);
678
735
  static void ShowGUCConfigOption(const char *name, DestReceiver *dest);
679
736
  static void ShowAllGUCConfig(DestReceiver *dest);
680
737
  static char *_ShowOption(struct config_generic *record, bool use_units);
@@ -754,15 +811,34 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
754
811
  */
755
812
 
756
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
+
757
823
  /*
758
824
  * Create and add a placeholder variable for a custom variable name.
759
825
  */
760
826
 
761
827
 
762
828
  /*
763
- * Look up option NAME. If it exists, return a pointer to its record,
764
- * else return NULL. If create_placeholders is true, we'll create a
765
- * 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.)
766
842
  */
767
843
 
768
844
 
@@ -778,6 +854,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
778
854
 
779
855
 
780
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
+
781
877
  /*
782
878
  * Initialize GUC options during program startup.
783
879
  *
@@ -786,6 +882,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
786
882
  */
787
883
 
788
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
+
789
893
  /*
790
894
  * Assign any GUC values that can come from the server's environment.
791
895
  *
@@ -863,8 +967,26 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
863
967
  */
864
968
 
865
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
+
866
985
  /*
867
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.
868
990
  */
869
991
 
870
992
 
@@ -981,7 +1103,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
981
1103
 
982
1104
 
983
1105
  /*
984
- * Sets option `name' to given value.
1106
+ * set_config_option: sets option `name' to given value.
985
1107
  *
986
1108
  * The value should be a string, which will be parsed and converted to
987
1109
  * the appropriate data type. The context and source parameters indicate
@@ -1001,6 +1123,10 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1001
1123
  * its standard choice of ereport level. However some callers need to be
1002
1124
  * able to override that choice; they should pass the ereport level to use.
1003
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
+ *
1004
1130
  * Return value:
1005
1131
  * +1: the value is valid and was successfully applied.
1006
1132
  * 0: the name or value is invalid (but see below).
@@ -1015,6 +1141,23 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1015
1141
  *
1016
1142
  * See also SetConfigOption for an external interface.
1017
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
+ */
1018
1161
  #define newval (newval_union.boolval)
1019
1162
  #undef newval
1020
1163
  #define newval (newval_union.intval)
@@ -1169,6 +1312,9 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1169
1312
  */
1170
1313
 
1171
1314
 
1315
+ /*
1316
+ * Functions for extensions to call to define their custom GUC variables.
1317
+ */
1172
1318
 
1173
1319
 
1174
1320
 
@@ -1179,6 +1325,14 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1179
1325
 
1180
1326
 
1181
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
+ */
1182
1336
 
1183
1337
 
1184
1338
 
@@ -1215,6 +1369,13 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1215
1369
  */
1216
1370
 
1217
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
+
1218
1379
  /*
1219
1380
  * Return GUC variable value by variable number; optionally return canonical
1220
1381
  * form of name. Return value is palloc'd.
@@ -1278,6 +1439,7 @@ static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **
1278
1439
  * variable sourceline, integer
1279
1440
  * variable source, integer
1280
1441
  * variable scontext, integer
1442
+ * variable srole, OID
1281
1443
  */
1282
1444
  static void
1283
1445
  write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
@@ -1344,6 +1506,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
1344
1506
  fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
1345
1507
  fwrite(&gconf->source, 1, sizeof(gconf->source), fp);
1346
1508
  fwrite(&gconf->scontext, 1, sizeof(gconf->scontext), fp);
1509
+ fwrite(&gconf->srole, 1, sizeof(gconf->srole), fp);
1347
1510
  }
1348
1511
 
1349
1512
  void
@@ -1439,12 +1602,7 @@ read_nondefault_variables(void)
1439
1602
  int varsourceline;
1440
1603
  GucSource varsource;
1441
1604
  GucContext varscontext;
1442
-
1443
- /*
1444
- * Assert that PGC_BACKEND/PGC_SU_BACKEND case in set_config_option() will
1445
- * do the right thing.
1446
- */
1447
- Assert(IsInitProcessingMode());
1605
+ Oid varsrole;
1448
1606
 
1449
1607
  /*
1450
1608
  * Open file
@@ -1468,7 +1626,7 @@ read_nondefault_variables(void)
1468
1626
  if ((varname = read_string_with_null(fp)) == NULL)
1469
1627
  break;
1470
1628
 
1471
- if ((record = find_option(varname, true, FATAL)) == NULL)
1629
+ if ((record = find_option(varname, true, false, FATAL)) == NULL)
1472
1630
  elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname);
1473
1631
 
1474
1632
  if ((varvalue = read_string_with_null(fp)) == NULL)
@@ -1481,10 +1639,12 @@ read_nondefault_variables(void)
1481
1639
  elog(FATAL, "invalid format of exec config params file");
1482
1640
  if (fread(&varscontext, 1, sizeof(varscontext), fp) != sizeof(varscontext))
1483
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");
1484
1644
 
1485
- (void) set_config_option(varname, varvalue,
1486
- varscontext, varsource,
1487
- 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);
1488
1648
  if (varsourcefile[0])
1489
1649
  set_config_sourcefile(varname, varsourcefile, varsourceline);
1490
1650
 
@@ -1499,26 +1659,13 @@ read_nondefault_variables(void)
1499
1659
 
1500
1660
  /*
1501
1661
  * can_skip_gucvar:
1502
- * When serializing, determine whether to skip this GUC. When restoring, the
1503
- * negation of this test determines whether to restore the compiled-in default
1504
- * value before processing serialized values.
1505
- *
1506
- * A PGC_S_DEFAULT setting on the serialize side will typically match new
1507
- * postmaster children, but that can be false when got_SIGHUP == true and the
1508
- * pending configuration change modifies this setting. Nonetheless, we omit
1509
- * PGC_S_DEFAULT settings from serialization and make up for that by restoring
1510
- * defaults before applying serialized values.
1511
- *
1512
- * PGC_POSTMASTER variables always have the same value in every child of a
1513
- * particular postmaster. Most PGC_INTERNAL variables are compile-time
1514
- * constants; a few, like server_encoding and lc_ctype, are handled specially
1515
- * outside the serialize/restore procedure. Therefore, SerializeGUCState()
1516
- * 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.
1517
1664
  *
1518
- * Role is a special variable in the sense that its current value can be an
1519
- * invalid value and there are multiple ways by which that can happen (like
1520
- * after setting the role, someone drops it). So we handle it outside of
1521
- * 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.
1522
1669
  */
1523
1670
 
1524
1671
 
@@ -1578,8 +1725,14 @@ read_nondefault_variables(void)
1578
1725
 
1579
1726
  /*
1580
1727
  * RestoreGUCState:
1581
- * Reads the GUC state at the specified address and updates the GUCs with the
1582
- * 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.
1583
1736
  */
1584
1737
 
1585
1738
 
@@ -1620,7 +1773,7 @@ read_nondefault_variables(void)
1620
1773
  /*
1621
1774
  * Given a GUC array, delete all settings from it that our permission
1622
1775
  * level allows: if superuser, delete them all; if regular user, only
1623
- * those that are PGC_USERSET
1776
+ * those that are PGC_USERSET or we have permission to set
1624
1777
  */
1625
1778
 
1626
1779
 
@@ -1754,6 +1907,14 @@ read_nondefault_variables(void)
1754
1907
  #ifndef USE_PREFETCH
1755
1908
  #endif /* USE_PREFETCH */
1756
1909
 
1910
+ #if !(defined(MAP_HUGE_MASK) && defined(MAP_HUGE_SHIFT))
1911
+ #endif
1912
+
1913
+
1914
+
1915
+ #ifdef USE_PREFETCH
1916
+ #endif
1917
+
1757
1918
 
1758
1919
 
1759
1920