pg_query 4.2.1 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (531) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +6 -8
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/extconf.rb +14 -4
  6. data/ext/pg_query/include/pg_query.h +27 -3
  7. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +1 -1
  29. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
  30. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  31. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  32. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  34. data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
  36. data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
  37. data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
  38. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  39. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  40. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +58 -98
  42. data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
  43. data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
  44. data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
  45. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
  46. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  47. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
  48. data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
  49. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
  50. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
  52. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  53. data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
  54. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
  58. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
  60. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  82. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +1 -1
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
  125. data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
  126. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
  127. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
  129. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  130. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +4 -4
  132. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
  133. data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
  134. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
  135. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  136. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
  137. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  138. data/ext/pg_query/include/postgres/common/int.h +437 -0
  139. data/ext/pg_query/include/{common → postgres/common}/keywords.h +1 -1
  140. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  141. data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
  142. data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
  143. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  144. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  145. data/ext/pg_query/include/{common → postgres/common}/string.h +5 -3
  146. data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
  147. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
  148. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  149. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  150. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +11 -4
  151. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  152. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  153. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  154. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +34 -17
  155. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
  156. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
  157. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
  158. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  159. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  160. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +21 -2
  161. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  162. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
  163. data/ext/pg_query/include/postgres/gram.h +1127 -0
  164. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  165. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +2 -2
  166. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  167. data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
  168. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
  169. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  170. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
  171. data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
  172. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  173. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
  181. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  182. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  183. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +35 -18
  184. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  185. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
  186. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
  192. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  193. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +96 -511
  195. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  196. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +377 -139
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  203. data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
  204. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  205. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  206. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/value.h +12 -2
  208. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
  214. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
  215. data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
  216. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  224. data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
  225. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  226. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  227. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +1 -1
  228. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  229. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +158 -218
  230. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
  231. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  232. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
  233. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  234. data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
  235. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
  236. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
  237. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  238. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +1 -1
  239. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
  240. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
  241. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
  242. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  245. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  249. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  250. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  251. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  252. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +62 -25
  253. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  254. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  255. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  256. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  257. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  258. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  259. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  260. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  261. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  264. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  268. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  269. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  270. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  275. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  276. data/ext/pg_query/include/{port.h → postgres/port.h} +42 -75
  277. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  278. data/ext/pg_query/include/postgres/postgres.h +579 -0
  279. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  280. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +1 -4
  281. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  285. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
  289. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
  290. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
  291. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
  292. data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
  293. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  294. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
  295. data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
  296. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
  297. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
  298. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
  299. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
  300. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  301. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  304. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +1 -1
  305. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
  306. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  307. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
  308. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
  309. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
  310. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
  311. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
  312. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
  313. data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
  314. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -2
  315. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  316. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  317. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +94 -57
  318. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
  320. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
  321. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
  323. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
  324. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  325. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  326. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +1 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
  329. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
  330. data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
  331. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  332. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
  333. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
  335. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
  336. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
  337. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  338. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  339. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +3 -3
  340. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  341. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
  342. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
  343. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
  344. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
  345. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
  346. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  347. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
  348. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -1
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
  354. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
  355. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
  356. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  357. data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
  358. data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
  359. data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
  360. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
  361. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
  362. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  363. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  364. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +41 -21
  365. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  367. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
  368. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  369. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  370. data/ext/pg_query/include/{utils → postgres/utils}/float.h +7 -6
  371. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
  372. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
  374. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
  375. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  376. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
  377. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
  378. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
  379. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
  381. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  382. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
  383. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  384. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  385. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +20 -5
  386. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
  387. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  388. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
  389. data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
  390. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
  391. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
  392. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
  393. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  395. data/ext/pg_query/include/{utils → postgres/utils}/regproc.h +3 -3
  396. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
  397. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
  398. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  399. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  400. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +6 -1
  401. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  402. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
  403. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
  405. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
  407. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
  408. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
  409. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
  411. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
  412. data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
  413. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
  414. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
  415. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  416. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  417. data/ext/pg_query/pg_query.c +10 -1
  418. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  419. data/ext/pg_query/pg_query_deparse.c +1 -10635
  420. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  421. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  422. data/ext/pg_query/pg_query_internal.h +1 -1
  423. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  424. data/ext/pg_query/pg_query_normalize.c +1 -1
  425. data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
  426. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  427. data/ext/pg_query/pg_query_parse.c +47 -5
  428. data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
  429. data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
  430. data/ext/pg_query/pg_query_ruby.c +5 -0
  431. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  432. data/ext/pg_query/pg_query_scan.c +1 -1
  433. data/ext/pg_query/pg_query_split.c +3 -3
  434. data/ext/pg_query/postgres_deparse.c +11067 -0
  435. data/ext/pg_query/postgres_deparse.h +9 -0
  436. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  437. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  438. data/ext/pg_query/src_backend_commands_define.c +1 -1
  439. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  440. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  441. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  442. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  443. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  444. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  445. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  446. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  447. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  448. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  449. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  450. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  451. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  452. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  453. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  454. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  455. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  456. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  457. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  458. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  459. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  460. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  461. data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
  462. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  463. data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
  464. data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
  465. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  466. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  467. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  468. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  469. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  470. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  471. data/ext/pg_query/src_common_encnames.c +4 -1
  472. data/ext/pg_query/src_common_hashfn.c +1 -1
  473. data/ext/pg_query/src_common_keywords.c +1 -1
  474. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  475. data/ext/pg_query/src_common_kwlookup.c +1 -1
  476. data/ext/pg_query/src_common_psprintf.c +1 -1
  477. data/ext/pg_query/src_common_stringinfo.c +4 -4
  478. data/ext/pg_query/src_common_wchar.c +9 -8
  479. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  480. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  481. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  482. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  483. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  484. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  485. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  486. data/ext/pg_query/src_port_pg_bitutils.c +79 -5
  487. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  488. data/ext/pg_query/src_port_snprintf.c +6 -10
  489. data/ext/pg_query/src_port_strerror.c +1 -1
  490. data/ext/pg_query/src_port_strlcpy.c +79 -0
  491. data/lib/pg_query/fingerprint.rb +2 -3
  492. data/lib/pg_query/node.rb +16 -11
  493. data/lib/pg_query/parse.rb +1 -1
  494. data/lib/pg_query/pg_query_pb.rb +166 -3191
  495. data/lib/pg_query/treewalker.rb +23 -5
  496. data/lib/pg_query/version.rb +1 -1
  497. metadata +432 -380
  498. data/ext/pg_query/guc-file.c +0 -0
  499. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  500. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  501. data/ext/pg_query/include/commands/variable.h +0 -38
  502. data/ext/pg_query/include/common/ip.h +0 -31
  503. data/ext/pg_query/include/getaddrinfo.h +0 -162
  504. data/ext/pg_query/include/kwlist_d.h +0 -1095
  505. data/ext/pg_query/include/parser/gram.h +0 -1101
  506. data/ext/pg_query/include/pg_config_os.h +0 -8
  507. data/ext/pg_query/include/portability/instr_time.h +0 -256
  508. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  509. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  510. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  511. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  512. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  513. data/ext/pg_query/include/utils/dynahash.h +0 -20
  514. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  515. data/ext/pg_query/include/utils/pidfile.h +0 -56
  516. data/ext/pg_query/include/utils/ps_status.h +0 -25
  517. data/ext/pg_query/include/utils/rls.h +0 -50
  518. data/ext/pg_query/include/utils/tzparser.h +0 -39
  519. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  520. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  521. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  522. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  523. data/ext/pg_query/src_common_pg_prng.c +0 -152
  524. data/ext/pg_query/src_common_string.c +0 -92
  525. data/ext/pg_query/src_port_pgsleep.c +0 -69
  526. data/ext/pg_query/src_port_strnlen.c +0 -39
  527. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  528. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
  529. /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
  530. /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
  531. /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +0 -0
