pg_query 2.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -1,5 +1,6 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
+ * - errstart_cold
3
4
  * - errstart
4
5
  * - PG_exception_stack
5
6
  * - write_stderr
@@ -8,12 +9,16 @@
8
9
  * - error_context_stack
9
10
  * - errordata_stack_depth
10
11
  * - errordata
12
+ * - should_output_to_server
11
13
  * - is_log_level_output
14
+ * - should_output_to_client
12
15
  * - recursion_depth
13
16
  * - errmsg_internal
14
17
  * - errcode
15
18
  * - errmsg
16
19
  * - errdetail
20
+ * - errhidestmt
21
+ * - errhidecontext
17
22
  * - errfinish
18
23
  * - pg_re_throw
19
24
  * - EmitErrorReport
@@ -81,7 +86,7 @@
81
86
  * overflow.)
82
87
  *
83
88
  *
84
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
89
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
85
90
  * Portions Copyright (c) 1994, Regents of the University of California
86
91
  *
87
92
  *
@@ -110,6 +115,7 @@
110
115
  #include "libpq/pqformat.h"
111
116
  #include "mb/pg_wchar.h"
112
117
  #include "miscadmin.h"
118
+ #include "pgstat.h"
113
119
  #include "postmaster/bgworker.h"
114
120
  #include "postmaster/postmaster.h"
115
121
  #include "postmaster/syslogger.h"
@@ -218,17 +224,93 @@ static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
218
224
  static pg_noinline void set_backtrace(ErrorData *edata, int num_skip);
219
225
  static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
220
226
  static void write_console(const char *line, int len);
221
- static void setup_formatted_log_time(void);
222
- static void setup_formatted_start_time(void);
223
227
  static const char *process_log_prefix_padding(const char *p, int *padding);
224
228
  static void log_line_prefix(StringInfo buf, ErrorData *edata);
225
- static void write_csvlog(ErrorData *edata);
226
229
  static void send_message_to_server_log(ErrorData *edata);
227
- static void write_pipe_chunks(char *data, int len, int dest);
228
230
  static void send_message_to_frontend(ErrorData *edata);
229
- static const char *error_severity(int elevel);
230
231
  static void append_with_tabs(StringInfo buf, const char *str);
231
- static bool is_log_level_output(int elevel, int log_min_level);
232
+
233
+
234
+ /*
235
+ * is_log_level_output -- is elevel logically >= log_min_level?
236
+ *
237
+ * We use this for tests that should consider LOG to sort out-of-order,
238
+ * between ERROR and FATAL. Generally this is the right thing for testing
239
+ * whether a message should go to the postmaster log, whereas a simple >=
240
+ * test is correct for testing whether the message should go to the client.
241
+ */
242
+ static inline bool
243
+ is_log_level_output(int elevel, int log_min_level)
244
+ {
245
+ if (elevel == LOG || elevel == LOG_SERVER_ONLY)
246
+ {
247
+ if (log_min_level == LOG || log_min_level <= ERROR)
248
+ return true;
249
+ }
250
+ else if (elevel == WARNING_CLIENT_ONLY)
251
+ {
252
+ /* never sent to log, regardless of log_min_level */
253
+ return false;
254
+ }
255
+ else if (log_min_level == LOG)
256
+ {
257
+ /* elevel != LOG */
258
+ if (elevel >= FATAL)
259
+ return true;
260
+ }
261
+ /* Neither is LOG */
262
+ else if (elevel >= log_min_level)
263
+ return true;
264
+
265
+ return false;
266
+ }
267
+
268
+ /*
269
+ * Policy-setting subroutines. These are fairly simple, but it seems wise
270
+ * to have the code in just one place.
271
+ */
272
+
273
+ /*
274
+ * should_output_to_server --- should message of given elevel go to the log?
275
+ */
276
+ static inline bool
277
+ should_output_to_server(int elevel)
278
+ {
279
+ return is_log_level_output(elevel, log_min_messages);
280
+ }
281
+
282
+ /*
283
+ * should_output_to_client --- should message of given elevel go to the client?
284
+ */
285
+ static inline bool
286
+ should_output_to_client(int elevel)
287
+ {
288
+ if (whereToSendOutput == DestRemote && elevel != LOG_SERVER_ONLY)
289
+ {
290
+ /*
291
+ * client_min_messages is honored only after we complete the
292
+ * authentication handshake. This is required both for security
293
+ * reasons and because many clients can't handle NOTICE messages
294
+ * during authentication.
295
+ */
296
+ if (ClientAuthInProgress)
297
+ return (elevel >= ERROR);
298
+ else
299
+ return (elevel >= client_min_messages || elevel == INFO);
300
+ }
301
+ return false;
302
+ }
303
+
304
+
305
+ /*
306
+ * message_level_is_interesting --- would ereport/elog do anything?
307
+ *
308
+ * Returns true if ereport/elog with this elevel will not be a no-op.
309
+ * This is useful to short-circuit any expensive preparatory work that
310
+ * might be needed for a logging message. There is no point in
311
+ * prepending this to a bare ereport/elog call, however.
312
+ */
313
+
232
314
 
