pg_query 2.2.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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. data/ext/pg_query/src_port_random.c +0 -31
@@ -1,7 +1,7 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
- * - whereToSendOutput
4
3
  * - debug_query_string
4
+ * - whereToSendOutput
5
5
  * - ProcessInterrupts
6
6
  * - check_stack_depth
7
7
  * - stack_is_too_deep
@@ -16,7 +16,7 @@
16
16
  * postgres.c
17
17
  * POSTGRES C Backend Interface
18
18
  *
19
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
19
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
20
20
  * Portions Copyright (c) 1994, Regents of the University of California
21
21
  *
22
22
  *
@@ -55,6 +55,7 @@
55
55
  #include "catalog/pg_type.h"
56
56
  #include "commands/async.h"
57
57
  #include "commands/prepare.h"
58
+ #include "common/pg_prng.h"
58
59
  #include "jit/jit.h"
59
60
  #include "libpq/libpq.h"
60
61
  #include "libpq/pqformat.h"
@@ -79,6 +80,7 @@
79
80
  #include "rewrite/rewriteHandler.h"
80
81
  #include "storage/bufmgr.h"
81
82
  #include "storage/ipc.h"
83
+ #include "storage/pmsignal.h"
82
84
  #include "storage/proc.h"
83
85
  #include "storage/procsignal.h"
84
86
  #include "storage/sinval.h"
@@ -116,7 +118,21 @@ __thread int max_stack_depth = 100;
116
118
  /* wait N seconds to allow attach from a debugger */
117
119
 
118
120
 
121
+ /* Time between checks that the client is still connected. */
122
+
123
+
124
+ /* ----------------
125
+ * private typedefs etc
126
+ * ----------------
127
+ */
119
128
 
129
+ /* type of argument for bind_param_error_callback */
130
+ typedef struct BindParamCbData
131
+ {
132
+ const char *portalName;
133
+ int paramno; /* zero-based param number, or -1 initially */
134
+ const char *paramval; /* textual input string, if available */
135
+ } BindParamCbData;
120
136
 
121
137
  /* ----------------
122
138
  * private variables
@@ -129,18 +145,16 @@ static __thread long max_stack_depth_bytes = 100 * 1024L;
129
145
 
130
146
  /*
131
147
  * Stack base pointer -- initialized by PostmasterMain and inherited by
132
- * subprocesses. This is not static because old versions of PL/Java modify
133
- * it directly. Newer versions use set_stack_base(), but we want to stay
134
- * binary-compatible for the time being.
148
+ * subprocesses (but see also InitPostmasterChild).
135
149
  */
136
- __thread char *stack_base_ptr = NULL;
150
+ static __thread char *stack_base_ptr = NULL;
137
151
 
138
152
 
139
153
  /*
140
154
  * On IA64 we also have to remember the register stack base.
141
155
  */
142
156
  #if defined(__ia64__) || defined(__ia64)
143
- char *register_stack_base_ptr = NULL;
157
+ static char *register_stack_base_ptr = NULL;
144
158
  #endif
145
159
 
146
160
  /*
@@ -193,12 +207,12 @@ static int interactive_getc(void);
193
207
  static int SocketBackend(StringInfo inBuf);
194
208
  static int ReadCommand(StringInfo inBuf);
195
209
  static void forbidden_in_wal_sender(char firstchar);
196
- static List *pg_rewrite_query(Query *query);
197
210
  static bool check_log_statement(List *stmt_list);
198
211
  static int errdetail_execute(List *raw_parsetree_list);
199
212
  static int errdetail_params(ParamListInfo params);
200
213
  static int errdetail_abort(void);
201
214
  static int errdetail_recovery_conflict(void);
215
+ static void bind_param_error_callback(void *arg);
202
216
  static void start_xact_command(void);
203
217
  static void finish_xact_command(void);
204
218
  static bool IsTransactionExitStmt(Node *parsetree);
@@ -304,9 +318,17 @@ static void disable_statement_timeout(void);
304
318
 
305
319
 
306
320
  /*
307
- * Do parse analysis and rewriting. This is the same as pg_analyze_and_rewrite
308
- * except that external-parameter resolution is determined by parser callback
309
- * hooks instead of a fixed list of parameter datatypes.
321
+ * Do parse analysis and rewriting. This is the same as
322
+ * pg_analyze_and_rewrite_fixedparams except that it's okay to deduce
323
+ * information about $n symbol datatypes from context.
324
+ */
325
+
326
+
327
+ /*
328
+ * Do parse analysis and rewriting. This is the same as
329
+ * pg_analyze_and_rewrite_fixedparams except that, instead of a fixed list of
330
+ * parameter datatypes, a parser callback is supplied that can do
331
+ * external-parameter resolution and possibly other things.
310
332
  */
