pg_query 2.2.1 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (466) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/README.md +29 -33
  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 +18 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/truncate.rb +1 -1
  455. data/lib/pg_query/version.rb +1 -1
  456. metadata +28 -18
  457. data/ext/pg_query/include/access/xloginsert.h +0 -64
  458. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  459. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  460. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  461. data/ext/pg_query/include/parser/parse_target.h +0 -46
  462. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  463. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  464. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  465. data/ext/pg_query/src_port_erand48.c +0 -127
  466. 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