pg_query 4.2.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +6 -8
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/extconf.rb +14 -4
  6. data/ext/pg_query/include/pg_query.h +27 -3
  7. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +1 -1
  29. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
  30. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  31. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  32. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  34. data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
  36. data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
  37. data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
  38. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  39. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  40. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +58 -98
  42. data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
  43. data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
  44. data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
  45. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
  46. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  47. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
  48. data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
  49. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
  50. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
  52. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  53. data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
  54. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
  58. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
  60. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  82. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +1 -1
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
  125. data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
  126. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
  127. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
  129. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  130. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +4 -4
  132. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
  133. data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
  134. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
  135. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  136. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
  137. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  138. data/ext/pg_query/include/postgres/common/int.h +437 -0
  139. data/ext/pg_query/include/{common → postgres/common}/keywords.h +1 -1
  140. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  141. data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
  142. data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
  143. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  144. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  145. data/ext/pg_query/include/{common → postgres/common}/string.h +5 -3
  146. data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
  147. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
  148. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  149. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  150. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +11 -4
  151. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  152. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  153. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  154. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +34 -17
  155. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
  156. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
  157. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
  158. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  159. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  160. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +21 -2
  161. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  162. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
  163. data/ext/pg_query/include/postgres/gram.h +1127 -0
  164. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  165. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +2 -2
  166. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  167. data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
  168. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
  169. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  170. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
  171. data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
  172. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  173. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
  181. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  182. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  183. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +35 -18
  184. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  185. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
  186. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
  192. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  193. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +96 -511
  195. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  196. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +377 -139
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  203. data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
  204. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  205. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  206. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/value.h +12 -2
  208. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
  214. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
  215. data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
  216. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  224. data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
  225. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  226. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  227. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +1 -1
  228. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  229. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +158 -218
  230. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
  231. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  232. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
  233. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  234. data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
  235. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
  236. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
  237. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  238. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +1 -1
  239. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
  240. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
  241. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
  242. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  245. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +1 -1
  248. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  249. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  250. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  251. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  252. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +62 -25
  253. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  254. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  255. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  256. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  257. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  258. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  259. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  260. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  261. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  264. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  268. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  269. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  270. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  275. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  276. data/ext/pg_query/include/{port.h → postgres/port.h} +42 -75
  277. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  278. data/ext/pg_query/include/postgres/postgres.h +579 -0
  279. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  280. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +1 -4
  281. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  285. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
  289. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
  290. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
  291. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
  292. data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
  293. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  294. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
  295. data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
  296. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
  297. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
  298. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
  299. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
  300. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  301. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  304. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +1 -1
  305. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
  306. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  307. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
  308. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
  309. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
  310. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
  311. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
  312. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
  313. data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
  314. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -2
  315. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  316. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  317. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +94 -57
  318. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
  320. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
  321. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
  323. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
  324. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  325. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  326. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +1 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
  329. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
  330. data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
  331. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  332. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
  333. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
  335. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
  336. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
  337. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  338. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  339. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +3 -3
  340. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  341. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
  342. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
  343. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
  344. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
  345. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
  346. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  347. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
  348. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -1
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
  354. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
  355. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
  356. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  357. data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
  358. data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
  359. data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
  360. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
  361. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
  362. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  363. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  364. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +41 -21
  365. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  367. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
  368. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  369. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  370. data/ext/pg_query/include/{utils → postgres/utils}/float.h +7 -6
  371. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
  372. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
  374. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
  375. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  376. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
  377. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
  378. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
  379. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
  381. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  382. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
  383. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  384. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  385. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +20 -5
  386. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
  387. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  388. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
  389. data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
  390. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
  391. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
  392. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
  393. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  395. data/ext/pg_query/include/{utils → postgres/utils}/regproc.h +3 -3
  396. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
  397. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
  398. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  399. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  400. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +6 -1
  401. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  402. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
  403. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
  405. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
  407. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
  408. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
  409. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
  411. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
  412. data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
  413. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
  414. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
  415. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  416. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  417. data/ext/pg_query/pg_query.c +10 -1
  418. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  419. data/ext/pg_query/pg_query_deparse.c +1 -10635
  420. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  421. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  422. data/ext/pg_query/pg_query_internal.h +1 -1
  423. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  424. data/ext/pg_query/pg_query_normalize.c +1 -1
  425. data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
  426. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  427. data/ext/pg_query/pg_query_parse.c +47 -5
  428. data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
  429. data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
  430. data/ext/pg_query/pg_query_ruby.c +5 -0
  431. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  432. data/ext/pg_query/pg_query_scan.c +1 -1
  433. data/ext/pg_query/pg_query_split.c +3 -3
  434. data/ext/pg_query/postgres_deparse.c +11067 -0
  435. data/ext/pg_query/postgres_deparse.h +9 -0
  436. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  437. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  438. data/ext/pg_query/src_backend_commands_define.c +1 -1
  439. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  440. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  441. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  442. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  443. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  444. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  445. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  446. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  447. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  448. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  449. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  450. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  451. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  452. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  453. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  454. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  455. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  456. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  457. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  458. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  459. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  460. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  461. data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
  462. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  463. data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
  464. data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
  465. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  466. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  467. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  468. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  469. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  470. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  471. data/ext/pg_query/src_common_encnames.c +4 -1
  472. data/ext/pg_query/src_common_hashfn.c +1 -1
  473. data/ext/pg_query/src_common_keywords.c +1 -1
  474. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  475. data/ext/pg_query/src_common_kwlookup.c +1 -1
  476. data/ext/pg_query/src_common_psprintf.c +1 -1
  477. data/ext/pg_query/src_common_stringinfo.c +4 -4
  478. data/ext/pg_query/src_common_wchar.c +9 -8
  479. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  480. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  481. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  482. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  483. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  484. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  485. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  486. data/ext/pg_query/src_port_pg_bitutils.c +79 -5
  487. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  488. data/ext/pg_query/src_port_snprintf.c +6 -10
  489. data/ext/pg_query/src_port_strerror.c +1 -1
  490. data/ext/pg_query/src_port_strlcpy.c +79 -0
  491. data/lib/pg_query/fingerprint.rb +2 -3
  492. data/lib/pg_query/node.rb +16 -11
  493. data/lib/pg_query/parse.rb +1 -1
  494. data/lib/pg_query/pg_query_pb.rb +166 -3191
  495. data/lib/pg_query/treewalker.rb +23 -5
  496. data/lib/pg_query/version.rb +1 -1
  497. metadata +432 -380
  498. data/ext/pg_query/guc-file.c +0 -0
  499. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  500. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  501. data/ext/pg_query/include/commands/variable.h +0 -38
  502. data/ext/pg_query/include/common/ip.h +0 -31
  503. data/ext/pg_query/include/getaddrinfo.h +0 -162
  504. data/ext/pg_query/include/kwlist_d.h +0 -1095
  505. data/ext/pg_query/include/parser/gram.h +0 -1101
  506. data/ext/pg_query/include/pg_config_os.h +0 -8
  507. data/ext/pg_query/include/portability/instr_time.h +0 -256
  508. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  509. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  510. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  511. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  512. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  513. data/ext/pg_query/include/utils/dynahash.h +0 -20
  514. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  515. data/ext/pg_query/include/utils/pidfile.h +0 -56
  516. data/ext/pg_query/include/utils/ps_status.h +0 -25
  517. data/ext/pg_query/include/utils/rls.h +0 -50
  518. data/ext/pg_query/include/utils/tzparser.h +0 -39
  519. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  520. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  521. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  522. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  523. data/ext/pg_query/src_common_pg_prng.c +0 -152
  524. data/ext/pg_query/src_common_string.c +0 -92
  525. data/ext/pg_query/src_port_pgsleep.c +0 -69
  526. data/ext/pg_query/src_port_strnlen.c +0 -39
  527. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  528. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
  529. /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
  530. /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
  531. /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.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-2022, 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"
