pg_query 2.0.3 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -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 +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  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 +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  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 +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -12,7 +12,7 @@
12
12
  * identifying statement boundaries in multi-statement source strings.
13
13
  *
14
14
  *
15
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  * src/include/nodes/parsenodes.h
@@ -22,6 +22,7 @@
22
22
  #ifndef PARSENODES_H
23
23
  #define PARSENODES_H
24
24
 
25
+ #include "common/relpath.h"
25
26
  #include "nodes/bitmapset.h"
26
27
  #include "nodes/lockoptions.h"
27
28
  #include "nodes/primnodes.h"
@@ -62,14 +63,22 @@ typedef enum SortByNulls
62
63
  SORTBY_NULLS_LAST
63
64
  } SortByNulls;
64
65
 
66
+ /* Options for [ ALL | DISTINCT ] */
67
+ typedef enum SetQuantifier
68
+ {
69
+ SET_QUANTIFIER_DEFAULT,
70
+ SET_QUANTIFIER_ALL,
71
+ SET_QUANTIFIER_DISTINCT
72
+ } SetQuantifier;
73
+
65
74
  /*
66
75
  * Grantable rights are encoded so that we can OR them together in a bitmask.
67
- * The present representation of AclItem limits us to 16 distinct rights,
68
- * even though AclMode is defined as uint32. See utils/acl.h.
76
+ * The present representation of AclItem limits us to 32 distinct rights,
77
+ * even though AclMode is defined as uint64. See utils/acl.h.
69
78
  *
70
79
  * Caution: changing these codes breaks stored ACLs, hence forces initdb.
71
80
  */
72
- typedef uint32 AclMode; /* a bitmask of privilege bits */
81
+ typedef uint64 AclMode; /* a bitmask of privilege bits */
73
82
 
74
83
  #define ACL_INSERT (1<<0) /* for relations */
75
84
  #define ACL_SELECT (1<<1)
@@ -79,12 +88,13 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
79
88
  #define ACL_REFERENCES (1<<5)
80
89
  #define ACL_TRIGGER (1<<6)
81
90
  #define ACL_EXECUTE (1<<7) /* for functions */
82
- #define ACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and
83
- * servers */
91
+ #define ACL_USAGE (1<<8) /* for various object types */
84
92
  #define ACL_CREATE (1<<9) /* for namespaces and databases */
85
93
  #define ACL_CREATE_TEMP (1<<10) /* for databases */
86
94
  #define ACL_CONNECT (1<<11) /* for databases */
87
- #define N_ACL_RIGHTS 12 /* 1 plus the last 1<<x */
95
+ #define ACL_SET (1<<12) /* for configuration parameters */
96
+ #define ACL_ALTER_SYSTEM (1<<13) /* for configuration parameters */
97
+ #define N_ACL_RIGHTS 14 /* 1 plus the last 1<<x */
88
98
  #define ACL_NO_RIGHTS 0
89
99
  /* Currently, SELECT ... FOR [KEY] UPDATE/SHARE requires UPDATE privileges */
90
100
  #define ACL_SELECT_FOR_UPDATE ACL_UPDATE
@@ -104,48 +114,88 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
104
114
  *
105
115
  * Planning converts a Query tree into a Plan tree headed by a PlannedStmt
106
116
  * node --- the Query structure is not used by the executor.
117
+ *
118
+ * All the fields ignored for the query jumbling are not semantically
119
+ * significant (such as alias names), as is ignored anything that can
120
+ * be deduced from child nodes (else we'd just be double-hashing that
121
+ * piece of information).
107
122
  */
108
123
  typedef struct Query
109
124
  {
110
125
  NodeTag type;
111
126
 
112
- CmdType commandType; /* select|insert|update|delete|utility */
127
+ CmdType commandType; /* select|insert|update|delete|merge|utility */
113
128
 
114
- QuerySource querySource; /* where did I come from? */
129
+ /* where did I come from? */
130
+ QuerySource querySource pg_node_attr(query_jumble_ignore);
115
131
 
116
- uint64 queryId; /* query identifier (can be set by plugins) */
132
+ /*
133
+ * query identifier (can be set by plugins); ignored for equal, as it
134
+ * might not be set; also not stored. This is the result of the query
135
+ * jumble, hence ignored.
136
+ */
137
+ uint64 queryId pg_node_attr(equal_ignore, query_jumble_ignore, read_write_ignore, read_as(0));
117
138
 
118
- bool canSetTag; /* do I set the command result tag? */
139
+ /* do I set the command result tag? */
140
+ bool canSetTag pg_node_attr(query_jumble_ignore);
119
141
 
120
142
  Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
121
143
 
122
- int resultRelation; /* rtable index of target relation for
123
- * INSERT/UPDATE/DELETE; 0 for SELECT */
124
-
125
- bool hasAggs; /* has aggregates in tlist or havingQual */
126
- bool hasWindowFuncs; /* has window functions in tlist */
127
- bool hasTargetSRFs; /* has set-returning functions in tlist */
128
- bool hasSubLinks; /* has subquery SubLink */
129
- bool hasDistinctOn; /* distinctClause is from DISTINCT ON */
130
- bool hasRecursive; /* WITH RECURSIVE was specified */
131
- bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */
132
- bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */
133
- bool hasRowSecurity; /* rewriter has applied some RLS policy */
144
+ /*
145
+ * rtable index of target relation for INSERT/UPDATE/DELETE/MERGE; 0 for
146
+ * SELECT. This is ignored in the query jumble as unrelated to the
147
+ * compilation of the query ID.
148
+ */
149
+ int resultRelation pg_node_attr(query_jumble_ignore);
150
+
151
+ /* has aggregates in tlist or havingQual */
152
+ bool hasAggs pg_node_attr(query_jumble_ignore);
153
+ /* has window functions in tlist */
154
+ bool hasWindowFuncs pg_node_attr(query_jumble_ignore);
155
+ /* has set-returning functions in tlist */
156
+ bool hasTargetSRFs pg_node_attr(query_jumble_ignore);
157
+ /* has subquery SubLink */
158
+ bool hasSubLinks pg_node_attr(query_jumble_ignore);
159
+ /* distinctClause is from DISTINCT ON */
160
+ bool hasDistinctOn pg_node_attr(query_jumble_ignore);
161
+ /* WITH RECURSIVE was specified */
162
+ bool hasRecursive pg_node_attr(query_jumble_ignore);
163
+ /* has INSERT/UPDATE/DELETE in WITH */
164
+ bool hasModifyingCTE pg_node_attr(query_jumble_ignore);
165
+ /* FOR [KEY] UPDATE/SHARE was specified */
166
+ bool hasForUpdate pg_node_attr(query_jumble_ignore);
167
+ /* rewriter has applied some RLS policy */
168
+ bool hasRowSecurity pg_node_attr(query_jumble_ignore);
169
+ /* is a RETURN statement */
170
+ bool isReturn pg_node_attr(query_jumble_ignore);
134
171
 
135
172
  List *cteList; /* WITH list (of CommonTableExpr's) */
136
173
 
137
174
  List *rtable; /* list of range table entries */
138
- FromExpr *jointree; /* table join tree (FROM and WHERE clauses) */
175
+
176
+ /*
177
+ * list of RTEPermissionInfo nodes for the rtable entries having
178
+ * perminfoindex > 0
179
+ */
180
+ List *rteperminfos pg_node_attr(query_jumble_ignore);
181
+ FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
182
+ * also USING clause for MERGE */
183
+
184
+ List *mergeActionList; /* list of actions for MERGE (only) */
185
+ /* whether to use outer join */
186
+ bool mergeUseOuterJoin pg_node_attr(query_jumble_ignore);
139
187
 
140
188
  List *targetList; /* target list (of TargetEntry) */
141
189
 
142
- OverridingKind override; /* OVERRIDING clause */
190
+ /* OVERRIDING clause */
191
+ OverridingKind override pg_node_attr(query_jumble_ignore);
143
192
 
144
193
  OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
145
194
 
146
195
  List *returningList; /* return-values list (of TargetEntry) */
147
196
 
148
197
  List *groupClause; /* a list of SortGroupClause's */
198
+ bool groupDistinct; /* is the group by clause distinct? */
149
199
 
150
200
  List *groupingSets; /* a list of GroupingSet's if present */
151
201
 
@@ -166,11 +216,14 @@ typedef struct Query
166
216
  Node *setOperations; /* set-operation tree if this is top level of
167
217
  * a UNION/INTERSECT/EXCEPT query */
168
218
 
169
- List *constraintDeps; /* a list of pg_constraint OIDs that the query
170
- * depends on to be semantically valid */
219
+ /*
220
+ * A list of pg_constraint OIDs that the query depends on to be
221
+ * semantically valid
222
+ */
223
+ List *constraintDeps pg_node_attr(query_jumble_ignore);
171
224
 
172
- List *withCheckOptions; /* a list of WithCheckOption's (added
173
- * during rewrite) */
225
+ /* a list of WithCheckOption's (added during rewrite) */
226
+ List *withCheckOptions pg_node_attr(query_jumble_ignore);
174
227
 
175
228
  /*
176
229
  * The following two fields identify the portion of the source text string
@@ -178,8 +231,10 @@ typedef struct Query
178
231
  * Queries, not in sub-queries. When not set, they might both be zero, or
179
232
  * both be -1 meaning "unknown".
180
233
  */
181
- int stmt_location; /* start location, or -1 if unknown */
182
- int stmt_len; /* length in bytes; 0 means "rest of string" */
234
+ /* start location, or -1 if unknown */
235
+ int stmt_location;
236
+ /* length in bytes; 0 means "rest of string" */
237
+ int stmt_len pg_node_attr(query_jumble_ignore);
183
238
  } Query;
184
239
 
185
240
 
@@ -207,7 +262,7 @@ typedef struct Query
207
262
  typedef struct TypeName
208
263
  {
209
264
  NodeTag type;
210
- List *names; /* qualified name (list of Value strings) */
265
+ List *names; /* qualified name (list of String nodes) */
211
266
  Oid typeOid; /* type identified by OID */
212
267
  bool setof; /* is a set? */
213
268
  bool pct_type; /* %TYPE specified? */
@@ -220,7 +275,7 @@ typedef struct TypeName
220
275
  /*
221
276
  * ColumnRef - specifies a reference to a column, or possibly a whole tuple
222
277
  *
223
- * The "fields" list must be nonempty. It can contain string Value nodes
278
+ * The "fields" list must be nonempty. It can contain String nodes
224
279
  * (representing names) and A_Star nodes (representing occurrence of a '*').
225
280
  * Currently, A_Star must appear only as the last list element --- the grammar
226
281
  * is responsible for enforcing this!
@@ -233,7 +288,7 @@ typedef struct TypeName
233
288
  typedef struct ColumnRef
234
289
  {
235
290
  NodeTag type;
236
- List *fields; /* field names (Value strings) or A_Star */
291
+ List *fields; /* field names (String nodes) or A_Star */
237
292
  int location; /* token location, or -1 if unknown */
238
293
  } ColumnRef;
239
294
 
