pg_query 5.1.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +1 -1
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/pg_query.h +4 -3
  6. data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
  7. data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
  8. data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
  9. data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
  10. data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
  11. data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
  12. data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
  13. data/ext/pg_query/include/postgres/access/amapi.h +10 -3
  14. data/ext/pg_query/include/postgres/access/attmap.h +1 -1
  15. data/ext/pg_query/include/postgres/access/attnum.h +1 -1
  16. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  17. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  18. data/ext/pg_query/include/postgres/access/clog.h +2 -3
  19. data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
  20. data/ext/pg_query/include/postgres/access/detoast.h +1 -1
  21. data/ext/pg_query/include/postgres/access/genam.h +8 -4
  22. data/ext/pg_query/include/postgres/access/gin.h +1 -1
  23. data/ext/pg_query/include/postgres/access/htup.h +1 -1
  24. data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
  25. data/ext/pg_query/include/postgres/access/itup.h +3 -3
  26. data/ext/pg_query/include/postgres/access/parallel.h +1 -2
  27. data/ext/pg_query/include/postgres/access/printtup.h +1 -1
  28. data/ext/pg_query/include/postgres/access/relation.h +1 -1
  29. data/ext/pg_query/include/postgres/access/relscan.h +1 -1
  30. data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
  31. data/ext/pg_query/include/postgres/access/sdir.h +1 -1
  32. data/ext/pg_query/include/postgres/access/skey.h +1 -1
  33. data/ext/pg_query/include/postgres/access/slru.h +221 -0
  34. data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
  35. data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
  36. data/ext/pg_query/include/postgres/access/table.h +1 -1
  37. data/ext/pg_query/include/postgres/access/tableam.h +33 -24
  38. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  39. data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
  40. data/ext/pg_query/include/postgres/access/transam.h +7 -7
  41. data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
  42. data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
  43. data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
  44. data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
  45. data/ext/pg_query/include/postgres/access/twophase.h +2 -2
  46. data/ext/pg_query/include/postgres/access/xact.h +5 -5
  47. data/ext/pg_query/include/postgres/access/xlog.h +20 -12
  48. data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
  49. data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
  50. data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
  51. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
  52. data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
  53. data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
  54. data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
  55. data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
  56. data/ext/pg_query/include/postgres/c.h +31 -36
  57. data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
  58. data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
  59. data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
  60. data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
  61. data/ext/pg_query/include/postgres/catalog/index.h +22 -18
  62. data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
  63. data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
  64. data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
  65. data/ext/pg_query/include/postgres/catalog/objectaddress.h +1 -1
  66. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
  67. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
  68. data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
  69. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
  70. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
  71. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
  72. data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
  73. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
  74. data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
  75. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
  76. data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
  77. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
  78. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
  79. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
  81. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
  82. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
  83. data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
  84. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
  85. data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
  86. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
  87. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
  88. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
  89. data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
  90. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
  91. data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
  92. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
  93. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
  94. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
  95. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
  96. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
  97. data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
  98. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
  99. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
  100. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
  101. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
  102. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
  103. data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
  104. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
  105. data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
  106. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
  107. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
  108. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
  109. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
  110. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
  111. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
  112. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
  113. data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
  114. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
  115. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
  116. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
  117. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
  118. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
  119. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
  120. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
  121. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
  122. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
  125. data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
  126. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
  127. data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
  128. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  129. data/ext/pg_query/include/postgres/commands/async.h +2 -6
  130. data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
  131. data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
  132. data/ext/pg_query/include/postgres/commands/event_trigger.h +5 -2
  133. data/ext/pg_query/include/postgres/commands/explain.h +19 -3
  134. data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
  135. data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
  136. data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
  137. data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
  138. data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
  139. data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
  140. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  141. data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
  142. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +453 -0
  143. data/ext/pg_query/include/postgres/common/int.h +79 -4
  144. data/ext/pg_query/include/postgres/common/keywords.h +1 -1
  145. data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
  146. data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
  147. data/ext/pg_query/include/postgres/common/relpath.h +4 -4
  148. data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
  149. data/ext/pg_query/include/postgres/common/sha2.h +1 -1
  150. data/ext/pg_query/include/postgres/common/string.h +1 -1
  151. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
  152. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
  153. data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
  154. data/ext/pg_query/include/postgres/datatype/timestamp.h +28 -2
  155. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
  156. data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
  157. data/ext/pg_query/include/postgres/executor/execdesc.h +1 -1
  158. data/ext/pg_query/include/postgres/executor/executor.h +6 -5
  159. data/ext/pg_query/include/postgres/executor/functions.h +2 -1
  160. data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
  161. data/ext/pg_query/include/postgres/executor/spi.h +2 -8
  162. data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
  163. data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
  164. data/ext/pg_query/include/postgres/fmgr.h +2 -2
  165. data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
  166. data/ext/pg_query/include/postgres/funcapi.h +2 -2
  167. data/ext/pg_query/include/postgres/gram.h +871 -830
  168. data/ext/pg_query/include/postgres/gramparse.h +1 -1
  169. data/ext/pg_query/include/postgres/jit/jit.h +4 -3
  170. data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
  171. data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
  172. data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
  173. data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
  174. data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
  175. data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
  176. data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
  177. data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
  178. data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
  179. data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
  180. data/ext/pg_query/include/postgres/libpq/libpq-be.h +29 -25
  181. data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
  182. data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
  183. data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
  184. data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
  185. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  186. data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
  187. data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
  188. data/ext/pg_query/include/postgres/mb/pg_wchar.h +102 -82
  189. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
  190. data/ext/pg_query/include/postgres/miscadmin.h +64 -52
  191. data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
  192. data/ext/pg_query/include/postgres/nodes/execnodes.h +109 -25
  193. data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
  194. data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
  195. data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
  196. data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
  197. data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
  198. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
  199. data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
  200. data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
  201. data/ext/pg_query/include/postgres/nodes/params.h +1 -1
  202. data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
  203. data/ext/pg_query/include/postgres/nodes/pathnodes.h +60 -9
  204. data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
  205. data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
  206. data/ext/pg_query/include/postgres/nodes/primnodes.h +344 -50
  207. data/ext/pg_query/include/postgres/nodes/print.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
  209. data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
  210. data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
  211. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
  212. data/ext/pg_query/include/postgres/nodes/value.h +1 -1
  213. data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
  214. data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
  215. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
  216. data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
  217. data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
  218. data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
  219. data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
  220. data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
  221. data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
  222. data/ext/pg_query/include/postgres/parser/parse_coerce.h +2 -2
  223. data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
  224. data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
  225. data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
  226. data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
  227. data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
  228. data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
  229. data/ext/pg_query/include/postgres/parser/parser.h +3 -3
  230. data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
  231. data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
  232. data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
  233. data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
  234. data/ext/pg_query/include/postgres/pg_config.h +34 -34
  235. data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
  236. data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
  237. data/ext/pg_query/include/postgres/pg_trace.h +1 -1
  238. data/ext/pg_query/include/postgres/pgstat.h +13 -11
  239. data/ext/pg_query/include/postgres/pgtime.h +1 -1
  240. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
  241. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
  242. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
  243. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
  244. data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
  245. data/ext/pg_query/include/postgres/plpgsql.h +15 -13
  246. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
  247. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
  249. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
  250. data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
  251. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
  252. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
  253. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
  254. data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
  255. data/ext/pg_query/include/postgres/port/atomics.h +93 -6
  256. data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
  257. data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
  258. data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
  259. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  260. data/ext/pg_query/include/postgres/port/simd.h +48 -1
  261. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
  262. data/ext/pg_query/include/postgres/port/win32_port.h +1 -11
  263. data/ext/pg_query/include/postgres/port.h +7 -3
  264. data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
  265. data/ext/pg_query/include/postgres/postgres.h +1 -1
  266. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
  267. data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
  268. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
  269. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
  270. data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
  271. data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
  272. data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
  273. data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
  274. data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
  275. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  276. data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
  277. data/ext/pg_query/include/postgres/regex/regex.h +92 -9
  278. data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
  279. data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
  280. data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
  281. data/ext/pg_query/include/postgres/replication/origin.h +1 -1
  282. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +18 -28
  283. data/ext/pg_query/include/postgres/replication/slot.h +41 -5
  284. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  285. data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
  286. data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
  287. data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
  288. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
  289. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
  290. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
  291. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
  292. data/ext/pg_query/include/postgres/storage/block.h +1 -1
  293. data/ext/pg_query/include/postgres/storage/buf.h +1 -1
  294. data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
  295. data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
  296. data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
  297. data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
  298. data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
  299. data/ext/pg_query/include/postgres/storage/fd.h +30 -13
  300. data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
  301. data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
  302. data/ext/pg_query/include/postgres/storage/item.h +1 -1
  303. data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
  304. data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
  305. data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
  306. data/ext/pg_query/include/postgres/storage/latch.h +4 -2
  307. data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
  308. data/ext/pg_query/include/postgres/storage/lock.h +19 -19
  309. data/ext/pg_query/include/postgres/storage/lockdefs.h +1 -1
  310. data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
  311. data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
  312. data/ext/pg_query/include/postgres/storage/off.h +1 -1
  313. data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
  314. data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
  315. data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
  316. data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
  317. data/ext/pg_query/include/postgres/storage/proc.h +48 -23
  318. data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
  319. data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
  320. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  321. data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
  322. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  323. data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
  324. data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
  325. data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
  326. data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
  327. data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
  328. data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
  329. data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
  330. data/ext/pg_query/include/postgres/storage/smgr.h +41 -27
  331. data/ext/pg_query/include/postgres/storage/spin.h +1 -1
  332. data/ext/pg_query/include/postgres/storage/standby.h +13 -3
  333. data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
  334. data/ext/pg_query/include/postgres/storage/sync.h +4 -4
  335. data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
  336. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
  337. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
  338. data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
  339. data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
  340. data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
  341. data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
  342. data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
  343. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
  344. data/ext/pg_query/include/postgres/utils/acl.h +19 -7
  345. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
  346. data/ext/pg_query/include/postgres/utils/array.h +1 -2
  347. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  348. data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
  349. data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
  350. data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
  351. data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
  352. data/ext/pg_query/include/postgres/utils/catcache.h +5 -6
  353. data/ext/pg_query/include/postgres/utils/date.h +1 -1
  354. data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
  355. data/ext/pg_query/include/postgres/utils/datum.h +1 -1
  356. data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
  357. data/ext/pg_query/include/postgres/utils/elog.h +3 -8
  358. data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
  359. data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
  360. data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
  361. data/ext/pg_query/include/postgres/utils/float.h +1 -1
  362. data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
  363. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
  364. data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
  365. data/ext/pg_query/include/postgres/utils/guc.h +20 -6
  366. data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
  367. data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
  368. data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
  369. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  370. data/ext/pg_query/include/postgres/utils/inval.h +1 -1
  371. data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
  372. data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
  373. data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
  374. data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
  375. data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
  376. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
  377. data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
  378. data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
  379. data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
  380. data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
  381. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +11 -17
  382. data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
  383. data/ext/pg_query/include/postgres/utils/portal.h +9 -9
  384. data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
  385. data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
  386. data/ext/pg_query/include/postgres/utils/rel.h +14 -15
  387. data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
  388. data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
  389. data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
  390. data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
  391. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
  392. data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
  393. data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
  394. data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
  395. data/ext/pg_query/include/postgres/utils/syscache.h +2 -98
  396. data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
  397. data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
  398. data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
  399. data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
  400. data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
  401. data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
  402. data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
  403. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  404. data/ext/pg_query/include/postgres/utils/xml.h +4 -4
  405. data/ext/pg_query/include/postgres/varatt.h +1 -1
  406. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
  407. data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
  408. data/ext/pg_query/pg_query.pb-c.c +6598 -3739
  409. data/ext/pg_query/pg_query_normalize.c +42 -1
  410. data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
  411. data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
  412. data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
  413. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -1
  414. data/ext/pg_query/pg_query_scan.c +1 -1
  415. data/ext/pg_query/postgres_deparse.c +409 -21
  416. data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
  417. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  418. data/ext/pg_query/src_backend_commands_define.c +2 -3
  419. data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
  420. data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
  421. data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
  422. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  423. data/ext/pg_query/src_backend_nodes_list.c +3 -7
  424. data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
  425. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
  426. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  427. data/ext/pg_query/src_backend_parser_gram.c +34490 -32135
  428. data/ext/pg_query/src_backend_parser_parser.c +8 -8
  429. data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
  430. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  431. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  432. data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
  433. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  434. data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
  435. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  436. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  437. data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
  438. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
  439. data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
  440. data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
  441. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
  442. data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
  443. data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
  444. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
  445. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
  446. data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
  447. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  448. data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
  449. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
  450. data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
  451. data/ext/pg_query/src_common_encnames.c +43 -44
  452. data/ext/pg_query/src_common_hashfn.c +1 -1
  453. data/ext/pg_query/src_common_keywords.c +1 -1
  454. data/ext/pg_query/src_common_kwlist_d.h +511 -466
  455. data/ext/pg_query/src_common_kwlookup.c +1 -1
  456. data/ext/pg_query/src_common_psprintf.c +3 -3
  457. data/ext/pg_query/src_common_stringinfo.c +18 -1
  458. data/ext/pg_query/src_common_wchar.c +45 -108
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
  462. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  463. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  464. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  465. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
  466. data/ext/pg_query/src_port_pg_bitutils.c +173 -28
  467. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  468. data/ext/pg_query/src_port_snprintf.c +1 -1
  469. data/ext/pg_query/src_port_strerror.c +1 -3
  470. data/ext/pg_query/src_port_strlcpy.c +1 -1
  471. data/lib/pg_query/param_refs.rb +1 -1
  472. data/lib/pg_query/pg_query_pb.rb +26 -3
  473. data/lib/pg_query/treewalker.rb +38 -11
  474. data/lib/pg_query/truncate.rb +1 -1
  475. data/lib/pg_query/version.rb +1 -1
  476. metadata +25 -11
  477. data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
  478. data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
  479. data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