@@ -72,12 +73,12 @@ typedef enum SetQuantifier
72
73
 
73
74
  /*
74
75
  * Grantable rights are encoded so that we can OR them together in a bitmask.
75
- * The present representation of AclItem limits us to 16 distinct rights,
76
- * 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.
77
78
  *
78
79
  * Caution: changing these codes breaks stored ACLs, hence forces initdb.
79
80
  */
80
- typedef uint32 AclMode; /* a bitmask of privilege bits */
81
+ typedef uint64 AclMode; /* a bitmask of privilege bits */
81
82
 
82
83
  #define ACL_INSERT (1<<0) /* for relations */
83
84
  #define ACL_SELECT (1<<1)
@@ -87,8 +88,7 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
87
88
  #define ACL_REFERENCES (1<<5)
88
89
  #define ACL_TRIGGER (1<<6)
89
90
  #define ACL_EXECUTE (1<<7) /* for functions */
90
- #define ACL_USAGE (1<<8) /* for languages, namespaces, FDWs, and
91
- * servers */
91
+ #define ACL_USAGE (1<<8) /* for various object types */
92
92
  #define ACL_CREATE (1<<9) /* for namespaces and databases */
93
93
  #define ACL_CREATE_TEMP (1<<10) /* for databases */
94
94
  #define ACL_CONNECT (1<<11) /* for databases */
