pg_query 2.2.0 → 6.1.0

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 (895) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -0
  3. data/README.md +57 -31
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +33 -9
  11. data/ext/pg_query/include/pg_query.h +30 -4
  12. data/ext/pg_query/include/pg_query_enum_defs.c +839 -290
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +638 -481
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +6786 -4193
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +450 -330
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1489 -1044
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +157 -118
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1933 -1410
  19. data/ext/pg_query/include/postgres/access/amapi.h +303 -0
  20. data/ext/pg_query/include/postgres/access/attmap.h +54 -0
  21. data/ext/pg_query/include/postgres/access/attnum.h +64 -0
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +62 -0
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
  26. data/ext/pg_query/include/postgres/access/detoast.h +82 -0
  27. data/ext/pg_query/include/postgres/access/genam.h +246 -0
  28. data/ext/pg_query/include/postgres/access/gin.h +91 -0
  29. data/ext/pg_query/include/postgres/access/htup.h +89 -0
  30. data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
  31. data/ext/pg_query/include/postgres/access/itup.h +170 -0
  32. data/ext/pg_query/include/postgres/access/parallel.h +81 -0
  33. data/ext/pg_query/include/postgres/access/printtup.h +35 -0
  34. data/ext/pg_query/include/postgres/access/relation.h +28 -0
  35. data/ext/pg_query/include/postgres/access/relscan.h +191 -0
  36. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  37. data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
  38. data/ext/pg_query/include/postgres/access/sdir.h +67 -0
  39. data/ext/pg_query/include/postgres/access/skey.h +151 -0
  40. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  41. data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
  42. data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
  43. data/ext/pg_query/include/postgres/access/table.h +28 -0
  44. data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
  45. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  46. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  47. data/ext/pg_query/include/postgres/access/transam.h +418 -0
  48. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  49. data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
  50. data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
  51. data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
  52. data/ext/pg_query/include/postgres/access/twophase.h +65 -0
  53. data/ext/pg_query/include/postgres/access/xact.h +530 -0
  54. data/ext/pg_query/include/postgres/access/xlog.h +310 -0
  55. data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
  56. data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
  57. data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
  58. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  59. data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
  60. data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
  61. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  62. data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
  63. data/ext/pg_query/include/postgres/c.h +1374 -0
  64. data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
  65. data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
  66. data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
  67. data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
  68. data/ext/pg_query/include/postgres/catalog/index.h +218 -0
  69. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  70. data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
  71. data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
  72. data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
  74. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
  75. data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
  76. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
  78. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
  79. data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
  80. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
  83. data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
  84. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
  86. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
  87. data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
  89. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
  90. data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
  91. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
  92. data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
  93. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
  95. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
  96. data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
  97. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
  98. data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
  99. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
  101. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
  103. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
  104. data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
  105. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
  107. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
  109. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
  110. data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
  111. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
  112. data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
  113. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
  115. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
  119. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
  120. data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
  121. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
  123. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
  131. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
  132. data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
  133. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
  134. data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
  135. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  136. data/ext/pg_query/include/postgres/commands/async.h +49 -0
  137. data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
  138. data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
  139. data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
  140. data/ext/pg_query/include/postgres/commands/explain.h +145 -0
  141. data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
  142. data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
  143. data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
  144. data/ext/pg_query/include/postgres/commands/user.h +43 -0
  145. data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
  146. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  147. data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
  148. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  149. data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
  150. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  151. data/ext/pg_query/include/postgres/common/int.h +512 -0
  152. data/ext/pg_query/include/postgres/common/keywords.h +29 -0
  153. data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
  154. data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
  155. data/ext/pg_query/include/postgres/common/relpath.h +97 -0
  156. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  157. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  158. data/ext/pg_query/include/postgres/common/string.h +44 -0
  159. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
  160. data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
  161. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
  162. data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
  163. data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
  164. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
  165. data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
  166. data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
  167. data/ext/pg_query/include/postgres/executor/executor.h +681 -0
  168. data/ext/pg_query/include/postgres/executor/functions.h +56 -0
  169. data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
  170. data/ext/pg_query/include/postgres/executor/spi.h +207 -0
  171. data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
  172. data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
  173. data/ext/pg_query/include/postgres/fmgr.h +800 -0
  174. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  175. data/ext/pg_query/include/postgres/funcapi.h +360 -0
  176. data/ext/pg_query/include/postgres/gram.h +1168 -0
  177. data/ext/pg_query/include/postgres/gramparse.h +75 -0
  178. data/ext/pg_query/include/postgres/jit/jit.h +106 -0
  179. data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
  180. data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
  181. data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
  182. data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
  183. data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
  184. data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
  185. data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
  186. data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
  187. data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
  188. data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
  189. data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
  190. data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
  191. data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
  192. data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
  193. data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
  194. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  195. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  196. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  197. data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
  198. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
  199. data/ext/pg_query/include/postgres/miscadmin.h +527 -0
  200. data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
  201. data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
  202. data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
  203. data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
  204. data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
  205. data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
  206. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  207. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
  208. data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
  209. data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
  210. data/ext/pg_query/include/postgres/nodes/params.h +170 -0
  211. data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
  212. data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
  213. data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
  214. data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
  215. data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
  216. data/ext/pg_query/include/postgres/nodes/print.h +34 -0
  217. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  218. data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
  219. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  220. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
  221. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  222. data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
  223. data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
  224. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
  225. data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
  226. data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
  227. data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
  228. data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
  229. data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
  230. data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
  231. data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
  232. data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
  233. data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
  234. data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
  235. data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
  236. data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
  237. data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
  238. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  239. data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
  240. data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
  241. data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
  242. data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
  243. data/ext/pg_query/include/postgres/pg_config.h +985 -0
  244. data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
  245. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  246. data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
  247. data/ext/pg_query/include/postgres/pg_trace.h +17 -0
  248. data/ext/pg_query/include/postgres/pgstat.h +780 -0
  249. data/ext/pg_query/include/postgres/pgtime.h +94 -0
  250. data/ext/pg_query/include/postgres/pl_gram.h +385 -0
  251. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
  252. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
  253. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
  254. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
  255. data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
  256. data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
  257. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
  258. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  259. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
  260. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
  261. data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
  262. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
  263. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
  264. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
  265. data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
  266. data/ext/pg_query/include/postgres/port/atomics.h +606 -0
  267. data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
  268. data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
  269. data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
  270. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  271. data/ext/pg_query/include/postgres/port/simd.h +422 -0
  272. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  273. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  276. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  278. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  279. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  280. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  281. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
  282. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  283. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  284. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  285. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  286. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  287. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  288. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  289. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  290. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  291. data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
  292. data/ext/pg_query/include/postgres/port.h +555 -0
  293. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  294. data/ext/pg_query/include/postgres/postgres.h +579 -0
  295. data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
  296. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
  297. data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
  298. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
  299. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
  300. data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
  301. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  302. data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
  303. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  304. data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
  305. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  306. data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
  307. data/ext/pg_query/include/postgres/regex/regex.h +272 -0
  308. data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
  309. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  310. data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
  311. data/ext/pg_query/include/postgres/replication/origin.h +73 -0
  312. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
  313. data/ext/pg_query/include/postgres/replication/slot.h +289 -0
  314. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  315. data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
  316. data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
  317. data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
  318. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
  319. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
  320. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
  321. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
  322. data/ext/pg_query/include/postgres/storage/block.h +108 -0
  323. data/ext/pg_query/include/postgres/storage/buf.h +46 -0
  324. data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
  325. data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
  326. data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
  327. data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
  328. data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
  329. data/ext/pg_query/include/postgres/storage/fd.h +219 -0
  330. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  331. data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
  332. data/ext/pg_query/include/postgres/storage/item.h +19 -0
  333. data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
  334. data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
  335. data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
  336. data/ext/pg_query/include/postgres/storage/latch.h +196 -0
  337. data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
  338. data/ext/pg_query/include/postgres/storage/lock.h +624 -0
  339. data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
  340. data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
  341. data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
  342. data/ext/pg_query/include/postgres/storage/off.h +57 -0
  343. data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
  344. data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
  345. data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
  346. data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
  347. data/ext/pg_query/include/postgres/storage/proc.h +488 -0
  348. data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
  349. data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
  350. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  351. data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
  352. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  353. data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
  354. data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
  355. data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
  356. data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
  357. data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
  358. data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
  359. data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
  360. data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
  361. data/ext/pg_query/include/postgres/storage/spin.h +77 -0
  362. data/ext/pg_query/include/postgres/storage/standby.h +109 -0
  363. data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
  364. data/ext/pg_query/include/postgres/storage/sync.h +66 -0
  365. data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
  366. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
  367. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
  368. data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
  369. data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
  370. data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
  371. data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
  372. data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
  373. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
  374. data/ext/pg_query/include/postgres/utils/acl.h +290 -0
  375. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
  376. data/ext/pg_query/include/postgres/utils/array.h +481 -0
  377. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  378. data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
  379. data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
  380. data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
  381. data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
  382. data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
  383. data/ext/pg_query/include/postgres/utils/date.h +118 -0
  384. data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
  385. data/ext/pg_query/include/postgres/utils/datum.h +76 -0
  386. data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
  387. data/ext/pg_query/include/postgres/utils/elog.h +540 -0
  388. data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
  389. data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
  390. data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
  391. data/ext/pg_query/include/postgres/utils/float.h +357 -0
  392. data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
  393. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
  394. data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
  395. data/ext/pg_query/include/postgres/utils/guc.h +456 -0
  396. data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
  397. data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
  398. data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
  399. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  400. data/ext/pg_query/include/postgres/utils/inval.h +68 -0
  401. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  402. data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
  403. data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
  404. data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
  405. data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
  406. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
  407. data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
  408. data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
  409. data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
  410. data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
  411. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
  412. data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
  413. data/ext/pg_query/include/postgres/utils/portal.h +252 -0
  414. data/ext/pg_query/include/postgres/utils/probes.h +114 -0
  415. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  416. data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
  417. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  418. data/ext/pg_query/include/postgres/utils/rel.h +711 -0
  419. data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
  420. data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
  421. data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
  422. data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
  423. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
  424. data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
  425. data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
  426. data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
  427. data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
  428. data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
  429. data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
  430. data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
  431. data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
  432. data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
  433. data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
  434. data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
  435. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  436. data/ext/pg_query/include/postgres/utils/xml.h +94 -0
  437. data/ext/pg_query/include/postgres/varatt.h +358 -0
  438. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +8077 -6217
  439. data/ext/pg_query/include/protobuf/pg_query.pb.h +132024 -88124
  440. data/ext/pg_query/pg_query.c +10 -1
  441. data/ext/pg_query/pg_query.pb-c.c +24028 -17173
  442. data/ext/pg_query/pg_query_deparse.c +1 -9902
  443. data/ext/pg_query/pg_query_fingerprint.c +42 -18
  444. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  445. data/ext/pg_query/pg_query_internal.h +1 -1
  446. data/ext/pg_query/pg_query_json_plpgsql.c +1 -25
  447. data/ext/pg_query/pg_query_normalize.c +44 -3
  448. data/ext/pg_query/pg_query_outfuncs_json.c +62 -16
  449. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  450. data/ext/pg_query/pg_query_parse.c +47 -5
  451. data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
  452. data/ext/pg_query/pg_query_readfuncs_protobuf.c +45 -10
  453. data/ext/pg_query/pg_query_ruby.c +5 -0
  454. data/ext/pg_query/pg_query_scan.c +4 -3
  455. data/ext/pg_query/pg_query_split.c +6 -5
  456. data/ext/pg_query/postgres_deparse.c +11496 -0
  457. data/ext/pg_query/postgres_deparse.h +9 -0
  458. data/ext/pg_query/src_backend_catalog_namespace.c +262 -71
  459. data/ext/pg_query/src_backend_catalog_pg_proc.c +3 -2
  460. data/ext/pg_query/src_backend_commands_define.c +12 -3
  461. data/ext/pg_query/src_backend_nodes_bitmapset.c +142 -156
  462. data/ext/pg_query/src_backend_nodes_copyfuncs.c +100 -5881
  463. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3831
  464. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  465. data/ext/pg_query/src_backend_nodes_list.c +89 -18
  466. data/ext/pg_query/src_backend_nodes_makefuncs.c +138 -4
  467. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +433 -132
  468. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  469. data/ext/pg_query/src_backend_parser_gram.c +45255 -38885
  470. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  471. data/ext/pg_query/src_backend_parser_scan.c +6999 -3438
  472. data/ext/pg_query/src_backend_parser_scansup.c +5 -28
  473. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  474. data/ext/pg_query/src_backend_tcop_postgres.c +156 -114
  475. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  476. data/ext/pg_query/src_backend_utils_adt_datum.c +14 -2
  477. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  478. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  479. data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
  480. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +247 -34
  481. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  482. data/ext/pg_query/src_backend_utils_error_elog.c +543 -343
  483. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +47 -18
  484. data/ext/pg_query/src_backend_utils_init_globals.c +22 -7
  485. data/ext/pg_query/src_backend_utils_mb_mbutils.c +84 -148
  486. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
  487. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
  488. data/ext/pg_query/src_backend_utils_mmgr_aset.c +708 -499
  489. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  490. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
  491. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +710 -218
  492. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
  493. data/ext/pg_query/src_common_encnames.c +46 -44
  494. data/ext/pg_query/src_common_hashfn.c +3 -3
  495. data/ext/pg_query/src_common_keywords.c +15 -2
  496. data/ext/pg_query/src_common_kwlist_d.h +602 -510
  497. data/ext/pg_query/src_common_kwlookup.c +1 -1
  498. data/ext/pg_query/src_common_psprintf.c +3 -3
  499. data/ext/pg_query/src_common_stringinfo.c +21 -4
  500. data/ext/pg_query/src_common_wchar.c +754 -178
  501. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +143 -24
  502. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  503. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1295 -1255
  504. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  505. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  506. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +20 -2
  507. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  508. data/ext/pg_query/src_port_pg_bitutils.c +283 -54
  509. data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
  510. data/ext/pg_query/src_port_qsort.c +12 -224
  511. data/ext/pg_query/src_port_snprintf.c +56 -39
  512. data/ext/pg_query/src_port_strerror.c +9 -21
  513. data/ext/pg_query/src_port_strlcpy.c +79 -0
  514. data/lib/pg_query/filter_columns.rb +1 -1
  515. data/lib/pg_query/fingerprint.rb +10 -9
  516. data/lib/pg_query/node.rb +18 -13
  517. data/lib/pg_query/param_refs.rb +3 -3
  518. data/lib/pg_query/parse.rb +25 -15
  519. data/lib/pg_query/parse_error.rb +1 -0
  520. data/lib/pg_query/pg_query_pb.rb +181 -3038
  521. data/lib/pg_query/scan.rb +1 -0
  522. data/lib/pg_query/treewalker.rb +55 -8
  523. data/lib/pg_query/truncate.rb +19 -21
  524. data/lib/pg_query/version.rb +1 -1
  525. metadata +447 -436
  526. data/ext/pg_query/guc-file.c +0 -0
  527. data/ext/pg_query/include/access/amapi.h +0 -246
  528. data/ext/pg_query/include/access/attmap.h +0 -52
  529. data/ext/pg_query/include/access/attnum.h +0 -64
  530. data/ext/pg_query/include/access/clog.h +0 -61
  531. data/ext/pg_query/include/access/commit_ts.h +0 -77
  532. data/ext/pg_query/include/access/detoast.h +0 -92
  533. data/ext/pg_query/include/access/genam.h +0 -228
  534. data/ext/pg_query/include/access/gin.h +0 -78
  535. data/ext/pg_query/include/access/htup.h +0 -89
  536. data/ext/pg_query/include/access/htup_details.h +0 -819
  537. data/ext/pg_query/include/access/itup.h +0 -161
  538. data/ext/pg_query/include/access/parallel.h +0 -82
  539. data/ext/pg_query/include/access/printtup.h +0 -35
  540. data/ext/pg_query/include/access/relation.h +0 -28
  541. data/ext/pg_query/include/access/relscan.h +0 -176
  542. data/ext/pg_query/include/access/rmgr.h +0 -35
  543. data/ext/pg_query/include/access/rmgrlist.h +0 -49
  544. data/ext/pg_query/include/access/sdir.h +0 -58
  545. data/ext/pg_query/include/access/skey.h +0 -151
  546. data/ext/pg_query/include/access/stratnum.h +0 -83
  547. data/ext/pg_query/include/access/sysattr.h +0 -29
  548. data/ext/pg_query/include/access/table.h +0 -27
  549. data/ext/pg_query/include/access/tableam.h +0 -1825
  550. data/ext/pg_query/include/access/transam.h +0 -265
  551. data/ext/pg_query/include/access/tupconvert.h +0 -51
  552. data/ext/pg_query/include/access/tupdesc.h +0 -154
  553. data/ext/pg_query/include/access/tupmacs.h +0 -247
  554. data/ext/pg_query/include/access/twophase.h +0 -63
  555. data/ext/pg_query/include/access/xact.h +0 -469
  556. data/ext/pg_query/include/access/xlog.h +0 -398
  557. data/ext/pg_query/include/access/xlog_internal.h +0 -339
  558. data/ext/pg_query/include/access/xlogdefs.h +0 -109
  559. data/ext/pg_query/include/access/xloginsert.h +0 -64
  560. data/ext/pg_query/include/access/xlogreader.h +0 -337
  561. data/ext/pg_query/include/access/xlogrecord.h +0 -227
  562. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  563. data/ext/pg_query/include/c.h +0 -1334
  564. data/ext/pg_query/include/catalog/catalog.h +0 -42
  565. data/ext/pg_query/include/catalog/catversion.h +0 -58
  566. data/ext/pg_query/include/catalog/dependency.h +0 -277
  567. data/ext/pg_query/include/catalog/genbki.h +0 -64
  568. data/ext/pg_query/include/catalog/index.h +0 -199
  569. data/ext/pg_query/include/catalog/indexing.h +0 -366
  570. data/ext/pg_query/include/catalog/namespace.h +0 -188
  571. data/ext/pg_query/include/catalog/objectaccess.h +0 -197
  572. data/ext/pg_query/include/catalog/objectaddress.h +0 -84
  573. data/ext/pg_query/include/catalog/pg_aggregate.h +0 -176
  574. data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -77
  575. data/ext/pg_query/include/catalog/pg_am.h +0 -60
  576. data/ext/pg_query/include/catalog/pg_am_d.h +0 -45
  577. data/ext/pg_query/include/catalog/pg_attribute.h +0 -204
  578. data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -59
  579. data/ext/pg_query/include/catalog/pg_authid.h +0 -58
  580. data/ext/pg_query/include/catalog/pg_authid_d.h +0 -49
  581. data/ext/pg_query/include/catalog/pg_class.h +0 -200
  582. data/ext/pg_query/include/catalog/pg_class_d.h +0 -103
  583. data/ext/pg_query/include/catalog/pg_collation.h +0 -73
  584. data/ext/pg_query/include/catalog/pg_collation_d.h +0 -45
  585. data/ext/pg_query/include/catalog/pg_constraint.h +0 -247
  586. data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -67
  587. data/ext/pg_query/include/catalog/pg_control.h +0 -252
  588. data/ext/pg_query/include/catalog/pg_conversion.h +0 -72
  589. data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -35
  590. data/ext/pg_query/include/catalog/pg_depend.h +0 -73
  591. data/ext/pg_query/include/catalog/pg_depend_d.h +0 -34
  592. data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -51
  593. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -34
  594. data/ext/pg_query/include/catalog/pg_index.h +0 -80
  595. data/ext/pg_query/include/catalog/pg_index_d.h +0 -56
  596. data/ext/pg_query/include/catalog/pg_language.h +0 -67
  597. data/ext/pg_query/include/catalog/pg_language_d.h +0 -39
  598. data/ext/pg_query/include/catalog/pg_namespace.h +0 -59
  599. data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -34
  600. data/ext/pg_query/include/catalog/pg_opclass.h +0 -85
  601. data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -49
  602. data/ext/pg_query/include/catalog/pg_operator.h +0 -104
  603. data/ext/pg_query/include/catalog/pg_operator_d.h +0 -106
  604. data/ext/pg_query/include/catalog/pg_opfamily.h +0 -60
  605. data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -47
  606. data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -63
  607. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -35
  608. data/ext/pg_query/include/catalog/pg_proc.h +0 -211
  609. data/ext/pg_query/include/catalog/pg_proc_d.h +0 -99
  610. data/ext/pg_query/include/catalog/pg_publication.h +0 -118
  611. data/ext/pg_query/include/catalog/pg_publication_d.h +0 -36
  612. data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -57
  613. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -29
  614. data/ext/pg_query/include/catalog/pg_statistic.h +0 -275
  615. data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -194
  616. data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -74
  617. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -40
  618. data/ext/pg_query/include/catalog/pg_transform.h +0 -45
  619. data/ext/pg_query/include/catalog/pg_transform_d.h +0 -32
  620. data/ext/pg_query/include/catalog/pg_trigger.h +0 -137
  621. data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -106
  622. data/ext/pg_query/include/catalog/pg_ts_config.h +0 -50
  623. data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -32
  624. data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -54
  625. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -33
  626. data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -57
  627. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -35
  628. data/ext/pg_query/include/catalog/pg_ts_template.h +0 -48
  629. data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -32
  630. data/ext/pg_query/include/catalog/pg_type.h +0 -373
  631. data/ext/pg_query/include/catalog/pg_type_d.h +0 -285
  632. data/ext/pg_query/include/catalog/storage.h +0 -48
  633. data/ext/pg_query/include/commands/async.h +0 -54
  634. data/ext/pg_query/include/commands/dbcommands.h +0 -35
  635. data/ext/pg_query/include/commands/defrem.h +0 -173
  636. data/ext/pg_query/include/commands/event_trigger.h +0 -88
  637. data/ext/pg_query/include/commands/explain.h +0 -127
  638. data/ext/pg_query/include/commands/prepare.h +0 -61
  639. data/ext/pg_query/include/commands/tablespace.h +0 -69
  640. data/ext/pg_query/include/commands/trigger.h +0 -285
  641. data/ext/pg_query/include/commands/user.h +0 -37
  642. data/ext/pg_query/include/commands/vacuum.h +0 -293
  643. data/ext/pg_query/include/commands/variable.h +0 -38
  644. data/ext/pg_query/include/common/file_perm.h +0 -56
  645. data/ext/pg_query/include/common/hashfn.h +0 -104
  646. data/ext/pg_query/include/common/ip.h +0 -37
  647. data/ext/pg_query/include/common/keywords.h +0 -33
  648. data/ext/pg_query/include/common/kwlookup.h +0 -44
  649. data/ext/pg_query/include/common/relpath.h +0 -90
  650. data/ext/pg_query/include/common/string.h +0 -19
  651. data/ext/pg_query/include/common/unicode_combining_table.h +0 -196
  652. data/ext/pg_query/include/datatype/timestamp.h +0 -197
  653. data/ext/pg_query/include/executor/execdesc.h +0 -70
  654. data/ext/pg_query/include/executor/executor.h +0 -620
  655. data/ext/pg_query/include/executor/functions.h +0 -41
  656. data/ext/pg_query/include/executor/instrument.h +0 -101
  657. data/ext/pg_query/include/executor/spi.h +0 -175
  658. data/ext/pg_query/include/executor/tablefunc.h +0 -67
  659. data/ext/pg_query/include/executor/tuptable.h +0 -487
  660. data/ext/pg_query/include/fmgr.h +0 -775
  661. data/ext/pg_query/include/funcapi.h +0 -348
  662. data/ext/pg_query/include/getaddrinfo.h +0 -162
  663. data/ext/pg_query/include/jit/jit.h +0 -105
  664. data/ext/pg_query/include/kwlist_d.h +0 -1072
  665. data/ext/pg_query/include/lib/ilist.h +0 -727
  666. data/ext/pg_query/include/lib/pairingheap.h +0 -102
  667. data/ext/pg_query/include/lib/simplehash.h +0 -1059
  668. data/ext/pg_query/include/lib/stringinfo.h +0 -161
  669. data/ext/pg_query/include/libpq/auth.h +0 -29
  670. data/ext/pg_query/include/libpq/crypt.h +0 -46
  671. data/ext/pg_query/include/libpq/hba.h +0 -140
  672. data/ext/pg_query/include/libpq/libpq-be.h +0 -326
  673. data/ext/pg_query/include/libpq/libpq.h +0 -134
  674. data/ext/pg_query/include/libpq/pqcomm.h +0 -208
  675. data/ext/pg_query/include/libpq/pqformat.h +0 -210
  676. data/ext/pg_query/include/libpq/pqsignal.h +0 -42
  677. data/ext/pg_query/include/mb/pg_wchar.h +0 -673
  678. data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
  679. data/ext/pg_query/include/miscadmin.h +0 -489
  680. data/ext/pg_query/include/nodes/bitmapset.h +0 -122
  681. data/ext/pg_query/include/nodes/execnodes.h +0 -2523
  682. data/ext/pg_query/include/nodes/extensible.h +0 -160
  683. data/ext/pg_query/include/nodes/lockoptions.h +0 -61
  684. data/ext/pg_query/include/nodes/makefuncs.h +0 -108
  685. data/ext/pg_query/include/nodes/memnodes.h +0 -108
  686. data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
  687. data/ext/pg_query/include/nodes/nodes.h +0 -842
  688. data/ext/pg_query/include/nodes/params.h +0 -170
  689. data/ext/pg_query/include/nodes/parsenodes.h +0 -3580
  690. data/ext/pg_query/include/nodes/pathnodes.h +0 -2557
  691. data/ext/pg_query/include/nodes/pg_list.h +0 -606
  692. data/ext/pg_query/include/nodes/plannodes.h +0 -1266
  693. data/ext/pg_query/include/nodes/primnodes.h +0 -1541
  694. data/ext/pg_query/include/nodes/print.h +0 -34
  695. data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
  696. data/ext/pg_query/include/nodes/value.h +0 -61
  697. data/ext/pg_query/include/optimizer/cost.h +0 -206
  698. data/ext/pg_query/include/optimizer/geqo.h +0 -88
  699. data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
  700. data/ext/pg_query/include/optimizer/optimizer.h +0 -194
  701. data/ext/pg_query/include/optimizer/paths.h +0 -257
  702. data/ext/pg_query/include/optimizer/planmain.h +0 -119
  703. data/ext/pg_query/include/parser/analyze.h +0 -49
  704. data/ext/pg_query/include/parser/gram.h +0 -1067
  705. data/ext/pg_query/include/parser/gramparse.h +0 -75
  706. data/ext/pg_query/include/parser/kwlist.h +0 -477
  707. data/ext/pg_query/include/parser/parse_agg.h +0 -68
  708. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  709. data/ext/pg_query/include/parser/parse_coerce.h +0 -98
  710. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  711. data/ext/pg_query/include/parser/parse_expr.h +0 -26
  712. data/ext/pg_query/include/parser/parse_func.h +0 -73
  713. data/ext/pg_query/include/parser/parse_node.h +0 -327
  714. data/ext/pg_query/include/parser/parse_oper.h +0 -67
  715. data/ext/pg_query/include/parser/parse_relation.h +0 -123
  716. data/ext/pg_query/include/parser/parse_target.h +0 -46
  717. data/ext/pg_query/include/parser/parse_type.h +0 -60
  718. data/ext/pg_query/include/parser/parser.h +0 -41
  719. data/ext/pg_query/include/parser/parsetree.h +0 -61
  720. data/ext/pg_query/include/parser/scanner.h +0 -152
  721. data/ext/pg_query/include/parser/scansup.h +0 -30
  722. data/ext/pg_query/include/partitioning/partdefs.h +0 -26
  723. data/ext/pg_query/include/pg_config.h +0 -995
  724. data/ext/pg_query/include/pg_config_manual.h +0 -357
  725. data/ext/pg_query/include/pg_config_os.h +0 -8
  726. data/ext/pg_query/include/pg_getopt.h +0 -56
  727. data/ext/pg_query/include/pg_trace.h +0 -17
  728. data/ext/pg_query/include/pgstat.h +0 -1488
  729. data/ext/pg_query/include/pgtime.h +0 -84
  730. data/ext/pg_query/include/pl_gram.h +0 -385
  731. data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
  732. data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
  733. data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -112
  734. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -246
  735. data/ext/pg_query/include/plerrcodes.h +0 -990
  736. data/ext/pg_query/include/plpgsql.h +0 -1347
  737. data/ext/pg_query/include/port/atomics/arch-arm.h +0 -26
  738. data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
  739. data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
  740. data/ext/pg_query/include/port/atomics/fallback.h +0 -170
  741. data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
  742. data/ext/pg_query/include/port/atomics/generic.h +0 -401
  743. data/ext/pg_query/include/port/atomics.h +0 -524
  744. data/ext/pg_query/include/port/pg_bitutils.h +0 -272
  745. data/ext/pg_query/include/port/pg_bswap.h +0 -161
  746. data/ext/pg_query/include/port/pg_crc32c.h +0 -101
  747. data/ext/pg_query/include/port.h +0 -528
  748. data/ext/pg_query/include/portability/instr_time.h +0 -256
  749. data/ext/pg_query/include/postgres.h +0 -764
  750. data/ext/pg_query/include/postgres_ext.h +0 -74
  751. data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
  752. data/ext/pg_query/include/postmaster/bgworker.h +0 -161
  753. data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
  754. data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
  755. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  756. data/ext/pg_query/include/postmaster/interrupt.h +0 -32
  757. data/ext/pg_query/include/postmaster/pgarch.h +0 -39
  758. data/ext/pg_query/include/postmaster/postmaster.h +0 -77
  759. data/ext/pg_query/include/postmaster/syslogger.h +0 -98
  760. data/ext/pg_query/include/postmaster/walwriter.h +0 -21
  761. data/ext/pg_query/include/regex/regex.h +0 -184
  762. data/ext/pg_query/include/replication/logicallauncher.h +0 -31
  763. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  764. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  765. data/ext/pg_query/include/replication/origin.h +0 -73
  766. data/ext/pg_query/include/replication/reorderbuffer.h +0 -468
  767. data/ext/pg_query/include/replication/slot.h +0 -219
  768. data/ext/pg_query/include/replication/syncrep.h +0 -115
  769. data/ext/pg_query/include/replication/walreceiver.h +0 -340
  770. data/ext/pg_query/include/replication/walsender.h +0 -74
  771. data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
  772. data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -40
  773. data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
  774. data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
  775. data/ext/pg_query/include/storage/backendid.h +0 -37
  776. data/ext/pg_query/include/storage/block.h +0 -121
  777. data/ext/pg_query/include/storage/buf.h +0 -46
  778. data/ext/pg_query/include/storage/bufmgr.h +0 -292
  779. data/ext/pg_query/include/storage/bufpage.h +0 -459
  780. data/ext/pg_query/include/storage/condition_variable.h +0 -62
  781. data/ext/pg_query/include/storage/dsm.h +0 -61
  782. data/ext/pg_query/include/storage/dsm_impl.h +0 -75
  783. data/ext/pg_query/include/storage/fd.h +0 -168
  784. data/ext/pg_query/include/storage/ipc.h +0 -81
  785. data/ext/pg_query/include/storage/item.h +0 -19
  786. data/ext/pg_query/include/storage/itemid.h +0 -184
  787. data/ext/pg_query/include/storage/itemptr.h +0 -206
  788. data/ext/pg_query/include/storage/large_object.h +0 -100
  789. data/ext/pg_query/include/storage/latch.h +0 -190
  790. data/ext/pg_query/include/storage/lmgr.h +0 -114
  791. data/ext/pg_query/include/storage/lock.h +0 -613
  792. data/ext/pg_query/include/storage/lockdefs.h +0 -59
  793. data/ext/pg_query/include/storage/lwlock.h +0 -233
  794. data/ext/pg_query/include/storage/lwlocknames.h +0 -51
  795. data/ext/pg_query/include/storage/off.h +0 -57
  796. data/ext/pg_query/include/storage/pg_sema.h +0 -61
  797. data/ext/pg_query/include/storage/pg_shmem.h +0 -90
  798. data/ext/pg_query/include/storage/pmsignal.h +0 -94
  799. data/ext/pg_query/include/storage/predicate.h +0 -87
  800. data/ext/pg_query/include/storage/proc.h +0 -347
  801. data/ext/pg_query/include/storage/proclist_types.h +0 -51
  802. data/ext/pg_query/include/storage/procsignal.h +0 -75
  803. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  804. data/ext/pg_query/include/storage/s_lock.h +0 -1071
  805. data/ext/pg_query/include/storage/sharedfileset.h +0 -45
  806. data/ext/pg_query/include/storage/shm_mq.h +0 -85
  807. data/ext/pg_query/include/storage/shm_toc.h +0 -58
  808. data/ext/pg_query/include/storage/shmem.h +0 -81
  809. data/ext/pg_query/include/storage/sinval.h +0 -153
  810. data/ext/pg_query/include/storage/sinvaladt.h +0 -43
  811. data/ext/pg_query/include/storage/smgr.h +0 -109
  812. data/ext/pg_query/include/storage/spin.h +0 -77
  813. data/ext/pg_query/include/storage/standby.h +0 -91
  814. data/ext/pg_query/include/storage/standbydefs.h +0 -74
  815. data/ext/pg_query/include/storage/sync.h +0 -62
  816. data/ext/pg_query/include/tcop/cmdtag.h +0 -58
  817. data/ext/pg_query/include/tcop/cmdtaglist.h +0 -217
  818. data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
  819. data/ext/pg_query/include/tcop/dest.h +0 -149
  820. data/ext/pg_query/include/tcop/fastpath.h +0 -21
  821. data/ext/pg_query/include/tcop/pquery.h +0 -51
  822. data/ext/pg_query/include/tcop/tcopprot.h +0 -89
  823. data/ext/pg_query/include/tcop/utility.h +0 -108
  824. data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
  825. data/ext/pg_query/include/utils/acl.h +0 -312
  826. data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
  827. data/ext/pg_query/include/utils/array.h +0 -459
  828. data/ext/pg_query/include/utils/builtins.h +0 -128
  829. data/ext/pg_query/include/utils/bytea.h +0 -27
  830. data/ext/pg_query/include/utils/catcache.h +0 -231
  831. data/ext/pg_query/include/utils/date.h +0 -90
  832. data/ext/pg_query/include/utils/datetime.h +0 -343
  833. data/ext/pg_query/include/utils/datum.h +0 -68
  834. data/ext/pg_query/include/utils/dsa.h +0 -123
  835. data/ext/pg_query/include/utils/dynahash.h +0 -19
  836. data/ext/pg_query/include/utils/elog.h +0 -439
  837. data/ext/pg_query/include/utils/errcodes.h +0 -352
  838. data/ext/pg_query/include/utils/expandeddatum.h +0 -159
  839. data/ext/pg_query/include/utils/expandedrecord.h +0 -231
  840. data/ext/pg_query/include/utils/float.h +0 -356
  841. data/ext/pg_query/include/utils/fmgroids.h +0 -2657
  842. data/ext/pg_query/include/utils/fmgrprotos.h +0 -2646
  843. data/ext/pg_query/include/utils/fmgrtab.h +0 -48
  844. data/ext/pg_query/include/utils/guc.h +0 -443
  845. data/ext/pg_query/include/utils/guc_tables.h +0 -272
  846. data/ext/pg_query/include/utils/hsearch.h +0 -149
  847. data/ext/pg_query/include/utils/inval.h +0 -65
  848. data/ext/pg_query/include/utils/lsyscache.h +0 -198
  849. data/ext/pg_query/include/utils/memdebug.h +0 -82
  850. data/ext/pg_query/include/utils/memutils.h +0 -225
  851. data/ext/pg_query/include/utils/numeric.h +0 -76
  852. data/ext/pg_query/include/utils/palloc.h +0 -136
  853. data/ext/pg_query/include/utils/partcache.h +0 -102
  854. data/ext/pg_query/include/utils/pg_locale.h +0 -119
  855. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  856. data/ext/pg_query/include/utils/pidfile.h +0 -56
  857. data/ext/pg_query/include/utils/plancache.h +0 -235
  858. data/ext/pg_query/include/utils/portal.h +0 -254
  859. data/ext/pg_query/include/utils/probes.h +0 -114
  860. data/ext/pg_query/include/utils/ps_status.h +0 -25
  861. data/ext/pg_query/include/utils/queryenvironment.h +0 -74
  862. data/ext/pg_query/include/utils/regproc.h +0 -28
  863. data/ext/pg_query/include/utils/rel.h +0 -643
  864. data/ext/pg_query/include/utils/relcache.h +0 -150
  865. data/ext/pg_query/include/utils/reltrigger.h +0 -81
  866. data/ext/pg_query/include/utils/resowner.h +0 -86
  867. data/ext/pg_query/include/utils/rls.h +0 -50
  868. data/ext/pg_query/include/utils/ruleutils.h +0 -44
  869. data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
  870. data/ext/pg_query/include/utils/snapmgr.h +0 -159
  871. data/ext/pg_query/include/utils/snapshot.h +0 -206
  872. data/ext/pg_query/include/utils/sortsupport.h +0 -276
  873. data/ext/pg_query/include/utils/syscache.h +0 -219
  874. data/ext/pg_query/include/utils/timeout.h +0 -88
  875. data/ext/pg_query/include/utils/timestamp.h +0 -116
  876. data/ext/pg_query/include/utils/tuplesort.h +0 -277
  877. data/ext/pg_query/include/utils/tuplestore.h +0 -91
  878. data/ext/pg_query/include/utils/typcache.h +0 -202
  879. data/ext/pg_query/include/utils/tzparser.h +0 -39
  880. data/ext/pg_query/include/utils/varlena.h +0 -39
  881. data/ext/pg_query/include/utils/xml.h +0 -84
  882. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  883. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  884. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  885. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  886. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  887. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  888. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1832
  889. data/ext/pg_query/src_common_string.c +0 -86
  890. data/ext/pg_query/src_port_erand48.c +0 -127
  891. data/ext/pg_query/src_port_pgsleep.c +0 -69
  892. data/ext/pg_query/src_port_random.c +0 -31
  893. data/ext/pg_query/src_port_strnlen.c +0 -39
  894. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
  895. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -1,28 +1,42 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
