pg_query 4.2.3 → 5.1.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 (528) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -4
  5. data/ext/pg_query/extconf.rb +14 -6
  6. data/ext/pg_query/include/pg_query.h +27 -3
  7. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +1 -1
  29. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
  30. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  31. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  32. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  34. data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
  36. data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
  37. data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
  38. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  39. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  40. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +58 -98
  42. data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
  43. data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
  44. data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
  45. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
  46. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  47. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
  48. data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
  49. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
  50. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
  52. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  53. data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
  54. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
  58. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
  60. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  82. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +1 -1
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
  125. data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
  126. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
  127. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
  129. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  130. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +4 -4
  132. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
  133. data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
  134. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
  135. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  136. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
  137. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  138. data/ext/pg_query/include/postgres/common/int.h +437 -0
  139. data/ext/pg_query/include/{common → postgres/common}/keywords.h +1 -1
  140. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  141. data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
  142. data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
  143. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  144. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  145. data/ext/pg_query/include/{common → postgres/common}/string.h +5 -3
  146. data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
  147. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
  148. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  149. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  150. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +11 -4
  151. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  152. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  153. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  154. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +34 -17
  155. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
  156. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
  157. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
  158. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  159. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  160. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +21 -2
  161. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  162. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
  163. data/ext/pg_query/include/postgres/gram.h +1127 -0
  164. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  165. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +2 -2
  166. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  167. data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
  168. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
  169. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  170. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
  171. data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
  172. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  173. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
  181. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  182. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  183. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +35 -18
  184. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  185. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
  186. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
  192. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  193. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +96 -511
  195. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  196. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +377 -139
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  203. data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
  204. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  205. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  206. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/value.h +12 -2
  208. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
  214. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
  215. data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
  216. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  224. data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
  225. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  226. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  227. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +1 -1
  228. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  229. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +156 -217
  230. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
  231. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  232. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
  233. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  234. data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
  235. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
  236. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
  237. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  238. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +1 -1
  239. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
  240. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
  241. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
  242. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  245. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  249. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  250. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  251. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  252. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +62 -25
  253. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  254. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  255. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  256. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  257. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  258. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  259. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  260. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  261. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  264. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  268. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  269. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  270. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  275. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  276. data/ext/pg_query/include/{port.h → postgres/port.h} +42 -75
  277. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  278. data/ext/pg_query/include/postgres/postgres.h +579 -0
  279. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  280. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +1 -4
  281. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  285. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
  289. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
  290. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
  291. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
  292. data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
  293. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  294. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
  295. data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
  296. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
  297. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
  298. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
  299. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
  300. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  301. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  304. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +1 -1
  305. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
  306. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  307. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
  308. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
  309. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
  310. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
  311. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
  312. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
  313. data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
  314. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -2
  315. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  316. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  317. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +94 -57
  318. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
  320. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
  321. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
  323. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
  324. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  325. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  326. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +1 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
  329. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
  330. data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
  331. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  332. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
  333. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
  335. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
  336. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
  337. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  338. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  339. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +3 -3
  340. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  341. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
  342. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
  343. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
  344. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
  345. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
  346. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  347. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
  348. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -1
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
  354. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
  355. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
  356. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  357. data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
  358. data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
  359. data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
  360. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
  361. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
  362. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  363. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  364. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +41 -21
  365. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  367. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
  368. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  369. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  370. data/ext/pg_query/include/{utils → postgres/utils}/float.h +7 -6
  371. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
  372. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
  374. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
  375. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  376. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
  377. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
  378. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
  379. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
  381. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  382. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
  383. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  384. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  385. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +20 -5
  386. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
  387. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  388. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
  389. data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
  390. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
  391. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
  392. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
  393. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  395. data/ext/pg_query/include/{utils → postgres/utils}/regproc.h +3 -3
  396. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
  397. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
  398. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  399. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  400. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +6 -1
  401. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  402. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
  403. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
  405. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
  407. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
  408. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
  409. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
  411. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
  412. data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
  413. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
  414. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
  415. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  416. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  417. data/ext/pg_query/pg_query.c +10 -1
  418. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  419. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  420. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  421. data/ext/pg_query/pg_query_internal.h +1 -1
  422. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  423. data/ext/pg_query/pg_query_normalize.c +1 -1
  424. data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
  425. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  426. data/ext/pg_query/pg_query_parse.c +47 -5
  427. data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
  428. data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
  429. data/ext/pg_query/pg_query_ruby.c +5 -0
  430. data/ext/pg_query/pg_query_scan.c +1 -1
  431. data/ext/pg_query/pg_query_split.c +3 -3
  432. data/ext/pg_query/postgres_deparse.c +503 -105
  433. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  434. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  435. data/ext/pg_query/src_backend_commands_define.c +1 -1
  436. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  437. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  438. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  439. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  440. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  441. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  442. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  443. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  444. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  445. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  446. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  447. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  448. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  449. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  450. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  451. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  452. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  453. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  454. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  455. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  456. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  457. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  458. data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
  459. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  460. data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
  461. data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
  462. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  463. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  464. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  465. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  466. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  467. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  468. data/ext/pg_query/src_common_encnames.c +4 -1
  469. data/ext/pg_query/src_common_hashfn.c +1 -1
  470. data/ext/pg_query/src_common_keywords.c +1 -1
  471. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  472. data/ext/pg_query/src_common_kwlookup.c +1 -1
  473. data/ext/pg_query/src_common_psprintf.c +1 -1
  474. data/ext/pg_query/src_common_stringinfo.c +4 -4
  475. data/ext/pg_query/src_common_wchar.c +9 -8
  476. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  477. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  478. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  479. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  480. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  481. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  482. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  483. data/ext/pg_query/src_port_pg_bitutils.c +79 -5
  484. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  485. data/ext/pg_query/src_port_snprintf.c +6 -10
  486. data/ext/pg_query/src_port_strerror.c +1 -1
  487. data/ext/pg_query/src_port_strlcpy.c +79 -0
  488. data/lib/pg_query/fingerprint.rb +2 -3
  489. data/lib/pg_query/node.rb +16 -11
  490. data/lib/pg_query/parse.rb +1 -1
  491. data/lib/pg_query/pg_query_pb.rb +166 -3191
  492. data/lib/pg_query/treewalker.rb +23 -5
  493. data/lib/pg_query/version.rb +1 -1
  494. metadata +432 -383
  495. data/ext/pg_query/guc-file.c +0 -0
  496. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  497. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  498. data/ext/pg_query/include/commands/variable.h +0 -38
  499. data/ext/pg_query/include/common/ip.h +0 -31
  500. data/ext/pg_query/include/getaddrinfo.h +0 -162
  501. data/ext/pg_query/include/kwlist_d.h +0 -1095
  502. data/ext/pg_query/include/parser/gram.h +0 -1101
  503. data/ext/pg_query/include/pg_config_os.h +0 -8
  504. data/ext/pg_query/include/portability/instr_time.h +0 -256
  505. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  506. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  507. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  508. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  509. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  510. data/ext/pg_query/include/utils/dynahash.h +0 -20
  511. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  512. data/ext/pg_query/include/utils/pidfile.h +0 -56
  513. data/ext/pg_query/include/utils/ps_status.h +0 -25
  514. data/ext/pg_query/include/utils/rls.h +0 -50
  515. data/ext/pg_query/include/utils/tzparser.h +0 -39
  516. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  517. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  518. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  519. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  520. data/ext/pg_query/src_common_pg_prng.c +0 -152
  521. data/ext/pg_query/src_common_string.c +0 -92
  522. data/ext/pg_query/src_port_pgsleep.c +0 -69
  523. data/ext/pg_query/src_port_strnlen.c +0 -39
  524. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  525. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
  526. /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
  527. /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
  528. /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +0 -0