@@ -196,6 +196,20 @@ static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg);
196
196
  static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor);
197
197
  static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor);
198
198
  static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor);
199
+ static void deparseJsonValueExpr(StringInfo str, JsonValueExpr *json_value_expr);
200
+ static void deparseJsonOutput(StringInfo str, JsonOutput *json_output);
201
+ static void deparseJsonParseExpr(StringInfo str, JsonParseExpr *json_parse_expr);
202
+ static void deparseJsonScalarExpr(StringInfo str, JsonScalarExpr *json_scalar_expr);
203
+ static void deparseJsonSerializeExpr(StringInfo str, JsonSerializeExpr *json_serialize_expr);
204
+ static void deparseJsonTable(StringInfo str, JsonTable *json_table);
205
+ static void deparseJsonTableColumn(StringInfo str, JsonTableColumn *json_table_column);
206
+ static void deparseJsonTableColumns(StringInfo str, List *json_table_columns);
207
+ static void deparseJsonTablePathSpec(StringInfo str, JsonTablePathSpec *json_table_path_spec);
208
+ static void deparseJsonBehavior(StringInfo str, JsonBehavior *json_behavior);
209
+ static void deparseJsonFuncExpr(StringInfo str, JsonFuncExpr *json_func_expr);
210
+ static void deparseJsonQuotesClauseOpt(StringInfo str, JsonQuotes quotes);
211
+ static void deparseJsonOnErrorClauseOpt(StringInfo str, JsonBehavior *behavior);
212
+ static void deparseJsonOnEmptyClauseOpt(StringInfo str, JsonBehavior *behavior);
199
213
  static void deparseConstraint(StringInfo str, Constraint *constraint);