@@ -114,6 +114,11 @@ typedef uint32 AclMode; /* a bitmask of privilege bits */
114
114
  *
115
115
  * Planning converts a Query tree into a Plan tree headed by a PlannedStmt
116
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).
117
122
  */
118
123
  typedef struct Query
119
124
  {
@@ -121,41 +126,69 @@ typedef struct Query
121
126
 
122
127
  CmdType commandType; /* select|insert|update|delete|merge|utility */
123
128
 
124
- QuerySource querySource; /* where did I come from? */
129
+ /* where did I come from? */
130
+ QuerySource querySource pg_node_attr(query_jumble_ignore);
125
131
 
126
- 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));
127
138
 
128
- 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);
129
141
 
130
142
  Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
131
143
 
132
- int resultRelation; /* rtable index of target relation for
133
- * INSERT/UPDATE/DELETE/MERGE; 0 for SELECT */
134
-
135
- bool hasAggs; /* has aggregates in tlist or havingQual */
136
- bool hasWindowFuncs; /* has window functions in tlist */
137
- bool hasTargetSRFs; /* has set-returning functions in tlist */
138
- bool hasSubLinks; /* has subquery SubLink */
139
- bool hasDistinctOn; /* distinctClause is from DISTINCT ON */
140
- bool hasRecursive; /* WITH RECURSIVE was specified */
141
- bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */
142
- bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */
143
- bool hasRowSecurity; /* rewriter has applied some RLS policy */
144
-
145
- bool isReturn; /* is a RETURN statement */
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);
146
171
 
147
172
  List *cteList; /* WITH list (of CommonTableExpr's) */
148
173
 
149
174
  List *rtable; /* list of range table entries */
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);
150
181
  FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
151
182
  * also USING clause for MERGE */
152
183
 
153
184
  List *mergeActionList; /* list of actions for MERGE (only) */
154
- bool mergeUseOuterJoin; /* whether to use outer join */
185
+ /* whether to use outer join */
186
+ bool mergeUseOuterJoin pg_node_attr(query_jumble_ignore);
155
187
 
156
188
  List *targetList; /* target list (of TargetEntry) */
157
189
 
158
- OverridingKind override; /* OVERRIDING clause */
190
+ /* OVERRIDING clause */
191
+ OverridingKind override pg_node_attr(query_jumble_ignore);
159
192
 
160
193
  OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
161
194
 
@@ -183,11 +216,14 @@ typedef struct Query
183
216
  Node *setOperations; /* set-operation tree if this is top level of
184
217
  * a UNION/INTERSECT/EXCEPT query */
185
218
 
186
- List *constraintDeps; /* a list of pg_constraint OIDs that the query
187
- * 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);
188
224
 
189
- List *withCheckOptions; /* a list of WithCheckOption's (added
190
- * during rewrite) */
225
+ /* a list of WithCheckOption's (added during rewrite) */
226
+ List *withCheckOptions pg_node_attr(query_jumble_ignore);
191
227
 
192
228
  /*
193
229
  * The following two fields identify the portion of the source text string
@@ -195,8 +231,10 @@ typedef struct Query
195
231
  * Queries, not in sub-queries. When not set, they might both be zero, or
196
232
  * both be -1 meaning "unknown".
197
233
  */
198
- int stmt_location; /* start location, or -1 if unknown */
199
- 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);
200
238
  } Query;
201
239
 
202
240
 
@@ -287,6 +325,8 @@ typedef enum A_Expr_Kind
287
325
 
288
326
  typedef struct A_Expr