@@ -4,7 +4,6 @@
4
4
  * - errstart
5
5
  * - PG_exception_stack
6
6
  * - write_stderr
7
- * - err_gettext
8
7
  * - in_error_recursion_trouble
9
8
  * - error_context_stack
10
9
  * - errordata_stack_depth
@@ -13,6 +12,8 @@
13
12
  * - is_log_level_output
14
13
  * - should_output_to_client
15
14
  * - recursion_depth
15
+ * - get_error_stack_entry
16
+ * - set_stack_entry_domain
16
17
  * - errmsg_internal
17
18
  * - errcode
18
19
  * - errmsg
@@ -25,9 +26,15 @@
25
26
  * - emit_log_hook
26
27
  * - send_message_to_server_log
27
28
  * - send_message_to_frontend
29
+ * - pgwin32_dispatch_queued_signals
30
+ * - set_stack_entry_location
28
31
  * - matches_backtrace_functions
32
+ * - backtrace_symbol_list
29
33
  * - set_backtrace
34
+ * - FreeErrorDataContents
30
35
  * - geterrcode
36
+ * - errsave_start
37
+ * - errsave_finish
31
38
  * - errhint
32
39
  * - errposition
33
40
  * - internalerrposition
@@ -38,6 +45,9 @@
38
45
  * - errcontext_msg
39
46
  * - CopyErrorData
40
47
  * - FlushErrorState
48
+ * - pg_signal_queue
49
+ * - pg_signal_mask
50
+ * - pgwin32_dispatch_queued_signals
41
51
  *--------------------------------------------------------------------
42
52
  */
43
53
 
@@ -86,7 +96,7 @@
86
96
  * overflow.)
87
97
  *
88
98
  *
89
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
99
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
90
100
  * Portions Copyright (c) 1994, Regents of the University of California
91
101
  *
92
102
  *