@@ -29,6 +29,7 @@ typedef enum DeparseNodeContext {
29
29
  DEPARSE_NODE_CONTEXT_CREATE_TYPE,
30
30
  DEPARSE_NODE_CONTEXT_ALTER_TYPE,
31
31
  DEPARSE_NODE_CONTEXT_SET_STATEMENT,
32
+ DEPARSE_NODE_CONTEXT_FUNC_EXPR,
32
33
  // Identifier vs constant context
33
34
  DEPARSE_NODE_CONTEXT_IDENTIFIER,
34
35
  DEPARSE_NODE_CONTEXT_CONSTANT
@@ -189,13 +190,18 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call);
189
190
  static void deparseMinMaxExpr(StringInfo str, MinMaxExpr *min_max_expr);
190
191
  static void deparseXmlExpr(StringInfo str, XmlExpr* xml_expr);
191
192
  static void deparseXmlSerialize(StringInfo str, XmlSerialize *xml_serialize);
193
+ static void deparseJsonIsPredicate(StringInfo str, JsonIsPredicate *json_is_predicate);
194
+ static void deparseJsonObjectAgg(StringInfo str, JsonObjectAgg *json_object_agg);
195
+ static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg);
196
+ static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor);
197
+ static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor);
198
+ static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor);
192
199
  static void deparseConstraint(StringInfo str, Constraint *constraint);
193
200
  static void deparseSchemaStmt(StringInfo str, Node *node);
194
201
  static void deparseExecuteStmt(StringInfo str, ExecuteStmt *execute_stmt);
195
202
  static void deparseTriggerTransition(StringInfo str, TriggerTransition *trigger_transition);
196
203
  static void deparseCreateOpClassItem(StringInfo str, CreateOpClassItem *create_op_class_item);
197
204
  static void deparseAConst(StringInfo str, A_Const *a_const);
198
- static void deparseCurrentOfExpr(StringInfo str, CurrentOfExpr *current_of_expr);
199
205
  static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func);
200
206
 
201
207
  static void deparsePreparableStmt(StringInfo str, Node *node);
@@ -245,89 +251,144 @@ static void deparseAnyNameSkipLast(StringInfo str, List *parts)
245
251
  }
246
252
  }
247
253
 