311
333
 
312
334
 
@@ -433,6 +455,13 @@ static void disable_statement_timeout(void);
433
455
  */
434
456
 
435
457
 
458
+ /*
459
+ * bind_param_error_callback
460
+ *
461
+ * Error context callback used while parsing parameters in a Bind message
462
+ */
463
+
464
+
436
465
  /*
437
466
  * exec_describe_statement_message
438
467
  *
@@ -485,8 +514,8 @@ static void disable_statement_timeout(void);
485
514
  /*
486
515
  * quickdie() occurs when signaled SIGQUIT by the postmaster.
487
516
  *
488
- * Some backend has bought the farm,
489
- * so we need to stop what we're doing and exit.
517
+ * Either some backend has bought the farm, or we've been told to shut down
518
+ * "immediately"; so we need to stop what we're doing and exit.
490
519
  */
491
520
 
492
521
 
@@ -694,7 +723,7 @@ stack_is_too_deep(void)
694
723
 
695
724
  /* ----------------------------------------------------------------
696
725
  * process_postgres_switches
697
- * Parse command line arguments for PostgresMain
726
+ * Parse command line arguments for backends
698
727
  *
699
728
  * This is called twice, once for the "secure" options coming from the
700
729
  * postmaster or command line, and once for the "insecure" options coming
@@ -717,20 +746,30 @@ stack_is_too_deep(void)
717
746
  #endif
718
747
 
719
748
 
749
+ /*
750
+ * PostgresSingleUserMain
751
+ * Entry point for single user mode. argc/argv are the command line
752
+ * arguments to be used.
753
+ *
754
+ * Performs single user specific setup then calls PostgresMain() to actually
755
+ * process queries. Single user mode specific setup should go here, rather
756
+ * than PostgresMain() or InitPostgres() when reasonably possible.
757
+ */
758
+
759
+
760
+
720
761
  /* ----------------------------------------------------------------
721
762
  * PostgresMain
722
- * postgres main loop -- all backends, interactive or otherwise start here
763
+ * postgres main loop -- all backends, interactive or otherwise loop here
764
+ *
765
+ * dbname is the name of the database to connect to, username is the
766
+ * PostgreSQL user name to be used for the session.
723
767
  *
724
- * argc/argv are the command line arguments to be used. (When being forked
725
- * by the postmaster, these are not the original argv array of the process.)
726
- * dbname is the name of the database to connect to, or NULL if the database
727
- * name should be extracted from the command line arguments or defaulted.
728
- * username is the PostgreSQL user name to be used for the session.
768
+ * NB: Single user mode specific setup should go to PostgresSingleUserMain()
769
+ * if reasonably possible.
729
770
  * ----------------------------------------------------------------
730
771
  */
731
- #ifdef EXEC_BACKEND
732
- #else
733
- #endif
772
+
734
773
 