+ * - errstart_cold
3
4
  * - errstart
4
5
  * - PG_exception_stack
5
6
  * - write_stderr
6
- * - err_gettext
7
7
  * - in_error_recursion_trouble
8
8
  * - error_context_stack
9
9
  * - errordata_stack_depth
10
10
  * - errordata
11
+ * - should_output_to_server
11
12
  * - is_log_level_output
13
+ * - should_output_to_client
12
14
  * - recursion_depth
15
+ * - get_error_stack_entry
16
+ * - set_stack_entry_domain
13
17
  * - errmsg_internal
14
18
  * - errcode
15
19
  * - errmsg
16
20
  * - errdetail
21
+ * - errhidestmt
22
+ * - errhidecontext
17
23
  * - errfinish
18
24
  * - pg_re_throw
19
25
  * - EmitErrorReport
20
26
  * - emit_log_hook
27
+ * - saved_timeval_set
28
+ * - formatted_log_time
21
29
  * - send_message_to_server_log
22
30
  * - send_message_to_frontend
31
+ * - pgwin32_dispatch_queued_signals
32
+ * - set_stack_entry_location
23
33
  * - matches_backtrace_functions
34
+ * - backtrace_function_list
24
35
  * - set_backtrace
36
+ * - FreeErrorDataContents
25
37
  * - geterrcode