248
- // "a_expr" / "b_expr" in gram.y
249
- static void deparseExpr(StringInfo str, Node *node)
254
+ // "func_expr" in gram.y
255
+ static void deparseFuncExpr(StringInfo str, Node *node)
250
256
  {
251
- if (node == NULL)
252
- return;
253
257
  switch (nodeTag(node))
254
258
  {
255
259
  case T_FuncCall:
256
260
  deparseFuncCall(str, castNode(FuncCall, node));
257
261
  break;
258
- case T_XmlExpr:
259
- deparseXmlExpr(str, castNode(XmlExpr, node));
260
- break;
261
- case T_TypeCast:
262
- deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
263
- break;
264
- case T_A_Const:
265
- deparseAConst(str, castNode(A_Const, node));
266
- break;
267
- case T_ColumnRef:
268
- deparseColumnRef(str, castNode(ColumnRef, node));
269
- break;
270
- case T_A_Expr:
271
- deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
262
+ case T_SQLValueFunction:
263
+ deparseSQLValueFunction(str, castNode(SQLValueFunction, node));
272
264
  break;
273
- case T_CaseExpr:
274
- deparseCaseExpr(str, castNode(CaseExpr, node));
265
+ case T_MinMaxExpr:
266
+ deparseMinMaxExpr(str, castNode(MinMaxExpr, node));
275
267
  break;
276
- case T_A_ArrayExpr:
277
- deparseAArrayExpr(str, castNode(A_ArrayExpr, node));
268
+ case T_CoalesceExpr:
269
+ deparseCoalesceExpr(str, castNode(CoalesceExpr, node));
278
270
  break;
279
- case T_NullTest:
280
- deparseNullTest(str, castNode(NullTest, node));
271
+ case T_XmlExpr:
272
+ deparseXmlExpr(str, castNode(XmlExpr, node));
281
273
  break;
282
274
  case T_XmlSerialize:
283
275
  deparseXmlSerialize(str, castNode(XmlSerialize, node));
284
276
  break;
285
- case T_ParamRef:
286
- deparseParamRef(str, castNode(ParamRef, node));
277
+ case T_JsonObjectAgg:
278
+ deparseJsonObjectAgg(str, castNode(JsonObjectAgg, node));
287
279
  break;
288
- case T_BoolExpr:
289
- deparseBoolExpr(str, castNode(BoolExpr, node));
280
+ case T_JsonArrayAgg:
281
+ deparseJsonArrayAgg(str, castNode(JsonArrayAgg, node));
290
282
  break;
291
- case T_SubLink:
292
- deparseSubLink(str, castNode(SubLink, node));
283
+ case T_JsonObjectConstructor:
284
+ deparseJsonObjectConstructor(str, castNode(JsonObjectConstructor, node));
293
285
  break;
294
- case T_RowExpr:
295
- deparseRowExpr(str, castNode(RowExpr, node));
286
+ case T_JsonArrayConstructor:
287
+ deparseJsonArrayConstructor(str, castNode(JsonArrayConstructor, node));
296
288
  break;
297
- case T_CoalesceExpr:
298
- deparseCoalesceExpr(str, castNode(CoalesceExpr, node));
289
+ case T_JsonArrayQueryConstructor:
290
+ deparseJsonArrayQueryConstructor(str, castNode(JsonArrayQueryConstructor, node));
299
291
  break;
300
- case T_SetToDefault:
301
- deparseSetToDefault(str, castNode(SetToDefault, node));
292
+ default:
293
+ elog(ERROR, "deparse: unpermitted node type in func_expr: %d",
294
+ (int) nodeTag(node));
302
295
  break;
296
+ }
297
+ }
298
+
299
+ static void deparseCExpr(StringInfo str, Node *node);
300
+
301
+ // "a_expr" in gram.y
302
+ static void deparseExpr(StringInfo str, Node *node)
303
+ {
304
+ if (node == NULL)
305
+ return;
306
+ switch (nodeTag(node))
307
+ {
308
+ case T_ColumnRef:
309
+ case T_A_Const:
310
+ case T_ParamRef:
303
311
  case T_A_Indirection:
304
- deparseAIndirection(str, castNode(A_Indirection, node));
312
+ case T_CaseExpr:
313
+ case T_SubLink:
314
+ case T_A_ArrayExpr:
315
+ case T_RowExpr:
316
+ case T_GroupingFunc:
317
+ deparseCExpr(str, node);
318
+ break;
319
+ case T_TypeCast:
320
+ deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
305
321
  break;
306
322
  case T_CollateClause:
307
323
  deparseCollateClause(str, castNode(CollateClause, node));
308
324
  break;
309
- case T_CurrentOfExpr:
310
- deparseCurrentOfExpr(str, castNode(CurrentOfExpr, node));
325
+ case T_A_Expr:
326
+ deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
311
327
  break;
312
- case T_SQLValueFunction:
313
- deparseSQLValueFunction(str, castNode(SQLValueFunction, node));
328
+ case T_BoolExpr:
329
+ deparseBoolExpr(str, castNode(BoolExpr, node));
314
330
  break;
315
- case T_MinMaxExpr:
316
- deparseMinMaxExpr(str, castNode(MinMaxExpr, node));
331
+ case T_NullTest:
332
+ deparseNullTest(str, castNode(NullTest, node));
317
333
  break;
318
334
  case T_BooleanTest:
319
335
  deparseBooleanTest(str, castNode(BooleanTest, node));
320
336
  break;
321
- case T_GroupingFunc:
322
- deparseGroupingFunc(str, castNode(GroupingFunc, node));
337
+ case T_JsonIsPredicate:
338
+ deparseJsonIsPredicate(str, castNode(JsonIsPredicate, node));
339
+ break;
340
+ case T_SetToDefault:
341
+ deparseSetToDefault(str, castNode(SetToDefault, node));
342
+ break;
343
+ case T_FuncCall:
344
+ case T_SQLValueFunction:
345
+ case T_MinMaxExpr:
346
+ case T_CoalesceExpr:
347
+ case T_XmlExpr:
348
+ case T_XmlSerialize:
349
+ case T_JsonObjectAgg:
350
+ case T_JsonArrayAgg:
351
+ case T_JsonObjectConstructor:
352
+ case T_JsonArrayConstructor:
353
+ case T_JsonArrayQueryConstructor:
354
+ deparseFuncExpr(str, node);
323
355
  break;
324
356
  default:
325
- elog(ERROR, "deparse: unpermitted node type in a_expr/b_expr: %d",
357
+ // Note that this is also the fallthrough for deparseBExpr and deparseCExpr
358
+ elog(ERROR, "deparse: unpermitted node type in a_expr/b_expr/c_expr: %d",
326
359
  (int) nodeTag(node));
327
360
  break;
328
361
  }
329
362
  }
330
363
 
364
+ // "b_expr" in gram.y
365
+ static void deparseBExpr(StringInfo str, Node *node)
366
+ {
367
+ if (IsA(node, XmlExpr)) {
368
+ deparseXmlExpr(str, castNode(XmlExpr, node));
369
+ return;
370
+ }
371
+
372
+ if (IsA(node, A_Expr)) {
373
+ A_Expr *a_expr = castNode(A_Expr, node);
374
+ // Other kinds are handled by "c_expr", with parens added around them
375
+ if (a_expr->kind == AEXPR_OP || a_expr->kind == AEXPR_DISTINCT || a_expr->kind == AEXPR_NOT_DISTINCT) {
376
+ deparseAExpr(str, a_expr, DEPARSE_NODE_CONTEXT_NONE);
377
+ return;
378
+ }
379
+ }
380
+
381
+ if (IsA(node, BoolExpr)) {
382
+ BoolExpr *bool_expr = castNode(BoolExpr, node);
383
+ if (bool_expr->boolop == NOT_EXPR) {
384
+ deparseBoolExpr(str, bool_expr);
385
+ return;
386
+ }
387
+ }
388
+
389
+ deparseCExpr(str, node);
390
+ }
391
+
331
392
  // "c_expr" in gram.y
332
393
  static void deparseCExpr(StringInfo str, Node *node)
333
394
  {
@@ -339,14 +400,6 @@ static void deparseCExpr(StringInfo str, Node *node)
339
400
  case T_A_Const:
340
401
  deparseAConst(str, castNode(A_Const, node));
341
402
  break;
342
- case T_TypeCast:
343
- deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
344
- break;
345
- case T_A_Expr:
346
- appendStringInfoChar(str, '(');
347
- deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
348
- appendStringInfoChar(str, ')');
349
- break;
350
403
  case T_ParamRef:
351
404
  deparseParamRef(str, castNode(ParamRef, node));
352
405
  break;
@@ -356,9 +409,6 @@ static void deparseCExpr(StringInfo str, Node *node)
356
409
  case T_CaseExpr:
357
410
  deparseCaseExpr(str, castNode(CaseExpr, node));
358
411
  break;
359
- case T_FuncCall:
360
- deparseFuncCall(str, castNode(FuncCall, node));
361
- break;
362
412
  case T_SubLink:
363
413
  deparseSubLink(str, castNode(SubLink, node));
364
414
  break;
@@ -371,9 +421,23 @@ static void deparseCExpr(StringInfo str, Node *node)
371
421
  case T_GroupingFunc:
372
422
  deparseGroupingFunc(str, castNode(GroupingFunc, node));
373
423
  break;
424
+ case T_FuncCall:
425
+ case T_SQLValueFunction:
426
+ case T_MinMaxExpr:
427
+ case T_CoalesceExpr:
428
+ case T_XmlExpr:
429
+ case T_XmlSerialize:
430
+ case T_JsonObjectAgg:
431
+ case T_JsonArrayAgg:
432
+ case T_JsonObjectConstructor:
433
+ case T_JsonArrayConstructor:
434
+ case T_JsonArrayQueryConstructor:
435
+ deparseFuncExpr(str, node);
436
+ break;
374
437
  default:
375
- elog(ERROR, "deparse: unpermitted node type in c_expr: %d",
376
- (int) nodeTag(node));
438
+ appendStringInfoChar(str, '(');
439
+ deparseExpr(str, node);
440
+ appendStringInfoChar(str, ')');
377
441
  break;
378
442
  }
379
443
  }