735
774
  /*
736
775
  * Throw an error if we're a WAL sender process.
@@ -0,0 +1,140 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - pgStatSessionEndCause
4
+ *--------------------------------------------------------------------
5
+ */
6
+
7
+ /* -------------------------------------------------------------------------
8
+ *
9
+ * pgstat_database.c
10
+ * Implementation of database statistics.
11
+ *
12
+ * This file contains the implementation of database statistics. It is kept
13
+ * separate from pgstat.c to enforce the line between the statistics access /
14
+ * storage implementation and the details about individual types of
15
+ * statistics.
16
+ *
17
+ * Copyright (c) 2001-2022, PostgreSQL Global Development Group
18
+ *
19
+ * IDENTIFICATION
20
+ * src/backend/utils/activity/pgstat_database.c
21
+ * -------------------------------------------------------------------------
22
+ */
23
+
24
+ #include "postgres.h"
25
+
26
+ #include "utils/pgstat_internal.h"
27
+ #include "utils/timestamp.h"
28
+ #include "storage/procsignal.h"
29
+
30
+
31
+ static bool pgstat_should_report_connstat(void);
32
+
33
+
34
+
35
+
36
+
37
+
38
+ __thread SessionEndType pgStatSessionEndCause = DISCONNECT_NORMAL;
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+ /*
48
+ * Remove entry for the database being dropped.
49
+ */
50
+
51
+
52
+ /*
53
+ * Called from autovacuum.c to report startup of an autovacuum process.
54
+ * We are called before InitPostgres is done, so can't rely on MyDatabaseId;
55
+ * the db OID must be passed in, instead.
56
+ */
57
+
58
+
59
+ /*
60
+ * Report a Hot Standby recovery conflict.
61
+ */
62
+
63
+
64
+ /*
65
+ * Report a detected deadlock.
66
+ */
67
+
68
+
69
+ /*
70
+ * Report one or more checksum failures.
71
+ */
72
+
73
+
74
+ /*
75
+ * Report one checksum failure in the current database.
76
+ */
77
+
78
+
79
+ /*
80
+ * Report creation of temporary file.
81
+ */
82
+
83
+
84
+ /*
85
+ * Notify stats system of a new connection.
86
+ */
87
+
88
+
89
+ /*
90
+ * Notify the stats system of a disconnect.
91
+ */
92
+
93
+
94
+ /*
95
+ * Support function for the SQL-callable pgstat* functions. Returns
96
+ * the collected statistics for one database or NULL. NULL doesn't mean
97
+ * that the database doesn't exist, just that there are no statistics, so the
98
+ * caller is better off to report ZERO instead.
99
+ */
100
+
101
+
102
+
103
+
104
+ /*
105
+ * Subroutine for pgstat_report_stat(): Handle xact commit/rollback and I/O
106
+ * timings.
107
+ */
108
+
109
+
110
+ /*
111
+ * We report session statistics only for normal backend processes. Parallel
112
+ * workers run in parallel, so they don't contribute to session times, even
113
+ * though they use CPU time. Walsender processes could be considered here,
114
+ * but they have different session characteristics from normal backends (for
115
+ * example, they are always "active"), so they would skew session statistics.
116
+ */
117
+
118
+
119
+ /*
120
+ * Find or create a local PgStat_StatDBEntry entry for dboid.
121
+ */
122
+
123
+
124
+ /*
125
+ * Reset the database's reset timestamp, without resetting the contents of the
126
+ * database stats.
127
+ */
128
+
129
+
130
+ /*
131
+ * Flush out pending stats for the entry
132
+ *
133
+ * If nowait is true, this function returns false if lock could not
134
+ * immediately acquired, otherwise true is returned.
135
+ */
136
+ #define PGSTAT_ACCUM_DBCOUNT(item) \
137
+ (sharedent)->stats.item += (pendingent)->item
138
+ #undef PGSTAT_ACCUM_DBCOUNT
139
+
140
+
@@ -11,7 +11,7 @@
11
11
  * datum.c
12
12
  * POSTGRES Datum (abstract data type) manipulation routines.
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
  *
@@ -51,6 +51,7 @@
51
51
  #include "postgres.h"
52
52
 
53
53
  #include "access/detoast.h"
54
+ #include "common/hashfn.h"
54
55
  #include "fmgr.h"
55
56
  #include "utils/builtins.h"
56
57
  #include "utils/datum.h"
@@ -262,6 +263,17 @@ datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
262
263
  */
263
264
 
264
265
 
266
+ /*-------------------------------------------------------------------------
267
+ * datum_image_hash
268
+ *
269
+ * Generate a hash value based on the binary representation of 'value'. Most
270
+ * use cases will want to use the hash function specific to the Datum's type,
271
+ * however, some corner cases require generating a hash value based on the
272
+ * actual bits rather than the logical value.
273
+ *-------------------------------------------------------------------------
274
+ */
275
+
276
+
265
277
  /*-------------------------------------------------------------------------
266
278
  * btequalimage
267
279
  *
@@ -11,7 +11,7 @@
11
11
  * expandeddatum.c
12
12
  * Support functions for "expanded" value representations.
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
  *
@@ -10,7 +10,7 @@
10
10
  * Display type names "nicely".
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * IDENTIFICATION
@@ -28,6 +28,7 @@
28
28
  #include "catalog/pg_type.h"
29
29
  #include "mb/pg_wchar.h"
30
30
  #include "utils/builtins.h"
31
+ #include "utils/fmgroids.h"
31
32
  #include "utils/lsyscache.h"
32
33
  #include "utils/numeric.h"
33
34
  #include "utils/syscache.h"
@@ -77,13 +78,16 @@ static char *printTypmod(const char *typname, int32 typmod, Oid typmodout);
77
78
  * - FORMAT_TYPE_ALLOW_INVALID
78
79
  * if the type OID is invalid or unknown, return ??? or such instead
79
80
  * of failing
81
+ * - FORMAT_TYPE_INVALID_AS_NULL
82
+ * if the type OID is invalid or unknown, return NULL instead of ???
83
+ * or such
80
84
  * - FORMAT_TYPE_FORCE_QUALIFY
81
85
  * always schema-qualify type names, regardless of search_path
82
86
  *
83
87
  * Note that TYPEMOD_GIVEN is not interchangeable with "typemod == -1";
84
88
  * see the comments above for format_type().
85
89
  *
86
- * Returns a palloc'd string.
90
+ * Returns a palloc'd string, or NULL.
87
91
  */
88
92
 
89
93
 
@@ -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"
@@ -100,6 +98,11 @@
100
98
  #define PRETTYFLAG_INDENT 0x0002