200
214
  static void deparseSchemaStmt(StringInfo str, Node *node);
201
215
  static void deparseExecuteStmt(StringInfo str, ExecuteStmt *execute_stmt);
@@ -340,6 +354,21 @@ static void deparseExpr(StringInfo str, Node *node)
340
354
  case T_SetToDefault:
341
355
  deparseSetToDefault(str, castNode(SetToDefault, node));
342
356
  break;
357
+ case T_MergeSupportFunc:
358
+ appendStringInfoString(str, "merge_action() ");
359
+ break;
360
+ case T_JsonParseExpr:
361
+ deparseJsonParseExpr(str, castNode(JsonParseExpr, node));
362
+ break;
363
+ case T_JsonScalarExpr:
364
+ deparseJsonScalarExpr(str, castNode(JsonScalarExpr, node));
365
+ break;
366
+ case T_JsonSerializeExpr:
367
+ deparseJsonSerializeExpr(str, castNode(JsonSerializeExpr, node));
368
+ break;
369
+ case T_JsonFuncExpr:
370
+ deparseJsonFuncExpr(str, castNode(JsonFuncExpr, node));
371
+ break;
343
372
  case T_FuncCall:
344
373
  case T_SQLValueFunction:
345
374
  case T_MinMaxExpr:
@@ -1654,6 +1683,9 @@ static void deparseTableRef(StringInfo str, Node *node)
1654
1683
  case T_JoinExpr:
1655
1684
  deparseJoinExpr(str, castNode(JoinExpr, node));
1656
1685
  break;
1686
+ case T_JsonTable:
1687
+ deparseJsonTable(str, castNode(JsonTable, node));
1688
+ break;
1657
1689
  default:
1658
1690
  Assert(false);
1659
1691
  }
@@ -2661,14 +2693,21 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
2661
2693
  list_length(func_call->funcname) == 2 &&
2662
2694
  strcmp(strVal(linitial(func_call->funcname)), "pg_catalog") == 0 &&
2663
2695
  strcmp(strVal(lsecond(func_call->funcname)), "timezone") == 0 &&
2664
- list_length(func_call->args) == 2)
2696
+ list_length(func_call->args) > 0 &&
2697
+ list_length(func_call->args) <= 2)
2665
2698
  {
2666
2699
  /*
2667
2700
  * "AT TIME ZONE" is a keyword on its own merit, and only accepts the
2668
2701
  * keyword parameter style when its called as a keyword, not as a regular function (i.e. pg_catalog.timezone)
2669
2702
  * Note that the arguments are swapped in this case
2670
2703
  */
2671
- Expr* e = lsecond(func_call->args);
2704
+ Expr* e;
2705
+ bool isLocal = list_length(func_call->args) == 1;
2706
+
2707
+ if (isLocal)
2708
+ e = linitial(func_call->args);
2709
+ else
2710
+ e = lsecond(func_call->args);
2672
2711
 
2673
2712
  if (IsA(e, A_Expr)) {
2674
2713
  appendStringInfoChar(str, '(');
@@ -2680,8 +2719,12 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
2680
2719
  appendStringInfoChar(str, ')');
2681
2720
  }
2682
2721
 
2683
- appendStringInfoString(str, " AT TIME ZONE ");
2684
- deparseExpr(str, linitial(func_call->args));
2722
+ if (isLocal)
2723
+ appendStringInfoString(str, " AT LOCAL");
2724
+ else {
2725
+ appendStringInfoString(str, " AT TIME ZONE ");
2726
+ deparseExpr(str, linitial(func_call->args));
2727
+ }
2685
2728
  return;
2686
2729
  } else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
2687
2730
  list_length(func_call->funcname) == 2 &&
@@ -4006,7 +4049,8 @@ static void deparseAIndirection(StringInfo str, A_Indirection *a_indirection)
4006
4049
  IsA(a_indirection->arg, A_Expr) ||
4007
4050
  IsA(a_indirection->arg, TypeCast) ||
4008
4051
  IsA(a_indirection->arg, RowExpr) ||
4009
- (IsA(a_indirection->arg, ColumnRef) && !IsA(linitial(a_indirection->indirection), A_Indices));
4052
+ (IsA(a_indirection->arg, ColumnRef) && !IsA(linitial(a_indirection->indirection), A_Indices)) ||
4053
+ IsA(a_indirection->arg, JsonFuncExpr);
4010
4054
 
4011
4055
  if (need_parens)
4012
4056
  appendStringInfoChar(str, '(');
@@ -4332,20 +4376,26 @@ static void deparseMergeStmt(StringInfo str, MergeStmt *merge_stmt)
4332
4376
  deparseExpr(str, merge_stmt->joinCondition);
4333
4377
  appendStringInfoChar(str, ' ');
4334
4378
 
4335
- ListCell *lc, *lc2;
4379
+ ListCell *lc;
4336
4380
  foreach (lc, merge_stmt->mergeWhenClauses)