@@ -1634,6 +1698,27 @@ static void deparseWhereClause(StringInfo str, Node *node)
1634
1698
  }
1635
1699
  }
1636
1700
 
1701
+ // "where_or_current_clause" in gram.y
1702
+ //
1703
+ // Note this method adds a trailing space if a value is output
1704
+ static void deparseWhereOrCurrentClause(StringInfo str, Node *node)
1705
+ {
1706
+ if (node == NULL)
1707
+ return;
1708
+
1709
+ appendStringInfoString(str, "WHERE ");
1710
+
1711
+ if (IsA(node, CurrentOfExpr)) {
1712
+ CurrentOfExpr *current_of_expr = castNode(CurrentOfExpr, node);
1713
+ appendStringInfoString(str, "CURRENT OF ");
1714
+ appendStringInfoString(str, quote_identifier(current_of_expr->cursor_name));
1715
+ } else {
1716
+ deparseExpr(str, node);
1717
+ }
1718
+
1719
+ appendStringInfoChar(str, ' ');
1720
+ }
1721
+
1637
1722
  // "group_by_list" in gram.y
1638
1723
  static void deparseGroupByList(StringInfo str, List *l)
1639
1724
  {
@@ -1685,7 +1770,7 @@ static void deparseNameList(StringInfo str, List *l)
1685
1770
  }
1686
1771
  }
1687
1772
 
1688
- // "opt_sort_clause" in gram.y
1773
+ // "opt_sort_clause" and "json_array_aggregate_order_by_clause_opt" in gram.y
1689
1774
  //
1690
1775
  // Note this method adds a trailing space if a value is output
1691
1776
  static void deparseOptSortClause(StringInfo str, List *l)
@@ -1782,7 +1867,7 @@ static void deparseFuncExprWindowless(StringInfo str, Node* node)
1782
1867
  deparseSQLValueFunction(str, castNode(SQLValueFunction, node));
1783
1868
  break;
1784
1869
  case T_TypeCast:
1785
- deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
1870
+ deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_FUNC_EXPR);
1786
1871
  break;
1787
1872
  case T_CoalesceExpr:
1788
1873
  deparseCoalesceExpr(str, castNode(CoalesceExpr, node));
@@ -1826,14 +1911,15 @@ static void deparseIndexElem(StringInfo str, IndexElem* index_elem)
1826
1911
  {
1827
1912
  switch (nodeTag(index_elem->expr))
1828
1913
  {
1829
- case T_FuncCall:
1830
- case T_SQLValueFunction:
1831
- case T_TypeCast:
1832
- case T_CoalesceExpr:
1833
- case T_MinMaxExpr:
1834
- case T_XmlExpr:
1835
- case T_XmlSerialize:
1914
+ // Simple function calls can be written without wrapping parens
1915
+ case T_FuncCall: // func_application
1916
+ case T_SQLValueFunction: // func_expr_common_subexpr
1917
+ case T_CoalesceExpr: // func_expr_common_subexpr
1918
+ case T_MinMaxExpr: // func_expr_common_subexpr
1919
+ case T_XmlExpr: // func_expr_common_subexpr
1920
+ case T_XmlSerialize: // func_expr_common_subexpr
1836
1921
  deparseFuncExprWindowless(str, index_elem->expr);
1922
+ appendStringInfoString(str, " ");
1837
1923
  break;
1838
1924
  default:
1839
1925
  appendStringInfoChar(str, '(');
@@ -2465,9 +2551,9 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
2465
2551
  * Note that the first and second arguments are switched in this format
2466
2552
  */
2467
2553
  appendStringInfoString(str, "POSITION(");
2468
- deparseExpr(str, lsecond(func_call->args));
2554
+ deparseBExpr(str, lsecond(func_call->args));
2469
2555
  appendStringInfoString(str, " IN ");
2470
- deparseExpr(str, linitial(func_call->args));
2556
+ deparseBExpr(str, linitial(func_call->args));
2471
2557
  appendStringInfoChar(str, ')');
2472
2558
  return;
2473
2559
  } else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
@@ -2582,7 +2668,18 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
2582
2668
  * keyword parameter style when its called as a keyword, not as a regular function (i.e. pg_catalog.timezone)
2583
2669
  * Note that the arguments are swapped in this case
2584
2670
  */
2585
- deparseExpr(str, lsecond(func_call->args));
2671
+ Expr* e = lsecond(func_call->args);
2672
+
2673
+ if (IsA(e, A_Expr)) {
2674
+ appendStringInfoChar(str, '(');
2675
+ }
2676
+
2677
+ deparseExpr(str, (Node*) e);
2678
+
2679
+ if (IsA(e, A_Expr)) {
2680
+ appendStringInfoChar(str, ')');
2681
+ }
2682
+
2586
2683
  appendStringInfoString(str, " AT TIME ZONE ");
2587
2684
  deparseExpr(str, linitial(func_call->args));
2588
2685
  return;
@@ -2641,6 +2738,13 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
2641
2738
  deparseExpr(str, lsecond(func_call->args));
2642
2739
  appendStringInfoChar(str, ')');
2643
2740
  return;
2741
+ } else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
2742
+ list_length(func_call->funcname) == 2 &&
2743
+ strcmp(strVal(linitial(func_call->funcname)), "pg_catalog") == 0 &&
2744
+ strcmp(strVal(lsecond(func_call->funcname)), "system_user") == 0)
2745
+ {
2746
+ appendStringInfoString(str, "SYSTEM_USER");
2747
+ return;
2644
2748
  }