38
+ * - errsave_start
39
+ * - errsave_finish
26
40
  * - errhint
27
41
  * - errposition
28
42
  * - internalerrposition
@@ -33,6 +47,9 @@
33
47
  * - errcontext_msg
34
48
  * - CopyErrorData
35
49
  * - FlushErrorState
50
+ * - pg_signal_queue
51
+ * - pg_signal_mask
52
+ * - pgwin32_dispatch_queued_signals
36
53
  *--------------------------------------------------------------------
37
54
  */
38
55
 
@@ -81,7 +98,7 @@
81
98
  * overflow.)
82
99
  *
83
100
  *
84
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
101
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
85
102
  * Portions Copyright (c) 1994, Regents of the University of California
86
103
  *
87
104
  *
@@ -104,21 +121,23 @@
104
121
  #include <execinfo.h>
105
122
  #endif
106
123
 
107
- #include "access/transam.h"
108
124
  #include "access/xact.h"
109
125
  #include "libpq/libpq.h"
110
126
  #include "libpq/pqformat.h"
111
127
  #include "mb/pg_wchar.h"
112
128
  #include "miscadmin.h"
129
+ #include "nodes/miscnodes.h"
130
+ #include "pgstat.h"
113
131
  #include "postmaster/bgworker.h"
114
132
  #include "postmaster/postmaster.h"