289
327
  {
328
+ pg_node_attr(custom_read_write)
329
+
290
330
  NodeTag type;
291
331
  A_Expr_Kind kind; /* see above */
292
332
  List *name; /* possibly-qualified name of operator */
@@ -297,24 +337,26 @@ typedef struct A_Expr
297
337
 
298
338
  /*
299
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.
300
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
+
301
354
  typedef struct A_Const
302
355
  {
303
- NodeTag type;
356
+ pg_node_attr(custom_copy_equal, custom_read_write, custom_query_jumble)
304
357
 
305
- /*
306
- * Value nodes are inline for performance. You can treat 'val' as a node,
307
- * as in IsA(&val, Integer). 'val' is not valid if isnull is true.
308
- */
309
- union ValUnion
310
- {
311
- Node node;
312
- Integer ival;
313
- Float fval;
314
- Boolean boolval;
315
- String sval;
316
- BitString bsval;
317
- } val;
358
+ NodeTag type;
359
+ union ValUnion val;
318
360
  bool isnull; /* SQL NULL constant */
319
361
  int location; /* token location, or -1 if unknown */
320
362
  } A_Const;
@@ -683,6 +725,7 @@ typedef struct ColumnDef
683
725
  bool is_not_null; /* NOT NULL constraint specified? */
684
726
  bool is_from_type; /* column definition came from table type */
685
727
  char storage; /* attstorage setting, or 0 for default */
728
+ char *storage_name; /* attstorage setting name or NULL for default */
686
729
  Node *raw_default; /* default value (untransformed parse tree) */
687
730
  Node *cooked_default; /* default value (transformed expr tree) */
688
731
  char identity; /* attidentity setting */
@@ -796,6 +839,7 @@ typedef struct XmlSerialize
796
839
  XmlOptionType xmloption; /* DOCUMENT or CONTENT */
797
840
  Node *expr;
798
841
  TypeName *typeName;
842
+ bool indent; /* [NO] INDENT */
799
843
  int location; /* token location, or -1 if unknown */
800
844
  } XmlSerialize;
801
845
 
@@ -817,6 +861,13 @@ typedef struct PartitionElem
817
861
  int location; /* token location, or -1 if unknown */
818
862
  } PartitionElem;
819
863
 
864
+ typedef enum PartitionStrategy
865
+ {
866
+ PARTITION_STRATEGY_LIST = 'l',
867
+ PARTITION_STRATEGY_RANGE = 'r',
868
+ PARTITION_STRATEGY_HASH = 'h'
869
+ } PartitionStrategy;
870
+
820
871
  /*
821
872
  * PartitionSpec - parse-time representation of a partition key specification
822
873
  *
@@ -825,17 +876,11 @@ typedef struct PartitionElem
825
876
  typedef struct PartitionSpec
826
877
  {
827
878
  NodeTag type;
828
- char *strategy; /* partitioning strategy ('hash', 'list' or
829
- * 'range') */
879
+ PartitionStrategy strategy;
830
880
  List *partParams; /* List of PartitionElems */
831
881
  int location; /* token location, or -1 if unknown */
832
882
  } PartitionSpec;
833
883
 