4337
4381
  {
4338
4382
  MergeWhenClause *clause = castNode(MergeWhenClause, lfirst(lc));
4339
4383
 
4340
4384
  appendStringInfoString(str, "WHEN ");
4341
4385
 
4342
- if (!clause->matched)
4386
+ switch (clause->matchKind)
4343
4387
  {
4344
- appendStringInfoString(str, "NOT ");
4388
+ case MERGE_WHEN_MATCHED:
4389
+ appendStringInfoString(str, "MATCHED ");
4390
+ break;
4391
+ case MERGE_WHEN_NOT_MATCHED_BY_SOURCE:
4392
+ appendStringInfoString(str, "NOT MATCHED BY SOURCE ");
4393
+ break;
4394
+ case MERGE_WHEN_NOT_MATCHED_BY_TARGET:
4395
+ appendStringInfoString(str, "NOT MATCHED ");
4396
+ break;
4345
4397
  }
4346
4398
 
4347
- appendStringInfoString(str, "MATCHED ");
4348
-
4349
4399
  if (clause->condition)
4350
4400
  {
4351
4401
  appendStringInfoString(str, "AND ");
@@ -4394,6 +4444,12 @@ static void deparseMergeStmt(StringInfo str, MergeStmt *merge_stmt)
4394
4444
  if (lfirst(lc) != llast(merge_stmt->mergeWhenClauses))
4395
4445
  appendStringInfoChar(str, ' ');
4396
4446
  }
4447
+
4448
+ if (merge_stmt->returningList)
4449
+ {
4450
+ appendStringInfoString(str, " RETURNING ");
4451
+ deparseTargetList(str, merge_stmt->returningList);
4452
+ }
4397
4453
  }
4398
4454
 
4399
4455
  static void deparseDeleteStmt(StringInfo str, DeleteStmt *delete_stmt)
@@ -4823,9 +4879,18 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
4823
4879
 
4824
4880
  if (list_length(constraint->keys) > 0)
4825
4881
  {
4826
- appendStringInfoChar(str, '(');
4827
- deparseColumnList(str, constraint->keys);
4828
- appendStringInfoString(str, ") ");
4882
+ bool valueOnly = false;
4883
+
4884
+ if (list_length(constraint->keys) == 1) {
4885
+ Node* firstKey = constraint->keys->elements[0].ptr_value;
4886
+ valueOnly = IsA(firstKey, String) && !strcmp("value", ((String*)firstKey)->sval);
4887
+ }
4888
+
4889
+ if (!valueOnly) {
4890
+ appendStringInfoChar(str, '(');
4891
+ deparseColumnList(str, constraint->keys);
4892
+ appendStringInfoString(str, ") ");
4893
+ }
4829
4894
  }
4830
4895
 
4831
4896
  if (list_length(constraint->fk_attrs) > 0)
@@ -6525,6 +6590,9 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6525
6590
  options = "DROP IDENTITY";
6526
6591
  trailing_missing_ok = true;
6527
6592
  break;
6593
+ case AT_SetExpression:
6594
+ appendStringInfoString(str, "ALTER COLUMN ");
6595
+ break;
6528
6596
  }
6529
6597
 
6530
6598
  if (alter_table_cmd->missing_ok && !trailing_missing_ok)
@@ -6539,6 +6607,9 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6539
6607
  {
6540
6608
  appendStringInfoString(str, quote_identifier(alter_table_cmd->name));
6541
6609
  appendStringInfoChar(str, ' ');
6610
+ } else if (alter_table_cmd->subtype == AT_SetAccessMethod)
6611
+ {
6612
+ appendStringInfoString(str, " DEFAULT");
6542
6613
  }
6543
6614
 
6544
6615
  if (alter_table_cmd->num > 0)
@@ -6626,6 +6697,11 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6626
6697
  deparseReplicaIdentityStmt(str, castNode(ReplicaIdentityStmt, alter_table_cmd->def));
6627
6698
  appendStringInfoChar(str, ' ');
6628
6699
  break;
6700
+ case AT_SetExpression:
6701
+ appendStringInfoString(str, "SET EXPRESSION AS (");
6702
+ deparseExpr(str, alter_table_cmd->def);
6703
+ appendStringInfoChar(str, ')');
6704
+ break;
6629
6705
  default:
6630
6706
  Assert(alter_table_cmd->def == NULL);
6631
6707
  break;
@@ -7509,15 +7585,29 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
7509
7585
  }
7510
7586
  else if (strcmp(def_elem->defname, "force_not_null") == 0)
7511
7587
  {
7512
- appendStringInfoString(str, "FORCE_NOT_NULL (");
7513
- deparseColumnList(str, castNode(List, def_elem->arg));
7514
- appendStringInfoChar(str, ')');
7588
+ appendStringInfoString(str, "FORCE_NOT_NULL ");
7589
+
7590
+ if (IsA(def_elem->arg, A_Star))
7591
+ deparseAStar(str, castNode(A_Star, def_elem->arg));
7592
+ else
7593
+ {
7594
+ appendStringInfoChar(str, '(');
7595
+ deparseColumnList(str, castNode(List, def_elem->arg));
7596
+ appendStringInfoChar(str, ')');
7597
+ }
7515
7598
  }