@@ -114,6 +124,7 @@
114
124
  #include "libpq/libpq.h"
115
125
  #include "libpq/pqformat.h"
116
126
  #include "mb/pg_wchar.h"
127
+ #include "nodes/miscnodes.h"
117
128
  #include "miscadmin.h"
118
129
  #include "pgstat.h"
119
130
  #include "postmaster/bgworker.h"
@@ -122,9 +133,10 @@
122
133
  #include "storage/ipc.h"
123
134
  #include "storage/proc.h"
124
135
  #include "tcop/tcopprot.h"
125
- #include "utils/guc.h"
136
+ #include "utils/guc_hooks.h"
126
137
  #include "utils/memutils.h"
127
138
  #include "utils/ps_status.h"
139
+ #include "utils/varlena.h"
128
140
 
129
141
 
130
142
  /* In this module, access gettext() via err_gettext() */
@@ -159,6 +171,10 @@ __thread emit_log_hook_type emit_log_hook = NULL;
159
171
 
160
172
 
161
173
 
174
+ /* Processed form of backtrace_symbols GUC */
175
+ static __thread char *backtrace_symbol_list;
176
+
177
+
162
178
  #ifdef HAVE_SYSLOG
163
179
 
164
180
  /*
@@ -221,10 +237,17 @@ static __thread int recursion_depth = 0;
221
237
 
222
238
 
223
239
  static const char *err_gettext(const char *str) pg_attribute_format_arg(1);
240
+ static ErrorData *get_error_stack_entry(void);
241
+ static void set_stack_entry_domain(ErrorData *edata, const char *domain);
242
+ static void set_stack_entry_location(ErrorData *edata,
243
+ const char *filename, int lineno,
244
+ const char *funcname);
245
+ static bool matches_backtrace_functions(const char *funcname);
224
246
  static pg_noinline void set_backtrace(ErrorData *edata, int num_skip);
225
247
  static void set_errdata_field(MemoryContextData *cxt, char **ptr, const char *str);
248
+ static void FreeErrorDataContents(ErrorData *edata);
226
249
  static void write_console(const char *line, int len);
227
- static const char *process_log_prefix_padding(const char *p, int *padding);
250
+ static const char *process_log_prefix_padding(const char *p, int *ppadding);
228
251
  static void log_line_prefix(StringInfo buf, ErrorData *edata);
229
252
  static void send_message_to_server_log(ErrorData *edata);
230
253
  static void send_message_to_frontend(ErrorData *edata);
@@ -282,24 +305,8 @@ should_output_to_server(int elevel)
282
305
  /*
283
306
  * should_output_to_client --- should message of given elevel go to the client?
284
307
  */
285
- static inline bool
286
- should_output_to_client(int elevel)
287
- {
288
- if (whereToSendOutput == DestRemote && elevel != LOG_SERVER_ONLY)
289
- {
290
- /*
291
- * client_min_messages is honored only after we complete the
292
- * authentication handshake. This is required both for security
293
- * reasons and because many clients can't handle NOTICE messages
294
- * during authentication.
295
- */
296
- if (ClientAuthInProgress)
297
- return (elevel >= ERROR);
298
- else
299
- return (elevel >= client_min_messages || elevel == INFO);
300
- }
301
- return false;
302
- }
308
+ static inline bool should_output_to_client(int elevel) { return false; }
309
+
303
310
 
304
311
 
305
312
  /*
@@ -332,18 +339,9 @@ in_error_recursion_trouble(void)
332
339
  * message, since there's a significant probability that that's exactly
333
340
  * what's causing the recursion.
334
341
  */
335
- static inline const char *
336
- err_gettext(const char *str)
337
- {
338
342
  #ifdef ENABLE_NLS
339
- if (in_error_recursion_trouble())
340
- return str;
341
- else
342
- return gettext(str);
343
343
  #else
344
- return str;
345
344
  #endif
346
- }
347
345
 
348
346
  /*
349
347
  * errstart_cold
@@ -468,27 +466,13 @@ errstart(int elevel, const char *domain)
468
466
  debug_query_string = NULL;
469
467
  }
470
468
  }
471
- if (++errordata_stack_depth >= ERRORDATA_STACK_SIZE)
472
- {
473
- /*
474
- * Wups, stack not big enough. We treat this as a PANIC condition
475
- * because it suggests an infinite loop of errors during error
476
- * recovery.
477
- */
478
- errordata_stack_depth = -1; /* make room on stack */
479
- ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded")));
480
- }
481
469
 
482
470
  /* Initialize data for this error frame */
483
- edata = &errordata[errordata_stack_depth];
484
- MemSet(edata, 0, sizeof(ErrorData));
471
+ edata = get_error_stack_entry();
485
472
  edata->elevel = elevel;
486
473
  edata->output_to_server = output_to_server;
487
474
  edata->output_to_client = output_to_client;
