gitlab-pg_query 1.3.1 → 2.0.4

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 (480) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +217 -99
  3. data/README.md +92 -69
  4. data/Rakefile +85 -5
  5. data/ext/pg_query/extconf.rb +3 -40
  6. data/ext/pg_query/guc-file.c +0 -0
  7. data/ext/pg_query/include/access/amapi.h +246 -0
  8. data/ext/pg_query/include/access/attmap.h +52 -0
  9. data/ext/pg_query/include/access/attnum.h +64 -0
  10. data/ext/pg_query/include/access/clog.h +61 -0
  11. data/ext/pg_query/include/access/commit_ts.h +77 -0
  12. data/ext/pg_query/include/access/detoast.h +92 -0
  13. data/ext/pg_query/include/access/genam.h +228 -0
  14. data/ext/pg_query/include/access/gin.h +78 -0
  15. data/ext/pg_query/include/access/htup.h +89 -0
  16. data/ext/pg_query/include/access/htup_details.h +819 -0
  17. data/ext/pg_query/include/access/itup.h +161 -0
  18. data/ext/pg_query/include/access/parallel.h +82 -0
  19. data/ext/pg_query/include/access/printtup.h +35 -0
  20. data/ext/pg_query/include/access/relation.h +28 -0
  21. data/ext/pg_query/include/access/relscan.h +176 -0
  22. data/ext/pg_query/include/access/rmgr.h +35 -0
  23. data/ext/pg_query/include/access/rmgrlist.h +49 -0
  24. data/ext/pg_query/include/access/sdir.h +58 -0
  25. data/ext/pg_query/include/access/skey.h +151 -0
  26. data/ext/pg_query/include/access/stratnum.h +83 -0
  27. data/ext/pg_query/include/access/sysattr.h +29 -0
  28. data/ext/pg_query/include/access/table.h +27 -0
  29. data/ext/pg_query/include/access/tableam.h +1825 -0
  30. data/ext/pg_query/include/access/transam.h +265 -0
  31. data/ext/pg_query/include/access/tupconvert.h +51 -0
  32. data/ext/pg_query/include/access/tupdesc.h +154 -0
  33. data/ext/pg_query/include/access/tupmacs.h +247 -0
  34. data/ext/pg_query/include/access/twophase.h +61 -0
  35. data/ext/pg_query/include/access/xact.h +463 -0
  36. data/ext/pg_query/include/access/xlog.h +398 -0
  37. data/ext/pg_query/include/access/xlog_internal.h +330 -0
  38. data/ext/pg_query/include/access/xlogdefs.h +109 -0
  39. data/ext/pg_query/include/access/xloginsert.h +64 -0
  40. data/ext/pg_query/include/access/xlogreader.h +327 -0
  41. data/ext/pg_query/include/access/xlogrecord.h +227 -0
  42. data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
  43. data/ext/pg_query/include/c.h +1322 -0
  44. data/ext/pg_query/include/catalog/catalog.h +42 -0
  45. data/ext/pg_query/include/catalog/catversion.h +58 -0
  46. data/ext/pg_query/include/catalog/dependency.h +275 -0
  47. data/ext/pg_query/include/catalog/genbki.h +64 -0
  48. data/ext/pg_query/include/catalog/index.h +199 -0
  49. data/ext/pg_query/include/catalog/indexing.h +366 -0
  50. data/ext/pg_query/include/catalog/namespace.h +188 -0
  51. data/ext/pg_query/include/catalog/objectaccess.h +197 -0
  52. data/ext/pg_query/include/catalog/objectaddress.h +84 -0
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
  55. data/ext/pg_query/include/catalog/pg_am.h +60 -0
  56. data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
  57. data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
  59. data/ext/pg_query/include/catalog/pg_authid.h +58 -0
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
  61. data/ext/pg_query/include/catalog/pg_class.h +200 -0
  62. data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
  63. data/ext/pg_query/include/catalog/pg_collation.h +73 -0
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
  65. data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
  67. data/ext/pg_query/include/catalog/pg_control.h +250 -0
  68. data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
  70. data/ext/pg_query/include/catalog/pg_depend.h +73 -0
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
  74. data/ext/pg_query/include/catalog/pg_index.h +80 -0
  75. data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
  76. data/ext/pg_query/include/catalog/pg_language.h +67 -0
  77. data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
  78. data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
  80. data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
  82. data/ext/pg_query/include/catalog/pg_operator.h +102 -0
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
  86. data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
  88. data/ext/pg_query/include/catalog/pg_proc.h +211 -0
  89. data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
  90. data/ext/pg_query/include/catalog/pg_publication.h +115 -0
  91. data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
  92. data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
  93. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
  94. data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
  95. data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
  96. data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
  97. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
  98. data/ext/pg_query/include/catalog/pg_transform.h +45 -0
  99. data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
  100. data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
  101. data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
  102. data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
  103. data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
  104. data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
  105. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
  106. data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
  107. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
  108. data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
  109. data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
  110. data/ext/pg_query/include/catalog/pg_type.h +372 -0
  111. data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
  112. data/ext/pg_query/include/catalog/storage.h +48 -0
  113. data/ext/pg_query/include/commands/async.h +54 -0
  114. data/ext/pg_query/include/commands/dbcommands.h +35 -0
  115. data/ext/pg_query/include/commands/defrem.h +173 -0
  116. data/ext/pg_query/include/commands/event_trigger.h +88 -0
  117. data/ext/pg_query/include/commands/explain.h +127 -0
  118. data/ext/pg_query/include/commands/prepare.h +61 -0
  119. data/ext/pg_query/include/commands/tablespace.h +67 -0
  120. data/ext/pg_query/include/commands/trigger.h +277 -0
  121. data/ext/pg_query/include/commands/user.h +37 -0
  122. data/ext/pg_query/include/commands/vacuum.h +293 -0
  123. data/ext/pg_query/include/commands/variable.h +38 -0
  124. data/ext/pg_query/include/common/file_perm.h +56 -0
  125. data/ext/pg_query/include/common/hashfn.h +104 -0
  126. data/ext/pg_query/include/common/ip.h +37 -0
  127. data/ext/pg_query/include/common/keywords.h +33 -0
  128. data/ext/pg_query/include/common/kwlookup.h +44 -0
  129. data/ext/pg_query/include/common/relpath.h +90 -0
  130. data/ext/pg_query/include/common/string.h +19 -0
  131. data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
  132. data/ext/pg_query/include/datatype/timestamp.h +197 -0
  133. data/ext/pg_query/include/executor/execdesc.h +70 -0
  134. data/ext/pg_query/include/executor/executor.h +614 -0
  135. data/ext/pg_query/include/executor/functions.h +41 -0
  136. data/ext/pg_query/include/executor/instrument.h +101 -0
  137. data/ext/pg_query/include/executor/spi.h +175 -0
  138. data/ext/pg_query/include/executor/tablefunc.h +67 -0
  139. data/ext/pg_query/include/executor/tuptable.h +487 -0
  140. data/ext/pg_query/include/fmgr.h +775 -0
  141. data/ext/pg_query/include/funcapi.h +348 -0
  142. data/ext/pg_query/include/getaddrinfo.h +162 -0
  143. data/ext/pg_query/include/jit/jit.h +105 -0
  144. data/ext/pg_query/include/kwlist_d.h +1072 -0
  145. data/ext/pg_query/include/lib/ilist.h +727 -0
  146. data/ext/pg_query/include/lib/pairingheap.h +102 -0
  147. data/ext/pg_query/include/lib/simplehash.h +1059 -0
  148. data/ext/pg_query/include/lib/stringinfo.h +161 -0
  149. data/ext/pg_query/include/libpq/auth.h +29 -0
  150. data/ext/pg_query/include/libpq/crypt.h +46 -0
  151. data/ext/pg_query/include/libpq/hba.h +140 -0
  152. data/ext/pg_query/include/libpq/libpq-be.h +326 -0
  153. data/ext/pg_query/include/libpq/libpq.h +133 -0
  154. data/ext/pg_query/include/libpq/pqcomm.h +208 -0
  155. data/ext/pg_query/include/libpq/pqformat.h +210 -0
  156. data/ext/pg_query/include/libpq/pqsignal.h +42 -0
  157. data/ext/pg_query/include/mb/pg_wchar.h +672 -0
  158. data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
  159. data/ext/pg_query/include/miscadmin.h +476 -0
  160. data/ext/pg_query/include/nodes/bitmapset.h +122 -0
  161. data/ext/pg_query/include/nodes/execnodes.h +2520 -0
  162. data/ext/pg_query/include/nodes/extensible.h +160 -0
  163. data/ext/pg_query/include/nodes/lockoptions.h +61 -0
  164. data/ext/pg_query/include/nodes/makefuncs.h +108 -0
  165. data/ext/pg_query/include/nodes/memnodes.h +108 -0
  166. data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
  167. data/ext/pg_query/include/nodes/nodes.h +842 -0
  168. data/ext/pg_query/include/nodes/params.h +170 -0
  169. data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
  170. data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
  171. data/ext/pg_query/include/nodes/pg_list.h +605 -0
  172. data/ext/pg_query/include/nodes/plannodes.h +1251 -0
  173. data/ext/pg_query/include/nodes/primnodes.h +1541 -0
  174. data/ext/pg_query/include/nodes/print.h +34 -0
  175. data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
  176. data/ext/pg_query/include/nodes/value.h +61 -0
  177. data/ext/pg_query/include/optimizer/cost.h +206 -0
  178. data/ext/pg_query/include/optimizer/geqo.h +88 -0
  179. data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
  180. data/ext/pg_query/include/optimizer/optimizer.h +199 -0
  181. data/ext/pg_query/include/optimizer/paths.h +249 -0
  182. data/ext/pg_query/include/optimizer/planmain.h +119 -0
  183. data/ext/pg_query/include/parser/analyze.h +49 -0
  184. data/ext/pg_query/include/parser/gram.h +1067 -0
  185. data/ext/pg_query/include/parser/gramparse.h +75 -0
  186. data/ext/pg_query/include/parser/kwlist.h +477 -0
  187. data/ext/pg_query/include/parser/parse_agg.h +68 -0
  188. data/ext/pg_query/include/parser/parse_clause.h +54 -0
  189. data/ext/pg_query/include/parser/parse_coerce.h +97 -0
  190. data/ext/pg_query/include/parser/parse_collate.h +27 -0
  191. data/ext/pg_query/include/parser/parse_expr.h +26 -0
  192. data/ext/pg_query/include/parser/parse_func.h +73 -0
  193. data/ext/pg_query/include/parser/parse_node.h +327 -0
  194. data/ext/pg_query/include/parser/parse_oper.h +67 -0
  195. data/ext/pg_query/include/parser/parse_relation.h +123 -0
  196. data/ext/pg_query/include/parser/parse_target.h +46 -0
  197. data/ext/pg_query/include/parser/parse_type.h +60 -0
  198. data/ext/pg_query/include/parser/parser.h +41 -0
  199. data/ext/pg_query/include/parser/parsetree.h +61 -0
  200. data/ext/pg_query/include/parser/scanner.h +152 -0
  201. data/ext/pg_query/include/parser/scansup.h +30 -0
  202. data/ext/pg_query/include/partitioning/partdefs.h +26 -0
  203. data/ext/pg_query/include/pg_config.h +989 -0
  204. data/ext/pg_query/include/pg_config_ext.h +8 -0
  205. data/ext/pg_query/include/pg_config_manual.h +350 -0
  206. data/ext/pg_query/include/pg_config_os.h +8 -0
  207. data/ext/pg_query/include/pg_getopt.h +56 -0
  208. data/ext/pg_query/include/pg_query.h +121 -0
  209. data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
  212. data/ext/pg_query/include/pg_query_json_helper.c +61 -0
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
  217. data/ext/pg_query/include/pg_trace.h +17 -0
  218. data/ext/pg_query/include/pgstat.h +1487 -0
  219. data/ext/pg_query/include/pgtime.h +84 -0
  220. data/ext/pg_query/include/pl_gram.h +385 -0
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
  225. data/ext/pg_query/include/plerrcodes.h +990 -0
  226. data/ext/pg_query/include/plpgsql.h +1347 -0
  227. data/ext/pg_query/include/port.h +524 -0
  228. data/ext/pg_query/include/port/atomics.h +524 -0
  229. data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
  230. data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
  231. data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
  232. data/ext/pg_query/include/port/atomics/fallback.h +170 -0
  233. data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
  234. data/ext/pg_query/include/port/atomics/generic.h +401 -0
  235. data/ext/pg_query/include/port/pg_bitutils.h +226 -0
  236. data/ext/pg_query/include/port/pg_bswap.h +161 -0
  237. data/ext/pg_query/include/port/pg_crc32c.h +101 -0
  238. data/ext/pg_query/include/portability/instr_time.h +256 -0
  239. data/ext/pg_query/include/postgres.h +764 -0
  240. data/ext/pg_query/include/postgres_ext.h +74 -0
  241. data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +161 -0
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
  244. data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
  245. data/ext/pg_query/include/postmaster/fork_process.h +17 -0
  246. data/ext/pg_query/include/postmaster/interrupt.h +32 -0
  247. data/ext/pg_query/include/postmaster/pgarch.h +39 -0
  248. data/ext/pg_query/include/postmaster/postmaster.h +77 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +98 -0
  250. data/ext/pg_query/include/postmaster/walwriter.h +21 -0
  251. data/ext/pg_query/include/protobuf-c.h +1106 -0
  252. data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
  253. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
  254. data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
  255. data/ext/pg_query/include/regex/regex.h +184 -0
  256. data/ext/pg_query/include/replication/logicallauncher.h +31 -0
  257. data/ext/pg_query/include/replication/logicalproto.h +110 -0
  258. data/ext/pg_query/include/replication/logicalworker.h +19 -0
  259. data/ext/pg_query/include/replication/origin.h +73 -0
  260. data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
  261. data/ext/pg_query/include/replication/slot.h +219 -0
  262. data/ext/pg_query/include/replication/syncrep.h +115 -0
  263. data/ext/pg_query/include/replication/walreceiver.h +340 -0
  264. data/ext/pg_query/include/replication/walsender.h +74 -0
  265. data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
  266. data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
  267. data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
  268. data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
  269. data/ext/pg_query/include/storage/backendid.h +37 -0
  270. data/ext/pg_query/include/storage/block.h +121 -0
  271. data/ext/pg_query/include/storage/buf.h +46 -0
  272. data/ext/pg_query/include/storage/bufmgr.h +292 -0
  273. data/ext/pg_query/include/storage/bufpage.h +459 -0
  274. data/ext/pg_query/include/storage/condition_variable.h +62 -0
  275. data/ext/pg_query/include/storage/dsm.h +61 -0
  276. data/ext/pg_query/include/storage/dsm_impl.h +75 -0
  277. data/ext/pg_query/include/storage/fd.h +168 -0
  278. data/ext/pg_query/include/storage/ipc.h +81 -0
  279. data/ext/pg_query/include/storage/item.h +19 -0
  280. data/ext/pg_query/include/storage/itemid.h +184 -0
  281. data/ext/pg_query/include/storage/itemptr.h +206 -0
  282. data/ext/pg_query/include/storage/large_object.h +100 -0
  283. data/ext/pg_query/include/storage/latch.h +190 -0
  284. data/ext/pg_query/include/storage/lmgr.h +114 -0
  285. data/ext/pg_query/include/storage/lock.h +612 -0
  286. data/ext/pg_query/include/storage/lockdefs.h +59 -0
  287. data/ext/pg_query/include/storage/lwlock.h +232 -0
  288. data/ext/pg_query/include/storage/lwlocknames.h +51 -0
  289. data/ext/pg_query/include/storage/off.h +57 -0
  290. data/ext/pg_query/include/storage/pg_sema.h +61 -0
  291. data/ext/pg_query/include/storage/pg_shmem.h +90 -0
  292. data/ext/pg_query/include/storage/pmsignal.h +94 -0
  293. data/ext/pg_query/include/storage/predicate.h +87 -0
  294. data/ext/pg_query/include/storage/proc.h +333 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +51 -0
  296. data/ext/pg_query/include/storage/procsignal.h +75 -0
  297. data/ext/pg_query/include/storage/relfilenode.h +99 -0
  298. data/ext/pg_query/include/storage/s_lock.h +1047 -0
  299. data/ext/pg_query/include/storage/sharedfileset.h +45 -0
  300. data/ext/pg_query/include/storage/shm_mq.h +85 -0
  301. data/ext/pg_query/include/storage/shm_toc.h +58 -0
  302. data/ext/pg_query/include/storage/shmem.h +81 -0
  303. data/ext/pg_query/include/storage/sinval.h +153 -0
  304. data/ext/pg_query/include/storage/sinvaladt.h +43 -0
  305. data/ext/pg_query/include/storage/smgr.h +109 -0
  306. data/ext/pg_query/include/storage/spin.h +77 -0
  307. data/ext/pg_query/include/storage/standby.h +91 -0
  308. data/ext/pg_query/include/storage/standbydefs.h +74 -0
  309. data/ext/pg_query/include/storage/sync.h +62 -0
  310. data/ext/pg_query/include/tcop/cmdtag.h +58 -0
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
  312. data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
  313. data/ext/pg_query/include/tcop/dest.h +149 -0
  314. data/ext/pg_query/include/tcop/fastpath.h +21 -0
  315. data/ext/pg_query/include/tcop/pquery.h +45 -0
  316. data/ext/pg_query/include/tcop/tcopprot.h +89 -0
  317. data/ext/pg_query/include/tcop/utility.h +108 -0
  318. data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
  319. data/ext/pg_query/include/utils/acl.h +312 -0
  320. data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
  321. data/ext/pg_query/include/utils/array.h +458 -0
  322. data/ext/pg_query/include/utils/builtins.h +127 -0
  323. data/ext/pg_query/include/utils/bytea.h +27 -0
  324. data/ext/pg_query/include/utils/catcache.h +231 -0
  325. data/ext/pg_query/include/utils/date.h +90 -0
  326. data/ext/pg_query/include/utils/datetime.h +343 -0
  327. data/ext/pg_query/include/utils/datum.h +68 -0
  328. data/ext/pg_query/include/utils/dsa.h +123 -0
  329. data/ext/pg_query/include/utils/dynahash.h +19 -0
  330. data/ext/pg_query/include/utils/elog.h +439 -0
  331. data/ext/pg_query/include/utils/errcodes.h +352 -0
  332. data/ext/pg_query/include/utils/expandeddatum.h +159 -0
  333. data/ext/pg_query/include/utils/expandedrecord.h +231 -0
  334. data/ext/pg_query/include/utils/float.h +356 -0
  335. data/ext/pg_query/include/utils/fmgroids.h +2657 -0
  336. data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
  337. data/ext/pg_query/include/utils/fmgrtab.h +48 -0
  338. data/ext/pg_query/include/utils/guc.h +443 -0
  339. data/ext/pg_query/include/utils/guc_tables.h +272 -0
  340. data/ext/pg_query/include/utils/hsearch.h +149 -0
  341. data/ext/pg_query/include/utils/inval.h +64 -0
  342. data/ext/pg_query/include/utils/lsyscache.h +197 -0
  343. data/ext/pg_query/include/utils/memdebug.h +82 -0
  344. data/ext/pg_query/include/utils/memutils.h +225 -0
  345. data/ext/pg_query/include/utils/numeric.h +76 -0
  346. data/ext/pg_query/include/utils/palloc.h +136 -0
  347. data/ext/pg_query/include/utils/partcache.h +102 -0
  348. data/ext/pg_query/include/utils/pg_locale.h +119 -0
  349. data/ext/pg_query/include/utils/pg_lsn.h +29 -0
  350. data/ext/pg_query/include/utils/pidfile.h +56 -0
  351. data/ext/pg_query/include/utils/plancache.h +235 -0
  352. data/ext/pg_query/include/utils/portal.h +241 -0
  353. data/ext/pg_query/include/utils/probes.h +114 -0
  354. data/ext/pg_query/include/utils/ps_status.h +25 -0
  355. data/ext/pg_query/include/utils/queryenvironment.h +74 -0
  356. data/ext/pg_query/include/utils/regproc.h +28 -0
  357. data/ext/pg_query/include/utils/rel.h +644 -0
  358. data/ext/pg_query/include/utils/relcache.h +151 -0
  359. data/ext/pg_query/include/utils/reltrigger.h +81 -0
  360. data/ext/pg_query/include/utils/resowner.h +86 -0
  361. data/ext/pg_query/include/utils/rls.h +50 -0
  362. data/ext/pg_query/include/utils/ruleutils.h +44 -0
  363. data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
  364. data/ext/pg_query/include/utils/snapmgr.h +158 -0
  365. data/ext/pg_query/include/utils/snapshot.h +206 -0
  366. data/ext/pg_query/include/utils/sortsupport.h +276 -0
  367. data/ext/pg_query/include/utils/syscache.h +219 -0
  368. data/ext/pg_query/include/utils/timeout.h +88 -0
  369. data/ext/pg_query/include/utils/timestamp.h +116 -0
  370. data/ext/pg_query/include/utils/tuplesort.h +277 -0
  371. data/ext/pg_query/include/utils/tuplestore.h +91 -0
  372. data/ext/pg_query/include/utils/typcache.h +202 -0
  373. data/ext/pg_query/include/utils/tzparser.h +39 -0
  374. data/ext/pg_query/include/utils/varlena.h +39 -0
  375. data/ext/pg_query/include/utils/xml.h +84 -0
  376. data/ext/pg_query/include/xxhash.h +5445 -0
  377. data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
  378. data/ext/pg_query/pg_query.c +104 -0
  379. data/ext/pg_query/pg_query.pb-c.c +37628 -0
  380. data/ext/pg_query/pg_query_deparse.c +9959 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +295 -0
  382. data/ext/pg_query/pg_query_fingerprint.h +8 -0
  383. data/ext/pg_query/pg_query_internal.h +24 -0
  384. data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
  385. data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
  386. data/ext/pg_query/pg_query_normalize.c +439 -0
  387. data/ext/pg_query/pg_query_outfuncs.h +10 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
  390. data/ext/pg_query/pg_query_parse.c +148 -0
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
  392. data/ext/pg_query/pg_query_readfuncs.h +11 -0
  393. data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
  394. data/ext/pg_query/pg_query_ruby.c +108 -12
  395. data/ext/pg_query/pg_query_scan.c +173 -0
  396. data/ext/pg_query/pg_query_split.c +221 -0
  397. data/ext/pg_query/protobuf-c.c +3660 -0
  398. data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
  399. data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
  400. data/ext/pg_query/src_backend_commands_define.c +117 -0
  401. data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
  402. data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
  403. data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
  404. data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
  405. data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
  406. data/ext/pg_query/src_backend_nodes_list.c +922 -0
  407. data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
  408. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
  409. data/ext/pg_query/src_backend_nodes_value.c +84 -0
  410. data/ext/pg_query/src_backend_parser_gram.c +47456 -0
  411. data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
  412. data/ext/pg_query/src_backend_parser_parser.c +497 -0
  413. data/ext/pg_query/src_backend_parser_scan.c +7091 -0
  414. data/ext/pg_query/src_backend_parser_scansup.c +160 -0
  415. data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
  416. data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
  417. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
  418. data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
  419. data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
  420. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
  421. data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
  422. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
  423. data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
  424. data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
  425. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
  426. data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
  427. data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
  428. data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
  429. data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
  430. data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
  431. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
  432. data/ext/pg_query/src_common_encnames.c +158 -0
  433. data/ext/pg_query/src_common_keywords.c +39 -0
  434. data/ext/pg_query/src_common_kwlist_d.h +1081 -0
  435. data/ext/pg_query/src_common_kwlookup.c +91 -0
  436. data/ext/pg_query/src_common_psprintf.c +158 -0
  437. data/ext/pg_query/src_common_string.c +86 -0
  438. data/ext/pg_query/src_common_stringinfo.c +336 -0
  439. data/ext/pg_query/src_common_wchar.c +1651 -0
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
  446. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
  447. data/ext/pg_query/src_port_erand48.c +127 -0
  448. data/ext/pg_query/src_port_pg_bitutils.c +246 -0
  449. data/ext/pg_query/src_port_pgsleep.c +69 -0
  450. data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
  451. data/ext/pg_query/src_port_qsort.c +240 -0
  452. data/ext/pg_query/src_port_random.c +31 -0
  453. data/ext/pg_query/src_port_snprintf.c +1449 -0
  454. data/ext/pg_query/src_port_strerror.c +324 -0
  455. data/ext/pg_query/src_port_strnlen.c +39 -0
  456. data/ext/pg_query/xxhash.c +43 -0
  457. data/lib/pg_query.rb +7 -4
  458. data/lib/pg_query/constants.rb +21 -0
  459. data/lib/pg_query/deparse.rb +15 -1581
  460. data/lib/pg_query/filter_columns.rb +88 -85
  461. data/lib/pg_query/fingerprint.rb +122 -87
  462. data/lib/pg_query/json_field_names.rb +1402 -0
  463. data/lib/pg_query/node.rb +31 -0
  464. data/lib/pg_query/param_refs.rb +42 -37
  465. data/lib/pg_query/parse.rb +220 -203
  466. data/lib/pg_query/parse_error.rb +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +3211 -0
  468. data/lib/pg_query/scan.rb +23 -0
  469. data/lib/pg_query/treewalker.rb +24 -40
  470. data/lib/pg_query/truncate.rb +71 -42
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +472 -11
  473. data/ext/pg_query/pg_query_ruby.h +0 -10
  474. data/lib/pg_query/deep_dup.rb +0 -16
  475. data/lib/pg_query/deparse/alter_table.rb +0 -42
  476. data/lib/pg_query/deparse/interval.rb +0 -105
  477. data/lib/pg_query/deparse/keywords.rb +0 -159
  478. data/lib/pg_query/deparse/rename.rb +0 -41
  479. data/lib/pg_query/legacy_parsetree.rb +0 -109
  480. data/lib/pg_query/node_types.rb +0 -296
