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
@@ -0,0 +1,321 @@
1
+ /* ----------
2
+ * backend_status.h
3
+ * Definitions related to backend status reporting
4
+ *
5
+ * Copyright (c) 2001-2022, PostgreSQL Global Development Group
6
+ *
7
+ * src/include/utils/backend_status.h
8
+ * ----------
9
+ */
10
+ #ifndef BACKEND_STATUS_H
11
+ #define BACKEND_STATUS_H
12
+
13
+ #include "datatype/timestamp.h"
14
+ #include "libpq/pqcomm.h"
15
+ #include "miscadmin.h" /* for BackendType */
16
+ #include "utils/backend_progress.h"
17
+
18
+
19
+ /* ----------
20
+ * Backend states
21
+ * ----------
22
+ */
23
+ typedef enum BackendState
24
+ {
25
+ STATE_UNDEFINED,
26
+ STATE_IDLE,
27
+ STATE_RUNNING,
28
+ STATE_IDLEINTRANSACTION,
29
+ STATE_FASTPATH,
30
+ STATE_IDLEINTRANSACTION_ABORTED,
31
+ STATE_DISABLED
32
+ } BackendState;
33
+
34
+
35
+ /* ----------
36
+ * Shared-memory data structures
37
+ * ----------
38
+ */
39
+
40
+ /*
41
+ * PgBackendSSLStatus
42
+ *
43
+ * For each backend, we keep the SSL status in a separate struct, that
44
+ * is only filled in if SSL is enabled.
45
+ *
46
+ * All char arrays must be null-terminated.
47
+ */
48
+ typedef struct PgBackendSSLStatus
49
+ {
50
+ /* Information about SSL connection */
51
+ int ssl_bits;
52
+ char ssl_version[NAMEDATALEN];
53
+ char ssl_cipher[NAMEDATALEN];
54
+ char ssl_client_dn[NAMEDATALEN];
55
+
56
+ /*
57
+ * serial number is max "20 octets" per RFC 5280, so this size should be
58
+ * fine
59
+ */
60
+ char ssl_client_serial[NAMEDATALEN];
61
+
62
+ char ssl_issuer_dn[NAMEDATALEN];
63
+ } PgBackendSSLStatus;
64
+
65
+ /*
66
+ * PgBackendGSSStatus
67
+ *
68
+ * For each backend, we keep the GSS status in a separate struct, that
69
+ * is only filled in if GSS is enabled.
70
+ *
71
+ * All char arrays must be null-terminated.
72
+ */
73
+ typedef struct PgBackendGSSStatus
74
+ {
75
+ /* Information about GSSAPI connection */
76
+ char gss_princ[NAMEDATALEN]; /* GSSAPI Principal used to auth */
77
+ bool gss_auth; /* If GSSAPI authentication was used */
78
+ bool gss_enc; /* If encryption is being used */
79
+
80
+ } PgBackendGSSStatus;
81
+
82
+
83
+ /* ----------
84
+ * PgBackendStatus
85
+ *
86
+ * Each live backend maintains a PgBackendStatus struct in shared memory
87
+ * showing its current activity. (The structs are allocated according to
88
+ * BackendId, but that is not critical.) Note that this is unrelated to the
89
+ * cumulative stats system (i.e. pgstat.c et al).
90
+ *
91
+ * Each auxiliary process also maintains a PgBackendStatus struct in shared
92
+ * memory.
93
+ * ----------
94
+ */
95
+ typedef struct PgBackendStatus
96
+ {
97
+ /*
98
+ * To avoid locking overhead, we use the following protocol: a backend
99
+ * increments st_changecount before modifying its entry, and again after
100
+ * finishing a modification. A would-be reader should note the value of
101
+ * st_changecount, copy the entry into private memory, then check
102
+ * st_changecount again. If the value hasn't changed, and if it's even,
103
+ * the copy is valid; otherwise start over. This makes updates cheap
104
+ * while reads are potentially expensive, but that's the tradeoff we want.
105
+ *
106
+ * The above protocol needs memory barriers to ensure that the apparent
107
+ * order of execution is as it desires. Otherwise, for example, the CPU
108
+ * might rearrange the code so that st_changecount is incremented twice
109
+ * before the modification on a machine with weak memory ordering. Hence,
110
+ * use the macros defined below for manipulating st_changecount, rather
111
+ * than touching it directly.
112
+ */
113
+ int st_changecount;
114
+
115
+ /* The entry is valid iff st_procpid > 0, unused if st_procpid == 0 */
116
+ int st_procpid;
117
+
118
+ /* Type of backends */
119
+ BackendType st_backendType;
120
+
121
+ /* Times when current backend, transaction, and activity started */
122
+ TimestampTz st_proc_start_timestamp;
123
+ TimestampTz st_xact_start_timestamp;
124
+ TimestampTz st_activity_start_timestamp;
125
+ TimestampTz st_state_start_timestamp;
126
+
127
+ /* Database OID, owning user's OID, connection client address */
128
+ Oid st_databaseid;
129
+ Oid st_userid;
130
+ SockAddr st_clientaddr;
131
+ char *st_clienthostname; /* MUST be null-terminated */
132
+
133
+ /* Information about SSL connection */
134
+ bool st_ssl;
135
+ PgBackendSSLStatus *st_sslstatus;
136
+
137
+ /* Information about GSSAPI connection */
138
+ bool st_gss;
139
+ PgBackendGSSStatus *st_gssstatus;
140
+
141
+ /* current state */
142
+ BackendState st_state;
143
+
144
+ /* application name; MUST be null-terminated */
145
+ char *st_appname;
146
+
147
+ /*
148
+ * Current command string; MUST be null-terminated. Note that this string
149
+ * possibly is truncated in the middle of a multi-byte character. As
150
+ * activity strings are stored more frequently than read, that allows to
151
+ * move the cost of correct truncation to the display side. Use
152
+ * pgstat_clip_activity() to truncate correctly.
153
+ */
154
+ char *st_activity_raw;
155
+
156
+ /*
157
+ * Command progress reporting. Any command which wishes can advertise
158
+ * that it is running by setting st_progress_command,
159
+ * st_progress_command_target, and st_progress_param[].
160
+ * st_progress_command_target should be the OID of the relation which the
161
+ * command targets (we assume there's just one, as this is meant for
162
+ * utility commands), but the meaning of each element in the
163
+ * st_progress_param array is command-specific.
164
+ */
165
+ ProgressCommandType st_progress_command;
166
+ Oid st_progress_command_target;
167
+ int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];
168
+
169
+ /* query identifier, optionally computed using post_parse_analyze_hook */
170
+ uint64 st_query_id;
171
+ } PgBackendStatus;
172
+
173
+
174
+ /*
175
+ * Macros to load and store st_changecount with appropriate memory barriers.
176
+ *
177
+ * Use PGSTAT_BEGIN_WRITE_ACTIVITY() before, and PGSTAT_END_WRITE_ACTIVITY()
178
+ * after, modifying the current process's PgBackendStatus data. Note that,
179
+ * since there is no mechanism for cleaning up st_changecount after an error,
180
+ * THESE MACROS FORM A CRITICAL SECTION. Any error between them will be
181
+ * promoted to PANIC, causing a database restart to clean up shared memory!
182
+ * Hence, keep the critical section as short and straight-line as possible.
183
+ * Aside from being safer, that minimizes the window in which readers will
184
+ * have to loop.
185
+ *
186
+ * Reader logic should follow this sketch:
187
+ *
188
+ * for (;;)
189
+ * {
190
+ * int before_ct, after_ct;
191
+ *
192
+ * pgstat_begin_read_activity(beentry, before_ct);
193
+ * ... copy beentry data to local memory ...
194
+ * pgstat_end_read_activity(beentry, after_ct);
195
+ * if (pgstat_read_activity_complete(before_ct, after_ct))
196
+ * break;
197
+ * CHECK_FOR_INTERRUPTS();
198
+ * }
199
+ *
200
+ * For extra safety, we generally use volatile beentry pointers, although
201
+ * the memory barriers should theoretically be sufficient.
202
+ */
203
+ #define PGSTAT_BEGIN_WRITE_ACTIVITY(beentry) \
204
+ do { \
205
+ START_CRIT_SECTION(); \
206
+ (beentry)->st_changecount++; \
207
+ pg_write_barrier(); \
208
+ } while (0)
209
+
210
+ #define PGSTAT_END_WRITE_ACTIVITY(beentry) \
211
+ do { \
212
+ pg_write_barrier(); \
213
+ (beentry)->st_changecount++; \
214
+ Assert(((beentry)->st_changecount & 1) == 0); \
215
+ END_CRIT_SECTION(); \
216
+ } while (0)
217
+
218
+ #define pgstat_begin_read_activity(beentry, before_changecount) \
219
+ do { \
220
+ (before_changecount) = (beentry)->st_changecount; \
221
+ pg_read_barrier(); \
222
+ } while (0)
223
+
224
+ #define pgstat_end_read_activity(beentry, after_changecount) \
225
+ do { \
226
+ pg_read_barrier(); \
227
+ (after_changecount) = (beentry)->st_changecount; \
228
+ } while (0)
229
+
230
+ #define pgstat_read_activity_complete(before_changecount, after_changecount) \
231
+ ((before_changecount) == (after_changecount) && \
232
+ ((before_changecount) & 1) == 0)
233
+
234
+
235
+ /* ----------
236
+ * LocalPgBackendStatus
237
+ *
238
+ * When we build the backend status array, we use LocalPgBackendStatus to be
239
+ * able to add new values to the struct when needed without adding new fields
240
+ * to the shared memory. It contains the backend status as a first member.
241
+ * ----------
242
+ */
243
+ typedef struct LocalPgBackendStatus
244
+ {
245
+ /*
246
+ * Local version of the backend status entry.
247
+ */
248
+ PgBackendStatus backendStatus;
249
+
250
+ /*
251
+ * The xid of the current transaction if available, InvalidTransactionId
252
+ * if not.
253
+ */
254
+ TransactionId backend_xid;
255
+
256
+ /*
257
+ * The xmin of the current session if available, InvalidTransactionId if
258
+ * not.
259
+ */
260
+ TransactionId backend_xmin;
261
+ } LocalPgBackendStatus;
262
+
263
+
264
+ /* ----------
265
+ * GUC parameters
266
+ * ----------
267
+ */
268
+ extern PGDLLIMPORT bool pgstat_track_activities;
269
+ extern PGDLLIMPORT int pgstat_track_activity_query_size;
270
+
271
+
272
+ /* ----------
273
+ * Other global variables
274
+ * ----------
275
+ */
276
+ extern PGDLLIMPORT PgBackendStatus *MyBEEntry;
277
+
278
+
279
+ /* ----------
280
+ * Functions called from postmaster
281
+ * ----------
282
+ */
283
+ extern Size BackendStatusShmemSize(void);
284
+ extern void CreateSharedBackendStatus(void);
285
+
286
+
287
+ /* ----------
288
+ * Functions called from backends
289
+ * ----------
290
+ */
291
+
292
+ /* Initialization functions */
293
+ extern void pgstat_beinit(void);
294
+ extern void pgstat_bestart(void);
295
+
296
+ extern void pgstat_clear_backend_activity_snapshot(void);
297
+
298
+ /* Activity reporting functions */
299
+ extern void pgstat_report_activity(BackendState state, const char *cmd_str);
300
+ extern void pgstat_report_query_id(uint64 query_id, bool force);
301
+ extern void pgstat_report_tempfile(size_t filesize);
302
+ extern void pgstat_report_appname(const char *appname);
303
+ extern void pgstat_report_xact_timestamp(TimestampTz tstamp);
304
+ extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser);
305
+ extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer,
306
+ int buflen);
307
+ extern uint64 pgstat_get_my_query_id(void);
308
+
309
+
310
+ /* ----------
311
+ * Support functions for the SQL-callable functions to
312
+ * generate the pgstat* views.
313
+ * ----------
314
+ */
315
+ extern int pgstat_fetch_stat_numbackends(void);
316
+ extern PgBackendStatus *pgstat_fetch_stat_beentry(int beid);
317
+ extern LocalPgBackendStatus *pgstat_fetch_stat_local_beentry(int beid);
318
+ extern char *pgstat_clip_activity(const char *raw_activity);
319
+
320
+
321
+ #endif /* BACKEND_STATUS_H */
@@ -4,7 +4,7 @@
4
4
  * Declarations for operations on built-in types.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/builtins.h
