pg_query 2.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -11,7 +11,7 @@
11
11
  * Functions to convert stored expressions/querytrees back to
12
12
  * source text
13
13
  *
14
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  *
@@ -31,8 +31,6 @@
31
31
  #include "access/relation.h"
32
32
  #include "access/sysattr.h"
33
33
  #include "access/table.h"
34
- #include "catalog/dependency.h"
35
- #include "catalog/indexing.h"
36
34
  #include "catalog/pg_aggregate.h"
37
35
  #include "catalog/pg_am.h"
38
36
  #include "catalog/pg_authid.h"
@@ -62,6 +60,7 @@
62
60
  #include "parser/parse_func.h"
63
61
  #include "parser/parse_node.h"
64
62
  #include "parser/parse_oper.h"
63
+ #include "parser/parse_relation.h"
65
64
  #include "parser/parser.h"
66
65
  #include "parser/parsetree.h"
67
66
  #include "rewrite/rewriteHandler.h"
@@ -99,6 +98,11 @@
99
98
  #define PRETTYFLAG_INDENT 0x0002
100
99
  #define PRETTYFLAG_SCHEMA 0x0004
101
100
 
101
+ /* Standard conversion of a "bool pretty" option to detailed flags */
102
+ #define GET_PRETTY_FLAGS(pretty) \
103
+ ((pretty) ? (PRETTYFLAG_PAREN | PRETTYFLAG_INDENT | PRETTYFLAG_SCHEMA) \
104
+ : PRETTYFLAG_INDENT)
105
+
102
106
  /* Default line length for pretty-print wrapping: 0 means wrap always */
103
107
  #define WRAP_COLUMN_DEFAULT 0
104
108
 
@@ -181,6 +185,10 @@ typedef struct
181
185
  List *outer_tlist; /* referent for OUTER_VAR Vars */
182
186
  List *inner_tlist; /* referent for INNER_VAR Vars */
183
187
  List *index_tlist; /* referent for INDEX_VAR Vars */
188
+ /* Special namespace representing a function signature: */
189
+ char *funcname;
190
+ int numargs;
191
+ char **argnames;
184
192
  } deparse_namespace;
185
193
 