115
133
  #include "postmaster/syslogger.h"
116
134
  #include "storage/ipc.h"
117
135
  #include "storage/proc.h"
118
136
  #include "tcop/tcopprot.h"
119
- #include "utils/guc.h"
137
+ #include "utils/guc_hooks.h"
120
138
  #include "utils/memutils.h"
121
139
  #include "utils/ps_status.h"
140
+ #include "utils/varlena.h"
122
141
 
123
142
 
124
143
  /* In this module, access gettext() via err_gettext() */
@@ -153,6 +172,10 @@ __thread emit_log_hook_type emit_log_hook = NULL;
153
172
 
154
173
 
155
174
 
175
+ /* Processed form of backtrace_functions GUC */
176
+ static __thread char *backtrace_function_list;
177
+
178
+
156
179
  #ifdef HAVE_SYSLOG
157
180
 
158
181
  /*
@@ -193,13 +216,15 @@ static __thread int recursion_depth = 0;
193
216
 
194
217
  /*
195
218
  * Saved timeval and buffers for formatted timestamps that might be used by
196
- * both log_line_prefix and csv logs.
219
+ * log_line_prefix, csv logs and JSON logs.
197
220
  */
198
221
 
222
+ static __thread bool saved_timeval_set = false;
199
223
 
200
224
 