488
- /* the default text domain is the backend's */
489
- edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres");
490
- /* initialize context_domain the same way (see set_errcontext_domain()) */
491
- edata->context_domain = edata->domain;
475
+ set_stack_entry_domain(edata, domain);
492
476
  /* Select default errcode based on elevel */
493
477
  if (elevel >= ERROR)
494
478
  edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
@@ -496,8 +480,6 @@ errstart(int elevel, const char *domain)
496
480
  edata->sqlerrcode = ERRCODE_WARNING;
497
481
  else
498
482
  edata->sqlerrcode = ERRCODE_SUCCESSFUL_COMPLETION;
499
- /* errno is saved here so that error parameter eval can't change it */
500
- edata->saved_errno = errno;
501
483
 
502
484
  /*
503
485
  * Any allocations for this error state level should go into ErrorContext
@@ -508,32 +490,6 @@ errstart(int elevel, const char *domain)
508
490
  return true;
509
491
  }
510
492
 
511
- /*
512
- * Checks whether the given funcname matches backtrace_functions; see
513
- * check_backtrace_functions.
514
- */
515
- static bool
516
- matches_backtrace_functions(const char *funcname)
517
- {
518
- char *p;
519
-
520
- if (!backtrace_symbol_list || funcname == NULL || funcname[0] == '\0')
521
- return false;
522
-
523
- p = backtrace_symbol_list;
524
- for (;;)
525
- {
526
- if (*p == '\0') /* end of backtrace_symbol_list */
527
- break;
528
-
529
- if (strcmp(funcname, p) == 0)
530
- return true;
531
- p += strlen(p) + 1;
532
- }
533
-
534
- return false;
535
- }
536
-
537
493
  /*
538
494
  * errfinish --- end an error-reporting cycle
539
495
  *
@@ -554,23 +510,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
554
510
  CHECK_STACK_DEPTH();
555
511
 
556
512
  /* Save the last few bits of error state into the stack entry */
557
- if (filename)
558
- {
559
- const char *slash;
560
-
561
- /* keep only base name, useful especially for vpath builds */
562
- slash = strrchr(filename, '/');
563
- if (slash)
564
- filename = slash + 1;
565
- /* Some Windows compilers use backslashes in __FILE__ strings */
566
- slash = strrchr(filename, '\\');
567
- if (slash)
568
- filename = slash + 1;
569
- }
570
-
571
- edata->filename = filename;
572
- edata->lineno = lineno;
573
- edata->funcname = funcname;
513
+ set_stack_entry_location(edata, filename, lineno, funcname);
574
514
 
575
515
  elevel = edata->elevel;
576
516
 
@@ -580,6 +520,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
580
520
  */
581
521
  oldcontext = MemoryContextSwitchTo(ErrorContext);
582
522
 
523
+ /* Collect backtrace, if enabled and we didn't already */
583
524
  if (!edata->backtrace &&
584
525
  edata->funcname &&
585
526
  backtrace_functions &&
@@ -630,31 +571,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
630
571
  EmitErrorReport();
631
572
 
632
573
  /* Now free up subsidiary data attached to stack entry, and release it */
633
- if (edata->message)
634
- pfree(edata->message);
635
- if (edata->detail)
636
- pfree(edata->detail);
637
- if (edata->detail_log)
638
- pfree(edata->detail_log);
639
- if (edata->hint)
640
- pfree(edata->hint);
641
- if (edata->context)
642
- pfree(edata->context);
643
- if (edata->backtrace)
644
- pfree(edata->backtrace);
645
- if (edata->schema_name)
646
- pfree(edata->schema_name);
647
- if (edata->table_name)
648
- pfree(edata->table_name);
649
- if (edata->column_name)
650
- pfree(edata->column_name);
651
- if (edata->datatype_name)
652
- pfree(edata->datatype_name);
653
- if (edata->constraint_name)
654
- pfree(edata->constraint_name);
655
- if (edata->internalquery)
656
- pfree(edata->internalquery);
657
-
574
+ FreeErrorDataContents(edata);
658
575
  errordata_stack_depth--;
659
576
 
660
577
  /* Exit error-handling context */
@@ -681,8 +598,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
681
598
  * Any other code you might be tempted to add here should probably be
682
599
  * in an on_proc_exit or on_shmem_exit callback instead.
683
600
  */
684
- fflush(stdout);
685
- fflush(stderr);
601
+ fflush(NULL);
686
602
 
687
603
  /*
688
604
  * Let the cumulative stats system know. Only mark the session as
@@ -708,8 +624,7 @@ errfinish(const char *filename, int lineno, const char *funcname)
708
624
  * XXX: what if we are *in* the postmaster? abort() won't kill our
709
625
  * children...
710
626
  */
711
- fflush(stdout);
712
- fflush(stderr);
627
+ fflush(NULL);
713
628
  abort();
714
629
  }
715
630
 
@@ -722,6 +637,242 @@ errfinish(const char *filename, int lineno, const char *funcname)
722
637
  }
723
638
 