233
315
 
234
316
  /*
@@ -263,6 +345,19 @@ err_gettext(const char *str)
263
345
  #endif
264
346
  }
265
347
 
348
+ /*
349
+ * errstart_cold
350
+ * A simple wrapper around errstart, but hinted to be "cold". Supporting
351
+ * compilers are more likely to move code for branches containing this
352
+ * function into an area away from the calling function's code. This can
353
+ * result in more commonly executed code being more compact and fitting
354
+ * on fewer cache lines.
355
+ */
356
+ pg_attribute_cold bool
357
+ errstart_cold(int elevel, const char *domain)
358
+ {
359
+ return errstart(elevel, domain);
360
+ }
266
361
 
267
362
  /*
268
363
  * errstart --- begin an error-reporting cycle
@@ -332,27 +427,8 @@ errstart(int elevel, const char *domain)
332
427
  * warning or less and not enabled for logging, just return false without
333
428
  * starting up any error logging machinery.
334
429
  */
335
-
336
- /* Determine whether message is enabled for server log output */
337
- output_to_server = is_log_level_output(elevel, log_min_messages);
338
-
339
- /* Determine whether message is enabled for client output */
340
- if (whereToSendOutput == DestRemote && elevel != LOG_SERVER_ONLY)
341
- {
342
- /*
343
- * client_min_messages is honored only after we complete the
344
- * authentication handshake. This is required both for security
345
- * reasons and because many clients can't handle NOTICE messages
346
- * during authentication.
347
- */
348
- if (ClientAuthInProgress)
349
- output_to_client = (elevel >= ERROR);
350
- else
351
- output_to_client = (elevel >= client_min_messages ||
352
- elevel == INFO);
353
- }
354
-
355
- /* Skip processing effort if non-error message will not be output */
430
+ output_to_server = should_output_to_server(elevel);
431
+ output_to_client = should_output_to_client(elevel);
356
432
  if (elevel < ERROR && !output_to_server && !output_to_client)
357
433
  return false;
358
434
 
@@ -416,7 +492,7 @@ errstart(int elevel, const char *domain)
416
492
  /* Select default errcode based on elevel */
417
493
  if (elevel >= ERROR)
418
494
  edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
419
- else if (elevel == WARNING)
495
+ else if (elevel >= WARNING)
420
496
  edata->sqlerrcode = ERRCODE_WARNING;
421
497
  else
422
498
  edata->sqlerrcode = ERRCODE_SUCCESSFUL_COMPLETION;
@@ -486,6 +562,10 @@ errfinish(const char *filename, int lineno, const char *funcname)
486
562
  slash = strrchr(filename, '/');
487
563
  if (slash)
488
564
  filename = slash + 1;