834
- /* Internal codes for partitioning strategies */
835
- #define PARTITION_STRATEGY_HASH 'h'
836
- #define PARTITION_STRATEGY_LIST 'l'
837
- #define PARTITION_STRATEGY_RANGE 'r'
838
-
839
884
  /*
840
885
  * PartitionBoundSpec - a partition bound specification
841
886
  *
@@ -955,37 +1000,6 @@ typedef struct PartitionCmd
955
1000
  * control visibility. But it is needed by ruleutils.c to determine
956
1001
  * whether RTEs should be shown in decompiled queries.
957
1002
  *
958
- * requiredPerms and checkAsUser specify run-time access permissions
959
- * checks to be performed at query startup. The user must have *all*
960
- * of the permissions that are OR'd together in requiredPerms (zero
961
- * indicates no permissions checking). If checkAsUser is not zero,
962
- * then do the permissions checks using the access rights of that user,
963
- * not the current effective user ID. (This allows rules to act as
964
- * setuid gateways.) Permissions checks only apply to RELATION RTEs.
965
- *
966
- * For SELECT/INSERT/UPDATE permissions, if the user doesn't have
967
- * table-wide permissions then it is sufficient to have the permissions
968
- * on all columns identified in selectedCols (for SELECT) and/or
969
- * insertedCols and/or updatedCols (INSERT with ON CONFLICT DO UPDATE may
970
- * have all 3). selectedCols, insertedCols and updatedCols are bitmapsets,
971
- * which cannot have negative integer members, so we subtract
972
- * FirstLowInvalidHeapAttributeNumber from column numbers before storing
973
- * them in these fields. A whole-row Var reference is represented by
974
- * setting the bit for InvalidAttrNumber.
975
- *
976
- * updatedCols is also used in some other places, for example, to determine
977
- * which triggers to fire and in FDWs to know which changed columns they
978
- * need to ship off.
979
- *
980
- * Generated columns that are caused to be updated by an update to a base
981
- * column are listed in extraUpdatedCols. This is not considered for
982
- * permission checking, but it is useful in those places that want to know
983
- * the full set of columns being updated as opposed to only the ones the
984
- * user explicitly mentioned in the query. (There is currently no need for
985
- * an extraInsertedCols, but it could exist.) Note that extraUpdatedCols
986
- * is populated during query rewrite, NOT in the parser, since generated
987
- * columns could be added after a rule has been parsed and stored.
988
- *
989
1003
  * securityQuals is a list of security barrier quals (boolean expressions),
990
1004
  * to be tested in the listed order before returning a row from the
991
1005
  * relation. It is always NIL in parser output. Entries are added by the
@@ -1011,6 +1025,8 @@ typedef enum RTEKind
1011
1025
 
1012
1026
  typedef struct RangeTblEntry
1013
1027
  {
1028
+ pg_node_attr(custom_read_write, custom_query_jumble)
1029
+
1014
1030
  NodeTag type;
1015
1031
 
1016
1032
  RTEKind rtekind; /* see above */
@@ -1024,11 +1040,6 @@ typedef struct RangeTblEntry
1024
1040
  /*
1025
1041
  * Fields valid for a plain relation RTE (else zero):
1026
1042
  *
1027
- * As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
1028
- * that the tuple format of the tuplestore is the same as the referenced
1029
- * relation. This allows plans referencing AFTER trigger transition
1030
- * tables to be invalidated if the underlying table is altered.
1031
- *
1032
1043
  * rellockmode is really LOCKMODE, but it's declared int to avoid having
1033
1044
  * to include lock-related headers here. It must be RowExclusiveLock if
1034
1045
  * the RTE is an INSERT/UPDATE/DELETE/MERGE target, else RowShareLock if
@@ -1039,11 +1050,29 @@ typedef struct RangeTblEntry
1039
1050
  * current query; this happens if a DO ALSO rule simply scans the original
1040
1051
  * target table. We leave such RTEs with their original lockmode so as to
1041
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.
1042
1070
  */
1043
1071
  Oid relid; /* OID of the relation */
1044
1072
  char relkind; /* relation kind (see pg_class.relkind) */
1045
1073
  int rellockmode; /* lock level that query requires on the rel */
1046
1074
  struct TableSampleClause *tablesample; /* sampling info, or NULL */
1075
+ Index perminfoindex;
1047
1076
 
1048
1077
  /*
1049
1078
  * Fields valid for a subquery RTE (else NULL):
@@ -1067,6 +1096,14 @@ typedef struct RangeTblEntry
1067
1096
  * alias Vars are generated only for merged columns). We keep these
1068
1097
  * entries only because they're needed in expandRTE() and similar code.
1069
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
+ *
1070
1107
  * Within a Query loaded from a stored rule, it is possible for non-merged
1071
1108
  * joinaliasvars items to be null pointers, which are placeholders for
1072
1109
  * (necessarily unreferenced) columns dropped since the rule was made.
@@ -1163,14 +1200,54 @@ typedef struct RangeTblEntry
1163
1200
  bool lateral; /* subquery, function, or values is LATERAL? */
1164
1201
  bool inh; /* inheritance requested? */
1165
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? */
1166
1245
  AclMode requiredPerms; /* bitmask of required access permissions */
1167
1246
  Oid checkAsUser; /* if valid, check access as this role */
1168
1247
  Bitmapset *selectedCols; /* columns needing SELECT permission */
1169
1248
  Bitmapset *insertedCols; /* columns needing INSERT permission */
1170
1249
  Bitmapset *updatedCols; /* columns needing UPDATE permission */