@@ -258,7 +313,6 @@ typedef enum A_Expr_Kind
258
313
  AEXPR_DISTINCT, /* IS DISTINCT FROM - name must be "=" */
259
314
  AEXPR_NOT_DISTINCT, /* IS NOT DISTINCT FROM - name must be "=" */
260
315
  AEXPR_NULLIF, /* NULLIF - name must be "=" */
261
- AEXPR_OF, /* IS [NOT] OF - name must be "=" or "<>" */
262
316
  AEXPR_IN, /* [NOT] IN - name must be "=" or "<>" */
263
317
  AEXPR_LIKE, /* [NOT] LIKE - name must be "~~" or "!~~" */
264
318
  AEXPR_ILIKE, /* [NOT] ILIKE - name must be "~~*" or "!~~*" */
@@ -266,12 +320,13 @@ typedef enum A_Expr_Kind
266
320
  AEXPR_BETWEEN, /* name must be "BETWEEN" */
267
321
  AEXPR_NOT_BETWEEN, /* name must be "NOT BETWEEN" */
268
322
  AEXPR_BETWEEN_SYM, /* name must be "BETWEEN SYMMETRIC" */
269
- AEXPR_NOT_BETWEEN_SYM, /* name must be "NOT BETWEEN SYMMETRIC" */
270
- AEXPR_PAREN /* nameless dummy node for parentheses */
323
+ AEXPR_NOT_BETWEEN_SYM /* name must be "NOT BETWEEN SYMMETRIC" */
271
324
  } A_Expr_Kind;
272
325
 
273
326
  typedef struct A_Expr
274
327
  {
328
+ pg_node_attr(custom_read_write)
329
+
275
330
  NodeTag type;
276
331
  A_Expr_Kind kind; /* see above */
277
332
  List *name; /* possibly-qualified name of operator */
@@ -282,11 +337,27 @@ typedef struct A_Expr
282
337
 
283
338
  /*
284
339
  * A_Const - a literal constant
340
+ *
341
+ * Value nodes are inline for performance. You can treat 'val' as a node,
342
+ * as in IsA(&val, Integer). 'val' is not valid if isnull is true.
285
343
  */
344
+ union ValUnion
345
+ {
346
+ Node node;
347
+ Integer ival;
348
+ Float fval;
349
+ Boolean boolval;
350
+ String sval;
351
+ BitString bsval;
352
+ };
353
+
286
354
  typedef struct A_Const
287
355
  {
356
+ pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble)
357
+
288
358
  NodeTag type;
289
- Value val; /* value (includes type info, see value.h) */
359
+ union ValUnion val;
360
+ bool isnull; /* SQL NULL constant */
290
361
  int location; /* token location, or -1 if unknown */
291
362
  } A_Const;
292
363
 
@@ -318,6 +389,7 @@ typedef struct CollateClause
318
389
  typedef enum RoleSpecType
319
390
  {
320
391
  ROLESPEC_CSTRING, /* role name is stored as a C string */
392
+ ROLESPEC_CURRENT_ROLE, /* role spec is CURRENT_ROLE */
321
393
  ROLESPEC_CURRENT_USER, /* role spec is CURRENT_USER */
322
394
  ROLESPEC_SESSION_USER, /* role spec is SESSION_USER */
323
395
  ROLESPEC_PUBLIC /* role name is "public" */
@@ -352,11 +424,12 @@ typedef struct FuncCall
352
424
  List *args; /* the arguments (list of exprs) */
353
425
  List *agg_order; /* ORDER BY (list of SortBy) */
354
426
  Node *agg_filter; /* FILTER clause, if any */
427
+ struct WindowDef *over; /* OVER clause, if any */
355
428
  bool agg_within_group; /* ORDER BY appeared in WITHIN GROUP */
356
429
  bool agg_star; /* argument was really '*' */
357
430
  bool agg_distinct; /* arguments were labeled DISTINCT */
358
431
  bool func_variadic; /* last argument was labeled VARIADIC */
359
- struct WindowDef *over; /* OVER clause, if any */
432
+ CoercionForm funcformat; /* how to display this node */
360
433
  int location; /* token location, or -1 if unknown */
361
434
  } FuncCall;
362
435
 
@@ -389,7 +462,7 @@ typedef struct A_Indices
389
462
  * A_Indirection - select a field and/or array element from an expression
390
463
  *
391
464
  * The indirection list can contain A_Indices nodes (representing
392
- * subscripting), string Value nodes (representing field selection --- the
465
+ * subscripting), String nodes (representing field selection --- the
393
466
  * string value is the name of the field to select), and A_Star nodes
394
467
  * (representing selection of all fields of a composite type).
395
468
  * For example, a complex selection operation like
@@ -646,11 +719,13 @@ typedef struct ColumnDef
646
719
  NodeTag type;
647
720
  char *colname; /* name of column */
648
721
  TypeName *typeName; /* type of column */
722
+ char *compression; /* compression method for column */
649
723
  int inhcount; /* number of times column is inherited */
650
724
  bool is_local; /* column has local (non-inherited) def'n */
651
725
  bool is_not_null; /* NOT NULL constraint specified? */
652
726
  bool is_from_type; /* column definition came from table type */
653
727
  char storage; /* attstorage setting, or 0 for default */
728
+ char *storage_name; /* attstorage setting name or NULL for default */
654
729
  Node *raw_default; /* default value (untransformed parse tree) */
655
730
  Node *cooked_default; /* default value (transformed expr tree) */
656
731
  char identity; /* attidentity setting */
@@ -678,13 +753,14 @@ typedef struct TableLikeClause
678
753
  typedef enum TableLikeOption
679
754
  {
680
755
  CREATE_TABLE_LIKE_COMMENTS = 1 << 0,
681
- CREATE_TABLE_LIKE_CONSTRAINTS = 1 << 1,
682
- CREATE_TABLE_LIKE_DEFAULTS = 1 << 2,
683
- CREATE_TABLE_LIKE_GENERATED = 1 << 3,
684
- CREATE_TABLE_LIKE_IDENTITY = 1 << 4,
685
- CREATE_TABLE_LIKE_INDEXES = 1 << 5,
686
- CREATE_TABLE_LIKE_STATISTICS = 1 << 6,
687
- CREATE_TABLE_LIKE_STORAGE = 1 << 7,
756
+ CREATE_TABLE_LIKE_COMPRESSION = 1 << 1,
757
+ CREATE_TABLE_LIKE_CONSTRAINTS = 1 << 2,
758
+ CREATE_TABLE_LIKE_DEFAULTS = 1 << 3,
759
+ CREATE_TABLE_LIKE_GENERATED = 1 << 4,
760
+ CREATE_TABLE_LIKE_IDENTITY = 1 << 5,
761
+ CREATE_TABLE_LIKE_INDEXES = 1 << 6,
762
+ CREATE_TABLE_LIKE_STATISTICS = 1 << 7,
763
+ CREATE_TABLE_LIKE_STORAGE = 1 << 8,
688
764
  CREATE_TABLE_LIKE_ALL = PG_INT32_MAX
689
765
  } TableLikeOption;
690
766
 
@@ -731,7 +807,8 @@ typedef struct DefElem
731
807
  NodeTag type;
732
808
  char *defnamespace; /* NULL if unqualified name */
733
809
  char *defname;
734
- Node *arg; /* a (Value *) or a (TypeName *) */
810
+ Node *arg; /* typically Integer, Float, String, or
811
+ * TypeName */
735
812
  DefElemAction defaction; /* unspecified action, or SET/ADD/DROP */
736
813
  int location; /* token location, or -1 if unknown */
737
814
  } DefElem;
@@ -762,6 +839,7 @@ typedef struct XmlSerialize
762
839
  XmlOptionType xmloption; /* DOCUMENT or CONTENT */
763
840
  Node *expr;
764
841
  TypeName *typeName;
842
+ bool indent; /* [NO] INDENT */
765
843
  int location; /* token location, or -1 if unknown */
766
844
  } XmlSerialize;
767
845
 
@@ -783,6 +861,13 @@ typedef struct PartitionElem
783
861
  int location; /* token location, or -1 if unknown */
784
862
  } PartitionElem;
785
863
 
864
+ typedef enum PartitionStrategy
865
+ {
866
+ PARTITION_STRATEGY_LIST = 'l',
867
+ PARTITION_STRATEGY_RANGE = 'r',
868
+ PARTITION_STRATEGY_HASH = 'h'
869
+ } PartitionStrategy;
870
+
786
871
  /*
787
872
  * PartitionSpec - parse-time representation of a partition key specification
788
873
  *
@@ -791,17 +876,11 @@ typedef struct PartitionElem
791
876
  typedef struct PartitionSpec
792
877
  {
793
878
  NodeTag type;
794
- char *strategy; /* partitioning strategy ('hash', 'list' or
795
- * 'range') */
879
+ PartitionStrategy strategy;
796
880
  List *partParams; /* List of PartitionElems */
797
881
  int location; /* token location, or -1 if unknown */
798
882
  } PartitionSpec;
799
883
 
800
- /* Internal codes for partitioning strategies */
801
- #define PARTITION_STRATEGY_HASH 'h'
802
- #define PARTITION_STRATEGY_LIST 'l'
803
- #define PARTITION_STRATEGY_RANGE 'r'
804
-
805
884
  /*
806
885
  * PartitionBoundSpec - a partition bound specification
807
886
  *
@@ -860,6 +939,7 @@ typedef struct PartitionCmd
860
939
  NodeTag type;
861
940
  RangeVar *name; /* name of partition to attach/detach */
862
941
  PartitionBoundSpec *bound; /* FOR VALUES, if attaching */
942
+ bool concurrent;
863
943
  } PartitionCmd;
864
944
 