724
639
 
640
+ /*
641
+ * errsave_start --- begin a "soft" error-reporting cycle
642
+ *
643
+ * If "context" isn't an ErrorSaveContext node, this behaves as
644
+ * errstart(ERROR, domain), and the errsave() macro ends up acting
645
+ * exactly like ereport(ERROR, ...).
646
+ *
647
+ * If "context" is an ErrorSaveContext node, but the node creator only wants
648
+ * notification of the fact of a soft error without any details, we just set
649
+ * the error_occurred flag in the ErrorSaveContext node and return false,
650
+ * which will cause us to skip the remaining error processing steps.
651
+ *
652
+ * Otherwise, create and initialize error stack entry and return true.
653
+ * Subsequently, errmsg() and perhaps other routines will be called to further
654
+ * populate the stack entry. Finally, errsave_finish() will be called to
655
+ * tidy up.
656
+ */
657
+ bool
658
+ errsave_start(struct Node *context, const char *domain)
659
+ {
660
+ ErrorSaveContext *escontext;
661
+ ErrorData *edata;
662
+
663
+ /*
664
+ * Do we have a context for soft error reporting? If not, just punt to
665
+ * errstart().
666
+ */
667
+ if (context == NULL || !IsA(context, ErrorSaveContext))
668
+ return errstart(ERROR, domain);
669
+
670
+ /* Report that a soft error was detected */
671
+ escontext = (ErrorSaveContext *) context;
672
+ escontext->error_occurred = true;
673
+
674
+ /* Nothing else to do if caller wants no further details */
675
+ if (!escontext->details_wanted)
676
+ return false;
677
+
678
+ /*
679
+ * Okay, crank up a stack entry to store the info in.
680
+ */
681
+
682
+ recursion_depth++;
683
+
684
+ /* Initialize data for this error frame */
685
+ edata = get_error_stack_entry();
686
+ edata->elevel = LOG; /* signal all is well to errsave_finish */
687
+ set_stack_entry_domain(edata, domain);
688
+ /* Select default errcode based on the assumed elevel of ERROR */
689
+ edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
690
+
691
+ /*
692
+ * Any allocations for this error state level should go into the caller's
693
+ * context. We don't need to pollute ErrorContext, or even require it to
694
+ * exist, in this code path.
695
+ */
696
+ edata->assoc_context = CurrentMemoryContext;
697
+
698
+ recursion_depth--;
699
+ return true;
700
+ }
701
+
702
+ /*
703
+ * errsave_finish --- end a "soft" error-reporting cycle
704
+ *
705
+ * If errsave_start() decided this was a regular error, behave as
706
+ * errfinish(). Otherwise, package up the error details and save
707
+ * them in the ErrorSaveContext node.
708
+ */
709
+ void
710
+ errsave_finish(struct Node *context, const char *filename, int lineno,
711
+ const char *funcname)
712
+ {
713
+ ErrorSaveContext *escontext = (ErrorSaveContext *) context;
714
+ ErrorData *edata = &errordata[errordata_stack_depth];
715
+
716
+ /* verify stack depth before accessing *edata */
717
+ CHECK_STACK_DEPTH();
718
+
719
+ /*
720
+ * If errsave_start punted to errstart, then elevel will be ERROR or
721
+ * perhaps even PANIC. Punt likewise to errfinish.
722
+ */
723
+ if (edata->elevel >= ERROR)
724
+ {
725
+ errfinish(filename, lineno, funcname);
726
+ pg_unreachable();
727
+ }
728
+
729
+ /*
730
+ * Else, we should package up the stack entry contents and deliver them to
731
+ * the caller.
732
+ */
733
+ recursion_depth++;
734
+
735
+ /* Save the last few bits of error state into the stack entry */
736
+ set_stack_entry_location(edata, filename, lineno, funcname);
737
+
738
+ /* Replace the LOG value that errsave_start inserted */
739
+ edata->elevel = ERROR;
740
+
741
+ /*
742
+ * We skip calling backtrace and context functions, which are more likely
743
+ * to cause trouble than provide useful context; they might act on the
744
+ * assumption that a transaction abort is about to occur.
745
+ */
746
+
747
+ /*
748
+ * Make a copy of the error info for the caller. All the subsidiary
749
+ * strings are already in the caller's context, so it's sufficient to
750
+ * flat-copy the stack entry.
751
+ */
752
+ escontext->error_data = palloc_object(ErrorData);
753
+ memcpy(escontext->error_data, edata, sizeof(ErrorData));
754
+
755
+ /* Exit error-handling context */
756
+ errordata_stack_depth--;
757
+ recursion_depth--;
758
+ }
759
+
760
+
761
+ /*
762
+ * get_error_stack_entry --- allocate and initialize a new stack entry
763
+ *
764
+ * The entry should be freed, when we're done with it, by calling
765
+ * FreeErrorDataContents() and then decrementing errordata_stack_depth.
766
+ *
767
+ * Returning the entry's address is just a notational convenience,
768
+ * since it had better be errordata[errordata_stack_depth].
769
+ *
770
+ * Although the error stack is not large, we don't expect to run out of space.
771
+ * Using more than one entry implies a new error report during error recovery,
772
+ * which is possible but already suggests we're in trouble. If we exhaust the
773
+ * stack, almost certainly we are in an infinite loop of errors during error
774
+ * recovery, so we give up and PANIC.
775
+ *
776
+ * (Note that this is distinct from the recursion_depth checks, which
777
+ * guard against recursion while handling a single stack entry.)
778
+ */
779
+ static ErrorData *
780
+ get_error_stack_entry(void)
781
+ {
782
+ ErrorData *edata;
783
+
784
+ /* Allocate error frame */
785
+ errordata_stack_depth++;
786
+ if (unlikely(errordata_stack_depth >= ERRORDATA_STACK_SIZE))
787
+ {
788
+ /* Wups, stack not big enough */
789
+ errordata_stack_depth = -1; /* make room on stack */
790
+ ereport(PANIC, (errmsg_internal("ERRORDATA_STACK_SIZE exceeded")));
791
+ }
792
+
793
+ /* Initialize error frame to all zeroes/NULLs */
794
+ edata = &errordata[errordata_stack_depth];
795
+ memset(edata, 0, sizeof(ErrorData));
796
+
797
+ /* Save errno immediately to ensure error parameter eval can't change it */
798
+ edata->saved_errno = errno;
799
+
800
+ return edata;
801
+ }
802
+
803
+ /*
804
+ * set_stack_entry_domain --- fill in the internationalization domain
805
+ */
806
+ static void
807
+ set_stack_entry_domain(ErrorData *edata, const char *domain)
808
+ {
809
+ /* the default text domain is the backend's */
810
+ edata->domain = domain ? domain : PG_TEXTDOMAIN("postgres");
811
+ /* initialize context_domain the same way (see set_errcontext_domain()) */
812
+ edata->context_domain = edata->domain;
813
+ }
814
+
815
+ /*
816
+ * set_stack_entry_location --- fill in code-location details
817
+ *
818
+ * Store the values of __FILE__, __LINE__, and __func__ from the call site.
819
+ * We make an effort to normalize __FILE__, since compilers are inconsistent
820
+ * about how much of the path they'll include, and we'd prefer that the
821
+ * behavior not depend on that (especially, that it not vary with build path).
822
+ */
823
+ static void
824
+ set_stack_entry_location(ErrorData *edata,
825
+ const char *filename, int lineno,
826
+ const char *funcname)
827
+ {
828
+ if (filename)
829
+ {
830
+ const char *slash;
831
+
832
+ /* keep only base name, useful especially for vpath builds */
833
+ slash = strrchr(filename, '/');
834
+ if (slash)
835
+ filename = slash + 1;
836
+ /* Some Windows compilers use backslashes in __FILE__ strings */
837
+ slash = strrchr(filename, '\\');
838
+ if (slash)
839
+ filename = slash + 1;
840
+ }
841
+
842
+ edata->filename = filename;
843
+ edata->lineno = lineno;
844
+ edata->funcname = funcname;
845
+ }
846
+
847
+ /*
848
+ * matches_backtrace_functions --- checks whether the given funcname matches
849
+ * backtrace_functions
850
+ *
851
+ * See check_backtrace_functions.
852
+ */
853
+ static bool
854
+ matches_backtrace_functions(const char *funcname)
855
+ {
856
+ const char *p;
857
+
858
+ if (!backtrace_symbol_list || funcname == NULL || funcname[0] == '\0')
859
+ return false;
860
+
861
+ p = backtrace_symbol_list;
862
+ for (;;)
863
+ {
864
+ if (*p == '\0') /* end of backtrace_symbol_list */
865
+ break;
866
+
867
+ if (strcmp(funcname, p) == 0)
868
+ return true;
869
+ p += strlen(p) + 1;
870
+ }
871
+
872
+ return false;
873
+ }
874
+
875
+
725
876
  /*
726
877
  * errcode --- add SQLSTATE error code to the current error
727
878
  *
@@ -1391,6 +1542,40 @@ CopyErrorData(void)
1391
1542
  */