2645
2749
 
2646
2750
  deparseFuncName(str, func_call->funcname);
@@ -2879,8 +2983,8 @@ static void deparseAExpr(StringInfo str, A_Expr* a_expr, DeparseNodeContext cont
2879
2983
  ListCell *lc;
2880
2984
  char *name;
2881
2985
 
2882
- bool need_lexpr_parens = a_expr->lexpr != NULL && (IsA(a_expr->lexpr, BoolExpr) || IsA(a_expr->lexpr, NullTest) || IsA(a_expr->lexpr, A_Expr));
2883
- bool need_rexpr_parens = a_expr->rexpr != NULL && (IsA(a_expr->rexpr, BoolExpr) || IsA(a_expr->rexpr, NullTest) || IsA(a_expr->rexpr, A_Expr));
2986
+ bool need_lexpr_parens = a_expr->lexpr != NULL && (IsA(a_expr->lexpr, BoolExpr) || IsA(a_expr->lexpr, BooleanTest) || IsA(a_expr->lexpr, NullTest) || IsA(a_expr->lexpr, A_Expr));
2987
+ bool need_rexpr_parens = a_expr->rexpr != NULL && (IsA(a_expr->rexpr, BoolExpr) || IsA(a_expr->rexpr, BooleanTest) || IsA(a_expr->rexpr, NullTest) || IsA(a_expr->rexpr, A_Expr));
2884
2988
 
2885
2989
  switch (a_expr->kind) {
2886
2990
  case AEXPR_OP: /* normal operator */
@@ -3300,6 +3404,7 @@ static void deparseJoinExpr(StringInfo str, JoinExpr *join_expr)
3300
3404
  break;
3301
3405
  case JOIN_SEMI:
3302
3406
  case JOIN_ANTI:
3407
+ case JOIN_RIGHT_ANTI:
3303
3408
  case JOIN_UNIQUE_OUTER:
3304
3409
  case JOIN_UNIQUE_INNER:
3305
3410
  // Only used by the planner/executor, not seen in parser output
@@ -3545,7 +3650,7 @@ static void deparseTypeCast(StringInfo str, TypeCast *type_cast, DeparseNodeCont
3545
3650
 
3546
3651
  Assert(type_cast->typeName != NULL);
3547
3652
 
3548
- if (IsA(type_cast->arg, A_Expr))
3653
+ if (IsA(type_cast->arg, A_Expr) || context == DEPARSE_NODE_CONTEXT_FUNC_EXPR)
3549
3654
  {
3550
3655
  appendStringInfoString(str, "CAST(");
3551
3656
  deparseExpr(str, type_cast->arg);
@@ -3950,7 +4055,16 @@ static void deparseMinMaxExpr(StringInfo str, MinMaxExpr *min_max_expr)
3950
4055
 
3951
4056
  static void deparseBooleanTest(StringInfo str, BooleanTest *boolean_test)
3952
4057
  {
4058
+ bool need_parens = IsA(boolean_test->arg, BoolExpr);
4059
+
4060
+ if (need_parens)
4061
+ appendStringInfoChar(str, '(');
4062
+
3953
4063
  deparseExpr(str, (Node *) boolean_test->arg);
4064
+
4065
+ if (need_parens)
4066
+ appendStringInfoChar(str, ')');
4067
+
3954
4068
  switch (boolean_test->booltesttype)
3955
4069
  {
3956
4070
  case IS_TRUE:
@@ -3992,6 +4106,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
3992
4106
  appendStringInfoChar(str, ' ');
3993
4107
  }
3994
4108
 
4109
+ if (column_def->storage_name)
4110
+ {
4111
+ appendStringInfoString(str, "STORAGE ");
4112
+ appendStringInfoString(str, column_def->storage_name);
4113
+ appendStringInfoChar(str, ' ');
4114
+ }
4115
+
3995
4116
  if (column_def->raw_default != NULL)
3996
4117
  {
3997
4118
  appendStringInfoString(str, "USING ");
@@ -3999,6 +4120,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
3999
4120
  appendStringInfoChar(str, ' ');
4000
4121
  }
4001
4122
 
4123
+ if (column_def->compression != NULL)
4124
+ {
4125
+ appendStringInfoString(str, "COMPRESSION ");
4126
+ appendStringInfoString(str, column_def->compression);
4127
+ appendStringInfoChar(str, ' ');
4128
+ }
4129
+
4002
4130
  if (column_def->fdwoptions != NULL)
4003
4131
  {
4004
4132
  deparseCreateGenericOptions(str, column_def->fdwoptions);
@@ -4173,7 +4301,7 @@ static void deparseUpdateStmt(StringInfo str, UpdateStmt *update_stmt)
4173
4301
  }
4174
4302
 
4175
4303
  deparseFromClause(str, update_stmt->fromClause);
4176
- deparseWhereClause(str, update_stmt->whereClause);
4304
+ deparseWhereOrCurrentClause(str, update_stmt->whereClause);
4177
4305
 
4178
4306
  if (list_length(update_stmt->returningList) > 0)
4179
4307
  {
@@ -4287,7 +4415,7 @@ static void deparseDeleteStmt(StringInfo str, DeleteStmt *delete_stmt)
4287
4415
  appendStringInfoChar(str, ' ');
4288
4416
  }
4289
4417
 
4290
- deparseWhereClause(str, delete_stmt->whereClause);
4418
+ deparseWhereOrCurrentClause(str, delete_stmt->whereClause);
4291
4419
 
4292
4420
  if (list_length(delete_stmt->returningList) > 0)
4293
4421
  {
@@ -4502,6 +4630,8 @@ static void deparseTableLikeClause(StringInfo str, TableLikeClause *table_like_c
4502
4630
  {
4503
4631
  if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS)
4504
4632
  appendStringInfoString(str, "INCLUDING COMMENTS ");
4633
+ if (table_like_clause->options & CREATE_TABLE_LIKE_COMPRESSION)
4634
+ appendStringInfoString(str, "INCLUDING COMPRESSION ");
4505
4635
  if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
4506
4636
  appendStringInfoString(str, "INCLUDING CONSTRAINTS ");
4507
4637
  if (table_like_clause->options & CREATE_TABLE_LIKE_DEFAULTS)
@@ -4609,7 +4739,7 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
4609
4739
  break;
4610
4740
  case CONSTR_DEFAULT:
4611
4741
  appendStringInfoString(str, "DEFAULT ");
4612
- deparseExpr(str, constraint->raw_expr);
4742
+ deparseBExpr(str, constraint->raw_expr);
4613
4743
  break;
4614
4744
  case CONSTR_IDENTITY:
4615
4745
  appendStringInfoString(str, "GENERATED ");
@@ -4643,6 +4773,8 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
4643
4773
  break;
4644
4774
  case CONSTR_UNIQUE:
4645
4775
  appendStringInfoString(str, "UNIQUE ");
4776
+ if (constraint->nulls_not_distinct)
4777
+ appendStringInfoString(str, "NULLS NOT DISTINCT ");
4646
4778
  break;
4647
4779
  case CONSTR_EXCLUSION:
4648
4780
  appendStringInfoString(str, "EXCLUDE ");
@@ -5108,7 +5240,19 @@ static void deparsePartitionSpec(StringInfo str, PartitionSpec *partition_spec)
5108
5240
  ListCell *lc;
5109
5241
 
5110
5242
  appendStringInfoString(str, "PARTITION BY ");
5111
- appendStringInfoString(str, partition_spec->strategy);
5243
+
5244
+ switch (partition_spec->strategy)
5245
+ {
5246
+ case PARTITION_STRATEGY_LIST:
5247
+ appendStringInfoString(str, "LIST");
5248
+ break;
5249
+ case PARTITION_STRATEGY_HASH:
5250
+ appendStringInfoString(str, "HASH");
5251
+ break;
5252
+ case PARTITION_STRATEGY_RANGE:
5253
+ appendStringInfoString(str, "RANGE");
5254
+ break;
5255
+ }
5112
5256
 
5113
5257
  appendStringInfoChar(str, '(');
5114
5258
  foreach(lc, partition_spec->partParams)
@@ -6157,9 +6301,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6157
6301
  else
6158
6302
  appendStringInfoString(str, "ADD COLUMN ");
6159
6303
  break;
6160
- case AT_AddColumnRecurse: /* internal to commands/tablecmds.c */
6161
- Assert(false);
6162
- break;
6163
6304
  case AT_AddColumnToView: /* implicitly via CREATE OR REPLACE VIEW */
6164
6305
  // Not present in raw parser output
6165
6306
  Assert(false);
@@ -6218,9 +6359,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6218
6359
  else
6219
6360
  appendStringInfoString(str, "DROP ");
6220
6361
  break;
6221
- case AT_DropColumnRecurse: /* internal to commands/tablecmds.c */
6222
- Assert(false);
6223
- break;
6224
6362
  case AT_AddIndex: /* add index */
6225
6363
  appendStringInfoString(str, "ADD INDEX ");
6226
6364
  break;
@@ -6230,9 +6368,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6230
6368
  case AT_AddConstraint: /* add constraint */
6231
6369
  appendStringInfoString(str, "ADD ");
6232
6370
  break;
6233
- case AT_AddConstraintRecurse: /* internal to commands/tablecmds.c */
6234
- Assert(false);
6235
- break;
6236
6371
  case AT_ReAddConstraint: /* internal to commands/tablecmds.c */
6237
6372
  Assert(false);
6238
6373
  break;
@@ -6245,9 +6380,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6245
6380
  case AT_ValidateConstraint: /* validate constraint */
6246
6381
  appendStringInfoString(str, "VALIDATE CONSTRAINT ");
6247
6382
  break;
6248
- case AT_ValidateConstraintRecurse: /* internal to commands/tablecmds.c */
6249
- Assert(false);
6250
- break;
6251
6383
  case AT_AddIndexConstraint: /* add constraint using existing index */
6252
6384
  // Not present in raw parser output
6253
6385
  Assert(false);
@@ -6255,9 +6387,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6255
6387
  case AT_DropConstraint: /* drop constraint */
6256
6388
  appendStringInfoString(str, "DROP CONSTRAINT ");
6257
6389
  break;
6258
- case AT_DropConstraintRecurse: /* internal to commands/tablecmds.c */
6259
- Assert(false);
6260
- break;
6261
6390
  case AT_ReAddComment: /* internal to commands/tablecmds.c */
6262
6391
  case AT_ReAddStatistics: /* internal to commands/tablecmds.c */
6263
6392
  Assert(false);
@@ -6321,7 +6450,7 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
6321
6450
  appendStringInfoString(str, "DISABLE TRIGGER ");
6322
6451
  break;
6323
6452
  case AT_EnableTrigAll: /* ENABLE TRIGGER ALL */
6324
- appendStringInfoString(str, "ENABLE TRIGGER ");
6453
+ appendStringInfoString(str, "ENABLE TRIGGER ALL ");
6325
6454
  break;
6326
6455
  case AT_DisableTrigAll: /* DISABLE TRIGGER ALL */
6327
6456
  appendStringInfoString(str, "DISABLE TRIGGER ALL ");
@@ -7325,6 +7454,8 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
7325
7454
  appendStringInfoString(str, "BINARY");
7326
7455
  else if (strcmp(format, "csv") == 0)
7327
7456
  appendStringInfoString(str, "CSV");
7457
+ else if (strcmp(format, "text") == 0)
7458
+ appendStringInfoString(str, "TEXT");
7328
7459
  else
7329
7460
  Assert(false);
7330
7461
  }
@@ -7954,8 +8085,20 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
7954
8085
  else
7955
8086
  appendStringInfoString(str, "REVOKE ");
7956
8087
 
7957
- if (!grant_role_stmt->is_grant && grant_role_stmt->admin_opt)
7958
- appendStringInfoString(str, "ADMIN OPTION FOR ");
8088
+ if (!grant_role_stmt->is_grant && list_length(grant_role_stmt->opt)) {
8089
+ DefElem *defelem = castNode(DefElem, linitial(grant_role_stmt->opt));
8090
+ Assert(!castNode(Boolean, defelem->arg)->boolval);
8091
+
8092
+ if (strcmp("admin", defelem->defname) == 0) {
8093
+ appendStringInfoString(str, "ADMIN ");
8094
+ } else if (strcmp("inherit", defelem->defname) == 0) {
8095
+ appendStringInfoString(str, "INHERIT ");
8096
+ } else if (strcmp("set", defelem->defname) == 0) {
8097
+ appendStringInfoString(str, "SET ");
8098
+ }
8099
+
8100
+ appendStringInfoString(str, "OPTION FOR ");
8101
+ }
7959
8102
 
7960
8103
  foreach(lc, grant_role_stmt->granted_roles)
7961
8104
  {
@@ -7973,8 +8116,31 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
7973
8116
  deparseRoleList(str, grant_role_stmt->grantee_roles);
7974
8117
  appendStringInfoChar(str, ' ');
7975
8118
 
7976
- if (grant_role_stmt->is_grant && grant_role_stmt->admin_opt)
7977
- appendStringInfoString(str, "WITH ADMIN OPTION ");
8119
+ if (grant_role_stmt->is_grant) {
8120
+ if (list_length(grant_role_stmt->opt) > 0) {
8121
+ appendStringInfoString(str, "WITH ");
8122
+ }
8123
+
8124
+ foreach(lc, grant_role_stmt->opt) {
8125
+ DefElem *defelem = castNode(DefElem, lfirst(lc));
8126
+ if (strcmp("admin", defelem->defname) == 0) {
8127
+ appendStringInfoString(str, "ADMIN ");
8128
+ appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
8129
+ } else if (strcmp("inherit", defelem->defname) == 0) {
8130
+ appendStringInfoString(str, "INHERIT ");
8131
+ appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
8132
+ } else if (strcmp("set", defelem->defname) == 0) {
8133
+ appendStringInfoString(str, "SET ");
8134
+ appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
8135
+ }
8136
+
8137
+ if (lnext(grant_role_stmt->opt, lc)) {
8138
+ appendStringInfoChar(str, ',');
8139
+ }
8140
+
8141
+ appendStringInfoChar(str, ' ');
8142
+ }
8143
+ }
7978
8144
 
7979
8145
  if (grant_role_stmt->grantor)
7980
8146
  {
@@ -7982,6 +8148,10 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
7982
8148
  deparseRoleSpec(str, castNode(RoleSpec, grant_role_stmt->grantor));
7983
8149
  }
7984
8150
 
8151
+ if (grant_role_stmt->behavior == DROP_CASCADE) {
8152
+ appendStringInfoString(str, "CASCADE ");
8153
+ }
8154
+
7985
8155
  removeTrailingSpace(str);
7986
8156
  }
7987
8157
 
@@ -9795,12 +9965,6 @@ static void deparseClosePortalStmt(StringInfo str, ClosePortalStmt *close_portal
9795
9965
  }
9796
9966
  }
9797
9967
 
9798
- static void deparseCurrentOfExpr(StringInfo str, CurrentOfExpr *current_of_expr)
9799
- {
9800
- appendStringInfoString(str, "CURRENT OF ");
9801
- appendStringInfoString(str, quote_identifier(current_of_expr->cursor_name));
9802
- }
9803
-
9804
9968
  static void deparseCreateTrigStmt(StringInfo str, CreateTrigStmt *create_trig_stmt)
9805
9969
  {
9806
9970
  ListCell *lc;
@@ -10105,9 +10269,243 @@ static void deparseXmlSerialize(StringInfo str, XmlSerialize *xml_serialize)
10105
10269
  deparseExpr(str, xml_serialize->expr);
10106
10270
  appendStringInfoString(str, " AS ");
10107
10271
  deparseTypeName(str, xml_serialize->typeName);
10272
+
10273
+ if (xml_serialize->indent) {
10274
+ appendStringInfoString(str, " INDENT");
10275
+ }
10276
+
10108
10277
  appendStringInfoString(str, ")");
10109
10278
  }
10110
10279
 
10280
+ static void deparseJsonFormat(StringInfo str, JsonFormat *json_format)
10281
+ {
10282
+ if (json_format == NULL || json_format->format_type == JS_FORMAT_DEFAULT)
10283
+ return;
10284
+
10285
+ appendStringInfoString(str, "FORMAT JSON ");
10286
+
10287
+ switch (json_format->encoding)
10288
+ {
10289
+ case JS_ENC_UTF8:
10290
+ appendStringInfoString(str, "ENCODING utf8 ");
10291
+ break;
10292
+ case JS_ENC_UTF16:
10293
+ appendStringInfoString(str, "ENCODING utf16 ");
10294
+ break;
10295
+ case JS_ENC_UTF32:
10296
+ appendStringInfoString(str, "ENCODING utf32 ");
10297
+ break;
10298
+ case JS_ENC_DEFAULT:
10299
+ // no encoding specified
10300
+ break;
10301
+ }
10302
+ }
10303
+
10304
+ static void deparseJsonIsPredicate(StringInfo str, JsonIsPredicate *j)
10305
+ {
10306
+ deparseExpr(str, j->expr);
10307
+ appendStringInfoChar(str, ' ');
10308
+
10309
+ deparseJsonFormat(str, castNode(JsonFormat, j->format));
10310
+
10311
+ appendStringInfoString(str, "IS ");
10312
+
10313
+ switch (j->item_type)
10314
+ {
10315
+ case JS_TYPE_ANY:
10316
+ appendStringInfoString(str, "JSON ");
10317
+ break;
10318
+ case JS_TYPE_ARRAY:
10319
+ appendStringInfoString(str, "JSON ARRAY ");
10320
+ break;
10321
+ case JS_TYPE_OBJECT:
10322
+ appendStringInfoString(str, "JSON OBJECT ");
10323
+ break;
10324
+ case JS_TYPE_SCALAR:
10325
+ appendStringInfoString(str, "JSON SCALAR ");
10326
+ break;
10327
+ }
10328
+
10329
+ if (j->unique_keys)
10330
+ appendStringInfoString(str, "WITH UNIQUE ");
10331
+
10332
+ removeTrailingSpace(str);
10333
+ }
10334
+
10335
+ // "json_value_expr" in gram.y
10336
+ static void deparseJsonValueExpr(StringInfo str, JsonValueExpr *json_value_expr)
10337
+ {
10338
+ deparseExpr(str, (Node *) json_value_expr->raw_expr);
10339
+ appendStringInfoChar(str, ' ');
10340
+ deparseJsonFormat(str, json_value_expr->format);
10341
+ }
10342
+
10343
+ // "json_value_expr_list" in gram.y
10344
+ static void deparseJsonValueExprList(StringInfo str, List *exprs)
10345
+ {
10346
+ ListCell *lc;
10347
+ foreach(lc, exprs)
10348
+ {
10349
+ deparseJsonValueExpr(str, lfirst(lc));
10350
+ removeTrailingSpace(str);
10351
+ if (lnext(exprs, lc))
10352
+ appendStringInfoString(str, ", ");
10353
+ }
10354
+ appendStringInfoChar(str, ' ');
10355
+ }
10356
+
10357
+ // "json_name_and_value" in gram.y
10358
+ static void deparseJsonKeyValue(StringInfo str, JsonKeyValue *json_key_value)
10359
+ {
10360
+ deparseExpr(str, (Node *) json_key_value->key);
10361
+ appendStringInfoString(str, ": ");
10362
+ deparseJsonValueExpr(str, json_key_value->value);
10363
+ }
10364
+
10365
+ // "json_name_and_value_list" in gram.y
10366
+ static void deparseJsonKeyValueList(StringInfo str, List *exprs)
10367
+ {
10368
+ ListCell *lc;
10369
+ foreach(lc, exprs)
10370
+ {
10371
+ deparseJsonKeyValue(str, lfirst(lc));
10372
+ removeTrailingSpace(str);
10373
+ if (lnext(exprs, lc))
10374
+ appendStringInfoString(str, ", ");
10375
+ }
10376
+ appendStringInfoChar(str, ' ');
10377
+ }
10378
+
10379
+ static void deparseJsonOutput(StringInfo str, JsonOutput *json_output)
10380
+ {
10381
+ if (json_output == NULL)
10382
+ return;
10383
+
10384
+ Assert(json_output->returning != NULL);
10385
+
10386
+ appendStringInfoString(str, "RETURNING ");
10387
+ deparseTypeName(str, json_output->typeName);
10388
+ appendStringInfoChar(str, ' ');
10389
+ deparseJsonFormat(str, json_output->returning->format);
10390
+ }
10391
+
10392
+ static void deparseJsonObjectAgg(StringInfo str, JsonObjectAgg *json_object_agg)
10393
+ {
10394
+ Assert(json_object_agg->constructor != NULL);
10395
+
10396
+ appendStringInfoString(str, "JSON_OBJECTAGG(");
10397
+ deparseJsonKeyValue(str, json_object_agg->arg);
10398
+
10399
+ if (json_object_agg->absent_on_null)
10400
+ appendStringInfoString(str, "ABSENT ON NULL ");
10401
+
10402
+ if (json_object_agg->unique)
10403
+ appendStringInfoString(str, "WITH UNIQUE ");
10404
+
10405
+ deparseJsonOutput(str, json_object_agg->constructor->output);
10406
+
10407
+ removeTrailingSpace(str);
10408
+ appendStringInfoString(str, ") ");
10409
+
10410
+ if (json_object_agg->constructor->agg_filter)
10411
+ {
10412
+ appendStringInfoString(str, "FILTER (WHERE ");
10413
+ deparseExpr(str, json_object_agg->constructor->agg_filter);
10414
+ appendStringInfoString(str, ") ");
10415
+ }
10416
+
10417
+ if (json_object_agg->constructor->over)
10418
+ {
10419
+ struct WindowDef *over = json_object_agg->constructor->over;
10420
+ appendStringInfoString(str, "OVER ");
10421
+ if (over->name)
10422
+ appendStringInfoString(str, over->name);
10423
+ else
10424
+ deparseWindowDef(str, over);
10425
+ }
10426
+
10427
+ removeTrailingSpace(str);
10428
+ }
10429
+
10430
+ static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg)
10431
+ {
10432
+ Assert(json_array_agg->constructor != NULL);
10433
+
10434
+ appendStringInfoString(str, "JSON_ARRAYAGG(");
10435
+ deparseJsonValueExpr(str, json_array_agg->arg);
10436
+ deparseOptSortClause(str, json_array_agg->constructor->agg_order);
10437
+
10438
+ if (!json_array_agg->absent_on_null)
10439
+ appendStringInfoString(str, "NULL ON NULL ");
10440
+
10441
+ deparseJsonOutput(str, json_array_agg->constructor->output);
10442
+
10443
+ removeTrailingSpace(str);
10444
+ appendStringInfoString(str, ") ");
10445
+
10446
+ if (json_array_agg->constructor->agg_filter)
10447
+ {
10448
+ appendStringInfoString(str, "FILTER (WHERE ");
10449
+ deparseExpr(str, json_array_agg->constructor->agg_filter);
10450
+ appendStringInfoString(str, ") ");
10451
+ }
10452
+
10453
+ if (json_array_agg->constructor->over)
10454
+ {
10455
+ struct WindowDef *over = json_array_agg->constructor->over;
10456
+ appendStringInfoString(str, "OVER ");
10457
+ if (over->name)
10458
+ appendStringInfoString(str, over->name);
10459
+ else
10460
+ deparseWindowDef(str, over);
10461
+ }
10462
+
10463
+ removeTrailingSpace(str);
10464
+ }
10465
+
10466
+ static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor)
10467
+ {
10468
+ appendStringInfoString(str, "JSON_OBJECT(");
10469
+ deparseJsonKeyValueList(str, json_object_constructor->exprs);
10470
+
10471
+ if (json_object_constructor->absent_on_null)
10472
+ appendStringInfoString(str, "ABSENT ON NULL ");
10473
+
10474
+ if (json_object_constructor->unique)
10475
+ appendStringInfoString(str, "WITH UNIQUE ");
10476
+
10477
+ deparseJsonOutput(str, json_object_constructor->output);
10478
+
10479
+ removeTrailingSpace(str);
10480
+ appendStringInfoChar(str, ')');
10481
+ }
10482
+
10483
+ static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor)
10484
+ {
10485
+ appendStringInfoString(str, "JSON_ARRAY(");
10486
+ deparseJsonValueExprList(str, json_array_constructor->exprs);
10487
+
10488
+ if (!json_array_constructor->absent_on_null)
10489
+ appendStringInfoString(str, "NULL ON NULL ");
10490
+
10491
+ deparseJsonOutput(str, json_array_constructor->output);
10492
+
10493
+ removeTrailingSpace(str);
10494
+ appendStringInfoChar(str, ')');
10495
+ }
10496
+
10497
+ static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor)
10498
+ {
10499
+ appendStringInfoString(str, "JSON_ARRAY(");
10500
+
10501
+ deparseSelectStmt(str, castNode(SelectStmt, json_array_query_constructor->query));
10502
+ deparseJsonFormat(str, json_array_query_constructor->format);
10503
+ deparseJsonOutput(str, json_array_query_constructor->output);
10504
+
10505
+ removeTrailingSpace(str);
10506
+ appendStringInfoChar(str, ')');
10507
+ }
10508
+
10111
10509
  static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func)
10112
10510
  {
10113
10511
  appendStringInfoString(str, "GROUPING(");