@@ -39,22 +39,20 @@ extern uint64 hex_decode(const char *src, size_t len, char *dst);
39
39
  extern int2vector *buildint2vector(const int16 *int2s, int n);
40
40
 
41
41
  /* name.c */
42
- extern int namecpy(Name n1, const NameData *n2);
43
- extern int namestrcpy(Name name, const char *str);
42
+ extern void namestrcpy(Name name, const char *str);
44
43
  extern int namestrcmp(Name name, const char *str);
45
44
 
46
45
  /* numutils.c */
47
- extern int32 pg_atoi(const char *s, int size, int c);
48
46
  extern int16 pg_strtoint16(const char *s);
49
47
  extern int32 pg_strtoint32(const char *s);
50
- extern void pg_itoa(int16 i, char *a);
51
- extern int pg_ultoa_n(uint32 l, char *a);
52
- extern int pg_ulltoa_n(uint64 l, char *a);
53
- extern void pg_ltoa(int32 l, char *a);
54
- extern void pg_lltoa(int64 ll, char *a);
48
+ extern int64 pg_strtoint64(const char *s);
49
+ extern int pg_itoa(int16 i, char *a);
50
+ extern int pg_ultoa_n(uint32 l, char *a);
51
+ extern int pg_ulltoa_n(uint64 l, char *a);
52
+ extern int pg_ltoa(int32 l, char *a);
53
+ extern int pg_lltoa(int64 ll, char *a);
55
54
  extern char *pg_ultostr_zeropad(char *str, uint32 value, int32 minwidth);