@@ -0,0 +1,19 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * dynahash
4
+ * POSTGRES dynahash.h file definitions
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/utils/dynahash.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef DYNAHASH_H
15
+ #define DYNAHASH_H
16
+
17
+ extern int my_log2(long num);
18
+
19
+ #endif /* DYNAHASH_H */
@@ -0,0 +1,439 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * elog.h
4
+ * POSTGRES error reporting/logging definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/utils/elog.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ELOG_H
15
+ #define ELOG_H
16
+
17
+ #include <setjmp.h>
18
+
19
+ /* Error level codes */
20
+ #define DEBUG5 10 /* Debugging messages, in categories of
21
+ * decreasing detail. */
22
+ #define DEBUG4 11
23
+ #define DEBUG3 12
24
+ #define DEBUG2 13
25
+ #define DEBUG1 14 /* used by GUC debug_* variables */
26
+ #define LOG 15 /* Server operational messages; sent only to
27
+ * server log by default. */
28
+ #define LOG_SERVER_ONLY 16 /* Same as LOG for server reporting, but never
29
+ * sent to client. */
30
+ #define COMMERROR LOG_SERVER_ONLY /* Client communication problems; same as
31
+ * LOG for server reporting, but never
32
+ * sent to client. */
33
+ #define INFO 17 /* Messages specifically requested by user (eg
34
+ * VACUUM VERBOSE output); always sent to
35
+ * client regardless of client_min_messages,
36
+ * but by default not sent to server log. */
37
+ #define NOTICE 18 /* Helpful messages to users about query
38
+ * operation; sent to client and not to server
39
+ * log by default. */
40
+ #define WARNING 19 /* Warnings. NOTICE is for expected messages
41
+ * like implicit sequence creation by SERIAL.
42
+ * WARNING is for unexpected messages. */
43
+ #define ERROR 20 /* user error - abort transaction; return to
44
+ * known state */
45
+ /* Save ERROR value in PGERROR so it can be restored when Win32 includes
46
+ * modify it. We have to use a constant rather than ERROR because macros
47
+ * are expanded only when referenced outside macros.
48
+ */
49
+ #ifdef WIN32
50
+ #define PGERROR 20
51
+ #endif
52
+ #define FATAL 21 /* fatal error - abort process */
53
+ #define PANIC 22 /* take down the other backends with me */
54
+
55
+ /* #define DEBUG DEBUG1 */ /* Backward compatibility with pre-7.3 */
56
+
57
+
58
+ /* macros for representing SQLSTATE strings compactly */
59
+ #define PGSIXBIT(ch) (((ch) - '0') & 0x3F)
60
+ #define PGUNSIXBIT(val) (((val) & 0x3F) + '0')
61
+
62
+ #define MAKE_SQLSTATE(ch1,ch2,ch3,ch4,ch5) \
63
+ (PGSIXBIT(ch1) + (PGSIXBIT(ch2) << 6) + (PGSIXBIT(ch3) << 12) + \
64
+ (PGSIXBIT(ch4) << 18) + (PGSIXBIT(ch5) << 24))
65
+
66
+ /* These macros depend on the fact that '0' becomes a zero in PGSIXBIT */
67
+ #define ERRCODE_TO_CATEGORY(ec) ((ec) & ((1 << 12) - 1))
68
+ #define ERRCODE_IS_CATEGORY(ec) (((ec) & ~((1 << 12) - 1)) == 0)
69
+
70
+ /* SQLSTATE codes for errors are defined in a separate file */
71
+ #include "utils/errcodes.h"
72
+
73
+ /*
74
+ * Provide a way to prevent "errno" from being accidentally used inside an
75
+ * elog() or ereport() invocation. Since we know that some operating systems
76
+ * define errno as something involving a function call, we'll put a local
77
+ * variable of the same name as that function in the local scope to force a
78
+ * compile error. On platforms that don't define errno in that way, nothing
79
+ * happens, so we get no warning ... but we can live with that as long as it
80
+ * happens on some popular platforms.
81
+ */
82
+ #if defined(errno) && defined(__linux__)
83
+ #define pg_prevent_errno_in_scope() int __errno_location pg_attribute_unused()
84
+ #elif defined(errno) && (defined(__darwin__) || defined(__freebsd__))
85
+ #define pg_prevent_errno_in_scope() int __error pg_attribute_unused()
86
+ #else
87
+ #define pg_prevent_errno_in_scope()
88
+ #endif
89
+
90
+
91
+ /*----------
92
+ * New-style error reporting API: to be used in this way:
93
+ * ereport(ERROR,
94
+ * errcode(ERRCODE_UNDEFINED_CURSOR),
95
+ * errmsg("portal \"%s\" not found", stmt->portalname),
96
+ * ... other errxxx() fields as needed ...);
97
+ *
98
+ * The error level is required, and so is a primary error message (errmsg
99
+ * or errmsg_internal). All else is optional. errcode() defaults to
100
+ * ERRCODE_INTERNAL_ERROR if elevel is ERROR or more, ERRCODE_WARNING
101
+ * if elevel is WARNING, or ERRCODE_SUCCESSFUL_COMPLETION if elevel is
102
+ * NOTICE or below.
103
+ *
104
+ * Before Postgres v12, extra parentheses were required around the
105
+ * list of auxiliary function calls; that's now optional.
106
+ *
107
+ * ereport_domain() allows a message domain to be specified, for modules that
108
+ * wish to use a different message catalog from the backend's. To avoid having
109
+ * one copy of the default text domain per .o file, we define it as NULL here
110
+ * and have errstart insert the default text domain. Modules can either use
111
+ * ereport_domain() directly, or preferably they can override the TEXTDOMAIN
112
+ * macro.
113
+ *
114
+ * If elevel >= ERROR, the call will not return; we try to inform the compiler
115
+ * of that via pg_unreachable(). However, no useful optimization effect is
116
+ * obtained unless the compiler sees elevel as a compile-time constant, else
117
+ * we're just adding code bloat. So, if __builtin_constant_p is available,
118
+ * use that to cause the second if() to vanish completely for non-constant
119
+ * cases. We avoid using a local variable because it's not necessary and
120
+ * prevents gcc from making the unreachability deduction at optlevel -O0.
121
+ *----------
122
+ */
123
+ #ifdef HAVE__BUILTIN_CONSTANT_P
124
+ #define ereport_domain(elevel, domain, ...) \
125
+ do { \
126
+ pg_prevent_errno_in_scope(); \
127
+ if (errstart(elevel, domain)) \
128
+ __VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \
129
+ if (__builtin_constant_p(elevel) && (elevel) >= ERROR) \
130
+ pg_unreachable(); \
131
+ } while(0)
132
+ #else /* !HAVE__BUILTIN_CONSTANT_P */
133
+ #define ereport_domain(elevel, domain, ...) \
134
+ do { \
135
+ const int elevel_ = (elevel); \
136
+ pg_prevent_errno_in_scope(); \
137
+ if (errstart(elevel_, domain)) \
138
+ __VA_ARGS__, errfinish(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \
139
+ if (elevel_ >= ERROR) \
140
+ pg_unreachable(); \
141
+ } while(0)
142
+ #endif /* HAVE__BUILTIN_CONSTANT_P */
143
+
144
+ #define ereport(elevel, ...) \
145
+ ereport_domain(elevel, TEXTDOMAIN, __VA_ARGS__)
146
+
147
+ #define TEXTDOMAIN NULL
148
+
149
+ extern bool errstart(int elevel, const char *domain);
150
+ extern void errfinish(const char *filename, int lineno, const char *funcname);
151
+
152
+ extern int errcode(int sqlerrcode);
153
+
154
+ extern int errcode_for_file_access(void);
155
+ extern int errcode_for_socket_access(void);
156
+
157
+ extern int errmsg(const char *fmt,...) pg_attribute_printf(1, 2);
158
+ extern int errmsg_internal(const char *fmt,...) pg_attribute_printf(1, 2);
159
+
160
+ extern int errmsg_plural(const char *fmt_singular, const char *fmt_plural,
161
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
162
+
163
+ extern int errdetail(const char *fmt,...) pg_attribute_printf(1, 2);
164
+ extern int errdetail_internal(const char *fmt,...) pg_attribute_printf(1, 2);
165
+
166
+ extern int errdetail_log(const char *fmt,...) pg_attribute_printf(1, 2);
167
+
168
+ extern int errdetail_log_plural(const char *fmt_singular,
169
+ const char *fmt_plural,
170
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
171
+
172
+ extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
173
+ unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
174
+
175
+ extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
176
+
177
+ /*
178
+ * errcontext() is typically called in error context callback functions, not
179
+ * within an ereport() invocation. The callback function can be in a different
180
+ * module than the ereport() call, so the message domain passed in errstart()
181
+ * is not usually the correct domain for translating the context message.
182
+ * set_errcontext_domain() first sets the domain to be used, and
183
+ * errcontext_msg() passes the actual message.
184
+ */
185
+ #define errcontext set_errcontext_domain(TEXTDOMAIN), errcontext_msg
186
+
187
+ extern int set_errcontext_domain(const char *domain);
188
+
189
+ extern int errcontext_msg(const char *fmt,...) pg_attribute_printf(1, 2);
190
+
191
+ extern int errhidestmt(bool hide_stmt);
192
+ extern int errhidecontext(bool hide_ctx);
193
+
194
+ extern int errbacktrace(void);
195
+
196
+ extern int errfunction(const char *funcname);
197
+ extern int errposition(int cursorpos);
198
+
199
+ extern int internalerrposition(int cursorpos);
200
+ extern int internalerrquery(const char *query);
201
+
202
+ extern int err_generic_string(int field, const char *str);
203
+
204
+ extern int geterrcode(void);
205
+ extern int geterrposition(void);
206
+ extern int getinternalerrposition(void);
207
+
208
+
209
+ /*----------
210
+ * Old-style error reporting API: to be used in this way:
211
+ * elog(ERROR, "portal \"%s\" not found", stmt->portalname);
212
+ *----------
213
+ */
214
+ #define elog(elevel, ...) \
215
+ ereport(elevel, errmsg_internal(__VA_ARGS__))
216
+
217
+
218
+ /* Support for constructing error strings separately from ereport() calls */
219
+
220
+ extern void pre_format_elog_string(int errnumber, const char *domain);
221
+ extern char *format_elog_string(const char *fmt,...) pg_attribute_printf(1, 2);
222
+
223
+
224
+ /* Support for attaching context information to error reports */
225
+
226
+ typedef struct ErrorContextCallback
227
+ {
228
+ struct ErrorContextCallback *previous;
229
+ void (*callback) (void *arg);
230
+ void *arg;
231
+ } ErrorContextCallback;
232
+
233
+ extern PGDLLIMPORT __thread ErrorContextCallback *error_context_stack;
234
+
235
+
236
+ /*----------
237
+ * API for catching ereport(ERROR) exits. Use these macros like so:
238
+ *
239
+ * PG_TRY();
240
+ * {
241
+ * ... code that might throw ereport(ERROR) ...
242
+ * }
243
+ * PG_CATCH();
244
+ * {
245
+ * ... error recovery code ...
246
+ * }
247
+ * PG_END_TRY();
248
+ *
249
+ * (The braces are not actually necessary, but are recommended so that
250
+ * pgindent will indent the construct nicely.) The error recovery code
251
+ * can either do PG_RE_THROW to propagate the error outwards, or do a
252
+ * (sub)transaction abort. Failure to do so may leave the system in an
253
+ * inconsistent state for further processing.
254
+ *
255
+ * For the common case that the error recovery code and the cleanup in the
256
+ * normal code path are identical, the following can be used instead:
257
+ *
258
+ * PG_TRY();
259
+ * {
260
+ * ... code that might throw ereport(ERROR) ...
261
+ * }
262
+ * PG_FINALLY();
263
+ * {
264
+ * ... cleanup code ...
265
+ * }
266
+ * PG_END_TRY();
267
+ *
268
+ * The cleanup code will be run in either case, and any error will be rethrown
269
+ * afterwards.
270
+ *
271
+ * You cannot use both PG_CATCH() and PG_FINALLY() in the same
272
+ * PG_TRY()/PG_END_TRY() block.
273
+ *
274
+ * Note: while the system will correctly propagate any new ereport(ERROR)
275
+ * occurring in the recovery section, there is a small limit on the number
276
+ * of levels this will work for. It's best to keep the error recovery
277
+ * section simple enough that it can't generate any new errors, at least
278
+ * not before popping the error stack.
279
+ *
280
+ * Note: an ereport(FATAL) will not be caught by this construct; control will
281
+ * exit straight through proc_exit(). Therefore, do NOT put any cleanup
282
+ * of non-process-local resources into the error recovery section, at least
283
+ * not without taking thought for what will happen during ereport(FATAL).
284
+ * The PG_ENSURE_ERROR_CLEANUP macros provided by storage/ipc.h may be
285
+ * helpful in such cases.
286
+ *
287
+ * Note: if a local variable of the function containing PG_TRY is modified
288
+ * in the PG_TRY section and used in the PG_CATCH section, that variable
289
+ * must be declared "volatile" for POSIX compliance. This is not mere
290
+ * pedantry; we have seen bugs from compilers improperly optimizing code
291
+ * away when such a variable was not marked. Beware that gcc's -Wclobbered
292
+ * warnings are just about entirely useless for catching such oversights.
293
+ *----------
294
+ */
295
+ #define PG_TRY() \
296
+ do { \
297
+ sigjmp_buf *_save_exception_stack = PG_exception_stack; \
298
+ ErrorContextCallback *_save_context_stack = error_context_stack; \
299
+ sigjmp_buf _local_sigjmp_buf; \
300
+ bool _do_rethrow = false; \
301
+ if (sigsetjmp(_local_sigjmp_buf, 0) == 0) \
302
+ { \
303
+ PG_exception_stack = &_local_sigjmp_buf
304
+
305
+ #define PG_CATCH() \
306
+ } \
307
+ else \
308
+ { \
309
+ PG_exception_stack = _save_exception_stack; \
310
+ error_context_stack = _save_context_stack
311
+
312
+ #define PG_FINALLY() \
313
+ } \
314
+ else \
315
+ _do_rethrow = true; \
316
+ { \
317
+ PG_exception_stack = _save_exception_stack; \
318
+ error_context_stack = _save_context_stack
319
+
320
+ #define PG_END_TRY() \
321
+ } \
322
+ if (_do_rethrow) \
323
+ PG_RE_THROW(); \
324
+ PG_exception_stack = _save_exception_stack; \
325
+ error_context_stack = _save_context_stack; \
326
+ } while (0)
327
+
328
+ /*
329
+ * Some compilers understand pg_attribute_noreturn(); for other compilers,
330
+ * insert pg_unreachable() so that the compiler gets the point.
331
+ */
332
+ #ifdef HAVE_PG_ATTRIBUTE_NORETURN
333
+ #define PG_RE_THROW() \
334
+ pg_re_throw()
335
+ #else
336
+ #define PG_RE_THROW() \
337
+ (pg_re_throw(), pg_unreachable())
338
+ #endif
339
+
340
+ extern PGDLLIMPORT __thread sigjmp_buf *PG_exception_stack;
341
+
342
+
343
+ /* Stuff that error handlers might want to use */
344
+
345
+ /*
346
+ * ErrorData holds the data accumulated during any one ereport() cycle.
347
+ * Any non-NULL pointers must point to palloc'd data.
348
+ * (The const pointers are an exception; we assume they point at non-freeable
349
+ * constant strings.)
350
+ */
351
+ typedef struct ErrorData
352
+ {
353
+ int elevel; /* error level */
354
+ bool output_to_server; /* will report to server log? */
355
+ bool output_to_client; /* will report to client? */
356
+ bool show_funcname; /* true to force funcname inclusion */
357
+ bool hide_stmt; /* true to prevent STATEMENT: inclusion */
358
+ bool hide_ctx; /* true to prevent CONTEXT: inclusion */
359
+ const char *filename; /* __FILE__ of ereport() call */
360
+ int lineno; /* __LINE__ of ereport() call */
361
+ const char *funcname; /* __func__ of ereport() call */
362
+ const char *domain; /* message domain */
363
+ const char *context_domain; /* message domain for context message */
364
+ int sqlerrcode; /* encoded ERRSTATE */
365
+ char *message; /* primary error message (translated) */
366
+ char *detail; /* detail error message */
367
+ char *detail_log; /* detail error message for server log only */
368
+ char *hint; /* hint message */
369
+ char *context; /* context message */
370
+ char *backtrace; /* backtrace */
371
+ const char *message_id; /* primary message's id (original string) */
372
+ char *schema_name; /* name of schema */
373
+ char *table_name; /* name of table */
374
+ char *column_name; /* name of column */
375
+ char *datatype_name; /* name of datatype */
376
+ char *constraint_name; /* name of constraint */
377
+ int cursorpos; /* cursor index into query string */
378
+ int internalpos; /* cursor index into internalquery */
379
+ char *internalquery; /* text of internally-generated query */
380
+ int saved_errno; /* errno at entry */
381
+
382
+ /* context containing associated non-constant strings */
383
+ struct MemoryContextData *assoc_context;
384
+ } ErrorData;
385
+
386
+ extern void EmitErrorReport(void);
387
+ extern ErrorData *CopyErrorData(void);
388
+ extern void FreeErrorData(ErrorData *edata);
389
+ extern void FlushErrorState(void);
390
+ extern void ReThrowError(ErrorData *edata) pg_attribute_noreturn();
391
+ extern void ThrowErrorData(ErrorData *edata);
392
+ extern void pg_re_throw(void) pg_attribute_noreturn();
393
+
394
+ extern char *GetErrorContextStack(void);
395
+
396
+ /* Hook for intercepting messages before they are sent to the server log */
397
+ typedef void (*emit_log_hook_type) (ErrorData *edata);
398
+ extern PGDLLIMPORT __thread emit_log_hook_type emit_log_hook;
399
+
400
+
401
+ /* GUC-configurable parameters */
402
+
403
+ typedef enum
404
+ {
405
+ PGERROR_TERSE, /* single-line error messages */
406
+ PGERROR_DEFAULT, /* recommended style */
407
+ PGERROR_VERBOSE /* all the facts, ma'am */
408
+ } PGErrorVerbosity;
409
+
410
+ extern int Log_error_verbosity;
411
+ extern char *Log_line_prefix;
412
+ extern int Log_destination;
413
+ extern char *Log_destination_string;
414
+ extern bool syslog_sequence_numbers;
415
+ extern bool syslog_split_messages;
416
+
417
+ /* Log destination bitmap */
418
+ #define LOG_DESTINATION_STDERR 1
419
+ #define LOG_DESTINATION_SYSLOG 2
420
+ #define LOG_DESTINATION_EVENTLOG 4
421
+ #define LOG_DESTINATION_CSVLOG 8
422
+
423
+ /* Other exported functions */
424
+ extern void DebugFileOpen(void);
425
+ extern char *unpack_sql_state(int sql_state);
426
+ extern bool in_error_recursion_trouble(void);
427
+
428
+ #ifdef HAVE_SYSLOG
429
+ extern void set_syslog_parameters(const char *ident, int facility);
430
+ #endif
431
+
432
+ /*
433
+ * Write errors to stderr (or by equal means when stderr is
434
+ * not available). Used before ereport/elog can be used
435
+ * safely (memory context, GUC load etc)
436
+ */
437
+ extern void write_stderr(const char *fmt,...) pg_attribute_printf(1, 2);
438
+
439
+ #endif /* ELOG_H */