565
+ /* Some Windows compilers use backslashes in __FILE__ strings */
566
+ slash = strrchr(filename, '\\');
567
+ if (slash)
568
+ filename = slash + 1;
489
569
  }
490
570
 
491
571
  edata->filename = filename;
@@ -546,16 +626,6 @@ errfinish(const char *filename, int lineno, const char *funcname)
546
626
  PG_RE_THROW();
547
627
  }
548
628
 
549
- /*
550
- * If we are doing FATAL or PANIC, abort any old-style COPY OUT in
551
- * progress, so that we can report the message before dying. (Without
552
- * this, pq_putmessage will refuse to send the message at all, which is
553
- * what we want for NOTICE messages, but not for fatal exits.) This hack
554
- * is necessary because of poor design of old-style copy protocol.
555
- */
556
- if (elevel >= FATAL && whereToSendOutput == DestRemote)
557
- pq_endcopyout(true);
558
-
559
629
  /* Emit the message to the right places */
560
630
  EmitErrorReport();
561
631
 
@@ -614,6 +684,13 @@ errfinish(const char *filename, int lineno, const char *funcname)
614
684
  fflush(stdout);
615
685
  fflush(stderr);
616
686
 
687
+ /*
688
+ * Let the cumulative stats system know. Only mark the session as
689
+ * terminated by fatal error if there is no other known cause.
690
+ */
691
+ if (pgStatSessionEndCause == DISCONNECT_NORMAL)
692
+ pgStatSessionEndCause = DISCONNECT_FATAL;
693
+
617
694
  /*
618
695
  * Do normal process-exit cleanup, then return exit code 1 to indicate
619
696
  * FATAL termination. The postmaster may or may not consider this
@@ -687,8 +764,7 @@ errcode(int sqlerrcode)
687
764
  * NOTE: the primary error message string should generally include %m
688
765
  * when this is used.
689
766
  */
690
- #ifdef ECONNRESET
691
- #endif
767
+
692
768
 
693
769
 
694
770
  /*
@@ -953,6 +1029,13 @@ errhint(const char *fmt,...)
953
1029
  }
954
1030
 
955
1031
 
1032
+ /*
1033
+ * errhint_plural --- add a hint error message text to the current error,
1034
+ * with support for pluralization of the message text
1035
+ */
1036
+
1037
+
1038
+
956
1039
  /*
957
1040
  * errcontext_msg --- add a context error message text to the current error
958
1041
  *
@@ -1006,7 +1089,18 @@ set_errcontext_domain(const char *domain)
1006
1089
  *
1007
1090
  * This should be called if the message text already includes the statement.
1008
1091
  */
1092
+ int
1093
+ errhidestmt(bool hide_stmt)
1094
+ {
1095
+ ErrorData *edata = &errordata[errordata_stack_depth];
1096
+
1097
+ /* we don't bother incrementing recursion_depth */
1098
+ CHECK_STACK_DEPTH();
1009
1099
 
1100
+ edata->hide_stmt = hide_stmt;
1101
+
1102
+ return 0; /* return value does not matter */
1103
+ }
1010
1104
 
1011
1105
  /*
1012
1106
  * errhidecontext --- optionally suppress CONTEXT: field of log entry
@@ -1014,17 +1108,18 @@ set_errcontext_domain(const char *domain)
1014
1108
  * This should only be used for verbose debugging messages where the repeated
1015
1109
  * inclusion of context would bloat the log volume too much.
1016
1110
  */
1111
+ int
1112
+ errhidecontext(bool hide_ctx)
1113
+ {
1114
+ ErrorData *edata = &errordata[errordata_stack_depth];
1017
1115
 
1116
+ /* we don't bother incrementing recursion_depth */
1117
+ CHECK_STACK_DEPTH();
1018
1118
 
1119
+ edata->hide_ctx = hide_ctx;
1019
1120
 
1020
- /*
1021
- * errfunction --- add reporting function name to the current error
1022
- *
1023
- * This is used when backwards compatibility demands that the function
1024
- * name appear in messages sent to old-protocol clients. Note that the
1025
- * passed string is expected to be a non-freeable constant string.
1026
- */
1027
-
1121
+ return 0; /* return value does not matter */
1122
+ }
1028
1123
 