56
55
  extern char *pg_ultostr(char *str, uint32 value);
57
- extern uint64 pg_strtouint64(const char *str, char **endptr, int base);
58
56
 
59
57
  /* oid.c */
60
58
  extern oidvector *buildoidvector(const Oid *oids, int n);
@@ -66,7 +64,7 @@ extern char *regexp_fixed_prefix(text *text_re, bool case_insensitive,
66
64
  Oid collation, bool *exact);
67
65
 
68
66
  /* ruleutils.c */
69
- extern __thread bool quote_all_identifiers;
67
+ extern PGDLLIMPORT __thread bool quote_all_identifiers;
70
68
  extern const char *quote_identifier(const char *ident);
71
69
  extern char *quote_qualified_identifier(const char *qualifier,
72
70
  const char *ident);
@@ -89,6 +87,7 @@ extern void text_to_cstring_buffer(const text *src, char *dst, size_t dst_len);
89
87
 
90
88
  /* xid.c */
91
89
  extern int xidComparator(const void *arg1, const void *arg2);
90
+ extern int xidLogicalComparator(const void *arg1, const void *arg2);
92
91
 
93
92
  /* inet_cidr_ntop.c */
94
93
  extern char *pg_inet_cidr_ntop(int af, const void *src, int bits,
@@ -113,6 +112,7 @@ extern Datum numeric_float8_no_overflow(PG_FUNCTION_ARGS);
113
112
  #define FORMAT_TYPE_TYPEMOD_GIVEN 0x01 /* typemod defined by caller */
114
113
  #define FORMAT_TYPE_ALLOW_INVALID 0x02 /* allow invalid types */
115
114
  #define FORMAT_TYPE_FORCE_QUALIFY 0x04 /* force qualification of type */
115
+ #define FORMAT_TYPE_INVALID_AS_NULL 0x08 /* NULL if undefined */
116
116
  extern char *format_type_extended(Oid type_oid, int32 typemod, bits16 flags);
117
117
 
118
118
  extern char *format_type_be(Oid type_oid);
@@ -4,7 +4,7 @@
4
4
  * Declarations for BYTEA data type support.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/bytea.h
@@ -22,6 +22,7 @@ typedef enum
22
22
  BYTEA_OUTPUT_HEX
23
23
  } ByteaOutputType;