101
99
  #define PRETTYFLAG_SCHEMA 0x0004
102
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
+
103
106
  /* Default line length for pretty-print wrapping: 0 means wrap always */
104
107
  #define WRAP_COLUMN_DEFAULT 0
105
108
 
@@ -182,6 +185,10 @@ typedef struct
182
185
  List *outer_tlist; /* referent for OUTER_VAR Vars */
183
186
  List *inner_tlist; /* referent for INNER_VAR Vars */
184
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;
185
192
  } deparse_namespace;
186
193
 
187
194
  /*
@@ -347,7 +354,8 @@ static char *pg_get_indexdef_worker(Oid indexrelid, int colno,
347
354
  bool attrsOnly, bool keysOnly,
348
355
  bool showTblSpc, bool inherits,
349
356
  int prettyFlags, bool missing_ok);
350
- 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);
351
359
  static char *pg_get_partkeydef_worker(Oid relid, int prettyFlags,
352
360
  bool attrsOnly, bool missing_ok);
353
361
  static char *pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
@@ -358,6 +366,7 @@ static int print_function_arguments(StringInfo buf, HeapTuple proctup,
358
366
  bool print_table_args, bool print_defaults);
359
367
  static void print_function_rettype(StringInfo buf, HeapTuple proctup);
360
368
  static void print_function_trftypes(StringInfo buf, HeapTuple proctup);
369
+ static void print_function_sqlbody(StringInfo buf, HeapTuple proctup);
361
370
  static void set_rtable_names(deparse_namespace *dpns, List *parent_namespaces,
362
371
  Bitmapset *rels_used);
363
372
  static void set_deparse_for_query(deparse_namespace *dpns, Query *query,
@@ -380,6 +389,8 @@ static void identify_join_columns(JoinExpr *j, RangeTblEntry *jrte,
380
389
  deparse_columns *colinfo);
381
390
  static char *get_rtable_name(int rtindex, deparse_context *context);
382
391
  static void set_deparse_plan(deparse_namespace *dpns, Plan *plan);
392
+ static Plan *find_recursive_union(deparse_namespace *dpns,
393
+ WorkTableScan *wtscan);
383
394
  static void push_child_plan(deparse_namespace *dpns, Plan *plan,
384
395
  deparse_namespace *save_dpns);
385
396
  static void pop_child_plan(deparse_namespace *dpns,
@@ -457,6 +468,7 @@ static void get_agg_expr(Aggref *aggref, deparse_context *context,
457
468
  static void get_agg_combine_expr(Node *node, deparse_context *context,
458
469
  void *callback_arg);
459
470
  static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context);
471
+ static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context);
460
472
  static void get_coercion_expr(Node *arg, deparse_context *context,
461
473
  Oid resulttype, int32 resulttypmod,
462
474
  Node *parentNode);
@@ -580,17 +592,46 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
580
592
  */
581
593
 
582
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
+
583
606
  /*
584
607
  * pg_get_statisticsobjdef
585
608
  * Get the definition of an extended statistics object
586
609
  */
587
610
 
588
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
+
589
625
  /*
590
626
  * Internal workhorse to decompile an extended statistics object.
591
627
  */
592
628
 
593
629
 
630
+ /*
631
+ * Generate text array of expressions for statistics object.
632
+ */
633
+
634
+
594
635
  /*
595
636
  * pg_get_partkeydef
596
637
  *
@@ -663,6 +704,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
663
704
  * the one specified by the second parameter. This is sufficient for
664
705
  * partial indexes, column default expressions, etc. We also support
665
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.
666
713
  * ----------
667
714
  */
668
715
 
@@ -756,6 +803,10 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
756
803
 
757
804
 
758
805
 
806
+
807
+
808
+
809
+
759
810
  /*
760
811
  * deparse_expression - General utility for deparsing expressions
761
812
  *
@@ -975,13 +1026,20 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
975
1026
  * of a given Plan node
976
1027
  *
977
1028
  * This sets the plan, outer_plan, inner_plan, outer_tlist, inner_tlist,
978
- * and index_tlist fields. Caller is responsible for adjusting the ancestors
1029
+ * and index_tlist fields. Caller must already have adjusted the ancestors
979
1030
  * list if necessary. Note that the rtable, subplans, and ctes fields do
980
1031
  * not need to change when shifting attention to different plan nodes in a
981
1032
  * single plan tree.
982
1033
  */
983
1034
 
984
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
+
985
1043
  /*
986
1044
  * push_child_plan: temporarily transfer deparsing attention to a child plan
987
1045
  *
@@ -1367,6 +1425,14 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1367
1425
  */
1368
1426
 
1369
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
+
1370
1436
  /* ----------
1371
1437
  * get_coercion_expr
1372
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