1392
1543
 
1393
1544
 
1545
+ /*
1546
+ * FreeErrorDataContents --- free the subsidiary data of an ErrorData.
1547
+ *
1548
+ * This can be used on either an error stack entry or a copied ErrorData.
1549
+ */
1550
+ static void
1551
+ FreeErrorDataContents(ErrorData *edata)
1552
+ {
1553
+ if (edata->message)
1554
+ pfree(edata->message);
1555
+ if (edata->detail)
1556
+ pfree(edata->detail);
1557
+ if (edata->detail_log)
1558
+ pfree(edata->detail_log);
1559
+ if (edata->hint)
1560
+ pfree(edata->hint);
1561
+ if (edata->context)
1562
+ pfree(edata->context);
1563
+ if (edata->backtrace)
1564
+ pfree(edata->backtrace);
1565
+ if (edata->schema_name)
1566
+ pfree(edata->schema_name);
1567
+ if (edata->table_name)
1568
+ pfree(edata->table_name);
1569
+ if (edata->column_name)
1570
+ pfree(edata->column_name);
1571
+ if (edata->datatype_name)
1572
+ pfree(edata->datatype_name);
1573
+ if (edata->constraint_name)
1574
+ pfree(edata->constraint_name);
1575
+ if (edata->internalquery)
1576
+ pfree(edata->internalquery);
1577
+ }
1578
+
1394
1579
  /*
1395
1580
  * FlushErrorState --- flush the error state after error recovery
1396
1581
  *
@@ -1479,8 +1664,7 @@ pg_re_throw(void)
1479
1664
  }
1480
1665
 
1481
1666
  /* Doesn't return ... */