1029
1124
  /*
1030
1125
  * errposition --- add cursor position to the current error
@@ -1368,16 +1463,10 @@ pg_re_throw(void)
1368
1463
 
1369
1464
  /*
1370
1465
  * At least in principle, the increase in severity could have changed
1371
- * where-to-output decisions, so recalculate. This should stay in
1372
- * sync with errstart(), which see for comments.
1466
+ * where-to-output decisions, so recalculate.
1373
1467
  */
1374
- if (IsPostmasterEnvironment)
1375
- edata->output_to_server = is_log_level_output(FATAL,
1376
- log_min_messages);
1377
- else
1378
- edata->output_to_server = (FATAL >= log_min_messages);
1379
- if (whereToSendOutput == DestRemote)
1380
- edata->output_to_client = true;
1468
+ edata->output_to_server = should_output_to_server(FATAL);
1469
+ edata->output_to_client = should_output_to_client(FATAL);
1381
1470
 
1382
1471
  /*
1383
1472
  * We can use errfinish() for the rest, but we don't want it to call
@@ -1481,6 +1570,7 @@ write_eventlog(int level, const char *line, int len)
1481
1570
  eventlevel = EVENTLOG_INFORMATION_TYPE;
1482
1571
  break;
1483
1572
  case WARNING:
1573
+ case WARNING_CLIENT_ONLY:
1484
1574
  eventlevel = EVENTLOG_WARNING_TYPE;
1485
1575
  break;
1486
1576
  case ERROR:
@@ -1543,39 +1633,51 @@ write_eventlog(int level, const char *line, int len)
1543
1633
  #endif
1544
1634
 
1545
1635
  /*
1546
- * setup formatted_log_time, for consistent times between CSV and regular logs
1636
+ * get_formatted_log_time -- compute and get the log timestamp.
1637
+ *
1638
+ * The timestamp is computed if not set yet, so as it is kept consistent
1639
+ * among all the log destinations that require it to be consistent. Note
1640
+ * that the computed timestamp is returned in a static buffer, not
1641
+ * palloc()'d.
1547
1642
  */
1548
1643
 
1549
1644
 
1550
1645
  /*
1551
- * setup formatted_start_time
1646
+ * reset_formatted_start_time -- reset the start timestamp
1552
1647
  */
1553
1648
 
1554
1649
 
1555
1650
  /*
1556
- * process_log_prefix_padding --- helper function for processing the format
1557
- * string in log_line_prefix
1651
+ * get_formatted_start_time -- compute and get the start timestamp.
1558
1652
  *
1559
- * Note: This function returns NULL if it finds something which
1560
- * it deems invalid in the format string.
1653
+ * The timestamp is computed if not set yet. Note that the computed
1654
+ * timestamp is returned in a static buffer, not palloc()'d.
1561
1655
  */
1562
1656
 
1563
1657
 
1564
1658
  /*
1565
- * Format tag info for log lines; append to the provided buffer.
1659
+ * check_log_of_query -- check if a query can be logged
1566
1660
  */
1567
1661
 
1568
1662
 
1569
1663
  /*
1570
- * append a CSV'd version of a string to a StringInfo
1571
- * We use the PostgreSQL defaults for CSV, i.e. quote = escape = '"'
1572
- * If it's NULL, append nothing.
1664
+ * get_backend_type_for_log -- backend type for log entries
1665
+ *
1666
+ * Returns a pointer to a static buffer, not palloc()'d.
1573
1667
  */
1574
1668
 
1575
1669
 
1576
1670
  /*
1577
- * Constructs the error message, depending on the Errordata it gets, in a CSV
1578
- * format which is described in doc/src/sgml/config.sgml.
1671
+ * process_log_prefix_padding --- helper function for processing the format
1672
+ * string in log_line_prefix
1673
+ *
1674
+ * Note: This function returns NULL if it finds something which
1675
+ * it deems invalid in the format string.
1676
+ */
1677
+
1678
+
1679
+ /*
1680
+ * Format tag info for log lines; append to the provided buffer.
1579
1681
  */