865
945
  /****************************************************************************
@@ -915,41 +995,10 @@ typedef struct PartitionCmd
915
995
  * inFromCl marks those range variables that are listed in the FROM clause.
916
996
  * It's false for RTEs that are added to a query behind the scenes, such
917
997
  * as the NEW and OLD variables for a rule, or the subqueries of a UNION.
918
- * This flag is not used anymore during parsing, since the parser now uses
919
- * a separate "namespace" data structure to control visibility, but it is
920
- * needed by ruleutils.c to determine whether RTEs should be shown in
921
- * decompiled queries.
922
- *
923
- * requiredPerms and checkAsUser specify run-time access permissions
924
- * checks to be performed at query startup. The user must have *all*
925
- * of the permissions that are OR'd together in requiredPerms (zero
926
- * indicates no permissions checking). If checkAsUser is not zero,
927
- * then do the permissions checks using the access rights of that user,
928
- * not the current effective user ID. (This allows rules to act as
929
- * setuid gateways.) Permissions checks only apply to RELATION RTEs.
930
- *
931
- * For SELECT/INSERT/UPDATE permissions, if the user doesn't have
932
- * table-wide permissions then it is sufficient to have the permissions
933
- * on all columns identified in selectedCols (for SELECT) and/or
934
- * insertedCols and/or updatedCols (INSERT with ON CONFLICT DO UPDATE may
935
- * have all 3). selectedCols, insertedCols and updatedCols are bitmapsets,
936
- * which cannot have negative integer members, so we subtract
937
- * FirstLowInvalidHeapAttributeNumber from column numbers before storing
938
- * them in these fields. A whole-row Var reference is represented by
939
- * setting the bit for InvalidAttrNumber.
940
- *
941
- * updatedCols is also used in some other places, for example, to determine
942
- * which triggers to fire and in FDWs to know which changed columns they
943
- * need to ship off.
944
- *
945
- * Generated columns that are caused to be updated by an update to a base
946
- * column are listed in extraUpdatedCols. This is not considered for
947
- * permission checking, but it is useful in those places that want to know
948
- * the full set of columns being updated as opposed to only the ones the
949
- * user explicitly mentioned in the query. (There is currently no need for
950
- * an extraInsertedCols, but it could exist.) Note that extraUpdatedCols
951
- * is populated during query rewrite, NOT in the parser, since generated
952
- * columns could be added after a rule has been parsed and stored.
998
+ * This flag is not used during parsing (except in transformLockingClause,
999
+ * q.v.); the parser now uses a separate "namespace" data structure to
1000
+ * control visibility. But it is needed by ruleutils.c to determine
1001
+ * whether RTEs should be shown in decompiled queries.
953
1002
  *
954
1003
  * securityQuals is a list of security barrier quals (boolean expressions),
955
1004
  * to be tested in the listed order before returning a row from the
@@ -976,6 +1025,8 @@ typedef enum RTEKind
976
1025
 
977
1026
  typedef struct RangeTblEntry
978
1027
  {
1028
+ pg_node_attr(custom_read_write, custom_query_jumble)
1029
+
979
1030
  NodeTag type;
980
1031
 
981
1032
  RTEKind rtekind; /* see above */
@@ -989,26 +1040,39 @@ typedef struct RangeTblEntry
989
1040
  /*
990
1041
  * Fields valid for a plain relation RTE (else zero):
991
1042
  *
992
- * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
993
- * that the tuple format of the tuplestore is the same as the referenced
994
- * relation. This allows plans referencing AFTER trigger transition
995
- * tables to be invalidated if the underlying table is altered.
996
- *
997
1043
  * rellockmode is really LOCKMODE, but it's declared int to avoid having
998
1044
  * to include lock-related headers here. It must be RowExclusiveLock if
999
- * the RTE is an INSERT/UPDATE/DELETE target, else RowShareLock if the RTE
1000
- * is a SELECT FOR UPDATE/FOR SHARE target, else AccessShareLock.
1045
+ * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if
1046
+ * the RTE is a SELECT FOR UPDATE/FOR SHARE target, else AccessShareLock.
1001
1047
  *
1002
1048
  * Note: in some cases, rule expansion may result in RTEs that are marked
1003
1049
  * with RowExclusiveLock even though they are not the target of the
1004
1050
  * current query; this happens if a DO ALSO rule simply scans the original
1005
1051
  * target table. We leave such RTEs with their original lockmode so as to
1006
1052
  * avoid getting an additional, lesser lock.
1053
+ *
1054
+ * perminfoindex is 1-based index of the RTEPermissionInfo belonging to
1055
+ * this RTE in the containing struct's list of same; 0 if permissions need
1056
+ * not be checked for this RTE.
1057
+ *
1058
+ * As a special case, relid, relkind, rellockmode, and perminfoindex can
1059
+ * also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we
1060
+ * convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY
1061
+ * containing the view's query. We still need to perform run-time locking
1062
+ * and permission checks on the view, even though it's not directly used
1063
+ * in the query anymore, and the most expedient way to do that is to
1064
+ * retain these fields from the old state of the RTE.
1065
+ *
1066
+ * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1067
+ * that the tuple format of the tuplestore is the same as the referenced
1068
+ * relation. This allows plans referencing AFTER trigger transition
1069
+ * tables to be invalidated if the underlying table is altered.
1007
1070
  */
1008
1071
  Oid relid; /* OID of the relation */
1009
1072
  char relkind; /* relation kind (see pg_class.relkind) */
1010
1073
  int rellockmode; /* lock level that query requires on the rel */
1011
1074
  struct TableSampleClause *tablesample; /* sampling info, or NULL */
1075
+ Index perminfoindex;
1012
1076
 
1013
1077
  /*
1014
1078
  * Fields valid for a subquery RTE (else NULL):
@@ -1032,6 +1096,14 @@ typedef struct RangeTblEntry
1032
1096
  * alias Vars are generated only for merged columns). We keep these
1033
1097
  * entries only because they're needed in expandRTE() and similar code.
1034
1098
  *
1099
+ * Vars appearing within joinaliasvars are marked with varnullingrels sets
1100
+ * that describe the nulling effects of this join and lower ones. This is
1101
+ * essential for FULL JOIN cases, because the COALESCE expression only
1102
+ * describes the semantics correctly if its inputs have been nulled by the
1103
+ * join. For other cases, it allows expandRTE() to generate a valid
1104
+ * representation of the join's output without consulting additional
1105
+ * parser state.
1106
+ *
1035
1107
  * Within a Query loaded from a stored rule, it is possible for non-merged
1036
1108
  * joinaliasvars items to be null pointers, which are placeholders for
1037
1109
  * (necessarily unreferenced) columns dropped since the rule was made.
@@ -1057,6 +1129,13 @@ typedef struct RangeTblEntry
1057
1129
  List *joinleftcols; /* left-side input column numbers */
1058
1130
  List *joinrightcols; /* right-side input column numbers */
1059
1131
 
1132
+ /*
1133
+ * join_using_alias is an alias clause attached directly to JOIN/USING. It
1134
+ * is different from the alias field (below) in that it does not hide the
1135
+ * range variables of the tables being joined.
1136
+ */
1137
+ Alias *join_using_alias;
1138
+
1060
1139
  /*
1061
1140
  * Fields valid for a function RTE (else NIL/zero):
1062
1141
  *
@@ -1111,7 +1190,7 @@ typedef struct RangeTblEntry
1111
1190
  * Fields valid for ENR RTEs (else NULL/zero):
1112
1191
  */
1113
1192
  char *enrname; /* name of ephemeral named relation */
1114
- double enrtuples; /* estimated or actual from caller */
1193
+ Cardinality enrtuples; /* estimated or actual from caller */
1115
1194
 
1116
1195
  /*
1117
1196
  * Fields valid in all RTEs:
@@ -1121,14 +1200,54 @@ typedef struct RangeTblEntry
1121
1200
  bool lateral; /* subquery, function, or values is LATERAL? */
1122
1201
  bool inh; /* inheritance requested? */
1123
1202
  bool inFromCl; /* present in FROM clause? */
1203
+ List *securityQuals; /* security barrier quals to apply, if any */
1204
+ } RangeTblEntry;
1205
+
1206
+ /*
1207
+ * RTEPermissionInfo
1208
+ * Per-relation information for permission checking. Added to the Query
1209
+ * node by the parser when adding the corresponding RTE to the query
1210
+ * range table and subsequently editorialized on by the rewriter if
1211
+ * needed after rule expansion.
1212
+ *
1213
+ * Only the relations directly mentioned in the query are checked for
1214
+ * access permissions by the core executor, so only their RTEPermissionInfos
1215
+ * are present in the Query. However, extensions may want to check inheritance
1216
+ * children too, depending on the value of rte->inh, so it's copied in 'inh'
1217
+ * for their perusal.
1218
+ *
1219
+ * requiredPerms and checkAsUser specify run-time access permissions checks
1220
+ * to be performed at query startup. The user must have *all* of the
1221
+ * permissions that are OR'd together in requiredPerms (never 0!). If
1222
+ * checkAsUser is not zero, then do the permissions checks using the access
1223
+ * rights of that user, not the current effective user ID. (This allows rules
1224
+ * to act as setuid gateways.)
1225
+ *
1226
+ * For SELECT/INSERT/UPDATE permissions, if the user doesn't have table-wide
1227
+ * permissions then it is sufficient to have the permissions on all columns
1228
+ * identified in selectedCols (for SELECT) and/or insertedCols and/or
1229
+ * updatedCols (INSERT with ON CONFLICT DO UPDATE may have all 3).
1230
+ * selectedCols, insertedCols and updatedCols are bitmapsets, which cannot have
1231
+ * negative integer members, so we subtract FirstLowInvalidHeapAttributeNumber
1232
+ * from column numbers before storing them in these fields. A whole-row Var
1233
+ * reference is represented by setting the bit for InvalidAttrNumber.
1234
+ *
1235
+ * updatedCols is also used in some other places, for example, to determine
1236
+ * which triggers to fire and in FDWs to know which changed columns they need
1237
+ * to ship off.
1238
+ */
1239
+ typedef struct RTEPermissionInfo
1240
+ {
1241
+ NodeTag type;
1242
+
1243
+ Oid relid; /* relation OID */
1244
+ bool inh; /* separately check inheritance children? */
1124
1245
  AclMode requiredPerms; /* bitmask of required access permissions */
1125
1246
  Oid checkAsUser; /* if valid, check access as this role */
1126
1247
  Bitmapset *selectedCols; /* columns needing SELECT permission */
1127
1248
  Bitmapset *insertedCols; /* columns needing INSERT permission */
1128
1249
  Bitmapset *updatedCols; /* columns needing UPDATE permission */
1129
- Bitmapset *extraUpdatedCols; /* generated columns being updated */
1130
- List *securityQuals; /* security barrier quals to apply, if any */
1131
- } RangeTblEntry;
1250
+ } RTEPermissionInfo;
1132
1251
 
1133
1252
  /*
1134
1253
  * RangeTblFunction -
@@ -1145,20 +1264,29 @@ typedef struct RangeTblEntry
1145
1264
  * time. We do however remember how many columns we thought the type had
1146
1265
  * (including dropped columns!), so that we can successfully ignore any
1147
1266
  * columns added after the query was parsed.
1267
+ *
1268
+ * The query jumbling only needs to track the function expression.
1148
1269
  */
1149
1270
  typedef struct RangeTblFunction
1150
1271
  {
1151
1272
  NodeTag type;
1152
1273
 
1153
1274
  Node *funcexpr; /* expression tree for func call */
1154
- int funccolcount; /* number of columns it contributes to RTE */
1275
+ /* number of columns it contributes to RTE */
1276
+ int funccolcount pg_node_attr(query_jumble_ignore);
1155
1277
  /* These fields record the contents of a column definition list, if any: */
1156
- List *funccolnames; /* column names (list of String) */
1157
- List *funccoltypes; /* OID list of column type OIDs */
1158
- List *funccoltypmods; /* integer list of column typmods */
1159
- List *funccolcollations; /* OID list of column collation OIDs */
1278
+ /* column names (list of String) */
1279
+ List *funccolnames pg_node_attr(query_jumble_ignore);
1280
+ /* OID list of column type OIDs */
1281
+ List *funccoltypes pg_node_attr(query_jumble_ignore);
1282
+ /* integer list of column typmods */
1283
+ List *funccoltypmods pg_node_attr(query_jumble_ignore);
1284
+ /* OID list of column collation OIDs */
1285
+ List *funccolcollations pg_node_attr(query_jumble_ignore);
1286
+
1160
1287
  /* This is set during planning for use by the executor: */
1161
- Bitmapset *funcparams; /* PARAM_EXEC Param IDs affecting this func */
1288
+ /* PARAM_EXEC Param IDs affecting this func */
1289
+ Bitmapset *funcparams pg_node_attr(query_jumble_ignore);
1162
1290
  } RangeTblFunction;