186
194
  /*
@@ -346,7 +354,8 @@ static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
346
354
  bool attrsOnly, bool keysOnly,
347
355
  bool showTblSpc, bool inherits,
348
356
  int prettyFlags, bool missing_ok);
349
- static char *pg_get_statisticsobj_worker(Oid statextid, bool missing_ok);
357
+ static char *pg_get_statisticsobj_worker(Oid statextid, bool columns_only,
358
+ bool missing_ok);
350
359
  static char *pg_get_partkeydef_worker(Oid relid, int prettyFlags,
351
360
  bool attrsOnly, bool missing_ok);
352
361
  static char *pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
@@ -357,6 +366,7 @@ static int print_function_arguments(StringInfo buf, HeapTuple proctup,
357
366
  bool print_table_args, bool print_defaults);
358
367
  static void print_function_rettype(StringInfo buf, HeapTuple proctup);
359
368
  static void print_function_trftypes(StringInfo buf, HeapTuple proctup);
369
+ static void print_function_sqlbody(StringInfo buf, HeapTuple proctup);
360
370
  static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces,
361
371
  Bitmapset *rels_used);
362
372
  static void set_deparse_for_query(deparse_namespace *dpns, Query *query,
@@ -379,6 +389,8 @@ static void identify_join_columns(JoinExpr *j, RangeTblEntry *jrte,
379
389
  deparse_columns *colinfo);
380
390
  static char *get_rtable_name(int rtindex, deparse_context *context);
381
391
  static void set_deparse_plan(deparse_namespace *dpns, Plan *plan);
392
+ static Plan *find_recursive_union(deparse_namespace *dpns,
393
+ WorkTableScan *wtscan);
382
394
  static void push_child_plan(deparse_namespace *dpns, Plan *plan,
383
395
  deparse_namespace *save_dpns);
384
396
  static void pop_child_plan(deparse_namespace *dpns,
@@ -392,26 +404,29 @@ static void make_ruledef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
392
404
  static void make_viewdef(StringInfo buf, HeapTuple ruletup, TupleDesc rulettc,
393
405
  int prettyFlags, int wrapColumn);
394
406
  static void get_query_def(Query *query, StringInfo buf, List *parentnamespace,
395
- TupleDesc resultDesc,
407
+ TupleDesc resultDesc, bool colNamesVisible,
396
408
  int prettyFlags, int wrapColumn, int startIndent);
397
409
  static void get_values_def(List *values_lists, deparse_context *context);
398
410
  static void get_with_clause(Query *query, deparse_context *context);
399
411
  static void get_select_query_def(Query *query, deparse_context *context,
400
- TupleDesc resultDesc);
401
- static void get_insert_query_def(Query *query, deparse_context *context);
402
- static void get_update_query_def(Query *query, deparse_context *context);
412
+ TupleDesc resultDesc, bool colNamesVisible);
413
+ static void get_insert_query_def(Query *query, deparse_context *context,
414
+ bool colNamesVisible);
415
+ static void get_update_query_def(Query *query, deparse_context *context,
416
+ bool colNamesVisible);
403
417
  static void get_update_query_targetlist_def(Query *query, List *targetList,
404
418
  deparse_context *context,
405
419
  RangeTblEntry *rte);
406
- static void get_delete_query_def(Query *query, deparse_context *context);
420
+ static void get_delete_query_def(Query *query, deparse_context *context,
421
+ bool colNamesVisible);
407
422
  static void get_utility_query_def(Query *query, deparse_context *context);
408
423
  static void get_basic_select_query(Query *query, deparse_context *context,
409
- TupleDesc resultDesc);
424
+ TupleDesc resultDesc, bool colNamesVisible);
410
425
  static void get_target_list(List *targetList, deparse_context *context,
411
- TupleDesc resultDesc);
426
+ TupleDesc resultDesc, bool colNamesVisible);
412
427
  static void get_setop_query(Node *setOp, Query *query,
413
428
  deparse_context *context,
414
- TupleDesc resultDesc);
429
+ TupleDesc resultDesc, bool colNamesVisible);
415
430
  static Node *get_rule_sortgroupclause(Index ref, List *tlist,
416
431
  bool force_colno,
417
432
  deparse_context *context);
@@ -440,6 +455,8 @@ static void get_rule_expr(Node *node, deparse_context *context,
440
455
  bool showimplicit);
441
456
  static void get_rule_expr_toplevel(Node *node, deparse_context *context,
442
457
  bool showimplicit);
458
+ static void get_rule_list_toplevel(List *lst, deparse_context *context,
459
+ bool showimplicit);
443
460
  static void get_rule_expr_funccall(Node *node, deparse_context *context,
444
461
  bool showimplicit);
445
462
  static bool looks_like_function(Node *node);
@@ -451,6 +468,7 @@ static void get_agg_expr(Aggref *aggref, deparse_context *context,
451
468
  static void get_agg_combine_expr(Node *node, deparse_context *context,
452
469
  void *callback_arg);
453
470
  static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context);
471
+ static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context);
454
472
  static void get_coercion_expr(Node *arg, deparse_context *context,
455
473
  Oid resulttype, int32 resulttypmod,
456
474
  Node *parentNode);
@@ -574,17 +592,46 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
574
592
  */
575
593
 
576
594
 
595
+ /* ----------
596
+ * pg_get_querydef
597
+ *
598
+ * Public entry point to deparse one query parsetree.
599
+ * The pretty flags are determined by GET_PRETTY_FLAGS(pretty).
600
+ *
601
+ * The result is a palloc'd C string.
602
+ * ----------
603
+ */
604
+
605
+
577
606
  /*
578
607
  * pg_get_statisticsobjdef
579
608
  * Get the definition of an extended statistics object
580
609
  */