1580
1682
 
1581
1683
 
@@ -1701,35 +1803,6 @@ write_stderr(const char *fmt,...)
1701
1803
  }
1702
1804
 
1703
1805
 
1704
- /*
1705
- * is_log_level_output -- is elevel logically >= log_min_level?
1706
- *
1707
- * We use this for tests that should consider LOG to sort out-of-order,
1708
- * between ERROR and FATAL. Generally this is the right thing for testing
1709
- * whether a message should go to the postmaster log, whereas a simple >=
1710
- * test is correct for testing whether the message should go to the client.
1711
- */
1712
- static bool
1713
- is_log_level_output(int elevel, int log_min_level)
1714
- {
1715
- if (elevel == LOG || elevel == LOG_SERVER_ONLY)
1716
- {
1717
- if (log_min_level == LOG || log_min_level <= ERROR)
1718
- return true;
1719
- }
1720
- else if (log_min_level == LOG)
1721
- {
1722
- /* elevel != LOG */
1723
- if (elevel >= FATAL)
1724
- return true;
1725
- }
1726
- /* Neither is LOG */
1727
- else if (elevel >= log_min_level)
1728
- return true;
1729
-
1730
- return false;
1731
- }
1732
-
1733
1806
  /*
1734
1807
  * Adjust the level of a recovery-related message per trace_recovery_messages.
1735
1808
  *
@@ -1,6 +1,6 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
- * - FunctionCall5Coll
3
+ * - FunctionCall6Coll
4
4
  *--------------------------------------------------------------------
5
5
  */
6
6
 
@@ -9,7 +9,7 @@
9
9
  * fmgr.c
10
10
  * The Postgres function manager.
11
11
  *
12
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  *
@@ -124,7 +124,7 @@ extern Datum fmgr_security_definer(PG_FUNCTION_ARGS);
124
124
  * If *mod == NULL and *fn != NULL, the function is implemented by a symbol in
125
125
  * the main binary.
126
126
  *
127
- * If *mod != NULL and *fn !=NULL the function is implemented in an extension
127
+ * If *mod != NULL and *fn != NULL the function is implemented in an extension
128
128
  * shared object.
129
129
  *
130
130
  * The returned module and function names are pstrdup'ed into the current
@@ -180,14 +180,6 @@ extern Datum fmgr_security_definer(PG_FUNCTION_ARGS);
180
180
  */
181
181
 
182
182
 
183
- /*
184
- * clear_external_function_hash: remove entries for a library being closed
185
- *
186
- * Presently we just zap the entire hash table, but later it might be worth
187
- * the effort to remove only the entries associated with the given handle.
188
- */
189
-
190
-
191
183
 