201
225
  #define FORMATTED_TS_LEN 128
202
226
 
227
+ static __thread char formatted_log_time[FORMATTED_TS_LEN];
203
228
 
204
229
 
205
230
 
@@ -215,20 +240,87 @@ static __thread int recursion_depth = 0;
215
240
 
216
241
 
217
242
  static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
243
+ static ErrorData *get_error_stack_entry(void);
244
+ static void set_stack_entry_domain(ErrorData *edata, const char *domain);
245
+ static void set_stack_entry_location(ErrorData *edata,
246
+ const char *filename, int lineno,
247
+ const char *funcname);
248
+ static bool matches_backtrace_functions(const char *funcname);
218
249
  static pg_noinline void set_backtrace(ErrorData *edata, int num_skip);
219
250
  static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
251
+ static void FreeErrorDataContents(ErrorData *edata);
220
252
  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
- static const char *process_log_prefix_padding(const char *p, int *padding);
253
+ static const char *process_log_prefix_padding(const char *p, int *ppadding);
224
254
  static void log_line_prefix(StringInfo buf, ErrorData *edata);
225
- static void write_csvlog(ErrorData *edata);
226
255
  static void send_message_to_server_log(ErrorData *edata);
227
- static void write_pipe_chunks(char *data, int len, int dest);
228
256
  static void send_message_to_frontend(ErrorData *edata);
229
- static const char *error_severity(int elevel);
230
257
  static void append_with_tabs(StringInfo buf, const char *str);
231
- static bool is_log_level_output(int elevel, int log_min_level);
258
+
259
+
260
+ /*
261
+ * is_log_level_output -- is elevel logically >= log_min_level?
262
+ *
263
+ * We use this for tests that should consider LOG to sort out-of-order,
264
+ * between ERROR and FATAL. Generally this is the right thing for testing
265
+ * whether a message should go to the postmaster log, whereas a simple >=
266
+ * test is correct for testing whether the message should go to the client.
267
+ */
268
+ static inline bool
269
+ is_log_level_output(int elevel, int log_min_level)
270
+ {
271
+ if (elevel == LOG || elevel == LOG_SERVER_ONLY)
272
+ {
273
+ if (log_min_level == LOG || log_min_level <= ERROR)
274
+ return true;
275
+ }
276
+ else if (elevel == WARNING_CLIENT_ONLY)
277
+ {
278
+ /* never sent to log, regardless of log_min_level */
279
+ return false;
280
+ }
281
+ else if (log_min_level == LOG)
282
+ {
283
+ /* elevel != LOG */
284
+ if (elevel >= FATAL)
285
+ return true;
286
+ }
287
+ /* Neither is LOG */
288
+ else if (elevel >= log_min_level)
289
+ return true;
290
+
291
+ return false;
292
+ }
293
+
294
+ /*
295
+ * Policy-setting subroutines. These are fairly simple, but it seems wise
296
+ * to have the code in just one place.
297
+ */
298
+
299
+ /*
300
+ * should_output_to_server --- should message of given elevel go to the log?
301
+ */
302
+ static inline bool
303
+ should_output_to_server(int elevel)
304
+ {
305
+ return is_log_level_output(elevel, log_min_messages);
306
+ }
307
+
308
+ /*
309
+ * should_output_to_client --- should message of given elevel go to the client?
310
+ */
311
+ static inline bool should_output_to_client(int elevel) { return false; }
312
+
313
+
314
+
315
+ /*
316
+ * message_level_is_interesting --- would ereport/elog do anything?
317
+ *
318
+ * Returns true if ereport/elog with this elevel will not be a no-op.
319
+ * This is useful to short-circuit any expensive preparatory work that
320
+ * might be needed for a logging message. There is no point in
321
+ * prepending this to a bare ereport/elog call, however.
322
+ */
323
+
232
324
 
233
325
 
234
326
  /*
@@ -250,19 +342,23 @@ in_error_recursion_trouble(void)
250
342
  * message, since there's a significant probability that that's exactly
251
343
  * what's causing the recursion.
252
344
  */
253
- static inline const char *
254
- err_gettext(const char *str)
255
- {
256
345
  #ifdef ENABLE_NLS
257
- if (in_error_recursion_trouble())
258
- return str;
259
- else
260
- return gettext(str);
261
346
  #else
262
- return str;
263
347
  #endif
264
- }
265
348
 
349
+ /*
350
+ * errstart_cold
351
+ * A simple wrapper around errstart, but hinted to be "cold". Supporting
352
+ * compilers are more likely to move code for branches containing this
353
+ * function into an area away from the calling function's code. This can
354
+ * result in more commonly executed code being more compact and fitting
355
+ * on fewer cache lines.
356
+ */
357
+ pg_attribute_cold bool
358
+ errstart_cold(int elevel, const char *domain)
359
+ {
360
+ return errstart(elevel, domain);
361
+ }
266
362
 
267
363
  /*
268
364
  * errstart --- begin an error-reporting cycle
@@ -332,27 +428,8 @@ errstart(int elevel, const char *domain)
332
428
  * warning or less and not enabled for logging, just return false without
333
429
  * starting up any error logging machinery.
334
430
  */
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 */
431
+ output_to_server = should_output_to_server(elevel);
432
+ output_to_client = should_output_to_client(elevel);
356
433
  if (elevel < ERROR && !output_to_server && !output_to_client)
357
434
  return false;
358
435
 
@@ -392,36 +469,20 @@ errstart(int elevel, const char *domain)
392
469
  debug_query_string = NULL;
393
470
  }
394
471
  }
395
- if (++errordata_stack_depth >= ERRORDATA_STACK_SIZE)
396
- {
397
- /*
398
- * Wups, stack not big enough. We treat this as a PANIC condition
399
- * because it suggests an infinite loop of errors during error
400
- * recovery.
401
- */
402
- errordata_stack_depth = -1; /* make room on stack */
403
- ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded")));
404
- }
405
472
 
406
473
  /* Initialize data for this error frame */
407
- edata = &errordata[errordata_stack_depth];
408
- MemSet(edata, 0, sizeof(ErrorData));
474
+ edata = get_error_stack_entry();
409
475
  edata->elevel = elevel;
410
476
  edata->output_to_server = output_to_server;
411
477
  edata->output_to_client = output_to_client;
412
- /* the default text domain is the backend's */
413
- edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres");
414
- /* initialize context_domain the same way (see set_errcontext_domain()) */
415
- edata->context_domain = edata->domain;
478
+ set_stack_entry_domain(edata, domain);
416
479
  /* Select default errcode based on elevel */
417
480
  if (elevel >= ERROR)
418
481
  edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
419
- else if (elevel == WARNING)
482
+ else if (elevel >= WARNING)
420
483
  edata->sqlerrcode = ERRCODE_WARNING;
421
484
  else
422
485
  edata->sqlerrcode = ERRCODE_SUCCESSFUL_COMPLETION;
423
- /* errno is saved here so that error parameter eval can't change it */
424
- edata->saved_errno = errno;
425
486
 
426
487
  /*
427
488
  * Any allocations for this error state level should go into ErrorContext
@@ -432,32 +493,6 @@ errstart(int elevel, const char *domain)
432
493
  return true;
433
494
  }
434
495
 
435
- /*
436
- * Checks whether the given funcname matches backtrace_functions; see
437
- * check_backtrace_functions.
438
- */
439
- static bool
440
- matches_backtrace_functions(const char *funcname)
441
- {
442
- char *p;
443
-
444
- if (!backtrace_symbol_list || funcname == NULL || funcname[0] == '\0')
445
- return false;
446
-
447
- p = backtrace_symbol_list;
448
- for (;;)
449
- {
450
- if (*p == '\0') /* end of backtrace_symbol_list */
451
- break;
452
-
453
- if (strcmp(funcname, p) == 0)
454
- return true;
455
- p += strlen(p) + 1;
456
- }
457
-
458
- return false;
459
- }
460
-
461
496
  /*
462
497
  * errfinish --- end an error-reporting cycle
463
498
  *
@@ -478,19 +513,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
478
513
  CHECK_STACK_DEPTH();
479
514
 
480
515
  /* Save the last few bits of error state into the stack entry */
481
- if (filename)
482
- {
483
- const char *slash;
484
-
485
- /* keep only base name, useful especially for vpath builds */
486
- slash = strrchr(filename, '/');
487
- if (slash)
488
- filename = slash + 1;
489
- }
490
-
491
- edata->filename = filename;
492
- edata->lineno = lineno;
493
- edata->funcname = funcname;
516
+ set_stack_entry_location(edata, filename, lineno, funcname);
494
517
 