581
610
 
582
611
 
612
+ /*
613
+ * Internal version for use by ALTER TABLE.
614
+ * Includes a tablespace clause in the result.
615
+ * Returns a palloc'd C string; no pretty-printing.
616
+ */
617
+
618
+
619
+ /*
620
+ * pg_get_statisticsobjdef_columns
621
+ * Get columns and expressions for an extended statistics object
622
+ */
623
+
624
+
583
625
  /*
584
626
  * Internal workhorse to decompile an extended statistics object.
585
627
  */
586
628
 
587
629
 
630
+ /*
631
+ * Generate text array of expressions for statistics object.
632
+ */
633
+
634
+
588
635
  /*
589
636
  * pg_get_partkeydef
590
637
  *
@@ -657,6 +704,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
657
704
  * the one specified by the second parameter. This is sufficient for
658
705
  * partial indexes, column default expressions, etc. We also support
659
706
  * Var-free expressions, for which the OID can be InvalidOid.
707
+ *
708
+ * We expect this function to work, or throw a reasonably clean error,
709
+ * for any node tree that can appear in a catalog pg_node_tree column.
710
+ * Query trees, such as those appearing in pg_rewrite.ev_action, are
711
+ * not supported. Nor are expressions in more than one relation, which
712
+ * can appear in places like pg_rewrite.ev_qual.
660
713
  * ----------
661
714
  */
662
715
 
@@ -750,6 +803,10 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
750
803
 
751
804
 
752
805
 
806
+
807
+
808
+
809
+
753
810
  /*
754
811
  * deparse_expression - General utility for deparsing expressions
755
812
  *
@@ -969,13 +1026,20 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
969
1026
  * of a given Plan node
970
1027
  *
971
1028
  * This sets the plan, outer_plan, inner_plan, outer_tlist, inner_tlist,
972
- * and index_tlist fields. Caller is responsible for adjusting the ancestors
1029
+ * and index_tlist fields. Caller must already have adjusted the ancestors
973
1030
  * list if necessary. Note that the rtable, subplans, and ctes fields do
974
1031
  * not need to change when shifting attention to different plan nodes in a
975
1032
  * single plan tree.
976
1033
  */
977
1034
 
978
1035
 
1036
+ /*
1037
+ * Locate the ancestor plan node that is the RecursiveUnion generating
1038
+ * the WorkTableScan's work table. We can match on wtParam, since that
1039
+ * should be unique within the plan tree.
1040
+ */
1041
+
1042
+
979
1043
  /*
980
1044
  * push_child_plan: temporarily transfer deparsing attention to a child plan
981
1045
  *
@@ -1037,8 +1101,18 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1037
1101
  /* ----------
1038
1102
  * get_query_def - Parse back one query parsetree
1039
1103
  *
1040
- * If resultDesc is not NULL, then it is the output tuple descriptor for
1041
- * the view represented by a SELECT query.
1104
+ * query: parsetree to be displayed
1105
+ * buf: output text is appended to buf
1106
+ * parentnamespace: list (initially empty) of outer-level deparse_namespace's
1107
+ * resultDesc: if not NULL, the output tuple descriptor for the view
1108
+ * represented by a SELECT query. We use the column names from it
1109
+ * to label SELECT output columns, in preference to names in the query
1110
+ * colNamesVisible: true if the surrounding context cares about the output
1111
+ * column names at all (as, for example, an EXISTS() context does not);
1112
+ * when false, we can suppress dummy column labels such as "?column?"
1113
+ * prettyFlags: bitmask of PRETTYFLAG_XXX options
1114
+ * wrapColumn: maximum line length, or -1 to disable wrapping
1115
+ * startIndent: initial indentation amount
1042
1116
  * ----------
1043
1117
  */
1044
1118
 
@@ -1074,6 +1148,8 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1074
1148
  * get_target_list - Parse back a SELECT target list
1075
1149
  *
1076
1150
  * This is also used for RETURNING lists in INSERT/UPDATE/DELETE.