1171
- Bitmapset *extraUpdatedCols; /* generated columns being updated */
1172
- List *securityQuals; /* security barrier quals to apply, if any */
1173
- } RangeTblEntry;
1250
+ } RTEPermissionInfo;
1174
1251
 
1175
1252
  /*
1176
1253
  * RangeTblFunction -
@@ -1187,20 +1264,29 @@ typedef struct RangeTblEntry
1187
1264
  * time. We do however remember how many columns we thought the type had
1188
1265
  * (including dropped columns!), so that we can successfully ignore any
1189
1266
  * columns added after the query was parsed.
1267
+ *
1268
+ * The query jumbling only needs to track the function expression.
1190
1269
  */
1191
1270
  typedef struct RangeTblFunction
1192
1271
  {
1193
1272
  NodeTag type;
1194
1273
 
1195
1274
  Node *funcexpr; /* expression tree for func call */
1196
- 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);
1197
1277
  /* These fields record the contents of a column definition list, if any: */
1198
- List *funccolnames; /* column names (list of String) */
1199
- List *funccoltypes; /* OID list of column type OIDs */
1200
- List *funccoltypmods; /* integer list of column typmods */
1201
- 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
+
1202
1287
  /* This is set during planning for use by the executor: */
1203
- 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);
1204
1290
  } RangeTblFunction;
1205
1291
 
1206
1292
  /*
@@ -1307,7 +1393,8 @@ typedef struct SortGroupClause
1307
1393
  Oid eqop; /* the equality operator ('=' op) */
1308
1394
  Oid sortop; /* the ordering operator ('<' op), or 0 */
1309
1395
  bool nulls_first; /* do NULLs come before normal values? */
1310
- bool hashable; /* can eqop be implemented by hashing? */
1396
+ /* can eqop be implemented by hashing? */
1397
+ bool hashable pg_node_attr(query_jumble_ignore);
1311
1398
  } SortGroupClause;
1312
1399
 
1313
1400
  /*
@@ -1372,7 +1459,7 @@ typedef enum GroupingSetKind
1372
1459
  typedef struct GroupingSet
1373
1460
  {
1374
1461
  NodeTag type;
1375
- GroupingSetKind kind;
1462
+ GroupingSetKind kind pg_node_attr(query_jumble_ignore);
1376
1463
  List *content;
1377
1464
  int location;
1378
1465
  } GroupingSet;
@@ -1393,25 +1480,38 @@ typedef struct GroupingSet
1393
1480
  * When refname isn't null, the partitionClause is always copied from there;
1394
1481
  * the orderClause might or might not be copied (see copiedOrder); the framing
1395
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.
1396
1486
  */
1397
1487
  typedef struct WindowClause
1398
1488
  {
1399
1489
  NodeTag type;
1400
- char *name; /* window name (NULL in an OVER clause) */
1401
- 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);
1402
1494
  List *partitionClause; /* PARTITION BY list */
1403
- List *orderClause; /* ORDER BY list */
1495
+ /* ORDER BY list */
1496
+ List *orderClause;
1404
1497
  int frameOptions; /* frame_clause options, see WindowDef */
1405
1498
  Node *startOffset; /* expression for starting bound, if any */
1406
1499
  Node *endOffset; /* expression for ending bound, if any */
1407
- List *runCondition; /* qual to help short-circuit execution */
1408
- Oid startInRangeFunc; /* in_range function for startOffset */
1409
- Oid endInRangeFunc; /* in_range function for endOffset */
1410
- Oid inRangeColl; /* collation for in_range tests */
1411
- bool inRangeAsc; /* use ASC sort order for in_range tests? */
1412
- 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);
1413
1512
  Index winref; /* ID referenced by window functions */
1414
- bool copiedOrder; /* did we copy orderClause from refname? */
1513
+ /* did we copy orderClause from refname? */
1514
+ bool copiedOrder pg_node_attr(query_jumble_ignore);
1415
1515
  } WindowClause;
1416
1516
 
1417
1517
  /*
@@ -1521,22 +1621,37 @@ typedef struct CTECycleClause
1521
1621
  typedef struct CommonTableExpr
1522
1622
  {
1523
1623
  NodeTag type;
1524
- char *ctename; /* query name (never qualified) */
1525
- 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);
1526
1632
  CTEMaterialize ctematerialized; /* is this an optimization fence? */