1163
1291
 
1164
1292
  /*
@@ -1185,7 +1313,9 @@ typedef enum WCOKind
1185
1313
  WCO_VIEW_CHECK, /* WCO on an auto-updatable view */
1186
1314
  WCO_RLS_INSERT_CHECK, /* RLS INSERT WITH CHECK policy */
1187
1315
  WCO_RLS_UPDATE_CHECK, /* RLS UPDATE WITH CHECK policy */
1188
- WCO_RLS_CONFLICT_CHECK /* RLS ON CONFLICT DO UPDATE USING policy */
1316
+ WCO_RLS_CONFLICT_CHECK, /* RLS ON CONFLICT DO UPDATE USING policy */
1317
+ WCO_RLS_MERGE_UPDATE_CHECK, /* RLS MERGE UPDATE USING policy */
1318
+ WCO_RLS_MERGE_DELETE_CHECK /* RLS MERGE DELETE USING policy */
1189
1319
  } WCOKind;
1190
1320
 
1191
1321
  typedef struct WithCheckOption
@@ -1263,7 +1393,8 @@ typedef struct SortGroupClause
1263
1393
  Oid eqop; /* the equality operator ('=' op) */
1264
1394
  Oid sortop; /* the ordering operator ('<' op), or 0 */
1265
1395
  bool nulls_first; /* do NULLs come before normal values? */
1266
- bool hashable; /* can eqop be implemented by hashing? */
1396
+ /* can eqop be implemented by hashing? */
1397
+ bool hashable pg_node_attr(query_jumble_ignore);
1267
1398
  } SortGroupClause;
1268
1399
 
1269
1400
  /*
@@ -1316,7 +1447,7 @@ typedef struct SortGroupClause
1316
1447
  *
1317
1448
  * SETS( SIMPLE(1,2), CUBE( SIMPLE(3), SIMPLE(4,5) ) )
1318
1449
  */
1319
- typedef enum
1450
+ typedef enum GroupingSetKind
1320
1451
  {
1321
1452
  GROUPING_SET_EMPTY,
1322
1453
  GROUPING_SET_SIMPLE,
@@ -1328,7 +1459,7 @@ typedef enum
1328
1459
  typedef struct GroupingSet
1329
1460
  {
1330
1461
  NodeTag type;
1331
- GroupingSetKind kind;
1462
+ GroupingSetKind kind pg_node_attr(query_jumble_ignore);
1332
1463
  List *content;
1333
1464
  int location;
1334
1465
  } GroupingSet;
@@ -1349,24 +1480,38 @@ typedef struct GroupingSet
1349
1480
  * When refname isn't null, the partitionClause is always copied from there;
1350
1481
  * the orderClause might or might not be copied (see copiedOrder); the framing
1351
1482
  * options are never copied, per spec.
1483
+ *
1484
+ * The information relevant for the query jumbling is the partition clause
1485
+ * type and its bounds.
1352
1486
  */
1353
1487
  typedef struct WindowClause
1354
1488
  {
1355
1489
  NodeTag type;
1356
- char *name; /* window name (NULL in an OVER clause) */
1357
- char *refname; /* referenced window name, if any */
1490
+ /* window name (NULL in an OVER clause) */
1491
+ char *name pg_node_attr(query_jumble_ignore);
1492
+ /* referenced window name, if any */
1493
+ char *refname pg_node_attr(query_jumble_ignore);
1358
1494
  List *partitionClause; /* PARTITION BY list */
1359
- List *orderClause; /* ORDER BY list */
1495
+ /* ORDER BY list */
1496
+ List *orderClause;
1360
1497
  int frameOptions; /* frame_clause options, see WindowDef */
1361
1498
  Node *startOffset; /* expression for starting bound, if any */
1362
1499
  Node *endOffset; /* expression for ending bound, if any */
1363
- Oid startInRangeFunc; /* in_range function for startOffset */
1364
- Oid endInRangeFunc; /* in_range function for endOffset */
1365
- Oid inRangeColl; /* collation for in_range tests */
1366
- bool inRangeAsc; /* use ASC sort order for in_range tests? */
1367
- bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
1500
+ /* qual to help short-circuit execution */
1501
+ List *runCondition pg_node_attr(query_jumble_ignore);
1502
+ /* in_range function for startOffset */
1503
+ Oid startInRangeFunc pg_node_attr(query_jumble_ignore);
1504
+ /* in_range function for endOffset */
1505
+ Oid endInRangeFunc pg_node_attr(query_jumble_ignore);
1506
+ /* collation for in_range tests */
1507
+ Oid inRangeColl pg_node_attr(query_jumble_ignore);
1508
+ /* use ASC sort order for in_range tests? */
1509
+ bool inRangeAsc pg_node_attr(query_jumble_ignore);
1510
+ /* nulls sort first for in_range tests? */
1511
+ bool inRangeNullsFirst pg_node_attr(query_jumble_ignore);
1368
1512
  Index winref; /* ID referenced by window functions */
1369
- bool copiedOrder; /* did we copy orderClause from refname? */
1513
+ /* did we copy orderClause from refname? */
1514
+ bool copiedOrder pg_node_attr(query_jumble_ignore);
1370
1515
  } WindowClause;
1371
1516
 
1372
1517
  /*
@@ -1439,9 +1584,8 @@ typedef struct OnConflictClause
1439
1584
  /*
1440
1585
  * CommonTableExpr -
1441
1586
  * representation of WITH list element
1442
- *
1443
- * We don't currently support the SEARCH or CYCLE clause.
1444
1587
  */
1588
+
1445
1589
  typedef enum CTEMaterialize
1446
1590
  {
1447
1591
  CTEMaterializeDefault, /* no option specified */
@@ -1449,23 +1593,65 @@ typedef enum CTEMaterialize
1449
1593
  CTEMaterializeNever /* NOT MATERIALIZED */
1450
1594
  } CTEMaterialize;
1451
1595
 
1596
+ typedef struct CTESearchClause
1597
+ {
1598
+ NodeTag type;
1599
+ List *search_col_list;
1600
+ bool search_breadth_first;
1601
+ char *search_seq_column;
1602
+ int location;
1603
+ } CTESearchClause;
1604
+
1605
+ typedef struct CTECycleClause
1606
+ {
1607
+ NodeTag type;
1608
+ List *cycle_col_list;
1609
+ char *cycle_mark_column;
1610
+ Node *cycle_mark_value;
1611
+ Node *cycle_mark_default;
1612
+ char *cycle_path_column;
1613
+ int location;
1614
+ /* These fields are set during parse analysis: */
1615
+ Oid cycle_mark_type; /* common type of _value and _default */
1616
+ int cycle_mark_typmod;
1617
+ Oid cycle_mark_collation;
1618
+ Oid cycle_mark_neop; /* <> operator for type */
1619
+ } CTECycleClause;
1620
+
1452
1621
  typedef struct CommonTableExpr
1453
1622
  {
1454
1623
  NodeTag type;
1455
- char *ctename; /* query name (never qualified) */
1456
- List *aliascolnames; /* optional list of column names */
1624
+
1625
+ /*
1626
+ * Query name (never qualified). The string name is included in the query
1627
+ * jumbling because RTE_CTE RTEs need it.
1628
+ */
1629
+ char *ctename;
1630
+ /* optional list of column names */
1631
+ List *aliascolnames pg_node_attr(query_jumble_ignore);
1457
1632
  CTEMaterialize ctematerialized; /* is this an optimization fence? */
1458
1633
  /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */
1459
1634
  Node *ctequery; /* the CTE's subquery */
1635
+ CTESearchClause *search_clause pg_node_attr(query_jumble_ignore);
1636
+ CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore);
1460
1637
  int location; /* token location, or -1 if unknown */
1461
1638
  /* These fields are set during parse analysis: */
1462
- bool cterecursive; /* is this CTE actually recursive? */
1463
- int cterefcount; /* number of RTEs referencing this CTE
1464
- * (excluding internal self-references) */
1465
- List *ctecolnames; /* list of output column names */
1466
- List *ctecoltypes; /* OID list of output column type OIDs */
1467
- List *ctecoltypmods; /* integer list of output column typmods */
1468
- List *ctecolcollations; /* OID list of column collation OIDs */
1639
+ /* is this CTE actually recursive? */
1640
+ bool cterecursive pg_node_attr(query_jumble_ignore);
1641
+
1642
+ /*
1643
+ * Number of RTEs referencing this CTE (excluding internal
1644
+ * self-references), irrelevant for query jumbling.
1645
+ */
1646
+ int cterefcount pg_node_attr(query_jumble_ignore);
1647
+ /* list of output column names */
1648
+ List *ctecolnames pg_node_attr(query_jumble_ignore);
1649
+ /* OID list of output column type OIDs */
1650
+ List *ctecoltypes pg_node_attr(query_jumble_ignore);
1651
+ /* integer list of output column typmods */
1652
+ List *ctecoltypmods pg_node_attr(query_jumble_ignore);
1653
+ /* OID list of column collation OIDs */
1654
+ List *ctecolcollations pg_node_attr(query_jumble_ignore);
1469
1655
  } CommonTableExpr;
1470
1656
 
1471
1657
  /* Convenience macro to get the output tlist of a CTE's query */
@@ -1475,6 +1661,41 @@ typedef struct CommonTableExpr
1475
1661
  ((Query *) (cte)->ctequery)->targetList : \
1476
1662
  ((Query *) (cte)->ctequery)->returningList)
1477
1663
 