7516
7599
  else if (strcmp(def_elem->defname, "force_null") == 0)
7517
7600
  {
7518
- appendStringInfoString(str, "FORCE_NULL (");
7519
- deparseColumnList(str, castNode(List, def_elem->arg));
7520
- appendStringInfoChar(str, ')');
7601
+ appendStringInfoString(str, "FORCE_NULL ");
7602
+
7603
+ if (IsA(def_elem->arg, A_Star))
7604
+ deparseAStar(str, castNode(A_Star, def_elem->arg));
7605
+ else
7606
+ {
7607
+ appendStringInfoChar(str, '(');
7608
+ deparseColumnList(str, castNode(List, def_elem->arg));
7609
+ appendStringInfoChar(str, ')');
7610
+ }
7521
7611
  }
7522
7612
  else if (strcmp(def_elem->defname, "encoding") == 0)
7523
7613
  {
@@ -8617,7 +8707,7 @@ static void deparseFetchStmt(StringInfo str, FetchStmt *fetch_stmt)
8617
8707
  appendStringInfo(str, "RELATIVE %ld ", fetch_stmt->howMany);
8618
8708
  }
8619
8709
 
8620
- appendStringInfoString(str, fetch_stmt->portalname);
8710
+ appendStringInfoString(str, quote_identifier(fetch_stmt->portalname));
8621
8711
  }
8622
8712
 
8623
8713
  static void deparseAlterDefaultPrivilegesStmt(StringInfo str, AlterDefaultPrivilegesStmt *alter_default_privileges_stmt)
@@ -9559,7 +9649,10 @@ static void deparseAlterStatsStmt(StringInfo str, AlterStatsStmt *alter_stats_st
9559
9649
  deparseAnyName(str, alter_stats_stmt->defnames);
9560
9650
  appendStringInfoChar(str, ' ');
9561
9651
 
9562
- appendStringInfo(str, "SET STATISTICS %d", alter_stats_stmt->stxstattarget);
9652
+ if (alter_stats_stmt->stxstattarget)
9653
+ appendStringInfo(str, "SET STATISTICS %d", castNode(Integer, alter_stats_stmt->stxstattarget)->ival);
9654
+ else
9655
+ appendStringInfo(str, "SET STATISTICS DEFAULT");
9563
9656
  }
9564
9657
 
9565
9658
  static void deparseAlterTSDictionaryStmt(StringInfo str, AlterTSDictionaryStmt *alter_ts_dictionary_stmt)
@@ -10506,6 +10599,301 @@ static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConst
10506
10599
  appendStringInfoChar(str, ')');
10507
10600
  }
10508
10601
 