1151
+ *
1152
+ * resultDesc and colNamesVisible are as for get_query_def()
1077
1153
  * ----------
1078
1154
  */
1079
1155
 
@@ -1291,6 +1367,16 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1291
1367
  */
1292
1368
 
1293
1369
 
1370
+ /*
1371
+ * get_rule_list_toplevel - Parse back a list of toplevel expressions
1372
+ *
1373
+ * Apply get_rule_expr_toplevel() to each element of a List.
1374
+ *
1375
+ * This adds commas between the expressions, but caller is responsible
1376
+ * for printing surrounding decoration.
1377
+ */
1378
+
1379
+
1294
1380
  /*
1295
1381
  * get_rule_expr_funccall - Parse back a function-call expression
1296
1382
  *
@@ -1339,6 +1425,14 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1339
1425
  */
1340
1426
 
1341
1427
 
1428
+ /*
1429
+ * get_func_sql_syntax - Parse back a SQL-syntax function call
1430
+ *
1431
+ * Returns true if we successfully deparsed, false if we did not
1432
+ * recognize the function.
1433
+ */
1434
+
1435
+
1342
1436
  /* ----------
1343
1437
  * get_coercion_expr
1344
1438
  *
@@ -7,18 +7,15 @@
7
7
  /*-------------------------------------------------------------------------
8
8
  *
9
9
  * assert.c
10
- * Assert code.
10
+ * Assert support code.
11
11
  *
12
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  *
16
16
  * IDENTIFICATION
17
17
  * src/backend/utils/error/assert.c
18
18
  *
19
- * NOTE
20
- * This should eventually work with elog()
21
- *
22
19
  *-------------------------------------------------------------------------
23
20
  */
24
21
  #include "postgres.h"
@@ -30,6 +27,10 @@
30
27
 
31
28
  /*
32
29
  * ExceptionalCondition - Handles the failure of an Assert()
30
+ *
31
+ * We intentionally do not go through elog() here, on the grounds of
32
+ * wanting to minimize the amount of infrastructure that has to be
33
+ * working to report an assertion failure.
33
34
  */
34
35
  void
35
36
  ExceptionalCondition(const char *conditionName,
@@ -37,20 +38,21 @@ ExceptionalCondition(const char *conditionName,
37
38
  const char *fileName,
38
39
  int lineNumber)
39
40
  {
41
+ /* Report the failure on stderr (or local equivalent) */
40
42
  if (!PointerIsValid(conditionName)
41
43
  || !PointerIsValid(fileName)
42
44
  || !PointerIsValid(errorType))
43
- write_stderr("TRAP: ExceptionalCondition: bad arguments\n");
45
+ write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
46
+ (int) getpid());
44
47
  else
45
- {
46
- write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
48
+ write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n",
47
49
  errorType, conditionName,
48
- fileName, lineNumber);
49
- }
50
+ fileName, lineNumber, (int) getpid());
50
51
 
51
52
  /* Usually this shouldn't be needed, but make sure the msg went out */
52
53
  fflush(stderr);
53
54
 
55
+ /* If we have support for it, dump a simple backtrace */
54
56
  #ifdef HAVE_BACKTRACE_SYMBOLS
55
57
  {
56
58
  void *buf[100];
@@ -61,12 +63,12 @@ ExceptionalCondition(const char *conditionName,
61
63
  }
62
64
  #endif
63
65
 
64
- #ifdef SLEEP_ON_ASSERT
65
-
66
66
  /*
67
- * It would be nice to use pg_usleep() here, but only does 2000 sec or 33
68
- * minutes, which seems too short.
67
+ * If configured to do so, sleep indefinitely to allow user to attach a
68
+ * debugger. It would be nice to use pg_usleep() here, but that can sleep
69
+ * at most 2G usec or ~33 minutes, which seems too short.
69
70
  */
71
+ #ifdef SLEEP_ON_ASSERT
70
72
  sleep(1000000);
71
73
  #endif
72
74