1664
+ /*
1665
+ * MergeWhenClause -
1666
+ * raw parser representation of a WHEN clause in a MERGE statement
1667
+ *
1668
+ * This is transformed into MergeAction by parse analysis
1669
+ */
1670
+ typedef struct MergeWhenClause
1671
+ {
1672
+ NodeTag type;
1673
+ bool matched; /* true=MATCHED, false=NOT MATCHED */
1674
+ CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1675
+ OverridingKind override; /* OVERRIDING clause */
1676
+ Node *condition; /* WHEN conditions (raw parser) */
1677
+ List *targetList; /* INSERT/UPDATE targetlist */
1678
+ /* the following members are only used in INSERT actions */
1679
+ List *values; /* VALUES to INSERT, or NULL */
1680
+ } MergeWhenClause;
1681
+
1682
+ /*
1683
+ * MergeAction -
1684
+ * Transformed representation of a WHEN clause in a MERGE statement
1685
+ */
1686
+ typedef struct MergeAction
1687
+ {
1688
+ NodeTag type;
1689
+ bool matched; /* true=MATCHED, false=NOT MATCHED */
1690
+ CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1691
+ /* OVERRIDING clause */
1692
+ OverridingKind override pg_node_attr(query_jumble_ignore);
1693
+ Node *qual; /* transformed WHEN conditions */
1694
+ List *targetList; /* the target list (of TargetEntry) */
1695
+ /* target attribute numbers of an UPDATE */
1696
+ List *updateColnos pg_node_attr(query_jumble_ignore);
1697
+ } MergeAction;
1698
+
1478
1699
  /*
1479
1700
  * TriggerTransition -
1480
1701
  * representation of transition row or table naming clause
@@ -1491,6 +1712,113 @@ typedef struct TriggerTransition
1491
1712
  bool isTable;
1492
1713
  } TriggerTransition;
1493
1714
 
1715
+ /* Nodes for SQL/JSON support */
1716
+
1717
+ /*
1718
+ * JsonOutput -
1719
+ * representation of JSON output clause (RETURNING type [FORMAT format])
1720
+ */
1721
+ typedef struct JsonOutput
1722
+ {
1723
+ NodeTag type;
1724
+ TypeName *typeName; /* RETURNING type name, if specified */
1725
+ JsonReturning *returning; /* RETURNING FORMAT clause and type Oids */
1726
+ } JsonOutput;
1727
+
1728
+ /*
1729
+ * JsonKeyValue -
1730
+ * untransformed representation of JSON object key-value pair for
1731
+ * JSON_OBJECT() and JSON_OBJECTAGG()
1732
+ */
1733
+ typedef struct JsonKeyValue
1734
+ {
1735
+ NodeTag type;
1736
+ Expr *key; /* key expression */
1737
+ JsonValueExpr *value; /* JSON value expression */
1738
+ } JsonKeyValue;
1739
+
1740
+ /*
1741
+ * JsonObjectConstructor -
1742
+ * untransformed representation of JSON_OBJECT() constructor
1743
+ */
1744
+ typedef struct JsonObjectConstructor
1745
+ {
1746
+ NodeTag type;
1747
+ List *exprs; /* list of JsonKeyValue pairs */
1748
+ JsonOutput *output; /* RETURNING clause, if specified */
1749
+ bool absent_on_null; /* skip NULL values? */
1750
+ bool unique; /* check key uniqueness? */
1751
+ int location; /* token location, or -1 if unknown */
1752
+ } JsonObjectConstructor;
1753
+
1754
+ /*
1755
+ * JsonArrayConstructor -
1756
+ * untransformed representation of JSON_ARRAY(element,...) constructor
1757
+ */
1758
+ typedef struct JsonArrayConstructor
1759
+ {
1760
+ NodeTag type;
1761
+ List *exprs; /* list of JsonValueExpr elements */
1762
+ JsonOutput *output; /* RETURNING clause, if specified */
1763
+ bool absent_on_null; /* skip NULL elements? */
1764
+ int location; /* token location, or -1 if unknown */
1765
+ } JsonArrayConstructor;
1766
+
1767
+ /*
1768
+ * JsonArrayQueryConstructor -
1769
+ * untransformed representation of JSON_ARRAY(subquery) constructor
1770
+ */
1771
+ typedef struct JsonArrayQueryConstructor
1772
+ {
1773
+ NodeTag type;
1774
+ Node *query; /* subquery */
1775
+ JsonOutput *output; /* RETURNING clause, if specified */
1776
+ JsonFormat *format; /* FORMAT clause for subquery, if specified */
1777
+ bool absent_on_null; /* skip NULL elements? */
1778
+ int location; /* token location, or -1 if unknown */
1779
+ } JsonArrayQueryConstructor;
1780
+
1781
+ /*
1782
+ * JsonAggConstructor -
1783
+ * common fields of untransformed representation of
1784
+ * JSON_ARRAYAGG() and JSON_OBJECTAGG()
1785
+ */
1786
+ typedef struct JsonAggConstructor
1787
+ {
1788
+ NodeTag type;
1789
+ JsonOutput *output; /* RETURNING clause, if any */
1790
+ Node *agg_filter; /* FILTER clause, if any */
1791
+ List *agg_order; /* ORDER BY clause, if any */
1792
+ struct WindowDef *over; /* OVER clause, if any */
1793
+ int location; /* token location, or -1 if unknown */
1794
+ } JsonAggConstructor;
1795
+
1796
+ /*
1797
+ * JsonObjectAgg -
1798
+ * untransformed representation of JSON_OBJECTAGG()
1799
+ */
1800
+ typedef struct JsonObjectAgg
1801
+ {
1802
+ NodeTag type;
1803
+ JsonAggConstructor *constructor; /* common fields */
1804
+ JsonKeyValue *arg; /* object key-value pair */
1805
+ bool absent_on_null; /* skip NULL values? */
1806
+ bool unique; /* check key uniqueness? */
1807
+ } JsonObjectAgg;
1808
+
1809
+ /*
1810
+ * JsonArrayAgg -
1811
+ * untransformed representation of JSON_ARRAYAGG()
1812
+ */
1813
+ typedef struct JsonArrayAgg
1814
+ {
1815
+ NodeTag type;
1816
+ JsonAggConstructor *constructor; /* common fields */
1817
+ JsonValueExpr *arg; /* array element expression */
1818
+ bool absent_on_null; /* skip NULL elements? */
1819
+ } JsonArrayAgg;
1820
+
1821
+
1494
1822
  /*****************************************************************************
1495
1823
  * Raw Grammar Output Statements
1496
1824
  *****************************************************************************/
@@ -1506,9 +1834,14 @@ typedef struct TriggerTransition
1506
1834
  *
1507
1835
  * stmt_location/stmt_len identify the portion of the source text string
1508
1836
  * containing this raw statement (useful for multi-statement strings).
1837
+ *
1838
+ * This is irrelevant for query jumbling, as this is not used in parsed
1839
+ * queries.
1509
1840
  */
1510
1841
  typedef struct RawStmt
1511
1842
  {
1843
+ pg_node_attr(no_query_jumble)
1844
+
1512
1845
  NodeTag type;
1513
1846
  Node *stmt; /* raw parse tree */
1514
1847
  int stmt_location; /* start location, or -1 if unknown */
@@ -1568,6 +1901,20 @@ typedef struct UpdateStmt
1568
1901
  WithClause *withClause; /* WITH clause */
1569
1902
  } UpdateStmt;
1570
1903
 
1904
+ /* ----------------------
1905
+ * Merge Statement
1906
+ * ----------------------
1907
+ */
1908
+ typedef struct MergeStmt
1909
+ {
1910
+ NodeTag type;
1911
+ RangeVar *relation; /* target relation to merge into */
1912
+ Node *sourceRelation; /* source relation */
1913
+ Node *joinCondition; /* join condition between source and target */
1914
+ List *mergeWhenClauses; /* list of MergeWhenClause(es) */
1915
+ WithClause *withClause; /* WITH clause */
1916
+ } MergeStmt;
1917
+
1571
1918
  /* ----------------------
1572
1919
  * Select Statement
1573
1920
  *
@@ -1603,6 +1950,7 @@ typedef struct SelectStmt
1603
1950
  List *fromClause; /* the FROM clause */
1604
1951
  Node *whereClause; /* WHERE qualification */
1605
1952
  List *groupClause; /* GROUP BY clauses */
1953
+ bool groupDistinct; /* Is this GROUP BY DISTINCT? */
1606
1954
  Node *havingClause; /* HAVING conditional-expression */
1607
1955
  List *windowClause; /* WINDOW window_name AS (...), ... */
1608
1956
 
@@ -1666,15 +2014,48 @@ typedef struct SetOperationStmt
1666
2014
  Node *rarg; /* right child */
1667
2015
  /* Eventually add fields for CORRESPONDING spec here */
1668
2016
 
1669
- /* Fields derived during parse analysis: */
1670
- List *colTypes; /* OID list of output column type OIDs */
1671
- List *colTypmods; /* integer list of output column typmods */
1672
- List *colCollations; /* OID list of output column collation OIDs */
1673
- List *groupClauses; /* a list of SortGroupClause's */
2017
+ /* Fields derived during parse analysis (irrelevant for query jumbling): */
2018
+ /* OID list of output column type OIDs */
2019
+ List *colTypes pg_node_attr(query_jumble_ignore);
2020
+ /* integer list of output column typmods */
2021
+ List *colTypmods pg_node_attr(query_jumble_ignore);
2022
+ /* OID list of output column collation OIDs */
2023
+ List *colCollations pg_node_attr(query_jumble_ignore);
2024
+ /* a list of SortGroupClause's */
2025
+ List *groupClauses pg_node_attr(query_jumble_ignore);
1674
2026
  /* groupClauses is NIL if UNION ALL, but must be set otherwise */
1675
2027
  } SetOperationStmt;
1676
2028
 
1677
2029
 
2030
+ /*
2031
+ * RETURN statement (inside SQL function body)
2032
+ */
2033
+ typedef struct ReturnStmt
2034
+ {
2035
+ NodeTag type;
2036
+ Node *returnval;
2037
+ } ReturnStmt;
2038
+
2039
+
2040
+ /* ----------------------
2041
+ * PL/pgSQL Assignment Statement
2042
+ *
2043
+ * Like SelectStmt, this is transformed into a SELECT Query.
2044
+ * However, the targetlist of the result looks more like an UPDATE.
2045
+ * ----------------------
2046
+ */
2047
+ typedef struct PLAssignStmt
2048
+ {
2049
+ NodeTag type;
2050
+
2051
+ char *name; /* initial column name */
2052
+ List *indirection; /* subscripts and field names, if any */
2053
+ int nnames; /* number of names to use in ColumnRef */
2054
+ SelectStmt *val; /* the PL/pgSQL expression to assign */
2055
+ int location; /* name's token location, or -1 if unknown */
2056
+ } PLAssignStmt;
2057
+
2058
+
1678
2059
  /*****************************************************************************
1679
2060
  * Other Statements (no optimizations required)
1680
2061
  *
@@ -1724,9 +2105,11 @@ typedef enum ObjectType
1724
2105
  OBJECT_OPCLASS,
1725
2106
  OBJECT_OPERATOR,
1726
2107
  OBJECT_OPFAMILY,
2108
+ OBJECT_PARAMETER_ACL,
1727
2109
  OBJECT_POLICY,
1728
2110
  OBJECT_PROCEDURE,
1729
2111
  OBJECT_PUBLICATION,
2112
+ OBJECT_PUBLICATION_NAMESPACE,
1730
2113
  OBJECT_PUBLICATION_REL,
1731
2114
  OBJECT_ROLE,
1732
2115
  OBJECT_ROUTINE,
@@ -1781,14 +2164,13 @@ typedef struct AlterTableStmt
1781
2164
  NodeTag type;
1782
2165
  RangeVar *relation; /* table to work on */
1783
2166
  List *cmds; /* list of subcommands */
1784
- ObjectType relkind; /* type of object */
2167
+ ObjectType objtype; /* type of object */
1785
2168
  bool missing_ok; /* skip error if table missing */
1786
2169
  } AlterTableStmt;
1787
2170
 
1788
2171
  typedef enum AlterTableType