495
518
  elevel = edata->elevel;
496
519
 
@@ -500,6 +523,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
500
523
  */
501
524
  oldcontext = MemoryContextSwitchTo(ErrorContext);
502
525
 
526
+ /* Collect backtrace, if enabled and we didn't already */
503
527
  if (!edata->backtrace &&
504
528
  edata->funcname &&
505
529
  backtrace_functions &&
@@ -546,45 +570,11 @@ errfinish(const char *filename, int lineno, const char *funcname)
546
570
  PG_RE_THROW();
547
571
  }
548
572
 
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
573
  /* Emit the message to the right places */
560
574
  EmitErrorReport();
561
575
 
562
576
  /* Now free up subsidiary data attached to stack entry, and release it */
563
- if (edata->message)
564
- pfree(edata->message);
565
- if (edata->detail)
566
- pfree(edata->detail);
567
- if (edata->detail_log)
568
- pfree(edata->detail_log);
569
- if (edata->hint)
570
- pfree(edata->hint);
571
- if (edata->context)
572
- pfree(edata->context);
573
- if (edata->backtrace)
574
- pfree(edata->backtrace);
575
- if (edata->schema_name)
576
- pfree(edata->schema_name);
577
- if (edata->table_name)
578
- pfree(edata->table_name);
579
- if (edata->column_name)
580
- pfree(edata->column_name);
581
- if (edata->datatype_name)
582
- pfree(edata->datatype_name);
583
- if (edata->constraint_name)
584
- pfree(edata->constraint_name);
585
- if (edata->internalquery)
586
- pfree(edata->internalquery);
587
-
577
+ FreeErrorDataContents(edata);
588
578
  errordata_stack_depth--;
589
579
 
590
580
  /* Exit error-handling context */
@@ -611,8 +601,14 @@ errfinish(const char *filename, int lineno, const char *funcname)
611
601
  * Any other code you might be tempted to add here should probably be
612
602
  * in an on_proc_exit or on_shmem_exit callback instead.
613
603
  */
614
- fflush(stdout);
615
- fflush(stderr);
604
+ fflush(NULL);
605
+
606
+ /*
607
+ * Let the cumulative stats system know. Only mark the session as
608
+ * terminated by fatal error if there is no other known cause.
609
+ */
610
+ if (pgStatSessionEndCause == DISCONNECT_NORMAL)
611
+ pgStatSessionEndCause = DISCONNECT_FATAL;
616
612
 
617
613
  /*
618
614
  * Do normal process-exit cleanup, then return exit code 1 to indicate
@@ -631,8 +627,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
631
627
  * XXX: what if we are *in* the postmaster? abort() won't kill our
632
628
  * children...
633
629
  */
634
- fflush(stdout);
635
- fflush(stderr);
630
+ fflush(NULL);
636
631
  abort();
637
632
  }
638
633
 
@@ -645,6 +640,242 @@ errfinish(const char *filename, int lineno, const char *funcname)
645
640
  }
646
641
 
647
642
 
643
+ /*
644
+ * errsave_start --- begin a "soft" error-reporting cycle
645
+ *
646
+ * If "context" isn't an ErrorSaveContext node, this behaves as
647
+ * errstart(ERROR, domain), and the errsave() macro ends up acting
648
+ * exactly like ereport(ERROR, ...).
649
+ *
650
+ * If "context" is an ErrorSaveContext node, but the node creator only wants
651
+ * notification of the fact of a soft error without any details, we just set
652
+ * the error_occurred flag in the ErrorSaveContext node and return false,
653
+ * which will cause us to skip the remaining error processing steps.
654
+ *
655
+ * Otherwise, create and initialize error stack entry and return true.
656
+ * Subsequently, errmsg() and perhaps other routines will be called to further
657
+ * populate the stack entry. Finally, errsave_finish() will be called to
658
+ * tidy up.
659
+ */
660
+ bool
661
+ errsave_start(struct Node *context, const char *domain)
662
+ {
663
+ ErrorSaveContext *escontext;
664
+ ErrorData *edata;
665
+
666
+ /*
667
+ * Do we have a context for soft error reporting? If not, just punt to
668
+ * errstart().
669
+ */
670
+ if (context == NULL || !IsA(context, ErrorSaveContext))
671
+ return errstart(ERROR, domain);
672
+
673
+ /* Report that a soft error was detected */
674
+ escontext = (ErrorSaveContext *) context;
675
+ escontext->error_occurred = true;
676
+
677
+ /* Nothing else to do if caller wants no further details */
678
+ if (!escontext->details_wanted)
679
+ return false;
680
+
681
+ /*
682
+ * Okay, crank up a stack entry to store the info in.
683
+ */
684
+
685
+ recursion_depth++;
686
+
687
+ /* Initialize data for this error frame */
688
+ edata = get_error_stack_entry();
689
+ edata->elevel = LOG; /* signal all is well to errsave_finish */
690
+ set_stack_entry_domain(edata, domain);
691
+ /* Select default errcode based on the assumed elevel of ERROR */
692
+ edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
693
+
694
+ /*
695
+ * Any allocations for this error state level should go into the caller's
696
+ * context. We don't need to pollute ErrorContext, or even require it to
697
+ * exist, in this code path.
698
+ */
699
+ edata->assoc_context = CurrentMemoryContext;
700
+
701
+ recursion_depth--;
702
+ return true;
703
+ }
704
+
705
+ /*
706
+ * errsave_finish --- end a "soft" error-reporting cycle
707
+ *
708
+ * If errsave_start() decided this was a regular error, behave as
709
+ * errfinish(). Otherwise, package up the error details and save
710
+ * them in the ErrorSaveContext node.
711
+ */
712
+ void
713
+ errsave_finish(struct Node *context, const char *filename, int lineno,
714
+ const char *funcname)
715
+ {
716
+ ErrorSaveContext *escontext = (ErrorSaveContext *) context;
717
+ ErrorData *edata = &errordata[errordata_stack_depth];
718
+
719
+ /* verify stack depth before accessing *edata */
720
+ CHECK_STACK_DEPTH();
721
+
722
+ /*
723
+ * If errsave_start punted to errstart, then elevel will be ERROR or
724
+ * perhaps even PANIC. Punt likewise to errfinish.
725
+ */
726
+ if (edata->elevel >= ERROR)
727
+ {
728
+ errfinish(filename, lineno, funcname);
729
+ pg_unreachable();
730
+ }
731
+
732
+ /*
733
+ * Else, we should package up the stack entry contents and deliver them to
734
+ * the caller.
735
+ */
736
+ recursion_depth++;
737
+
738
+ /* Save the last few bits of error state into the stack entry */
739
+ set_stack_entry_location(edata, filename, lineno, funcname);
740
+
741
+ /* Replace the LOG value that errsave_start inserted */
742
+ edata->elevel = ERROR;
743
+
744
+ /*
745
+ * We skip calling backtrace and context functions, which are more likely
746
+ * to cause trouble than provide useful context; they might act on the
747
+ * assumption that a transaction abort is about to occur.
748
+ */
749
+
750
+ /*
751
+ * Make a copy of the error info for the caller. All the subsidiary
752
+ * strings are already in the caller's context, so it's sufficient to
753
+ * flat-copy the stack entry.
754
+ */
755
+ escontext->error_data = palloc_object(ErrorData);
756
+ memcpy(escontext->error_data, edata, sizeof(ErrorData));
757
+
758
+ /* Exit error-handling context */
759
+ errordata_stack_depth--;
760
+ recursion_depth--;
761
+ }
762
+
763
+
764
+ /*
765
+ * get_error_stack_entry --- allocate and initialize a new stack entry
766
+ *
767
+ * The entry should be freed, when we're done with it, by calling
768
+ * FreeErrorDataContents() and then decrementing errordata_stack_depth.
769
+ *
770
+ * Returning the entry's address is just a notational convenience,
771
+ * since it had better be errordata[errordata_stack_depth].
772
+ *
773
+ * Although the error stack is not large, we don't expect to run out of space.
774
+ * Using more than one entry implies a new error report during error recovery,
775
+ * which is possible but already suggests we're in trouble. If we exhaust the
776
+ * stack, almost certainly we are in an infinite loop of errors during error
777
+ * recovery, so we give up and PANIC.
778
+ *
779
+ * (Note that this is distinct from the recursion_depth checks, which
780
+ * guard against recursion while handling a single stack entry.)
781
+ */
782
+ static ErrorData *
783
+ get_error_stack_entry(void)
784
+ {
785
+ ErrorData *edata;
786
+
787
+ /* Allocate error frame */
788
+ errordata_stack_depth++;
789
+ if (unlikely(errordata_stack_depth >= ERRORDATA_STACK_SIZE))
790
+ {
791
+ /* Wups, stack not big enough */
792
+ errordata_stack_depth = -1; /* make room on stack */
793
+ ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded")));
794
+ }
795
+
796
+ /* Initialize error frame to all zeroes/NULLs */
797
+ edata = &errordata[errordata_stack_depth];
798
+ memset(edata, 0, sizeof(ErrorData));
799
+
800
+ /* Save errno immediately to ensure error parameter eval can't change it */
801
+ edata->saved_errno = errno;
802
+
803
+ return edata;
804
+ }
805
+
806
+ /*
807
+ * set_stack_entry_domain --- fill in the internationalization domain
808
+ */
809
+ static void
810
+ set_stack_entry_domain(ErrorData *edata, const char *domain)
811
+ {
812
+ /* the default text domain is the backend's */
813
+ edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres");
814
+ /* initialize context_domain the same way (see set_errcontext_domain()) */
815
+ edata->context_domain = edata->domain;
816
+ }
817
+
818
+ /*
819
+ * set_stack_entry_location --- fill in code-location details
820
+ *
821
+ * Store the values of __FILE__, __LINE__, and __func__ from the call site.
822
+ * We make an effort to normalize __FILE__, since compilers are inconsistent
823
+ * about how much of the path they'll include, and we'd prefer that the
824
+ * behavior not depend on that (especially, that it not vary with build path).
825
+ */
826
+ static void
827
+ set_stack_entry_location(ErrorData *edata,
828
+ const char *filename, int lineno,
829
+ const char *funcname)
830
+ {
831
+ if (filename)
832
+ {
833
+ const char *slash;
834
+
835
+ /* keep only base name, useful especially for vpath builds */
836
+ slash = strrchr(filename, '/');
837
+ if (slash)
838
+ filename = slash + 1;
839
+ /* Some Windows compilers use backslashes in __FILE__ strings */
840
+ slash = strrchr(filename, '\\');
841
+ if (slash)
842
+ filename = slash + 1;
843
+ }
844
+
845
+ edata->filename = filename;
846
+ edata->lineno = lineno;
847
+ edata->funcname = funcname;
848
+ }
849
+
850
+ /*
851
+ * matches_backtrace_functions --- checks whether the given funcname matches
852
+ * backtrace_functions
853
+ *
854
+ * See check_backtrace_functions.
855
+ */
856
+ static bool
857
+ matches_backtrace_functions(const char *funcname)
858
+ {
859
+ const char *p;
860
+
861
+ if (!backtrace_function_list || funcname == NULL || funcname[0] == '\0')
862
+ return false;
863
+
864
+ p = backtrace_function_list;
865
+ for (;;)
866
+ {
867
+ if (*p == '\0') /* end of backtrace_function_list */
868
+ break;
869
+
870
+ if (strcmp(funcname, p) == 0)
871
+ return true;
872
+ p += strlen(p) + 1;
873
+ }
874
+
875
+ return false;
876
+ }
877
+
878
+
648
879
  /*
649
880
  * errcode --- add SQLSTATE error code to the current error
650
881
  *
@@ -675,8 +906,6 @@ errcode(int sqlerrcode)
675
906
  */