10602
+ static void deparseJsonParseExpr(StringInfo str, JsonParseExpr *json_parse_expr)
10603
+ {
10604
+ appendStringInfoString(str, "JSON(");
10605
+
10606
+ deparseJsonValueExpr(str, json_parse_expr->expr);
10607
+
10608
+ if (json_parse_expr->unique_keys)
10609
+ appendStringInfoString(str, " WITH UNIQUE KEYS");
10610
+
10611
+ appendStringInfoString(str, ")");
10612
+ }
10613
+
10614
+ static void deparseJsonScalarExpr(StringInfo str, JsonScalarExpr *json_scalar_expr)
10615
+ {
10616
+ appendStringInfoString(str, "JSON_SCALAR(");
10617
+ deparseExpr(str, (Node*) json_scalar_expr->expr);
10618
+ appendStringInfoString(str, ")");
10619
+ }
10620
+
10621
+ static void deparseJsonSerializeExpr(StringInfo str, JsonSerializeExpr *json_serialize_expr)
10622
+ {
10623
+ appendStringInfoString(str, "JSON_SERIALIZE(");
10624
+
10625
+ deparseJsonValueExpr(str, json_serialize_expr->expr);
10626
+
10627
+ if (json_serialize_expr->output)
10628
+ deparseJsonOutput(str, json_serialize_expr->output);
10629
+
10630
+ appendStringInfoString(str, ")");
10631
+ }
10632
+
10633
+ static void deparseJsonQuotesClauseOpt(StringInfo str, JsonQuotes quotes)
10634
+ {
10635
+ switch (quotes)
10636
+ {
10637
+ case JS_QUOTES_UNSPEC:
10638
+ break;
10639
+ case JS_QUOTES_KEEP:
10640
+ appendStringInfoString(str, " KEEP QUOTES");
10641
+ break;
10642
+ case JS_QUOTES_OMIT:
10643
+ appendStringInfoString(str, " OMIT QUOTES");
10644
+ break;
10645
+ }
10646
+ }
10647
+
10648
+ static void deparseJsonOnErrorClauseOpt(StringInfo str, JsonBehavior *behavior)
10649
+ {
10650
+ if (!behavior)
10651
+ return;
10652
+
10653
+ appendStringInfoChar(str, ' ');
10654
+ deparseJsonBehavior(str, behavior);
10655
+ appendStringInfoString(str, " ON ERROR");
10656
+ }
10657
+
10658
+ static void deparseJsonOnEmptyClauseOpt(StringInfo str, JsonBehavior *behavior)
10659
+ {
10660
+ if (behavior)
10661
+ {
10662
+ appendStringInfoChar(str, ' ');
10663
+ deparseJsonBehavior(str, behavior);
10664
+ appendStringInfoString(str, " ON EMPTY");
10665
+ }
10666
+ }
10667
+
10668
+ static void deparseJsonFuncExpr(StringInfo str, JsonFuncExpr *json_func_expr)
10669
+ {
10670
+ switch (json_func_expr->op)
10671
+ {
10672
+ case JSON_EXISTS_OP:
10673
+ appendStringInfoString(str, "JSON_EXISTS(");
10674
+ break;
10675
+ case JSON_QUERY_OP:
10676
+ appendStringInfoString(str, "JSON_QUERY(");
10677
+ break;
10678
+ case JSON_VALUE_OP:
10679
+ appendStringInfoString(str, "JSON_VALUE(");
10680
+ break;
10681
+ case JSON_TABLE_OP:
10682
+ appendStringInfoString(str, "JSON_TABLE(");
10683
+ break;
10684
+ }
10685
+
10686
+ deparseJsonValueExpr(str, json_func_expr->context_item);
10687
+ appendStringInfoString(str, ", ");
10688
+ deparseExpr(str, json_func_expr->pathspec);
10689
+
10690
+ if (json_func_expr->passing)
10691
+ appendStringInfoString(str, " PASSING ");
10692
+
10693
+ ListCell *lc = NULL;
10694
+ foreach (lc, json_func_expr->passing)
10695
+ {
10696
+ JsonArgument *json_argument = castNode(JsonArgument, lfirst(lc));
10697
+ deparseJsonValueExpr(str, json_argument->val);
10698
+ appendStringInfoString(str, " AS ");
10699
+ deparseColLabel(str, json_argument->name);
10700
+
10701
+ if (lnext(json_func_expr->passing, lc))
10702
+ appendStringInfoString(str, ", ");
10703
+ }
10704
+
10705
+ if (json_func_expr->output)
10706
+ {
10707
+ appendStringInfoChar(str, ' ');
10708
+ deparseJsonOutput(str, json_func_expr->output);
10709
+ }
10710
+
10711
+ switch (json_func_expr->wrapper)
10712
+ {
10713
+ case JSW_UNSPEC:
10714
+ break;
10715
+ case JSW_NONE:
10716
+ appendStringInfoString(str, " WITHOUT WRAPPER");
10717
+ break;
10718
+ case JSW_CONDITIONAL:
10719
+ appendStringInfoString(str, " WITH CONDITIONAL WRAPPER");
10720
+ break;
10721
+ case JSW_UNCONDITIONAL:
10722
+ appendStringInfoString(str, " WITH UNCONDITIONAL WRAPPER");
10723
+ break;
10724
+ }
10725
+
10726
+ deparseJsonQuotesClauseOpt(str, json_func_expr->quotes);
10727
+ deparseJsonOnEmptyClauseOpt(str, json_func_expr->on_empty);
10728
+ deparseJsonOnErrorClauseOpt(str, json_func_expr->on_error);
10729
+
10730
+ appendStringInfoChar(str, ')');
10731
+ }
10732
+
10733
+ static void deparseJsonTablePathSpec(StringInfo str, JsonTablePathSpec *json_table_path_spec)
10734
+ {
10735
+ deparseStringLiteral(str, castNode(A_Const, json_table_path_spec->string)->val.sval.sval);
10736
+
10737
+ if (json_table_path_spec->name)
10738
+ {
10739
+ appendStringInfoString(str, " AS ");
10740
+ deparseColLabel(str, json_table_path_spec->name);
10741
+ }
10742
+ }
10743
+
10744
+ static void deparseJsonBehavior(StringInfo str, JsonBehavior *json_behavior)
10745
+ {
10746
+ switch (json_behavior->btype)
10747
+ {
10748
+ case JSON_BEHAVIOR_NULL:
10749
+ appendStringInfoString(str, "NULL");
10750
+ break;
10751
+ case JSON_BEHAVIOR_ERROR:
10752
+ appendStringInfoString(str, "ERROR");
10753
+ break;
10754
+ case JSON_BEHAVIOR_EMPTY:
10755
+ appendStringInfoString(str, "EMPTY");
10756
+ break;
10757
+ case JSON_BEHAVIOR_TRUE:
10758
+ appendStringInfoString(str, "TRUE");
10759
+ break;
10760
+ case JSON_BEHAVIOR_FALSE:
10761
+ appendStringInfoString(str, "FALSE");
10762
+ break;
10763
+ case JSON_BEHAVIOR_EMPTY_ARRAY:
10764
+ appendStringInfoString(str, "EMPTY ARRAY");
10765
+ break;
10766
+ case JSON_BEHAVIOR_EMPTY_OBJECT:
10767
+ appendStringInfoString(str, "EMPTY OBJECT");
10768
+ break;
10769
+ case JSON_BEHAVIOR_DEFAULT:
10770
+ appendStringInfoString(str, "DEFAULT ");
10771
+ deparseExpr(str, (Node*) json_behavior->expr);
10772
+ break;
10773
+ case JSON_BEHAVIOR_UNKNOWN:
10774
+ appendStringInfoString(str, "UNKNOWN");
10775
+ break;
10776
+ }
10777
+ }
10778
+
10779
+ static void deparseJsonTableColumn(StringInfo str, JsonTableColumn *json_table_column)
10780
+ {
10781
+ if (json_table_column->coltype == JTC_NESTED)
10782
+ {
10783
+ appendStringInfoString(str, "NESTED PATH ");
10784
+ deparseJsonTablePathSpec(str, json_table_column->pathspec);
10785
+ deparseJsonTableColumns(str, json_table_column->columns);
10786
+ return;
10787
+ }
10788
+
10789
+ deparseColLabel(str, json_table_column->name);
10790
+ appendStringInfoChar(str, ' ');
10791
+
10792
+ switch (json_table_column->coltype)
10793
+ {
10794
+ case JTC_FOR_ORDINALITY:
10795
+ appendStringInfoString(str, " FOR ORDINALITY");
10796
+ break;
10797
+ case JTC_EXISTS:
10798
+ case JTC_FORMATTED:
10799
+ case JTC_REGULAR:
10800
+ deparseTypeName(str, json_table_column->typeName);
10801
+
10802
+ if (json_table_column->coltype == JTC_EXISTS)
10803
+ appendStringInfoString(str, " EXISTS ");
10804
+ else
10805
+ appendStringInfoChar(str, ' ');
10806
+
10807
+ if (json_table_column->format)
10808
+ deparseJsonFormat(str, json_table_column->format);
10809
+
10810
+ if (json_table_column->pathspec)
10811
+ {
10812
+ appendStringInfoString(str, "PATH ");
10813
+ deparseJsonTablePathSpec(str, json_table_column->pathspec);
10814
+ }
10815
+ break;
10816
+ case JTC_NESTED:
10817
+ Assert(false);
10818
+ }
10819
+
10820
+ switch (json_table_column->wrapper)
10821
+ {
10822
+ case JSW_UNSPEC:
10823
+ break;
10824
+ case JSW_NONE:
10825
+ if (json_table_column->coltype == JTC_REGULAR || json_table_column->coltype == JTC_FORMATTED)
10826
+ appendStringInfoString(str, " WITHOUT WRAPPER");
10827
+ break;
10828
+ case JSW_CONDITIONAL:
10829
+ appendStringInfoString(str, " WITH CONDITIONAL WRAPPER");
10830
+ break;
10831
+ case JSW_UNCONDITIONAL:
10832
+ appendStringInfoString(str, " WITH UNCONDITIONAL WRAPPER");
10833
+ break;
10834
+ }
10835
+
10836
+ deparseJsonQuotesClauseOpt(str, json_table_column->quotes);
10837
+ deparseJsonOnEmptyClauseOpt(str, json_table_column->on_empty);
10838
+ deparseJsonOnErrorClauseOpt(str, json_table_column->on_error);
10839
+ }
10840
+
10841
+ static void deparseJsonTableColumns(StringInfo str, List *json_table_columns)
10842
+ {
10843
+ appendStringInfoString(str, " COLUMNS (");
10844
+
10845
+ ListCell *lc = NULL;
10846
+ foreach(lc, json_table_columns)
10847
+ {
10848
+ deparseJsonTableColumn(str, castNode(JsonTableColumn, lfirst(lc)));
10849
+
10850
+ if (lnext(json_table_columns, lc))
10851
+ appendStringInfoString(str, ", ");
10852
+ }
10853
+
10854
+ appendStringInfoChar(str, ')');
10855
+ }
10856
+
10857
+ static void deparseJsonTable(StringInfo str, JsonTable *json_table)
10858
+ {
10859
+ appendStringInfoString(str, "JSON_TABLE(");
10860
+
10861
+ deparseJsonValueExpr(str, json_table->context_item);
10862
+ appendStringInfoString(str, ", ");
10863
+ deparseJsonTablePathSpec(str, json_table->pathspec);
10864
+
10865
+ if (json_table->passing)
10866
+ appendStringInfoString(str, " PASSING ");
10867
+
10868
+ ListCell *lc = NULL;
10869
+ foreach (lc, json_table->passing)
10870
+ {
10871
+ JsonArgument *json_argument = castNode(JsonArgument, lfirst(lc));
10872
+ deparseJsonValueExpr(str, json_argument->val);
10873
+ appendStringInfoString(str, " AS ");
10874
+ deparseColLabel(str, json_argument->name);
10875
+
10876
+ if (lnext(json_table->passing, lc))
10877
+ appendStringInfoString(str, ", ");
10878
+ }
10879
+
10880
+ deparseJsonTableColumns(str, json_table->columns);
10881
+
10882
+ if (json_table->on_error)
10883
+ {
10884
+ deparseJsonBehavior(str, json_table->on_error);
10885
+ appendStringInfoString(str, " ON ERROR");
10886
+ }
10887
+
10888
+ appendStringInfoChar(str, ')');
10889
+
10890
+ if (json_table->alias)
10891
+ {
10892
+ appendStringInfoChar(str, ' ');
10893
+ deparseAlias(str, json_table->alias);
10894
+ }
10895
+ }
10896
+
10509
10897
  static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func)
10510
10898
  {
10511
10899
  appendStringInfoString(str, "GROUPING(");