24
24
 
25
- extern int bytea_output; /* ByteaOutputType, but int for GUC enum */
25
+ extern PGDLLIMPORT int bytea_output; /* ByteaOutputType, but int for GUC
26
+ * enum */
26
27
 
27
28
  #endif /* BYTEA_H */
@@ -10,7 +10,7 @@
10
10
  * guarantee that there can only be one matching row for a key combination.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * src/include/utils/catcache.h
@@ -4,7 +4,7 @@
4
4
  * Definitions for the SQL "date" and "time" types.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/date.h
@@ -6,7 +6,7 @@
6
6
  * including date, and time.
7
7
  *
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/utils/datetime.h
@@ -257,9 +257,10 @@ do { \
257
257
  * Include check for leap year.
258
258
  */
259
259
 
260
- extern const char *const months[]; /* months (3-char abbreviations) */
261
- extern const char *const days[]; /* days (full names) */
262
- extern const int day_tab[2][13];
260
+ extern PGDLLIMPORT const char *const months[]; /* months (3-char
261
+ * abbreviations) */
262
+ extern PGDLLIMPORT const char *const days[]; /* days (full names) */
263
+ extern PGDLLIMPORT const int day_tab[2][13];
263
264
 
264
265
  /*
265
266
  * These are the rules for the Gregorian calendar, which was adopted in 1582.
@@ -300,9 +301,9 @@ extern int DecodeTimeOnly(char **field, int *ftype,
300
301
  int nf, int *dtype,
301
302
  struct pg_tm *tm, fsec_t *fsec, int *tzp);
302
303
  extern int DecodeInterval(char **field, int *ftype, int nf, int range,
303
- int *dtype, struct pg_tm *tm, fsec_t *fsec);
304
+ int *dtype, struct pg_itm_in *itm_in);
304
305
  extern int DecodeISO8601Interval(char *str,
305
- int *dtype, struct pg_tm *tm, fsec_t *fsec);
306
+ int *dtype, struct pg_itm_in *itm_in);
306
307
 
307
308
  extern void DateTimeParseError(int dterr, const char *str,
308
309
  const char *datatype) pg_attribute_noreturn();
@@ -315,7 +316,7 @@ extern int DetermineTimeZoneAbbrevOffsetTS(TimestampTz ts, const char *abbr,
315
316
  extern void EncodeDateOnly(struct pg_tm *tm, int style, char *str);
316
317
  extern void EncodeTimeOnly(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, int style, char *str);
317
318
  extern void EncodeDateTime(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, const char *tzn, int style, char *str);
318
- extern void EncodeInterval(struct pg_tm *tm, fsec_t fsec, int style, char *str);
319
+ extern void EncodeInterval(struct pg_itm *itm, int style, char *str);
319
320
  extern void EncodeSpecialTimestamp(Timestamp dt, char *str);
320
321
 
321
322
  extern int ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc,
@@ -8,7 +8,7 @@
8
8
  * of the Datum. (We do it this way because in most situations the caller
9
9
  * can look up the info just once and use it for many per-datum operations.)
10
10
  *
11
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
11
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
12
12
  * Portions Copyright (c) 1994, Regents of the University of California
13
13
  *
14
14
  * src/include/utils/datum.h
@@ -55,6 +55,14 @@ extern bool datumIsEqual(Datum value1, Datum value2,
55
55
  extern bool datum_image_eq(Datum value1, Datum value2,
56
56
  bool typByVal, int typLen);
57
57
 
58
+ /*
59
+ * datum_image_hash
60
+ *
61
+ * Generates hash value for 'value' based on its bits rather than logical
62
+ * value.
63
+ */
64
+ extern uint32 datum_image_hash(Datum value, bool typByVal, int typLen);
65
+
58
66
  /*
59
67
  * Serialize and restore datums so that we can transfer them to parallel
60
68
  * workers.
@@ -3,7 +3,7 @@
3
3
  * dsa.h
4
4
  * Dynamic shared memory areas.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * IDENTIFICATION
@@ -1,13 +1,14 @@
1
1
  /*-------------------------------------------------------------------------
2
2
  *
3
- * dynahash
3
+ * dynahash.h
4
4
  * POSTGRES dynahash.h file definitions
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
- * src/include/utils/dynahash.h
10
+ * IDENTIFICATION
11
+ * src/include/utils/dynahash.h
11
12
  *
12
13
  *-------------------------------------------------------------------------
13
14
  */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES error reporting/logging definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/elog.h
@@ -40,19 +40,21 @@
40
40
  #define WARNING 19 /* Warnings. NOTICE is for expected messages
41
41
  * like implicit sequence creation by SERIAL.
42
42
  * WARNING is for unexpected messages. */
43
- #define ERROR 20 /* user error - abort transaction; return to
43
+ #define PGWARNING 19 /* Must equal WARNING; see NOTE below. */
44
+ #define WARNING_CLIENT_ONLY 20 /* Warnings to be sent to client as usual, but
45
+ * never to the server log. */
46
+ #define ERROR 21 /* user error - abort transaction; return to
44
47
  * known state */
45
- /* Save ERROR value in PGERROR so it can be restored when Win32 includes
46
- * modify it. We have to use a constant rather than ERROR because macros
47
- * are expanded only when referenced outside macros.
48
- */
49
- #ifdef WIN32
50
- #define PGERROR 20
51
- #endif
52
- #define FATAL 21 /* fatal error - abort process */
53
- #define PANIC 22 /* take down the other backends with me */
48
+ #define PGERROR 21 /* Must equal ERROR; see NOTE below. */
49
+ #define FATAL 22 /* fatal error - abort process */
50
+ #define PANIC 23 /* take down the other backends with me */
54
51
 
55
- /* #define DEBUG DEBUG1 */ /* Backward compatibility with pre-7.3 */
52
+ /*
53
+ * NOTE: the alternate names PGWARNING and PGERROR are useful for dealing
54
+ * with third-party headers that make other definitions of WARNING and/or
55
+ * ERROR. One can, for example, re-define ERROR as PGERROR after including
56
+ * such a header.
57
+ */
56
58
 
57
59
 
58
60
  /* macros for representing SQLSTATE strings compactly */
@@ -111,6 +113,15 @@
111
113
  * ereport_domain() directly, or preferably they can override the TEXTDOMAIN
112
114
  * macro.
113
115
  *
116
+ * When __builtin_constant_p is available and elevel >= ERROR we make a call
117
+ * to errstart_cold() instead of errstart(). This version of the function is
118
+ * marked with pg_attribute_cold which will coax supporting compilers into
119
+ * generating code which is more optimized towards non-ERROR cases. Because
120
+ * we use __builtin_constant_p() in the condition, when elevel is not a
121
+ * compile-time constant, or if it is, but it's < ERROR, the compiler has no
122
+ * need to generate any code for this branch. It can simply call errstart()
123
+ * unconditionally.
124
+ *
114
125
  * If elevel >= ERROR, the call will not return; we try to inform the compiler
115
126
  * of that via pg_unreachable(). However, no useful optimization effect is
116
127
  * obtained unless the compiler sees elevel as a compile-time constant, else
@@ -124,7 +135,9 @@
124
135
  #define ereport_domain(elevel, domain, ...) \
125
136
  do { \
126
137
  pg_prevent_errno_in_scope(); \
127
- if (errstart(elevel, domain)) \
138
+ if (__builtin_constant_p(elevel) && (elevel) >= ERROR ? \
139
+ errstart_cold(elevel, domain) : \
140
+ errstart(elevel, domain)) \
128
141
  __VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \
129
142
  if (__builtin_constant_p(elevel) && (elevel) >= ERROR) \
130
143
  pg_unreachable(); \
@@ -146,7 +159,10 @@
146
159
 
147
160
  #define TEXTDOMAIN NULL
148
161
 
162
+ extern bool message_level_is_interesting(int elevel);
163
+
149
164
  extern bool errstart(int elevel, const char *domain);
165
+ extern pg_attribute_cold bool errstart_cold(int elevel, const char *domain);
150
166
  extern void errfinish(const char *filename, int lineno, const char *funcname);
151
167
 
152
168
  extern int errcode(int sqlerrcode);
@@ -174,6 +190,9 @@ extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
174
190
 
175
191
  extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
176
192
 
193
+ extern int errhint_plural(const char *fmt_singular, const char *fmt_plural,
194
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
195
+
177
196
  /*
178
197
  * errcontext() is typically called in error context callback functions, not
179
198
  * within an ereport() invocation. The callback function can be in a different
@@ -193,7 +212,6 @@ extern int errhidecontext(bool hide_ctx);
193
212
 
194
213
  extern int errbacktrace(void);
195
214
 
196
- extern int errfunction(const char *funcname);
197
215
  extern int errposition(int cursorpos);
198
216
 
199
217
  extern int internalerrposition(int cursorpos);
@@ -353,7 +371,6 @@ typedef struct ErrorData
353
371
  int elevel; /* error level */
354
372
  bool output_to_server; /* will report to server log? */
355
373
  bool output_to_client; /* will report to client? */
356
- bool show_funcname; /* true to force funcname inclusion */
357
374
  bool hide_stmt; /* true to prevent STATEMENT: inclusion */
358
375
  bool hide_ctx; /* true to prevent CONTEXT: inclusion */
359
376
  const char *filename; /* __FILE__ of ereport() call */
@@ -407,24 +424,38 @@ typedef enum
407
424
  PGERROR_VERBOSE /* all the facts, ma'am */
408
425
  } PGErrorVerbosity;
409
426
 
410
- extern int Log_error_verbosity;
411
- extern char *Log_line_prefix;
412
- extern int Log_destination;
413
- extern char *Log_destination_string;
414
- extern bool syslog_sequence_numbers;
415
- extern bool syslog_split_messages;
427
+ extern PGDLLIMPORT int Log_error_verbosity;
428
+ extern PGDLLIMPORT char *Log_line_prefix;
429
+ extern PGDLLIMPORT int Log_destination;
430
+ extern PGDLLIMPORT char *Log_destination_string;
431
+ extern PGDLLIMPORT bool syslog_sequence_numbers;
432
+ extern PGDLLIMPORT bool syslog_split_messages;
416
433
 
417
434
  /* Log destination bitmap */
418
435
  #define LOG_DESTINATION_STDERR 1
419
436
  #define LOG_DESTINATION_SYSLOG 2
420
437
  #define LOG_DESTINATION_EVENTLOG 4
421
438
  #define LOG_DESTINATION_CSVLOG 8
439
+ #define LOG_DESTINATION_JSONLOG 16
422
440
 
423
441
  /* Other exported functions */
424
442
  extern void DebugFileOpen(void);
425
443
  extern char *unpack_sql_state(int sql_state);
426
444
  extern bool in_error_recursion_trouble(void);
427
445
 
446
+ /* Common functions shared across destinations */
447
+ extern void reset_formatted_start_time(void);
448
+ extern char *get_formatted_start_time(void);
449
+ extern char *get_formatted_log_time(void);
450
+ extern const char *get_backend_type_for_log(void);
451
+ extern bool check_log_of_query(ErrorData *edata);
452
+ extern const char *error_severity(int elevel);
453
+ extern void write_pipe_chunks(char *data, int len, int dest);
454
+
455
+ /* Destination-specific functions */
456
+ extern void write_csvlog(ErrorData *edata);
457
+ extern void write_jsonlog(ErrorData *edata);
458
+
428
459
  #ifdef HAVE_SYSLOG
429
460
  extern void set_syslog_parameters(const char *ident, int facility);
430
461
  #endif
@@ -130,6 +130,7 @@
130
130
  #define ERRCODE_TOO_MANY_JSON_ARRAY_ELEMENTS MAKE_SQLSTATE('2','2','0','3','D')
131
131
  #define ERRCODE_TOO_MANY_JSON_OBJECT_MEMBERS MAKE_SQLSTATE('2','2','0','3','E')
132
132
  #define ERRCODE_SQL_JSON_SCALAR_REQUIRED MAKE_SQLSTATE('2','2','0','3','F')
133
+ #define ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE MAKE_SQLSTATE('2','2','0','3','G')
133
134
 
134
135
  /* Class 23 - Integrity Constraint Violation */
135
136
  #define ERRCODE_INTEGRITY_CONSTRAINT_VIOLATION MAKE_SQLSTATE('2','3','0','0','0')
@@ -296,6 +297,7 @@
296
297
  #define ERRCODE_CRASH_SHUTDOWN MAKE_SQLSTATE('5','7','P','0','2')
297
298
  #define ERRCODE_CANNOT_CONNECT_NOW MAKE_SQLSTATE('5','7','P','0','3')
298
299
  #define ERRCODE_DATABASE_DROPPED MAKE_SQLSTATE('5','7','P','0','4')
300
+ #define ERRCODE_IDLE_SESSION_TIMEOUT MAKE_SQLSTATE('5','7','P','0','5')
299
301
 
300
302
  /* Class 58 - System Error (errors external to PostgreSQL itself) */
301
303
  #define ERRCODE_SYSTEM_ERROR MAKE_SQLSTATE('5','8','0','0','0')