192
184
  /*
193
185
  * Copy an FmgrInfo struct
@@ -291,14 +283,17 @@ struct fmgr_security_definer_cache
291
283
 
292
284
 
293
285
 
286
+
287
+
294
288
  Datum
295
- FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
296
- Datum arg3, Datum arg4, Datum arg5)
289
+ FunctionCall6Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
290
+ Datum arg3, Datum arg4, Datum arg5,
291
+ Datum arg6)
297
292
  {
298
- LOCAL_FCINFO(fcinfo, 5);
293
+ LOCAL_FCINFO(fcinfo, 6);
299
294
  Datum result;
300
295
 
301
- InitFunctionCallInfoData(*fcinfo, flinfo, 5, collation, NULL, NULL);
296
+ InitFunctionCallInfoData(*fcinfo, flinfo, 6, collation, NULL, NULL);
302
297
 
303
298
  fcinfo->args[0].value = arg1;
304
299
  fcinfo->args[0].isnull = false;
@@ -310,6 +305,8 @@ FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
310
305
  fcinfo->args[3].isnull = false;
311
306
  fcinfo->args[4].value = arg5;
312
307
  fcinfo->args[4].isnull = false;
308
+ fcinfo->args[5].value = arg6;
309
+ fcinfo->args[5].isnull = false;
313
310
 
314
311
  result = FunctionCallInvoke(fcinfo);
315
312
 
@@ -327,8 +324,6 @@ FunctionCall5Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2,
327
324
 
328
325
 
329
326
 
330
-
331
-
332
327
  /*
333
328
  * These are for invocation of a function identified by OID with a
334
329
  * directly-computed parameter list. Note that neither arguments nor result
@@ -20,7 +20,7 @@
20
20
  /*-------------------------------------------------------------------------
21
21
  *
22
22
  * dynahash.c
23
- * dynamic hash tables
23
+ * dynamic chained hash tables
24
24
  *
25
25
  * dynahash.c supports both local-to-a-backend hash tables and hash tables in
26
26
  * shared memory. For shared hash tables, it is the caller's responsibility
@@ -49,18 +49,29 @@
49
49
  * dynahash.c provides support for these types of lookup keys:
50
50
  *
51
51
  * 1. Null-terminated C strings (truncated if necessary to fit in keysize),
52
- * compared as though by strcmp(). This is the default behavior.
52
+ * compared as though by strcmp(). This is selected by specifying the
53
+ * HASH_STRINGS flag to hash_create.
53
54
  *
54
55
  * 2. Arbitrary binary data of size keysize, compared as though by memcmp().
55
56
  * (Caller must ensure there are no undefined padding bits in the keys!)
56
- * This is selected by specifying HASH_BLOBS flag to hash_create.
57
+ * This is selected by specifying the HASH_BLOBS flag to hash_create.
57
58
  *
58
59
  * 3. More complex key behavior can be selected by specifying user-supplied
59
60
  * hashing, comparison, and/or key-copying functions. At least a hashing
60
61
  * function must be supplied; comparison defaults to memcmp() and key copying
61
62
  * to memcpy() when a user-defined hashing function is selected.
62
63
  *
63
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
64
+ * Compared to simplehash, dynahash has the following benefits:
65
+ *
66
+ * - It supports partitioning, which is useful for shared memory access using
67
+ * locks.
68
+ * - Shared memory hashes are allocated in a fixed size area at startup and
69
+ * are discoverable by name from other processes.
70
+ * - Because entries don't need to be moved in the case of hash conflicts,
71
+ * dynahash has better performance for large entries.
72
+ * - Guarantees stable pointers to entries.
73
+ *
74
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
64
75
  * Portions Copyright (c) 1994, Regents of the University of California
65
76
  *
66
77
  *
@@ -131,7 +142,6 @@
131
142
  #define DEF_SEGSIZE 256
132
143
  #define DEF_SEGSIZE_SHIFT 8 /* must be log2(DEF_SEGSIZE) */
133
144
  #define DEF_DIRSIZE 256
134
- #define DEF_FFACTOR 1 /* default fill factor */
135
145
 
136
146
  /* Number of freelists to be used for a partitioned hash table. */
137
147
  #define NUM_FREELISTS 32
@@ -200,7 +210,6 @@ struct HASHHDR
200
210
  Size keysize; /* hash key length in bytes */
201
211
  Size entrysize; /* total user element size in bytes */
202
212
  long num_partitions; /* # partitions (must be power of 2), or 0 */
203
- long ffactor; /* target fill factor */
204
213
  long max_dsize; /* 'dsize' limit if directory is fixed size */
205
214
  long ssize; /* segment size --- must be power of 2 */
206
215
  int sshift; /* segment shift = log2(ssize) */
@@ -324,6 +333,28 @@ DynaHashAlloc(Size size)
324
333
  * *info: additional table parameters, as indicated by flags
325
334
  * flags: bitmask indicating which parameters to take from *info
326
335
  *