1789
2172
  {
1790
2173
  AT_AddColumn, /* add column */
1791
- AT_AddColumnRecurse, /* internal to commands/tablecmds.c */
1792
2174
  AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
1793
2175
  AT_ColumnDefault, /* alter column default */
1794
2176
  AT_CookedColumnDefault, /* add a pre-cooked column default */
@@ -1800,20 +2182,17 @@ typedef enum AlterTableType
1800
2182
  AT_SetOptions, /* alter column set ( options ) */
1801
2183
  AT_ResetOptions, /* alter column reset ( options ) */
1802
2184
  AT_SetStorage, /* alter column set storage */
2185
+ AT_SetCompression, /* alter column set compression */
1803
2186
  AT_DropColumn, /* drop column */
1804
- AT_DropColumnRecurse, /* internal to commands/tablecmds.c */
1805
2187
  AT_AddIndex, /* add index */
1806
2188
  AT_ReAddIndex, /* internal to commands/tablecmds.c */
1807
2189
  AT_AddConstraint, /* add constraint */
1808
- AT_AddConstraintRecurse, /* internal to commands/tablecmds.c */
1809
2190
  AT_ReAddConstraint, /* internal to commands/tablecmds.c */
1810
2191
  AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
1811
2192
  AT_AlterConstraint, /* alter constraint */
1812
2193
  AT_ValidateConstraint, /* validate constraint */
1813
- AT_ValidateConstraintRecurse, /* internal to commands/tablecmds.c */
1814
2194
  AT_AddIndexConstraint, /* add constraint using existing index */
1815
2195
  AT_DropConstraint, /* drop constraint */
1816
- AT_DropConstraintRecurse, /* internal to commands/tablecmds.c */
1817
2196
  AT_ReAddComment, /* internal to commands/tablecmds.c */
1818
2197
  AT_AlterColumnType, /* alter column type */
1819
2198
  AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
@@ -1823,6 +2202,7 @@ typedef enum AlterTableType
1823
2202
  AT_SetLogged, /* SET LOGGED */
1824
2203
  AT_SetUnLogged, /* SET UNLOGGED */
1825
2204
  AT_DropOids, /* SET WITHOUT OIDS */
2205
+ AT_SetAccessMethod, /* SET ACCESS METHOD */
1826
2206
  AT_SetTableSpace, /* SET TABLESPACE */
1827
2207
  AT_SetRelOptions, /* SET (...) -- AM specific parameters */
1828
2208
  AT_ResetRelOptions, /* RESET (...) -- AM specific parameters */
@@ -1851,9 +2231,11 @@ typedef enum AlterTableType
1851
2231
  AT_GenericOptions, /* OPTIONS (...) */
1852
2232
  AT_AttachPartition, /* ATTACH PARTITION */
1853
2233
  AT_DetachPartition, /* DETACH PARTITION */
2234
+ AT_DetachPartitionFinalize, /* DETACH PARTITION FINALIZE */
1854
2235
  AT_AddIdentity, /* ADD IDENTITY */
1855
2236
  AT_SetIdentity, /* SET identity column options */
1856
- AT_DropIdentity /* DROP IDENTITY */
2237
+ AT_DropIdentity, /* DROP IDENTITY */
2238
+ AT_ReAddStatistics /* internal to commands/tablecmds.c */
1857
2239
  } AlterTableType;
1858
2240
 
1859
2241
  typedef struct ReplicaIdentityStmt
@@ -1876,6 +2258,7 @@ typedef struct AlterTableCmd /* one subcommand of an ALTER TABLE */
1876
2258
  * constraint, or parent table */
1877
2259
  DropBehavior behavior; /* RESTRICT or CASCADE for DROP cases */
1878
2260
  bool missing_ok; /* skip error if missing? */
2261
+ bool recurse; /* exec-time recursion */
1879
2262
  } AlterTableCmd;
1880
2263
 
1881
2264
 
@@ -1934,27 +2317,39 @@ typedef struct GrantStmt
1934
2317
  GrantTargetType targtype; /* type of the grant target */
1935
2318
  ObjectType objtype; /* kind of object being operated on */
1936
2319
  List *objects; /* list of RangeVar nodes, ObjectWithArgs
1937
- * nodes, or plain names (as Value strings) */
2320
+ * nodes, or plain names (as String values) */
1938
2321
  List *privileges; /* list of AccessPriv nodes */
1939
2322
  /* privileges == NIL denotes ALL PRIVILEGES */
1940
2323
  List *grantees; /* list of RoleSpec nodes */
1941
2324
  bool grant_option; /* grant or revoke grant option */
2325
+ RoleSpec *grantor;
1942
2326
  DropBehavior behavior; /* drop behavior (for REVOKE) */
1943
2327
  } GrantStmt;
1944
2328
 
1945
2329
  /*
1946
- * Note: ObjectWithArgs carries only the types of the input parameters of the
1947
- * function. So it is sufficient to identify an existing function, but it
1948
- * is not enough info to define a function nor to call it.
2330
+ * ObjectWithArgs represents a function/procedure/operator name plus parameter
2331
+ * identification.
2332
+ *
2333
+ * objargs includes only the types of the input parameters of the object.
2334
+ * In some contexts, that will be all we have, and it's enough to look up
2335
+ * objects according to the traditional Postgres rules (i.e., when only input
2336
+ * arguments matter).
2337
+ *
2338
+ * objfuncargs, if not NIL, carries the full specification of the parameter
2339
+ * list, including parameter mode annotations.
2340
+ *
2341
+ * Some grammar productions can set args_unspecified = true instead of
2342
+ * providing parameter info. In this case, lookup will succeed only if
2343
+ * the object name is unique. Note that otherwise, NIL parameter lists
2344
+ * mean zero arguments.
1949
2345
  */
1950
2346
  typedef struct ObjectWithArgs
1951
2347
  {
1952
2348
  NodeTag type;
1953
2349
  List *objname; /* qualified name of function/operator */
1954
- List *objargs; /* list of Typename nodes */
1955
- bool args_unspecified; /* argument list was omitted, so name must
1956
- * be unique (note that objargs == NIL
1957
- * means zero args) */
2350
+ List *objargs; /* list of Typename nodes (input args only) */
2351
+ List *objfuncargs; /* list of FunctionParameter nodes */
2352
+ bool args_unspecified; /* argument list was omitted? */
1958
2353
  } ObjectWithArgs;
1959
2354
 
1960
2355
  /*
@@ -1968,7 +2363,7 @@ typedef struct AccessPriv
1968
2363
  {
1969
2364
  NodeTag type;
1970
2365
  char *priv_name; /* string name of privilege */
1971
- List *cols; /* list of Value strings */
2366
+ List *cols; /* list of String */
1972
2367
  } AccessPriv;
1973
2368
 
1974
2369
  /* ----------------------
@@ -1977,7 +2372,7 @@ typedef struct AccessPriv
1977
2372
  * Note: because of the parsing ambiguity with the GRANT <privileges>
1978
2373
  * statement, granted_roles is a list of AccessPriv; the execution code
1979
2374
  * should complain if any column lists appear. grantee_roles is a list
1980
- * of role names, as Value strings.
2375
+ * of role names, as String values.
1981
2376
  * ----------------------
1982
2377
  */
1983
2378
  typedef struct GrantRoleStmt
@@ -1986,7 +2381,7 @@ typedef struct GrantRoleStmt
1986
2381
  List *granted_roles; /* list of roles to be granted/revoked */
1987
2382
  List *grantee_roles; /* list of member roles to add/delete */
1988
2383
  bool is_grant; /* true = GRANT, false = REVOKE */
1989
- bool admin_opt; /* with admin option */
2384
+ List *opt; /* options e.g. WITH GRANT OPTION */
1990
2385
  RoleSpec *grantor; /* set grantor to other than current role */
1991
2386
  DropBehavior behavior; /* drop behavior (for REVOKE) */
1992
2387
  } GrantRoleStmt;
@@ -2032,7 +2427,7 @@ typedef struct CopyStmt
2032
2427
  * preserve the distinction in VariableSetKind for CreateCommandTag().
2033
2428
  * ----------------------
2034
2429
  */
2035
- typedef enum
2430
+ typedef enum VariableSetKind
2036
2431
  {
2037
2432
  VAR_SET_VALUE, /* SET var = value */
2038
2433
  VAR_SET_DEFAULT, /* SET var TO DEFAULT */
@@ -2078,7 +2473,7 @@ typedef struct CreateStmt
2078
2473
  RangeVar *relation; /* relation to create */
2079
2474
  List *tableElts; /* column definitions (list of ColumnDef) */
2080
2475
  List *inhRelations; /* relations to inherit from (list of
2081
- * inhRelation) */
2476
+ * RangeVar) */
2082
2477
  PartitionBoundSpec *partbound; /* FOR VALUES clause */
2083
2478
  PartitionSpec *partspec; /* PARTITION BY clause */
2084
2479
  TypeName *ofTypename; /* OF typename */
@@ -2154,6 +2549,8 @@ typedef enum ConstrType /* types of constraints */
2154
2549
 
2155
2550
  typedef struct Constraint