676
907
  #ifdef EROFS
677
908
  #endif
678
- #if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST) /* same code on AIX */
679
- #endif
680
909
 
681
910
  /*
682
911
  * errcode_for_socket_access --- add SQLSTATE error code to the current error
@@ -687,8 +916,7 @@ errcode(int sqlerrcode)
687
916
  * NOTE: the primary error message string should generally include %m
688
917
  * when this is used.
689
918
  */
690
- #ifdef ECONNRESET
691
- #endif
919
+
692
920
 
693
921
 
694
922
  /*
@@ -953,6 +1181,13 @@ errhint(const char *fmt,...)
953
1181
  }
954
1182
 
955
1183
 
1184
+ /*
1185
+ * errhint_plural --- add a hint error message text to the current error,
1186
+ * with support for pluralization of the message text
1187
+ */
1188
+
1189
+
1190
+
956
1191
  /*
957
1192
  * errcontext_msg --- add a context error message text to the current error
958
1193
  *
@@ -1006,7 +1241,18 @@ set_errcontext_domain(const char *domain)
1006
1241
  *
1007
1242
  * This should be called if the message text already includes the statement.
1008
1243
  */
1244
+ int
1245
+ errhidestmt(bool hide_stmt)
1246
+ {
1247
+ ErrorData *edata = &errordata[errordata_stack_depth];
1248
+
1249
+ /* we don't bother incrementing recursion_depth */
1250
+ CHECK_STACK_DEPTH();
1251
+
1252
+ edata->hide_stmt = hide_stmt;
1009
1253
 
1254
+ return 0; /* return value does not matter */
1255
+ }
1010
1256
 
1011
1257
  /*
1012
1258
  * errhidecontext --- optionally suppress CONTEXT: field of log entry
@@ -1014,17 +1260,18 @@ set_errcontext_domain(const char *domain)
1014
1260
  * This should only be used for verbose debugging messages where the repeated
1015
1261
  * inclusion of context would bloat the log volume too much.
1016
1262
  */
1263
+ int
1264
+ errhidecontext(bool hide_ctx)
1265
+ {
1266
+ ErrorData *edata = &errordata[errordata_stack_depth];
1017
1267
 
1268
+ /* we don't bother incrementing recursion_depth */
1269
+ CHECK_STACK_DEPTH();
1018
1270
 
1271
+ edata->hide_ctx = hide_ctx;
1019
1272
 
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
-
1273
+ return 0; /* return value does not matter */
1274
+ }
1028
1275
 
1029
1276
  /*
1030
1277
  * errposition --- add cursor position to the current error
@@ -1119,6 +1366,14 @@ geterrcode(void)
1119
1366
  return edata->sqlerrcode;
1120
1367
  }
1121
1368
 
1369
+ /*
1370
+ * geterrlevel --- return the currently set error level
1371
+ *
1372
+ * This is only intended for use in error callback subroutines, since there
1373
+ * is no other place outside elog.c where the concept is meaningful.
1374
+ */
1375
+
1376
+
1122
1377
  /*
1123
1378
  * geterrposition --- return the currently set error position (0 if none)
1124
1379
  *
@@ -1197,6 +1452,14 @@ EmitErrorReport(void)
1197
1452
  CHECK_STACK_DEPTH();
1198
1453
  oldcontext = MemoryContextSwitchTo(edata->assoc_context);
1199
1454
 
1455
+ /*
1456
+ * Reset the formatted timestamp fields before emitting any logs. This
1457
+ * includes all the log destinations and emit_log_hook, as the latter
1458
+ * could use log_line_prefix or the formatted timestamps.
1459
+ */
1460
+ saved_timeval_set = false;
1461
+ formatted_log_time[0] = '\0';
1462
+
1200
1463
  /*
1201
1464
  * Call hook before sending message to log. The hook function is allowed
1202
1465
  * to turn off edata->output_to_server, so we must recheck that afterward.
@@ -1256,7 +1519,21 @@ CopyErrorData(void)
1256
1519
  newedata = (ErrorData *) palloc(sizeof(ErrorData));
1257
1520
  memcpy(newedata, edata, sizeof(ErrorData));
1258
1521
 
1259
- /* Make copies of separately-allocated fields */
1522
+ /*
1523
+ * Make copies of separately-allocated strings. Note that we copy even
1524
+ * theoretically-constant strings such as filename. This is because those
1525
+ * could point into JIT-created code segments that might get unloaded at
1526
+ * transaction cleanup. In some cases we need the copied ErrorData to
1527
+ * survive transaction boundaries, so we'd better copy those strings too.
1528
+ */
1529
+ if (newedata->filename)
1530
+ newedata->filename = pstrdup(newedata->filename);
1531
+ if (newedata->funcname)
1532
+ newedata->funcname = pstrdup(newedata->funcname);
1533
+ if (newedata->domain)
1534
+ newedata->domain = pstrdup(newedata->domain);
1535
+ if (newedata->context_domain)
1536
+ newedata->context_domain = pstrdup(newedata->context_domain);
1260
1537
  if (newedata->message)
1261
1538
  newedata->message = pstrdup(newedata->message);
1262
1539
  if (newedata->detail)
@@ -1269,6 +1546,8 @@ CopyErrorData(void)
1269
1546
  newedata->context = pstrdup(newedata->context);
1270
1547
  if (newedata->backtrace)
1271
1548
  newedata->backtrace = pstrdup(newedata->backtrace);
1549
+ if (newedata->message_id)
1550
+ newedata->message_id = pstrdup(newedata->message_id);
1272
1551
  if (newedata->schema_name)
1273
1552
  newedata->schema_name = pstrdup(newedata->schema_name);
1274
1553
  if (newedata->table_name)
@@ -1296,6 +1575,40 @@ CopyErrorData(void)
1296
1575
  */
1297
1576
 
1298
1577
 
1578
+ /*
1579
+ * FreeErrorDataContents --- free the subsidiary data of an ErrorData.
1580
+ *
1581
+ * This can be used on either an error stack entry or a copied ErrorData.
1582
+ */
1583
+ static void
1584
+ FreeErrorDataContents(ErrorData *edata)
1585
+ {
1586
+ if (edata->message)
1587
+ pfree(edata->message);
1588
+ if (edata->detail)
1589
+ pfree(edata->detail);
1590
+ if (edata->detail_log)
1591
+ pfree(edata->detail_log);
1592
+ if (edata->hint)
1593
+ pfree(edata->hint);
1594
+ if (edata->context)
1595
+ pfree(edata->context);
1596
+ if (edata->backtrace)
1597
+ pfree(edata->backtrace);
1598
+ if (edata->schema_name)
1599
+ pfree(edata->schema_name);
1600
+ if (edata->table_name)
1601
+ pfree(edata->table_name);
1602
+ if (edata->column_name)
1603
+ pfree(edata->column_name);
1604
+ if (edata->datatype_name)
1605
+ pfree(edata->datatype_name);
1606
+ if (edata->constraint_name)
1607
+ pfree(edata->constraint_name);
1608
+ if (edata->internalquery)
1609
+ pfree(edata->internalquery);
1610
+ }
1611
+
1299
1612
  /*
1300
1613
  * FlushErrorState --- flush the error state after error recovery
1301
1614
  *
@@ -1316,7 +1629,7 @@ FlushErrorState(void)
1316
1629
  errordata_stack_depth = -1;
1317
1630
  recursion_depth = 0;
1318
1631
  /* Delete all data in ErrorContext */
1319
- MemoryContextResetAndDeleteChildren(ErrorContext);
1632
+ MemoryContextReset(ErrorContext);
1320
1633
  }
1321
1634
 
1322
1635
  /*
@@ -1368,16 +1681,10 @@ pg_re_throw(void)
1368
1681
 
1369
1682
  /*
1370
1683
  * 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.
1684
+ * where-to-output decisions, so recalculate.
1373
1685
  */
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;
1686
+ edata->output_to_server = should_output_to_server(FATAL);
1687
+ edata->output_to_client = should_output_to_client(FATAL);
1381
1688
 
1382
1689
  /*
1383
1690
  * We can use errfinish() for the rest, but we don't want it to call
@@ -1390,8 +1697,7 @@ pg_re_throw(void)
1390
1697
  }
1391
1698
 
1392
1699
  /* Doesn't return ... */
1393
- ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion",
1394
- __FILE__, __LINE__);
1700
+ ExceptionalCondition("pg_re_throw tried to return", __FILE__, __LINE__);
1395
1701
  }
1396
1702
 
1397
1703
 
@@ -1415,13 +1721,49 @@ pg_re_throw(void)
1415
1721
 
1416
1722
 
1417
1723
 