336
+ * The flags value *must* include HASH_ELEM. (Formerly, this was nominally
337
+ * optional, but the default keysize and entrysize values were useless.)
338
+ * The flags value must also include exactly one of HASH_STRINGS, HASH_BLOBS,
339
+ * or HASH_FUNCTION, to define the key hashing semantics (C strings,
340
+ * binary blobs, or custom, respectively). Callers specifying a custom
341
+ * hash function will likely also want to use HASH_COMPARE, and perhaps
342
+ * also HASH_KEYCOPY, to control key comparison and copying.
343
+ * Another often-used flag is HASH_CONTEXT, to allocate the hash table
344
+ * under info->hcxt rather than under TopMemoryContext; the default
345
+ * behavior is only suitable for session-lifespan hash tables.
346
+ * Other flags bits are special-purpose and seldom used, except for those
347
+ * associated with shared-memory hash tables, for which see ShmemInitHash().
348
+ *
349
+ * Fields in *info are read only when the associated flags bit is set.
350
+ * It is not necessary to initialize other fields of *info.
351
+ * Neither tabname nor *info need persist after the hash_create() call.
352
+ *
353
+ * Note: It is deprecated for callers of hash_create() to explicitly specify
354
+ * string_hash, tag_hash, uint32_hash, or oid_hash. Just set HASH_STRINGS or
355
+ * HASH_BLOBS. Use HASH_FUNCTION only when you want something other than
356
+ * one of these.
357
+ *
327
358
  * Note: for a shared-memory hashtable, nelem needs to be a pretty good
328
359
  * estimate, since we can't expand the table on the fly. But an unshared
329
360
  * hashtable can be expanded on-the-fly, so it's better for nelem to be
@@ -486,11 +517,10 @@ hash_search_with_hash_value(HTAB *hashp,
486
517
  {
487
518
  /*
488
519
  * Can't split if running in partitioned mode, nor if frozen, nor if
489
- * table is the subject of any active hash_seq_search scans. Strange
490
- * order of these tests is to try to check cheaper conditions first.
520
+ * table is the subject of any active hash_seq_search scans.
491
521
  */
492
- if (!IS_PARTITIONED(hctl) && !hashp->frozen &&
493
- hctl->freeList[0].nentries / (long) (hctl->max_bucket + 1) >= hctl->ffactor &&
522
+ if (hctl->freeList[0].nentries > (long) hctl->max_bucket &&
523
+ !IS_PARTITIONED(hctl) && !hashp->frozen &&
494
524
  !has_seq_scans(hashp))
495
525
  (void) expand_table(hashp);
496
526
  }
@@ -4,7 +4,6 @@
4
4
  * - ExitOnAnyError
5
5
  * - InterruptHoldoffCount
6
6
  * - QueryCancelHoldoffCount
7
- * - IsPostmasterEnvironment
8
7
  * - InterruptPending
9
8
  *--------------------------------------------------------------------
10
9
  */
@@ -14,7 +13,7 @@
14
13
  * globals.c
15
14
  * global variable declarations
16
15
  *
17
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
16
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
18
17
  * Portions Copyright (c) 1994, Regents of the University of California
19
18
  *
20
19
  *
@@ -45,6 +44,10 @@ __thread volatile sig_atomic_t InterruptPending = false;
45
44
 
46
45
 
47
46
 
47
+
48
+
49
+
50
+
48
51
  __thread volatile uint32 InterruptHoldoffCount = 0;
49
52
 
50
53
  __thread volatile uint32 QueryCancelHoldoffCount = 0;
@@ -120,7 +123,6 @@ char postgres_exec_path[MAXPGPATH]; /* full path to backend */
120
123
  *
121
124
  * These are initialized for the bootstrap/standalone case.
122
125
  */
123
- __thread bool IsPostmasterEnvironment = false;
124
126
 
125
127
 
126
128
 
@@ -164,5 +166,3 @@ __thread bool ExitOnAnyError = false;
164
166
 
165
167
  /* working state for vacuum */
166
168
 
167
-
168
-