2156
2551
  {
2552
+ pg_node_attr(custom_read_write)
2553
+
2157
2554
  NodeTag type;
2158
2555
  ConstrType contype; /* see above */
2159
2556
 
@@ -2170,6 +2567,7 @@ typedef struct Constraint
2170
2567
  char generated_when; /* ALWAYS or BY DEFAULT */
2171
2568
 
2172
2569
  /* Fields used for unique constraints (UNIQUE and PRIMARY KEY): */
2570
+ bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2173
2571
  List *keys; /* String nodes naming referenced key
2174
2572
  * column(s) */
2175
2573
  List *including; /* String nodes naming referenced nonkey
@@ -2195,6 +2593,7 @@ typedef struct Constraint
2195
2593
  char fk_matchtype; /* FULL, PARTIAL, SIMPLE */
2196
2594
  char fk_upd_action; /* ON UPDATE action */
2197
2595
  char fk_del_action; /* ON DELETE action */
2596
+ List *fk_del_set_cols; /* ON DELETE SET NULL/DEFAULT (col1, col2) */
2198
2597
  List *old_conpfeqop; /* pg_constraint.conpfeqop of my former self */
2199
2598
  Oid old_pktable_oid; /* pg_constraint.confrelid of my former
2200
2599
  * self */
@@ -2433,10 +2832,12 @@ typedef struct CreateAmStmt
2433
2832
  typedef struct CreateTrigStmt
2434
2833
  {
2435
2834
  NodeTag type;
2835
+ bool replace; /* replace trigger if already exists */
2836
+ bool isconstraint; /* This is a constraint trigger */
2436
2837
  char *trigname; /* TRIGGER's name */
2437
2838
  RangeVar *relation; /* relation trigger is on */
2438
2839
  List *funcname; /* qual. name of function to call */
2439
- List *args; /* list of (T_String) Values or NIL */
2840
+ List *args; /* list of String or NIL */
2440
2841
  bool row; /* ROW/STATEMENT */
2441
2842
  /* timing uses the TRIGGER_TYPE bits defined in catalog/pg_trigger.h */
2442
2843
  int16 timing; /* BEFORE, AFTER, or INSTEAD */
@@ -2444,7 +2845,6 @@ typedef struct CreateTrigStmt
2444
2845
  int16 events; /* "OR" of INSERT/UPDATE/DELETE/TRUNCATE */
2445
2846
  List *columns; /* column names, or NIL for all columns */
2446
2847
  Node *whenClause; /* qual expression, or NULL if none */
2447
- bool isconstraint; /* This is a constraint trigger */
2448
2848
  /* explicitly named transition data */
2449
2849
  List *transitionRels; /* TriggerTransition nodes, or NIL if none */
2450
2850
  /* The remaining fields are only used for constraint triggers */
@@ -2573,7 +2973,7 @@ typedef struct DefineStmt
2573
2973
  NodeTag type;
2574
2974
  ObjectType kind; /* aggregate, operator, type */
2575
2975
  bool oldstyle; /* hack to signal old CREATE AGG syntax */
2576
- List *defnames; /* qualified name (list of Value strings) */
2976
+ List *defnames; /* qualified name (list of String) */
2577
2977
  List *args; /* a list of TypeName (if needed) */
2578
2978
  List *definition; /* a list of DefElem */
2579
2979
  bool if_not_exists; /* just do nothing if it already exists? */
@@ -2587,7 +2987,7 @@ typedef struct DefineStmt
2587
2987
  typedef struct CreateDomainStmt
2588
2988
  {
2589
2989
  NodeTag type;
2590
- List *domainname; /* qualified name (list of Value strings) */
2990
+ List *domainname; /* qualified name (list of String) */
2591
2991
  TypeName *typeName; /* the base type */
2592
2992
  CollateClause *collClause; /* untransformed COLLATE spec, if any */
2593
2993
  List *constraints; /* constraints (list of Constraint nodes) */
@@ -2600,7 +3000,7 @@ typedef struct CreateDomainStmt
2600
3000
  typedef struct CreateOpClassStmt
2601
3001
  {
2602
3002
  NodeTag type;
2603
- List *opclassname; /* qualified name (list of Value strings) */
3003
+ List *opclassname; /* qualified name (list of String) */
2604
3004
  List *opfamilyname; /* qualified name (ditto); NIL if omitted */
2605
3005
  char *amname; /* name of index AM opclass is for */
2606
3006
  TypeName *datatype; /* datatype of indexed column */
@@ -2632,7 +3032,7 @@ typedef struct CreateOpClassItem
2632
3032
  typedef struct CreateOpFamilyStmt
2633
3033
  {
2634
3034
  NodeTag type;
2635
- List *opfamilyname; /* qualified name (list of Value strings) */
3035
+ List *opfamilyname; /* qualified name (list of String) */
2636
3036
  char *amname; /* name of index AM opfamily is for */
2637
3037
  } CreateOpFamilyStmt;
2638
3038
 
@@ -2643,7 +3043,7 @@ typedef struct CreateOpFamilyStmt
2643
3043
  typedef struct AlterOpFamilyStmt
2644
3044
  {
2645
3045
  NodeTag type;
2646
- List *opfamilyname; /* qualified name (list of Value strings) */
3046
+ List *opfamilyname; /* qualified name (list of String) */
2647
3047
  char *amname; /* name of index AM opfamily is for */
2648
3048
  bool isDrop; /* ADD or DROP the items? */
2649
3049
  List *items; /* List of CreateOpClassItem nodes */
@@ -2713,12 +3113,13 @@ typedef struct SecLabelStmt
2713
3113
  #define CURSOR_OPT_SCROLL 0x0002 /* SCROLL explicitly given */
2714
3114
  #define CURSOR_OPT_NO_SCROLL 0x0004 /* NO SCROLL explicitly given */
2715
3115
  #define CURSOR_OPT_INSENSITIVE 0x0008 /* INSENSITIVE */
2716
- #define CURSOR_OPT_HOLD 0x0010 /* WITH HOLD */
3116
+ #define CURSOR_OPT_ASENSITIVE 0x0010 /* ASENSITIVE */
3117
+ #define CURSOR_OPT_HOLD 0x0020 /* WITH HOLD */
2717
3118
  /* these planner-control flags do not correspond to any SQL grammar: */
2718
- #define CURSOR_OPT_FAST_PLAN 0x0020 /* prefer fast-start plan */
2719
- #define CURSOR_OPT_GENERIC_PLAN 0x0040 /* force use of generic plan */
2720
- #define CURSOR_OPT_CUSTOM_PLAN 0x0080 /* force use of custom plan */
2721
- #define CURSOR_OPT_PARALLEL_OK 0x0100 /* parallel mode OK */
3119
+ #define CURSOR_OPT_FAST_PLAN 0x0100 /* prefer fast-start plan */
3120
+ #define CURSOR_OPT_GENERIC_PLAN 0x0200 /* force use of generic plan */
3121
+ #define CURSOR_OPT_CUSTOM_PLAN 0x0400 /* force use of custom plan */
3122
+ #define CURSOR_OPT_PARALLEL_OK 0x0800 /* parallel mode OK */
2722
3123
 
2723
3124
  typedef struct DeclareCursorStmt
2724
3125
  {
@@ -2790,11 +3191,12 @@ typedef struct IndexStmt
2790
3191
  List *excludeOpNames; /* exclusion operator names, or NIL if none */
2791
3192
  char *idxcomment; /* comment to apply to index, or NULL */
2792
3193
  Oid indexOid; /* OID of an existing index, if any */
2793
- Oid oldNode; /* relfilenode of existing storage, if any */
2794
- SubTransactionId oldCreateSubid; /* rd_createSubid of oldNode */
2795
- SubTransactionId oldFirstRelfilenodeSubid; /* rd_firstRelfilenodeSubid of
2796
- * oldNode */
3194
+ RelFileNumber oldNumber; /* relfilenumber of existing storage, if any */
3195
+ SubTransactionId oldCreateSubid; /* rd_createSubid of oldNumber */
3196
+ SubTransactionId oldFirstRelfilelocatorSubid; /* rd_firstRelfilelocatorSubid
3197
+ * of oldNumber */
2797
3198
  bool unique; /* is index unique? */
3199
+ bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2798
3200
  bool primary; /* is index a primary key? */
2799
3201
  bool isconstraint; /* is it for a pkey/unique constraint? */
2800
3202
  bool deferrable; /* is the constraint DEFERRABLE? */
@@ -2813,14 +3215,30 @@ typedef struct IndexStmt
2813
3215
  typedef struct CreateStatsStmt
2814
3216
  {
2815
3217
  NodeTag type;
2816
- List *defnames; /* qualified name (list of Value strings) */
2817
- List *stat_types; /* stat types (list of Value strings) */
3218
+ List *defnames; /* qualified name (list of String) */
3219
+ List *stat_types; /* stat types (list of String) */
2818
3220
  List *exprs; /* expressions to build statistics on */
2819
3221
  List *relations; /* rels to build stats on (list of RangeVar) */
2820
3222
  char *stxcomment; /* comment to apply to stats, or NULL */
3223
+ bool transformed; /* true when transformStatsStmt is finished */
2821
3224
  bool if_not_exists; /* do nothing if stats name already exists */
2822
3225
  } CreateStatsStmt;
2823
3226
 
3227
+ /*
3228
+ * StatsElem - statistics parameters (used in CREATE STATISTICS)
3229
+ *
3230
+ * For a plain attribute, 'name' is the name of the referenced table column
3231
+ * and 'expr' is NULL. For an expression, 'name' is NULL and 'expr' is the
3232
+ * expression tree.
3233
+ */
3234
+ typedef struct StatsElem
3235
+ {
3236
+ NodeTag type;
3237
+ char *name; /* name of attribute to index, or NULL */
3238
+ Node *expr; /* expression to index, or NULL */
3239
+ } StatsElem;
3240
+
3241
+
2824
3242
  /* ----------------------
2825
3243
  * Alter Statistics Statement
2826
3244
  * ----------------------
@@ -2828,7 +3246,7 @@ typedef struct CreateStatsStmt
2828
3246
  typedef struct AlterStatsStmt
2829
3247
  {
2830
3248
  NodeTag type;
2831
- List *defnames; /* qualified name (list of Value strings) */
3249
+ List *defnames; /* qualified name (list of String) */
2832
3250
  int stxstattarget; /* statistics target */
2833
3251
  bool missing_ok; /* skip error if statistics object is missing */
2834
3252
  } AlterStatsStmt;
@@ -2846,6 +3264,7 @@ typedef struct CreateFunctionStmt
2846
3264
  List *parameters; /* a list of FunctionParameter */
2847
3265
  TypeName *returnType; /* the return type */
2848
3266
  List *options; /* a list of DefElem */
3267
+ Node *sql_body;
2849
3268
  } CreateFunctionStmt;
2850
3269
 
2851
3270
  typedef enum FunctionParameterMode
@@ -2855,7 +3274,9 @@ typedef enum FunctionParameterMode
2855
3274
  FUNC_PARAM_OUT = 'o', /* output only */
2856
3275
  FUNC_PARAM_INOUT = 'b', /* both */
2857
3276
  FUNC_PARAM_VARIADIC = 'v', /* variadic (always input) */
2858
- FUNC_PARAM_TABLE = 't' /* table function output column */
3277
+ FUNC_PARAM_TABLE = 't', /* table function output column */
3278
+ /* this is not used in pg_proc: */
3279
+ FUNC_PARAM_DEFAULT = 'd' /* default; effectively same as IN */
2859
3280
  } FunctionParameterMode;
2860
3281
 
2861
3282
  typedef struct FunctionParameter
@@ -2889,6 +3310,8 @@ typedef struct DoStmt
2889
3310
 
2890
3311
  typedef struct InlineCodeBlock
2891
3312
  {
3313
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3314
+
2892
3315
  NodeTag type;
2893
3316
  char *source_text; /* source text of anonymous code block */
2894
3317
  Oid langOid; /* OID of selected language */
@@ -2898,17 +3321,29 @@ typedef struct InlineCodeBlock
2898
3321
 
2899
3322
  /* ----------------------
2900
3323
  * CALL statement
3324
+ *
3325
+ * OUT-mode arguments are removed from the transformed funcexpr. The outargs
3326
+ * list contains copies of the expressions for all output arguments, in the
3327
+ * order of the procedure's declared arguments. (outargs is never evaluated,
3328
+ * but is useful to the caller as a reference for what to assign to.)
3329
+ * The transformed call state is not relevant in the query jumbling, only the
3330
+ * function call is.
2901
3331
  * ----------------------
2902
3332
  */
2903
3333
  typedef struct CallStmt
2904
3334
  {
2905
3335
  NodeTag type;
2906
3336
  FuncCall *funccall; /* from the parser */
2907
- FuncExpr *funcexpr; /* transformed */
3337
+ /* transformed call, with only input args */
3338
+ FuncExpr *funcexpr pg_node_attr(query_jumble_ignore);
3339
+ /* transformed output-argument expressions */
3340
+ List *outargs pg_node_attr(query_jumble_ignore);
2908
3341
  } CallStmt;
2909
3342
 
2910
3343
  typedef struct CallContext
2911
3344
  {
3345
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3346
+
2912
3347
  NodeTag type;
2913
3348
  bool atomic;
2914
3349
  } CallContext;
@@ -2941,7 +3376,7 @@ typedef struct AlterObjectDependsStmt
2941
3376
  ObjectType objectType; /* OBJECT_FUNCTION, OBJECT_TRIGGER, etc */
2942
3377
  RangeVar *relation; /* in case a table is involved */
2943
3378
  Node *object; /* name of the object */
2944
- Value *extname; /* extension name */
3379
+ String *extname; /* extension name */
2945
3380
  bool remove; /* set true to remove dep rather than add */
2946
3381
  } AlterObjectDependsStmt;
2947
3382
 
@@ -3087,8 +3522,8 @@ typedef struct CompositeTypeStmt
3087
3522
  typedef struct CreateEnumStmt
3088
3523
  {
3089
3524
  NodeTag type;
3090
- List *typeName; /* qualified name (list of Value strings) */
3091
- List *vals; /* enum values (list of Value strings) */
3525
+ List *typeName; /* qualified name (list of String) */
3526
+ List *vals; /* enum values (list of String) */
3092
3527
  } CreateEnumStmt;
3093
3528
 
3094
3529
  /* ----------------------
@@ -3098,7 +3533,7 @@ typedef struct CreateEnumStmt
3098
3533
  typedef struct CreateRangeStmt
3099
3534
  {
3100
3535
  NodeTag type;
3101
- List *typeName; /* qualified name (list of Value strings) */
3536
+ List *typeName; /* qualified name (list of String) */
3102
3537
  List *params; /* range parameters (list of DefElem) */
3103
3538
  } CreateRangeStmt;
3104
3539
 
@@ -3109,7 +3544,7 @@ typedef struct CreateRangeStmt
3109
3544
  typedef struct AlterEnumStmt
3110
3545
  {
3111
3546
  NodeTag type;
3112
- List *typeName; /* qualified name (list of Value strings) */
3547
+ List *typeName; /* qualified name (list of String) */
3113
3548
  char *oldVal; /* old enum value's name, if renaming */
3114
3549
  char *newVal; /* new enum value's name */
3115
3550
  char *newValNeighbor; /* neighboring enum value, if specified */
@@ -3171,6 +3606,12 @@ typedef struct AlterDatabaseStmt
3171
3606
  List *options; /* List of DefElem nodes */
3172
3607
  } AlterDatabaseStmt;
3173
3608
 
3609
+ typedef struct AlterDatabaseRefreshCollStmt
3610
+ {
3611
+ NodeTag type;
3612
+ char *dbname;
3613
+ } AlterDatabaseRefreshCollStmt;
3614
+
3174
3615
  typedef struct AlterDatabaseSetStmt
3175
3616
  {
3176
3617
  NodeTag type;
@@ -3204,18 +3645,12 @@ typedef struct AlterSystemStmt
3204
3645
  * Cluster Statement (support pbrown's cluster index implementation)
3205
3646
  * ----------------------
3206
3647
  */
3207
- typedef enum ClusterOption
3208
- {
3209
- CLUOPT_RECHECK = 1 << 0, /* recheck relation state */
3210
- CLUOPT_VERBOSE = 1 << 1 /* print progress info */
3211
- } ClusterOption;
3212
-
3213
3648
  typedef struct ClusterStmt
3214
3649
  {
3215
3650
  NodeTag type;
3216
3651
  RangeVar *relation; /* relation being indexed, or NULL if all */
3217
3652
  char *indexname; /* original index defined */
3218
- int options; /* OR of ClusterOption flags */
3653
+ List *params; /* list of DefElem nodes */
3219
3654
  } ClusterStmt;
3220
3655
 
3221
3656
  /* ----------------------
@@ -3281,7 +3716,7 @@ typedef struct CreateTableAsStmt
3281
3716
  NodeTag type;
3282
3717
  Node *query; /* the query (see comments above) */
3283
3718
  IntoClause *into; /* destination table */
3284
- ObjectType relkind; /* OBJECT_TABLE or OBJECT_MATVIEW */
3719
+ ObjectType objtype; /* OBJECT_TABLE or OBJECT_MATVIEW */
3285
3720
  bool is_select_into; /* it was written as SELECT INTO */
3286
3721
  bool if_not_exists; /* just do nothing if it already exists? */
3287
3722
  } CreateTableAsStmt;
@@ -3353,11 +3788,6 @@ typedef struct ConstraintsSetStmt
3353
3788
  * REINDEX Statement
3354
3789
  * ----------------------
3355
3790
  */
3356
-
3357
- /* Reindex options */
3358
- #define REINDEXOPT_VERBOSE (1 << 0) /* print progress info */
3359
- #define REINDEXOPT_REPORT_PROGRESS (1 << 1) /* report pgstat progress */
3360
-
3361
3791
  typedef enum ReindexObjectType
3362
3792
  {
3363
3793
  REINDEX_OBJECT_INDEX, /* index */
@@ -3374,8 +3804,7 @@ typedef struct ReindexStmt
3374
3804
  * etc. */
3375
3805
  RangeVar *relation; /* Table or index to reindex */
3376
3806
  const char *name; /* name of database to reindex */
3377
- int options; /* Reindex options flags */
3378
- bool concurrent; /* reindex concurrently? */
3807
+ List *params; /* list of DefElem nodes */
3379
3808
  } ReindexStmt;
3380
3809
 
3381
3810
  /* ----------------------
@@ -3483,7 +3912,7 @@ typedef struct ReassignOwnedStmt
3483
3912
  typedef struct AlterTSDictionaryStmt
3484
3913
  {
3485
3914
  NodeTag type;
3486
- List *dictname; /* qualified name (list of Value strings) */
3915
+ List *dictname; /* qualified name (list of String) */
3487
3916
  List *options; /* List of DefElem nodes */
3488
3917
  } AlterTSDictionaryStmt;
3489
3918
 
@@ -3503,29 +3932,64 @@ typedef struct AlterTSConfigurationStmt
3503
3932
  {
3504
3933
  NodeTag type;
3505
3934
  AlterTSConfigType kind; /* ALTER_TSCONFIG_ADD_MAPPING, etc */
3506
- List *cfgname; /* qualified name (list of Value strings) */
3935
+ List *cfgname; /* qualified name (list of String) */
3507
3936
 
3508
3937
  /*
3509
3938
  * dicts will be non-NIL if ADD/ALTER MAPPING was specified. If dicts is
3510
3939
  * NIL, but tokentype isn't, DROP MAPPING was specified.
3511
3940
  */
3512
- List *tokentype; /* list of Value strings */
3513
- List *dicts; /* list of list of Value strings */
3941
+ List *tokentype; /* list of String */
3942
+ List *dicts; /* list of list of String */
3514
3943
  bool override; /* if true - remove old variant */
3515
3944
  bool replace; /* if true - replace dictionary by another */
3516
3945
  bool missing_ok; /* for DROP - skip error if missing? */
3517
3946
  } AlterTSConfigurationStmt;
3518
3947
 
3948
+ typedef struct PublicationTable
3949
+ {
3950
+ NodeTag type;
3951
+ RangeVar *relation; /* relation to be published */
3952
+ Node *whereClause; /* qualifications */
3953
+ List *columns; /* List of columns in a publication table */
3954
+ } PublicationTable;
3955
+
3956
+ /*
3957
+ * Publication object type
3958
+ */
3959
+ typedef enum PublicationObjSpecType
3960
+ {
3961
+ PUBLICATIONOBJ_TABLE, /* A table */
3962
+ PUBLICATIONOBJ_TABLES_IN_SCHEMA, /* All tables in schema */
3963
+ PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA, /* All tables in first element of
3964
+ * search_path */
3965
+ PUBLICATIONOBJ_CONTINUATION /* Continuation of previous type */
3966
+ } PublicationObjSpecType;
3967
+
3968
+ typedef struct PublicationObjSpec
3969
+ {
3970
+ NodeTag type;
3971
+ PublicationObjSpecType pubobjtype; /* type of this publication object */
3972
+ char *name;
3973
+ PublicationTable *pubtable;
3974
+ int location; /* token location, or -1 if unknown */
3975
+ } PublicationObjSpec;
3519
3976
 
3520
3977
  typedef struct CreatePublicationStmt
3521
3978
  {
3522
3979
  NodeTag type;
3523
3980
  char *pubname; /* Name of the publication */
3524
3981
  List *options; /* List of DefElem nodes */
3525
- List *tables; /* Optional list of tables to add */
3982
+ List *pubobjects; /* Optional list of publication objects */
3526
3983
  bool for_all_tables; /* Special publication for all tables in db */
3527
3984
  } CreatePublicationStmt;
3528
3985
 
3986
+ typedef enum AlterPublicationAction
3987
+ {
3988
+ AP_AddObjects, /* add objects to publication */
3989
+ AP_DropObjects, /* remove objects from publication */
3990
+ AP_SetObjects /* set list of objects */
3991
+ } AlterPublicationAction;
3992
+
3529
3993
  typedef struct AlterPublicationStmt
3530
3994
  {
3531
3995
  NodeTag type;
@@ -3534,10 +3998,14 @@ typedef struct AlterPublicationStmt
3534
3998
  /* parameters used for ALTER PUBLICATION ... WITH */
3535
3999
  List *options; /* List of DefElem nodes */
3536
4000
 
3537
- /* parameters used for ALTER PUBLICATION ... ADD/DROP TABLE */
3538
- List *tables; /* List of tables to add/drop */
4001
+ /*
4002
+ * Parameters used for ALTER PUBLICATION ... ADD/DROP/SET publication
4003
+ * objects.
4004
+ */
4005
+ List *pubobjects; /* Optional list of publication objects */
3539
4006
  bool for_all_tables; /* Special publication for all tables in db */
3540
- DefElemAction tableAction; /* What action to perform with the tables */
4007
+ AlterPublicationAction action; /* What action to perform with the given
4008
+ * objects */
3541
4009
  } AlterPublicationStmt;
3542
4010
 
3543
4011
  typedef struct CreateSubscriptionStmt
@@ -3553,9 +4021,12 @@ typedef enum AlterSubscriptionType
3553
4021
  {
3554
4022
  ALTER_SUBSCRIPTION_OPTIONS,
3555
4023
  ALTER_SUBSCRIPTION_CONNECTION,
3556
- ALTER_SUBSCRIPTION_PUBLICATION,
4024
+ ALTER_SUBSCRIPTION_SET_PUBLICATION,
4025
+ ALTER_SUBSCRIPTION_ADD_PUBLICATION,
4026
+ ALTER_SUBSCRIPTION_DROP_PUBLICATION,
3557
4027
  ALTER_SUBSCRIPTION_REFRESH,
3558
- ALTER_SUBSCRIPTION_ENABLED
4028
+ ALTER_SUBSCRIPTION_ENABLED,
4029
+ ALTER_SUBSCRIPTION_SKIP
3559
4030
  } AlterSubscriptionType;
3560
4031
 
3561
4032
  typedef struct AlterSubscriptionStmt