1724
+ /*
1725
+ * GUC check_hook for backtrace_functions
1726
+ *
1727
+ * We split the input string, where commas separate function names
1728
+ * and certain whitespace chars are ignored, into a \0-separated (and
1729
+ * \0\0-terminated) list of function names. This formulation allows
1730
+ * easy scanning when an error is thrown while avoiding the use of
1731
+ * non-reentrant strtok(), as well as keeping the output data in a
1732
+ * single palloc() chunk.
1733
+ */
1734
+
1735
+
1736
+ /*
1737
+ * GUC assign_hook for backtrace_functions
1738
+ */
1739
+
1740
+
1741
+ /*
1742
+ * GUC check_hook for log_destination
1743
+ */
1418
1744
  #ifdef HAVE_SYSLOG
1745
+ #endif
1746
+ #ifdef WIN32
1747
+ #endif
1748
+
1749
+ /*
1750
+ * GUC assign_hook for log_destination
1751
+ */
1752
+
1419
1753
 
1420
1754
  /*
1421
- * Set or update the parameters for syslog logging
1755
+ * GUC assign_hook for syslog_ident
1422
1756
  */
1757
+ #ifdef HAVE_SYSLOG
1758
+ #endif
1423
1759
 
1760
+ /*
1761
+ * GUC assign_hook for syslog_facility
1762
+ */
1763
+ #ifdef HAVE_SYSLOG
1764
+ #endif
1424
1765
 
1766
+ #ifdef HAVE_SYSLOG
1425
1767
 
1426
1768
  /*
1427
1769
  * Write a message line to syslog
@@ -1435,107 +1777,12 @@ pg_re_throw(void)
1435
1777
  * interfaces (e.g. CreateFileA()) expect string arguments in this encoding.
1436
1778
  * Every process in a given system will find the same value at all times.
1437
1779
  */
1438
- static int
1439
- GetACPEncoding(void)
1440
- {
1441
- static int encoding = -2;
1442
1780
 
1443
- if (encoding == -2)
1444
- encoding = pg_codepage_to_encoding(GetACP());
1445
-
1446
- return encoding;
1447
- }
1448
1781
 
1449
1782
  /*
1450
1783
  * Write a message line to the windows event log
1451
1784
  */
1452
- static void
1453
- write_eventlog(int level, const char *line, int len)
1454
- {
1455
- WCHAR *utf16;
1456
- int eventlevel = EVENTLOG_ERROR_TYPE;
1457
- static HANDLE evtHandle = INVALID_HANDLE_VALUE;
1458
1785
 
1459
- if (evtHandle == INVALID_HANDLE_VALUE)
1460
- {
1461
- evtHandle = RegisterEventSource(NULL,
1462
- event_source ? event_source : DEFAULT_EVENT_SOURCE);
1463
- if (evtHandle == NULL)
1464
- {
1465
- evtHandle = INVALID_HANDLE_VALUE;
1466
- return;
1467
- }
1468
- }
1469
-
1470
- switch (level)
1471
- {
1472
- case DEBUG5:
1473
- case DEBUG4:
1474
- case DEBUG3:
1475
- case DEBUG2:
1476
- case DEBUG1:
1477
- case LOG:
1478
- case LOG_SERVER_ONLY:
1479
- case INFO:
1480
- case NOTICE:
1481
- eventlevel = EVENTLOG_INFORMATION_TYPE;
1482
- break;
1483
- case WARNING:
1484
- eventlevel = EVENTLOG_WARNING_TYPE;
1485
- break;
1486
- case ERROR:
1487
- case FATAL:
1488
- case PANIC:
1489
- default:
1490
- eventlevel = EVENTLOG_ERROR_TYPE;
1491
- break;
1492
- }
1493
-
1494
- /*
1495
- * If message character encoding matches the encoding expected by
1496
- * ReportEventA(), call it to avoid the hazards of conversion. Otherwise,
1497
- * try to convert the message to UTF16 and write it with ReportEventW().
1498
- * Fall back on ReportEventA() if conversion failed.
1499
- *
1500
- * Since we palloc the structure required for conversion, also fall
1501
- * through to writing unconverted if we have not yet set up
1502
- * CurrentMemoryContext.
1503
- *
1504
- * Also verify that we are not on our way into error recursion trouble due
1505
- * to error messages thrown deep inside pgwin32_message_to_UTF16().
1506
- */
1507
- if (!in_error_recursion_trouble() &&
1508
- CurrentMemoryContext != NULL &&
1509
- GetMessageEncoding() != GetACPEncoding())
1510
- {
1511
- utf16 = pgwin32_message_to_UTF16(line, len, NULL);
1512
- if (utf16)
1513
- {
1514
- ReportEventW(evtHandle,
1515
- eventlevel,
1516
- 0,
1517
- 0, /* All events are Id 0 */
1518
- NULL,
1519
- 1,
1520
- 0,
1521
- (LPCWSTR *) &utf16,
1522
- NULL);
1523
- /* XXX Try ReportEventA() when ReportEventW() fails? */
1524
-
1525
- pfree(utf16);
1526
- return;
1527
- }
1528
- }
1529
- ReportEventA(evtHandle,
1530
- eventlevel,
1531
- 0,
1532
- 0, /* All events are Id 0 */
1533
- NULL,
1534
- 1,
1535
- 0,
1536
- &line,
1537
- NULL);
1538
- }
1539
1786
  #endif /* WIN32 */
1540
1787
 
1541
1788
  #ifdef WIN32
@@ -1543,39 +1790,56 @@ write_eventlog(int level, const char *line, int len)
1543
1790
  #endif
1544
1791
 
1545
1792
  /*
1546
- * setup formatted_log_time, for consistent times between CSV and regular logs
1793
+ * get_formatted_log_time -- compute and get the log timestamp.
1794
+ *
1795
+ * The timestamp is computed if not set yet, so as it is kept consistent
1796
+ * among all the log destinations that require it to be consistent. Note
1797
+ * that the computed timestamp is returned in a static buffer, not
1798
+ * palloc()'d.
1547
1799
  */
1548
1800
 
1549
1801
 
1550
1802
  /*
1551
- * setup formatted_start_time
1803
+ * reset_formatted_start_time -- reset the start timestamp
1552
1804
  */
1553
1805
 
1554
1806
 
1555
1807
  /*
1556
- * process_log_prefix_padding --- helper function for processing the format
1557
- * string in log_line_prefix
1808
+ * get_formatted_start_time -- compute and get the start timestamp.
1558
1809
  *
1559
- * Note: This function returns NULL if it finds something which
1560
- * it deems invalid in the format string.
1810
+ * The timestamp is computed if not set yet. Note that the computed
1811
+ * timestamp is returned in a static buffer, not palloc()'d.
1812
+ */
1813
+
1814
+
1815
+ /*
1816
+ * check_log_of_query -- check if a query can be logged
1817
+ */
1818
+
1819
+
1820
+ /*
1821
+ * get_backend_type_for_log -- backend type for log entries
1822
+ *
1823
+ * Returns a pointer to a static buffer, not palloc()'d.
1561
1824
  */
1562
1825
 
1563
1826
 
1564
1827
  /*
1565
- * Format tag info for log lines; append to the provided buffer.
1828
+ * process_log_prefix_padding --- helper function for processing the format
1829
+ * string in log_line_prefix
1830
+ *
1831
+ * Note: This function returns NULL if it finds something which
1832
+ * it deems invalid in the format string.
1566
1833
  */
1567
1834
 
1568
1835
 
1569
1836
  /*
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.
1837
+ * Format log status information using Log_line_prefix.
1573
1838
  */
1574
1839
 
1575
1840
 
1576
1841
  /*
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.
1842
+ * Format log status info; append to the provided buffer.
1579
1843
  */
1580
1844
 
1581
1845
 
@@ -1663,86 +1927,22 @@ static void send_message_to_frontend(ErrorData *edata) {}
1663
1927
  * not available). Used before ereport/elog can be used
1664
1928
  * safely (memory context, GUC load etc)
1665
1929
  */
1930
+
1666
1931
  void
1667
1932
  write_stderr(const char *fmt,...)
1668
1933
  {
1669
- va_list ap;
1670
-
1671
- #ifdef WIN32
1672
- char errbuf[2048]; /* Arbitrary size? */
1673
- #endif
1674
-
1675
- fmt = _(fmt);
1676
-
1934
+ va_list ap;
1677
1935
  va_start(ap, fmt);
1678
- #ifndef WIN32
1679
- /* On Unix, we just fprintf to stderr */
1680
1936
  vfprintf(stderr, fmt, ap);
1681
1937
  fflush(stderr);
1682
- #else
1683
- vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
1684
-
1685
- /*
1686
- * On Win32, we print to stderr if running on a console, or write to
1687
- * eventlog if running as a service
1688
- */
1689
- if (pgwin32_is_service()) /* Running as a service */
1690
- {
1691
- write_eventlog(ERROR, errbuf, strlen(errbuf));
1692
- }
1693
- else
1694
- {
1695
- /* Not running as service, write to stderr */
1696
- write_console(errbuf, strlen(errbuf));
1697
- fflush(stderr);
1698
- }
1699
- #endif
1700
1938
  va_end(ap);
1701
1939
  }
1702
1940
 
1703
1941
 
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
- }
1942
+ #ifdef WIN32
1943
+ __thread volatile int pg_signal_queue;
1732
1944
 
1733
- /*
1734
- * Adjust the level of a recovery-related message per trace_recovery_messages.
1735
- *
1736
- * The argument is the default log level of the message, eg, DEBUG2. (This
1737
- * should only be applied to DEBUGn log messages, otherwise it's a no-op.)
1738
- * If the level is >= trace_recovery_messages, we return LOG, causing the
1739
- * message to be logged unconditionally (for most settings of
1740
- * log_min_messages). Otherwise, we return the argument unchanged.
1741
- * The message will then be shown based on the setting of log_min_messages.
1742
- *
1743
- * Intention is to keep this for at least the whole of the 9.0 production
1744
- * release, so we can more easily diagnose production problems in the field.
1745
- * It should go away eventually, though, because it's an ugly and
1746
- * hard-to-explain kluge.
1747
- */
1945
+ __thread int pg_signal_mask;
1748
1946
 
1947
+ void pgwin32_dispatch_queued_signals(void) {}
1948
+ #endif