1482
- ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion",
1483
- __FILE__, __LINE__);
1667
+ ExceptionalCondition("pg_re_throw tried to return", __FILE__, __LINE__);
1484
1668
  }
1485
1669
 
1486
1670
 
@@ -1504,13 +1688,49 @@ pg_re_throw(void)
1504
1688
 
1505
1689
 
1506
1690
 
1691
+ /*
1692
+ * GUC check_hook for backtrace_functions
1693
+ *
1694
+ * We split the input string, where commas separate function names
1695
+ * and certain whitespace chars are ignored, into a \0-separated (and
1696
+ * \0\0-terminated) list of function names. This formulation allows
1697
+ * easy scanning when an error is thrown while avoiding the use of
1698
+ * non-reentrant strtok(), as well as keeping the output data in a
1699
+ * single palloc() chunk.
1700
+ */
1701
+
1702
+
1703
+ /*
1704
+ * GUC assign_hook for backtrace_functions
1705
+ */
1706
+
1707
+
1708
+ /*
1709
+ * GUC check_hook for log_destination
1710
+ */
1507
1711
  #ifdef HAVE_SYSLOG
1712
+ #endif
1713
+ #ifdef WIN32
1714
+ #endif
1508
1715
 
1509
1716
  /*
1510
- * Set or update the parameters for syslog logging
1717
+ * GUC assign_hook for log_destination
1511
1718
  */
1512
1719
 
1513
1720
 
1721
+ /*
1722
+ * GUC assign_hook for syslog_ident
1723
+ */
1724
+ #ifdef HAVE_SYSLOG
1725
+ #endif
1726
+
1727
+ /*
1728
+ * GUC assign_hook for syslog_facility
1729
+ */
1730
+ #ifdef HAVE_SYSLOG
1731
+ #endif
1732
+
1733
+ #ifdef HAVE_SYSLOG
1514
1734
 
1515
1735
  /*
1516
1736
  * Write a message line to syslog
@@ -1524,108 +1744,12 @@ pg_re_throw(void)
1524
1744
  * interfaces (e.g. CreateFileA()) expect string arguments in this encoding.
1525
1745
  * Every process in a given system will find the same value at all times.
1526
1746
  */
1527
- static int
1528
- GetACPEncoding(void)
1529
- {
1530
- static int encoding = -2;
1531
-
1532
- if (encoding == -2)
1533
- encoding = pg_codepage_to_encoding(GetACP());
1534
1747
 
1535
- return encoding;
1536
- }
1537
1748
 
1538
1749
  /*
1539
1750
  * Write a message line to the windows event log
1540
1751
  */