1527
1633
  /* SelectStmt/InsertStmt/etc before parse analysis, Query afterwards: */
1528
1634
  Node *ctequery; /* the CTE's subquery */
1529
- CTESearchClause *search_clause;
1530
- CTECycleClause *cycle_clause;
1635
+ CTESearchClause *search_clause pg_node_attr(query_jumble_ignore);
1636
+ CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore);
1531
1637
  int location; /* token location, or -1 if unknown */
1532
1638
  /* These fields are set during parse analysis: */
1533
- bool cterecursive; /* is this CTE actually recursive? */
1534
- int cterefcount; /* number of RTEs referencing this CTE
1535
- * (excluding internal self-references) */
1536
- List *ctecolnames; /* list of output column names */
1537
- List *ctecoltypes; /* OID list of output column type OIDs */
1538
- List *ctecoltypmods; /* integer list of output column typmods */
1539
- 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);
1540
1655
  } CommonTableExpr;
1541
1656
 
1542
1657
  /* Convenience macro to get the output tlist of a CTE's query */
@@ -1573,10 +1688,12 @@ typedef struct MergeAction
1573
1688
  NodeTag type;
1574
1689
  bool matched; /* true=MATCHED, false=NOT MATCHED */
1575
1690
  CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
1576
- OverridingKind override; /* OVERRIDING clause */
1691
+ /* OVERRIDING clause */
1692
+ OverridingKind override pg_node_attr(query_jumble_ignore);
1577
1693
  Node *qual; /* transformed WHEN conditions */
1578
1694
  List *targetList; /* the target list (of TargetEntry) */
1579
- List *updateColnos; /* target attribute numbers of an UPDATE */
1695
+ /* target attribute numbers of an UPDATE */
1696
+ List *updateColnos pg_node_attr(query_jumble_ignore);
1580
1697
  } MergeAction;
1581
1698
 
1582
1699
  /*
@@ -1595,6 +1712,113 @@ typedef struct TriggerTransition
1595
1712
  bool isTable;
1596
1713
  } TriggerTransition;
1597
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
+
1598
1822
  /*****************************************************************************
1599
1823
  * Raw Grammar Output Statements
1600
1824
  *****************************************************************************/
@@ -1610,9 +1834,14 @@ typedef struct TriggerTransition
1610
1834
  *
1611
1835
  * stmt_location/stmt_len identify the portion of the source text string
1612
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.
1613
1840
  */
1614
1841
  typedef struct RawStmt
1615
1842
  {
1843
+ pg_node_attr(no_query_jumble)
1844
+
1616
1845
  NodeTag type;
1617
1846
  Node *stmt; /* raw parse tree */
1618
1847
  int stmt_location; /* start location, or -1 if unknown */
@@ -1785,11 +2014,15 @@ typedef struct SetOperationStmt
1785
2014
  Node *rarg; /* right child */
1786
2015
  /* Eventually add fields for CORRESPONDING spec here */
1787
2016
 
1788
- /* Fields derived during parse analysis: */
1789
- List *colTypes; /* OID list of output column type OIDs */
1790
- List *colTypmods; /* integer list of output column typmods */
1791
- List *colCollations; /* OID list of output column collation OIDs */
1792
- 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);
1793
2026
  /* groupClauses is NIL if UNION ALL, but must be set otherwise */
1794
2027
  } SetOperationStmt;
1795
2028
 
@@ -1938,7 +2171,6 @@ typedef struct AlterTableStmt
1938
2171
  typedef enum AlterTableType
1939
2172
  {
1940
2173
  AT_AddColumn, /* add column */
1941
- AT_AddColumnRecurse, /* internal to commands/tablecmds.c */
1942
2174
  AT_AddColumnToView, /* implicitly via CREATE OR REPLACE VIEW */
1943
2175
  AT_ColumnDefault, /* alter column default */
1944
2176
  AT_CookedColumnDefault, /* add a pre-cooked column default */
@@ -1952,19 +2184,15 @@ typedef enum AlterTableType
1952
2184
  AT_SetStorage, /* alter column set storage */
1953
2185
  AT_SetCompression, /* alter column set compression */
1954
2186
  AT_DropColumn, /* drop column */
1955
- AT_DropColumnRecurse, /* internal to commands/tablecmds.c */
1956
2187
  AT_AddIndex, /* add index */
1957
2188
  AT_ReAddIndex, /* internal to commands/tablecmds.c */
1958
2189
  AT_AddConstraint, /* add constraint */
1959
- AT_AddConstraintRecurse, /* internal to commands/tablecmds.c */
1960
2190
  AT_ReAddConstraint, /* internal to commands/tablecmds.c */
1961
2191
  AT_ReAddDomainConstraint, /* internal to commands/tablecmds.c */
1962
2192
  AT_AlterConstraint, /* alter constraint */
1963
2193
  AT_ValidateConstraint, /* validate constraint */
1964
- AT_ValidateConstraintRecurse, /* internal to commands/tablecmds.c */
1965
2194
  AT_AddIndexConstraint, /* add constraint using existing index */
1966
2195
  AT_DropConstraint, /* drop constraint */
1967
- AT_DropConstraintRecurse, /* internal to commands/tablecmds.c */
1968
2196
  AT_ReAddComment, /* internal to commands/tablecmds.c */
1969
2197
  AT_AlterColumnType, /* alter column type */
1970
2198
  AT_AlterColumnGenericOptions, /* alter column OPTIONS (...) */
@@ -2153,7 +2381,7 @@ typedef struct GrantRoleStmt
2153
2381
  List *granted_roles; /* list of roles to be granted/revoked */
2154
2382
  List *grantee_roles; /* list of member roles to add/delete */
2155
2383
  bool is_grant; /* true = GRANT, false = REVOKE */
2156
- bool admin_opt; /* with admin option */
2384
+ List *opt; /* options e.g. WITH GRANT OPTION */
2157
2385
  RoleSpec *grantor; /* set grantor to other than current role */
2158
2386
  DropBehavior behavior; /* drop behavior (for REVOKE) */
2159
2387
  } GrantRoleStmt;
@@ -2321,6 +2549,8 @@ typedef enum ConstrType /* types of constraints */
2321
2549
 
2322
2550
  typedef struct Constraint
2323
2551
  {
2552
+ pg_node_attr(custom_read_write)
2553
+
2324
2554
  NodeTag type;
2325
2555
  ConstrType contype; /* see above */
2326
2556
 
@@ -2961,10 +3191,10 @@ typedef struct IndexStmt
2961
3191
  List *excludeOpNames; /* exclusion operator names, or NIL if none */
2962
3192
  char *idxcomment; /* comment to apply to index, or NULL */
2963
3193
  Oid indexOid; /* OID of an existing index, if any */
2964
- Oid oldNode; /* relfilenode of existing storage, if any */
2965
- SubTransactionId oldCreateSubid; /* rd_createSubid of oldNode */
2966
- SubTransactionId oldFirstRelfilenodeSubid; /* rd_firstRelfilenodeSubid of
2967
- * 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 */
2968
3198
  bool unique; /* is index unique? */
2969
3199
  bool nulls_not_distinct; /* null treatment for UNIQUE constraints */
2970
3200
  bool primary; /* is index a primary key? */
@@ -3080,6 +3310,8 @@ typedef struct DoStmt
3080
3310
 
3081
3311
  typedef struct InlineCodeBlock
3082
3312
  {
3313
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3314
+
3083
3315
  NodeTag type;
3084
3316
  char *source_text; /* source text of anonymous code block */
3085
3317
  Oid langOid; /* OID of selected language */
@@ -3094,18 +3326,24 @@ typedef struct InlineCodeBlock
3094
3326
  * list contains copies of the expressions for all output arguments, in the
3095
3327
  * order of the procedure's declared arguments. (outargs is never evaluated,
3096
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.
3097
3331
  * ----------------------
3098
3332
  */
3099
3333
  typedef struct CallStmt
3100
3334
  {
3101
3335
  NodeTag type;
3102
3336
  FuncCall *funccall; /* from the parser */
3103
- FuncExpr *funcexpr; /* transformed call, with only input args */
3104
- List *outargs; /* transformed output-argument expressions */
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);
3105
3341
  } CallStmt;
3106
3342
 
3107
3343
  typedef struct CallContext
3108
3344
  {
3345
+ pg_node_attr(nodetag_only) /* this is not a member of parse trees */
3346
+
3109
3347
  NodeTag type;
3110
3348
  bool atomic;
3111
3349
  } CallContext;