1541
- static void
1542
- write_eventlog(int level, const char *line, int len)
1543
- {
1544
- WCHAR *utf16;
1545
- int eventlevel = EVENTLOG_ERROR_TYPE;
1546
- static HANDLE evtHandle = INVALID_HANDLE_VALUE;
1547
1752
 
1548
- if (evtHandle == INVALID_HANDLE_VALUE)
1549
- {
1550
- evtHandle = RegisterEventSource(NULL,
1551
- event_source ? event_source : DEFAULT_EVENT_SOURCE);
1552
- if (evtHandle == NULL)
1553
- {
1554
- evtHandle = INVALID_HANDLE_VALUE;
1555
- return;
1556
- }
1557
- }
1558
-
1559
- switch (level)
1560
- {
1561
- case DEBUG5:
1562
- case DEBUG4:
1563
- case DEBUG3:
1564
- case DEBUG2:
1565
- case DEBUG1:
1566
- case LOG:
1567
- case LOG_SERVER_ONLY:
1568
- case INFO:
1569
- case NOTICE:
1570
- eventlevel = EVENTLOG_INFORMATION_TYPE;
1571
- break;
1572
- case WARNING:
1573
- case WARNING_CLIENT_ONLY:
1574
- eventlevel = EVENTLOG_WARNING_TYPE;
1575
- break;
1576
- case ERROR:
1577
- case FATAL:
1578
- case PANIC:
1579
- default:
1580
- eventlevel = EVENTLOG_ERROR_TYPE;
1581
- break;
1582
- }
1583
-
1584
- /*
1585
- * If message character encoding matches the encoding expected by
1586
- * ReportEventA(), call it to avoid the hazards of conversion. Otherwise,
1587
- * try to convert the message to UTF16 and write it with ReportEventW().
1588
- * Fall back on ReportEventA() if conversion failed.
1589
- *
1590
- * Since we palloc the structure required for conversion, also fall
1591
- * through to writing unconverted if we have not yet set up
1592
- * CurrentMemoryContext.
1593
- *
1594
- * Also verify that we are not on our way into error recursion trouble due
1595
- * to error messages thrown deep inside pgwin32_message_to_UTF16().
1596
- */
1597
- if (!in_error_recursion_trouble() &&
1598
- CurrentMemoryContext != NULL &&
1599
- GetMessageEncoding() != GetACPEncoding())
1600
- {
1601
- utf16 = pgwin32_message_to_UTF16(line, len, NULL);
1602
- if (utf16)
1603
- {
1604
- ReportEventW(evtHandle,
1605
- eventlevel,
1606
- 0,
1607
- 0, /* All events are Id 0 */
1608
- NULL,
1609
- 1,
1610
- 0,
1611
- (LPCWSTR *) &utf16,
1612
- NULL);
1613
- /* XXX Try ReportEventA() when ReportEventW() fails? */
1614
-
1615
- pfree(utf16);
1616
- return;
1617
- }
1618
- }
1619
- ReportEventA(evtHandle,
1620
- eventlevel,
1621
- 0,
1622
- 0, /* All events are Id 0 */
1623
- NULL,
1624
- 1,
1625
- 0,
1626
- &line,
1627
- NULL);
1628
- }
1629
1753
  #endif /* WIN32 */
1630
1754
 
1631
1755
  #ifdef WIN32
@@ -1677,7 +1801,12 @@ write_eventlog(int level, const char *line, int len)
1677
1801
 
1678
1802
 
1679
1803
  /*
1680
- * Format tag info for log lines; append to the provided buffer.
1804
+ * Format log status information using Log_line_prefix.
1805
+ */
1806
+
1807
+
1808
+ /*
1809
+ * Format log status info; append to the provided buffer.
1681
1810
  */
1682
1811
 
1683
1812
 
@@ -1765,44 +1894,30 @@ static void send_message_to_frontend(ErrorData *edata) {}
1765
1894
  * not available). Used before ereport/elog can be used
1766
1895
  * safely (memory context, GUC load etc)
1767
1896
  */
1897
+
1768
1898
  void
1769
1899
  write_stderr(const char *fmt,...)
1770
1900
  {
1771
- va_list ap;
1772
-
1773
- #ifdef WIN32
1774
- char errbuf[2048]; /* Arbitrary size? */
1775
- #endif
1776
-
1777
- fmt = _(fmt);
1778
-
1901
+ va_list ap;
1779
1902
  va_start(ap, fmt);
1780
- #ifndef WIN32
1781
- /* On Unix, we just fprintf to stderr */
1782
1903
  vfprintf(stderr, fmt, ap);
1783
1904
  fflush(stderr);
1784
- #else
1785
- vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
1786
-
1787
- /*
1788
- * On Win32, we print to stderr if running on a console, or write to
1789
- * eventlog if running as a service
1790
- */
1791
- if (pgwin32_is_service()) /* Running as a service */
1792
- {
1793
- write_eventlog(ERROR, errbuf, strlen(errbuf));
1794
- }
1795
- else
1796
- {
1797
- /* Not running as service, write to stderr */
1798
- write_console(errbuf, strlen(errbuf));
1799
- fflush(stderr);
1800
- }
1801
- #endif
1802
1905
  va_end(ap);
1803
1906
  }
1804
1907
 
1805
1908
 
1909
+
1910
+
1911
+ /*
1912
+ * Write a message to STDERR using only async-signal-safe functions. This can
1913
+ * be used to safely emit a message from a signal handler.
1914
+ *
1915
+ * TODO: It is likely possible to safely do a limited amount of string
1916
+ * interpolation (e.g., %s and %d), but that is not presently supported.
1917
+ */
1918
+
1919
+
1920
+
1806
1921
  /*
1807
1922
  * Adjust the level of a recovery-related message per trace_recovery_messages.
1808
1923
  *
@@ -1819,3 +1934,10 @@ write_stderr(const char *fmt,...)
1819
1934
  * hard-to-explain kluge.
1820
1935
  */
1821
1936
 
1937
+ #ifdef WIN32
1938
+ __thread volatile int pg_signal_queue;
1939
+
1940
+ __thread int pg_signal_mask;
1941
+
1942
+ void pgwin32_dispatch_queued_signals(void) {}
1943
+ #endif