pg_query 4.2.1 → 6.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 (901) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -0
  3. data/README.md +7 -9
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +33 -9
  11. data/ext/pg_query/include/pg_query.h +28 -3
  12. data/ext/pg_query/include/pg_query_enum_defs.c +599 -167
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +640 -520
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +6400 -4633
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +433 -343
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1472 -1152
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +154 -124
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1886 -1506
  19. data/ext/pg_query/include/postgres/access/amapi.h +303 -0
  20. data/ext/pg_query/include/postgres/access/attmap.h +54 -0
  21. data/ext/pg_query/include/postgres/access/attnum.h +64 -0
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +62 -0
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
  26. data/ext/pg_query/include/postgres/access/detoast.h +82 -0
  27. data/ext/pg_query/include/postgres/access/genam.h +246 -0
  28. data/ext/pg_query/include/postgres/access/gin.h +91 -0
  29. data/ext/pg_query/include/postgres/access/htup.h +89 -0
  30. data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
  31. data/ext/pg_query/include/postgres/access/itup.h +170 -0
  32. data/ext/pg_query/include/postgres/access/parallel.h +81 -0
  33. data/ext/pg_query/include/postgres/access/printtup.h +35 -0
  34. data/ext/pg_query/include/postgres/access/relation.h +28 -0
  35. data/ext/pg_query/include/postgres/access/relscan.h +191 -0
  36. data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
  37. data/ext/pg_query/include/postgres/access/sdir.h +67 -0
  38. data/ext/pg_query/include/postgres/access/skey.h +151 -0
  39. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  40. data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
  41. data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
  42. data/ext/pg_query/include/postgres/access/table.h +28 -0
  43. data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
  44. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  45. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  46. data/ext/pg_query/include/postgres/access/transam.h +418 -0
  47. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  48. data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
  49. data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
  50. data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
  51. data/ext/pg_query/include/postgres/access/twophase.h +65 -0
  52. data/ext/pg_query/include/postgres/access/xact.h +530 -0
  53. data/ext/pg_query/include/postgres/access/xlog.h +310 -0
  54. data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
  55. data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
  56. data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
  57. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  58. data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
  59. data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
  60. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  61. data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
  62. data/ext/pg_query/include/postgres/c.h +1374 -0
  63. data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
  64. data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
  65. data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
  66. data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
  67. data/ext/pg_query/include/postgres/catalog/index.h +218 -0
  68. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  69. data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
  70. data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
  71. data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
  72. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
  74. data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
  75. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
  76. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
  78. data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
  79. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
  80. data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
  83. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
  84. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
  86. data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
  87. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
  89. data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
  90. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
  91. data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
  92. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
  93. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
  95. data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
  96. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
  97. data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
  98. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
  99. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
  101. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
  103. data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
  104. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
  105. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
  107. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
  109. data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
  110. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
  111. data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
  112. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
  113. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
  115. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
  119. data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
  120. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
  121. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
  131. data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
  132. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
  133. data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
  134. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  135. data/ext/pg_query/include/postgres/commands/async.h +49 -0
  136. data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
  137. data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
  138. data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
  139. data/ext/pg_query/include/postgres/commands/explain.h +145 -0
  140. data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
  141. data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
  142. data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
  143. data/ext/pg_query/include/postgres/commands/user.h +43 -0
  144. data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
  145. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  146. data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
  147. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  148. data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
  149. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  150. data/ext/pg_query/include/postgres/common/int.h +512 -0
  151. data/ext/pg_query/include/postgres/common/keywords.h +29 -0
  152. data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
  153. data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
  154. data/ext/pg_query/include/postgres/common/relpath.h +97 -0
  155. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  156. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  157. data/ext/pg_query/include/postgres/common/string.h +44 -0
  158. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
  159. data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
  160. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
  161. data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
  162. data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
  163. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
  164. data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
  165. data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
  166. data/ext/pg_query/include/postgres/executor/executor.h +681 -0
  167. data/ext/pg_query/include/postgres/executor/functions.h +56 -0
  168. data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
  169. data/ext/pg_query/include/postgres/executor/spi.h +207 -0
  170. data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
  171. data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
  172. data/ext/pg_query/include/postgres/fmgr.h +800 -0
  173. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  174. data/ext/pg_query/include/postgres/funcapi.h +360 -0
  175. data/ext/pg_query/include/postgres/gram.h +1168 -0
  176. data/ext/pg_query/include/postgres/gramparse.h +75 -0
  177. data/ext/pg_query/include/postgres/jit/jit.h +106 -0
  178. data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
  179. data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
  180. data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
  181. data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
  182. data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
  183. data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
  184. data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
  185. data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
  186. data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
  187. data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
  188. data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
  189. data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
  190. data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
  191. data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
  192. data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
  193. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  194. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  195. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  196. data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
  197. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
  198. data/ext/pg_query/include/postgres/miscadmin.h +527 -0
  199. data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
  200. data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
  201. data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
  202. data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
  203. data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
  204. data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
  205. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  206. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
  207. data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
  208. data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
  209. data/ext/pg_query/include/postgres/nodes/params.h +170 -0
  210. data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
  211. data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
  212. data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
  213. data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
  214. data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
  215. data/ext/pg_query/include/postgres/nodes/print.h +34 -0
  216. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  217. data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
  218. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  219. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
  220. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  221. data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
  222. data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
  223. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
  224. data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
  225. data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
  226. data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
  227. data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
  228. data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
  229. data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
  230. data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
  231. data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
  232. data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
  233. data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
  234. data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
  235. data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
  236. data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
  237. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  238. data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
  239. data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
  240. data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
  241. data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
  242. data/ext/pg_query/include/postgres/pg_config.h +985 -0
  243. data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
  244. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  245. data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
  246. data/ext/pg_query/include/postgres/pg_trace.h +17 -0
  247. data/ext/pg_query/include/postgres/pgstat.h +780 -0
  248. data/ext/pg_query/include/postgres/pgtime.h +94 -0
  249. data/ext/pg_query/include/postgres/pl_gram.h +385 -0
  250. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
  251. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
  252. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
  253. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
  254. data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
  255. data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
  256. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
  257. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  258. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
  259. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
  260. data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
  261. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
  262. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
  263. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
  264. data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
  265. data/ext/pg_query/include/postgres/port/atomics.h +606 -0
  266. data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
  267. data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
  268. data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
  269. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  270. data/ext/pg_query/include/postgres/port/simd.h +422 -0
  271. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  272. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  275. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  276. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  277. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  278. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  279. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  280. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
  281. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  282. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  283. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  284. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  285. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  286. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  287. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  288. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  289. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  290. data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
  291. data/ext/pg_query/include/postgres/port.h +555 -0
  292. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  293. data/ext/pg_query/include/postgres/postgres.h +579 -0
  294. data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
  295. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
  296. data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
  297. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
  298. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
  299. data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
  300. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  301. data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
  302. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  303. data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
  304. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  305. data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
  306. data/ext/pg_query/include/postgres/regex/regex.h +272 -0
  307. data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
  308. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  309. data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
  310. data/ext/pg_query/include/postgres/replication/origin.h +73 -0
  311. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
  312. data/ext/pg_query/include/postgres/replication/slot.h +289 -0
  313. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  314. data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
  315. data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
  316. data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
  317. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
  318. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
  319. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
  320. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
  321. data/ext/pg_query/include/postgres/storage/block.h +108 -0
  322. data/ext/pg_query/include/postgres/storage/buf.h +46 -0
  323. data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
  324. data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
  325. data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
  326. data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
  327. data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
  328. data/ext/pg_query/include/postgres/storage/fd.h +219 -0
  329. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  330. data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
  331. data/ext/pg_query/include/postgres/storage/item.h +19 -0
  332. data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
  333. data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
  334. data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
  335. data/ext/pg_query/include/postgres/storage/latch.h +196 -0
  336. data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
  337. data/ext/pg_query/include/postgres/storage/lock.h +624 -0
  338. data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
  339. data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
  340. data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
  341. data/ext/pg_query/include/postgres/storage/off.h +57 -0
  342. data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
  343. data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
  344. data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
  345. data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
  346. data/ext/pg_query/include/postgres/storage/proc.h +488 -0
  347. data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
  348. data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
  349. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  350. data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
  351. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  352. data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
  353. data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
  354. data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
  355. data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
  356. data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
  357. data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
  358. data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
  359. data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
  360. data/ext/pg_query/include/postgres/storage/spin.h +77 -0
  361. data/ext/pg_query/include/postgres/storage/standby.h +109 -0
  362. data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
  363. data/ext/pg_query/include/postgres/storage/sync.h +66 -0
  364. data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
  365. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
  366. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
  367. data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
  368. data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
  369. data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
  370. data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
  371. data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
  372. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
  373. data/ext/pg_query/include/postgres/utils/acl.h +290 -0
  374. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
  375. data/ext/pg_query/include/postgres/utils/array.h +481 -0
  376. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  377. data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
  378. data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
  379. data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
  380. data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
  381. data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
  382. data/ext/pg_query/include/postgres/utils/date.h +118 -0
  383. data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
  384. data/ext/pg_query/include/postgres/utils/datum.h +76 -0
  385. data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
  386. data/ext/pg_query/include/postgres/utils/elog.h +540 -0
  387. data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
  388. data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
  389. data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
  390. data/ext/pg_query/include/postgres/utils/float.h +357 -0
  391. data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
  392. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
  393. data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
  394. data/ext/pg_query/include/postgres/utils/guc.h +456 -0
  395. data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
  396. data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
  397. data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
  398. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  399. data/ext/pg_query/include/postgres/utils/inval.h +68 -0
  400. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  401. data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
  402. data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
  403. data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
  404. data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
  405. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
  406. data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
  407. data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
  408. data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
  409. data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
  410. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
  411. data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
  412. data/ext/pg_query/include/postgres/utils/portal.h +252 -0
  413. data/ext/pg_query/include/postgres/utils/probes.h +114 -0
  414. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  415. data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
  416. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  417. data/ext/pg_query/include/postgres/utils/rel.h +711 -0
  418. data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
  419. data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
  420. data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
  421. data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
  422. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
  423. data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
  424. data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
  425. data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
  426. data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
  427. data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
  428. data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
  429. data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
  430. data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
  431. data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
  432. data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
  433. data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
  434. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  435. data/ext/pg_query/include/postgres/utils/xml.h +94 -0
  436. data/ext/pg_query/include/postgres/varatt.h +358 -0
  437. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7723 -6368
  438. data/ext/pg_query/include/protobuf/pg_query.pb.h +120022 -87031
  439. data/ext/pg_query/pg_query.c +10 -1
  440. data/ext/pg_query/pg_query.pb-c.c +22595 -17738
  441. data/ext/pg_query/pg_query_deparse.c +1 -10635
  442. data/ext/pg_query/pg_query_fingerprint.c +12 -8
  443. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  444. data/ext/pg_query/pg_query_internal.h +1 -1
  445. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  446. data/ext/pg_query/pg_query_normalize.c +43 -2
  447. data/ext/pg_query/pg_query_outfuncs_json.c +9 -1
  448. data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
  449. data/ext/pg_query/pg_query_parse.c +47 -5
  450. data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
  451. data/ext/pg_query/pg_query_readfuncs_protobuf.c +3 -2
  452. data/ext/pg_query/pg_query_ruby.c +5 -0
  453. data/ext/pg_query/pg_query_scan.c +2 -2
  454. data/ext/pg_query/pg_query_split.c +3 -3
  455. data/ext/pg_query/postgres_deparse.c +11496 -0
  456. data/ext/pg_query/postgres_deparse.h +9 -0
  457. data/ext/pg_query/src_backend_catalog_namespace.c +243 -63
  458. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  459. data/ext/pg_query/src_backend_commands_define.c +2 -3
  460. data/ext/pg_query/src_backend_nodes_bitmapset.c +140 -156
  461. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  462. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  463. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  464. data/ext/pg_query/src_backend_nodes_list.c +16 -8
  465. data/ext/pg_query/src_backend_nodes_makefuncs.c +134 -1
  466. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +391 -133
  467. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  468. data/ext/pg_query/src_backend_parser_gram.c +43710 -39953
  469. data/ext/pg_query/src_backend_parser_parser.c +34 -8
  470. data/ext/pg_query/src_backend_parser_scan.c +6971 -3373
  471. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  472. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  473. data/ext/pg_query/src_backend_tcop_postgres.c +99 -96
  474. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  475. data/ext/pg_query/src_backend_utils_adt_datum.c +2 -2
  476. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  477. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  478. data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
  479. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +177 -30
  480. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  481. data/ext/pg_query/src_backend_utils_error_elog.c +397 -270
  482. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +36 -2
  483. data/ext/pg_query/src_backend_utils_init_globals.c +20 -5
  484. data/ext/pg_query/src_backend_utils_mb_mbutils.c +31 -84
  485. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
  486. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
  487. data/ext/pg_query/src_backend_utils_mmgr_aset.c +704 -497
  488. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  489. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
  490. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +637 -233
  491. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
  492. data/ext/pg_query/src_common_encnames.c +46 -44
  493. data/ext/pg_query/src_common_hashfn.c +1 -1
  494. data/ext/pg_query/src_common_keywords.c +1 -1
  495. data/ext/pg_query/src_common_kwlist_d.h +586 -517
  496. data/ext/pg_query/src_common_kwlookup.c +1 -1
  497. data/ext/pg_query/src_common_psprintf.c +3 -3
  498. data/ext/pg_query/src_common_stringinfo.c +21 -4
  499. data/ext/pg_query/src_common_wchar.c +100 -116
  500. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  501. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  502. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +829 -763
  503. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  504. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  505. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  506. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  507. data/ext/pg_query/src_port_pg_bitutils.c +251 -32
  508. data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
  509. data/ext/pg_query/src_port_snprintf.c +20 -27
  510. data/ext/pg_query/src_port_strerror.c +1 -3
  511. data/ext/pg_query/src_port_strlcpy.c +79 -0
  512. data/lib/pg_query/fingerprint.rb +5 -8
  513. data/lib/pg_query/node.rb +16 -11
  514. data/lib/pg_query/param_refs.rb +2 -2
  515. data/lib/pg_query/parse.rb +6 -8
  516. data/lib/pg_query/parse_error.rb +1 -0
  517. data/lib/pg_query/pg_query_pb.rb +173 -3196
  518. data/lib/pg_query/scan.rb +1 -0
  519. data/lib/pg_query/treewalker.rb +52 -11
  520. data/lib/pg_query/truncate.rb +18 -20
  521. data/lib/pg_query/version.rb +1 -1
  522. metadata +443 -442
  523. data/ext/pg_query/guc-file.c +0 -0
  524. data/ext/pg_query/include/access/amapi.h +0 -290
  525. data/ext/pg_query/include/access/attmap.h +0 -52
  526. data/ext/pg_query/include/access/attnum.h +0 -64
  527. data/ext/pg_query/include/access/clog.h +0 -63
  528. data/ext/pg_query/include/access/commit_ts.h +0 -74
  529. data/ext/pg_query/include/access/detoast.h +0 -82
  530. data/ext/pg_query/include/access/genam.h +0 -231
  531. data/ext/pg_query/include/access/gin.h +0 -78
  532. data/ext/pg_query/include/access/htup.h +0 -89
  533. data/ext/pg_query/include/access/htup_details.h +0 -807
  534. data/ext/pg_query/include/access/itup.h +0 -167
  535. data/ext/pg_query/include/access/parallel.h +0 -82
  536. data/ext/pg_query/include/access/printtup.h +0 -35
  537. data/ext/pg_query/include/access/relation.h +0 -28
  538. data/ext/pg_query/include/access/relscan.h +0 -191
  539. data/ext/pg_query/include/access/rmgrlist.h +0 -49
  540. data/ext/pg_query/include/access/sdir.h +0 -58
  541. data/ext/pg_query/include/access/skey.h +0 -151
  542. data/ext/pg_query/include/access/stratnum.h +0 -85
  543. data/ext/pg_query/include/access/sysattr.h +0 -29
  544. data/ext/pg_query/include/access/table.h +0 -28
  545. data/ext/pg_query/include/access/tableam.h +0 -2077
  546. data/ext/pg_query/include/access/toast_compression.h +0 -73
  547. data/ext/pg_query/include/access/transam.h +0 -375
  548. data/ext/pg_query/include/access/tupconvert.h +0 -51
  549. data/ext/pg_query/include/access/tupdesc.h +0 -154
  550. data/ext/pg_query/include/access/tupmacs.h +0 -247
  551. data/ext/pg_query/include/access/twophase.h +0 -65
  552. data/ext/pg_query/include/access/xact.h +0 -523
  553. data/ext/pg_query/include/access/xlog.h +0 -303
  554. data/ext/pg_query/include/access/xlog_internal.h +0 -366
  555. data/ext/pg_query/include/access/xlogdefs.h +0 -101
  556. data/ext/pg_query/include/access/xlogprefetcher.h +0 -55
  557. data/ext/pg_query/include/access/xlogreader.h +0 -443
  558. data/ext/pg_query/include/access/xlogrecord.h +0 -236
  559. data/ext/pg_query/include/access/xlogrecovery.h +0 -157
  560. data/ext/pg_query/include/c.h +0 -1391
  561. data/ext/pg_query/include/catalog/catalog.h +0 -44
  562. data/ext/pg_query/include/catalog/catversion.h +0 -58
  563. data/ext/pg_query/include/catalog/dependency.h +0 -269
  564. data/ext/pg_query/include/catalog/genbki.h +0 -142
  565. data/ext/pg_query/include/catalog/index.h +0 -214
  566. data/ext/pg_query/include/catalog/indexing.h +0 -54
  567. data/ext/pg_query/include/catalog/namespace.h +0 -190
  568. data/ext/pg_query/include/catalog/objectaccess.h +0 -265
  569. data/ext/pg_query/include/catalog/objectaddress.h +0 -89
  570. data/ext/pg_query/include/catalog/pg_aggregate.h +0 -180
  571. data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -78
  572. data/ext/pg_query/include/catalog/pg_am.h +0 -63
  573. data/ext/pg_query/include/catalog/pg_am_d.h +0 -47
  574. data/ext/pg_query/include/catalog/pg_attribute.h +0 -221
  575. data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -62
  576. data/ext/pg_query/include/catalog/pg_authid.h +0 -63
  577. data/ext/pg_query/include/catalog/pg_authid_d.h +0 -57
  578. data/ext/pg_query/include/catalog/pg_class.h +0 -230
  579. data/ext/pg_query/include/catalog/pg_class_d.h +0 -132
  580. data/ext/pg_query/include/catalog/pg_collation.h +0 -98
  581. data/ext/pg_query/include/catalog/pg_collation_d.h +0 -62
  582. data/ext/pg_query/include/catalog/pg_constraint.h +0 -273
  583. data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -73
  584. data/ext/pg_query/include/catalog/pg_control.h +0 -250
  585. data/ext/pg_query/include/catalog/pg_conversion.h +0 -75
  586. data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -38
  587. data/ext/pg_query/include/catalog/pg_depend.h +0 -77
  588. data/ext/pg_query/include/catalog/pg_depend_d.h +0 -36
  589. data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -57
  590. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -36
  591. data/ext/pg_query/include/catalog/pg_index.h +0 -90
  592. data/ext/pg_query/include/catalog/pg_index_d.h +0 -59
  593. data/ext/pg_query/include/catalog/pg_language.h +0 -72
  594. data/ext/pg_query/include/catalog/pg_language_d.h +0 -41
  595. data/ext/pg_query/include/catalog/pg_namespace.h +0 -64
  596. data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -36
  597. data/ext/pg_query/include/catalog/pg_opclass.h +0 -88
  598. data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -51
  599. data/ext/pg_query/include/catalog/pg_operator.h +0 -107
  600. data/ext/pg_query/include/catalog/pg_operator_d.h +0 -142
  601. data/ext/pg_query/include/catalog/pg_opfamily.h +0 -63
  602. data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -49
  603. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  604. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  605. data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -74
  606. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -36
  607. data/ext/pg_query/include/catalog/pg_proc.h +0 -220
  608. data/ext/pg_query/include/catalog/pg_proc_d.h +0 -101
  609. data/ext/pg_query/include/catalog/pg_publication.h +0 -161
  610. data/ext/pg_query/include/catalog/pg_publication_d.h +0 -38
  611. data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -62
  612. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -33
  613. data/ext/pg_query/include/catalog/pg_statistic.h +0 -282
  614. data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -195
  615. data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -88
  616. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -45
  617. data/ext/pg_query/include/catalog/pg_transform.h +0 -48
  618. data/ext/pg_query/include/catalog/pg_transform_d.h +0 -34
  619. data/ext/pg_query/include/catalog/pg_trigger.h +0 -153
  620. data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -109
  621. data/ext/pg_query/include/catalog/pg_ts_config.h +0 -53
  622. data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -34
  623. data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -59
  624. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -35
  625. data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -60
  626. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -37
  627. data/ext/pg_query/include/catalog/pg_ts_template.h +0 -51
  628. data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -34
  629. data/ext/pg_query/include/catalog/pg_type.h +0 -404
  630. data/ext/pg_query/include/catalog/pg_type_d.h +0 -324
  631. data/ext/pg_query/include/catalog/storage.h +0 -50
  632. data/ext/pg_query/include/commands/async.h +0 -53
  633. data/ext/pg_query/include/commands/dbcommands.h +0 -36
  634. data/ext/pg_query/include/commands/defrem.h +0 -160
  635. data/ext/pg_query/include/commands/event_trigger.h +0 -88
  636. data/ext/pg_query/include/commands/explain.h +0 -127
  637. data/ext/pg_query/include/commands/prepare.h +0 -61
  638. data/ext/pg_query/include/commands/tablespace.h +0 -69
  639. data/ext/pg_query/include/commands/trigger.h +0 -287
  640. data/ext/pg_query/include/commands/user.h +0 -37
  641. data/ext/pg_query/include/commands/vacuum.h +0 -340
  642. data/ext/pg_query/include/commands/variable.h +0 -38
  643. data/ext/pg_query/include/common/file_perm.h +0 -56
  644. data/ext/pg_query/include/common/hashfn.h +0 -104
  645. data/ext/pg_query/include/common/ip.h +0 -31
  646. data/ext/pg_query/include/common/keywords.h +0 -29
  647. data/ext/pg_query/include/common/kwlookup.h +0 -44
  648. data/ext/pg_query/include/common/pg_prng.h +0 -60
  649. data/ext/pg_query/include/common/relpath.h +0 -90
  650. data/ext/pg_query/include/common/string.h +0 -42
  651. data/ext/pg_query/include/common/unicode_combining_table.h +0 -308
  652. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +0 -125
  653. data/ext/pg_query/include/datatype/timestamp.h +0 -236
  654. data/ext/pg_query/include/executor/execdesc.h +0 -70
  655. data/ext/pg_query/include/executor/executor.h +0 -663
  656. data/ext/pg_query/include/executor/functions.h +0 -55
  657. data/ext/pg_query/include/executor/instrument.h +0 -118
  658. data/ext/pg_query/include/executor/spi.h +0 -213
  659. data/ext/pg_query/include/executor/tablefunc.h +0 -67
  660. data/ext/pg_query/include/executor/tuptable.h +0 -487
  661. data/ext/pg_query/include/fmgr.h +0 -781
  662. data/ext/pg_query/include/funcapi.h +0 -360
  663. data/ext/pg_query/include/getaddrinfo.h +0 -162
  664. data/ext/pg_query/include/jit/jit.h +0 -105
  665. data/ext/pg_query/include/kwlist_d.h +0 -1095
  666. data/ext/pg_query/include/lib/dshash.h +0 -112
  667. data/ext/pg_query/include/lib/ilist.h +0 -746
  668. data/ext/pg_query/include/lib/pairingheap.h +0 -102
  669. data/ext/pg_query/include/lib/simplehash.h +0 -1184
  670. data/ext/pg_query/include/lib/sort_template.h +0 -432
  671. data/ext/pg_query/include/lib/stringinfo.h +0 -161
  672. data/ext/pg_query/include/libpq/auth.h +0 -31
  673. data/ext/pg_query/include/libpq/crypt.h +0 -47
  674. data/ext/pg_query/include/libpq/hba.h +0 -179
  675. data/ext/pg_query/include/libpq/libpq-be.h +0 -343
  676. data/ext/pg_query/include/libpq/libpq.h +0 -144
  677. data/ext/pg_query/include/libpq/pqcomm.h +0 -194
  678. data/ext/pg_query/include/libpq/pqformat.h +0 -210
  679. data/ext/pg_query/include/libpq/pqsignal.h +0 -42
  680. data/ext/pg_query/include/mb/pg_wchar.h +0 -755
  681. data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
  682. data/ext/pg_query/include/miscadmin.h +0 -495
  683. data/ext/pg_query/include/nodes/bitmapset.h +0 -122
  684. data/ext/pg_query/include/nodes/execnodes.h +0 -2715
  685. data/ext/pg_query/include/nodes/extensible.h +0 -162
  686. data/ext/pg_query/include/nodes/lockoptions.h +0 -61
  687. data/ext/pg_query/include/nodes/makefuncs.h +0 -109
  688. data/ext/pg_query/include/nodes/memnodes.h +0 -110
  689. data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
  690. data/ext/pg_query/include/nodes/nodes.h +0 -861
  691. data/ext/pg_query/include/nodes/params.h +0 -170
  692. data/ext/pg_query/include/nodes/parsenodes.h +0 -3812
  693. data/ext/pg_query/include/nodes/pathnodes.h +0 -2734
  694. data/ext/pg_query/include/nodes/pg_list.h +0 -612
  695. data/ext/pg_query/include/nodes/plannodes.h +0 -1349
  696. data/ext/pg_query/include/nodes/primnodes.h +0 -1593
  697. data/ext/pg_query/include/nodes/print.h +0 -34
  698. data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
  699. data/ext/pg_query/include/nodes/value.h +0 -80
  700. data/ext/pg_query/include/optimizer/cost.h +0 -213
  701. data/ext/pg_query/include/optimizer/geqo.h +0 -90
  702. data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
  703. data/ext/pg_query/include/optimizer/optimizer.h +0 -202
  704. data/ext/pg_query/include/optimizer/paths.h +0 -257
  705. data/ext/pg_query/include/optimizer/planmain.h +0 -120
  706. data/ext/pg_query/include/parser/analyze.h +0 -63
  707. data/ext/pg_query/include/parser/gram.h +0 -1101
  708. data/ext/pg_query/include/parser/gramparse.h +0 -75
  709. data/ext/pg_query/include/parser/kwlist.h +0 -487
  710. data/ext/pg_query/include/parser/parse_agg.h +0 -63
  711. data/ext/pg_query/include/parser/parse_coerce.h +0 -100
  712. data/ext/pg_query/include/parser/parse_expr.h +0 -25
  713. data/ext/pg_query/include/parser/parse_func.h +0 -74
  714. data/ext/pg_query/include/parser/parse_node.h +0 -339
  715. data/ext/pg_query/include/parser/parse_oper.h +0 -65
  716. data/ext/pg_query/include/parser/parse_relation.h +0 -124
  717. data/ext/pg_query/include/parser/parse_type.h +0 -60
  718. data/ext/pg_query/include/parser/parser.h +0 -68
  719. data/ext/pg_query/include/parser/parsetree.h +0 -61
  720. data/ext/pg_query/include/parser/scanner.h +0 -152
  721. data/ext/pg_query/include/parser/scansup.h +0 -27
  722. data/ext/pg_query/include/partitioning/partdefs.h +0 -26
  723. data/ext/pg_query/include/pg_config.h +0 -1037
  724. data/ext/pg_query/include/pg_config_manual.h +0 -410
  725. data/ext/pg_query/include/pg_config_os.h +0 -8
  726. data/ext/pg_query/include/pg_getopt.h +0 -56
  727. data/ext/pg_query/include/pg_trace.h +0 -17
  728. data/ext/pg_query/include/pgstat.h +0 -699
  729. data/ext/pg_query/include/pgtime.h +0 -94
  730. data/ext/pg_query/include/pl_gram.h +0 -383
  731. data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
  732. data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
  733. data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -111
  734. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -244
  735. data/ext/pg_query/include/plerrcodes.h +0 -998
  736. data/ext/pg_query/include/plpgsql.h +0 -1345
  737. data/ext/pg_query/include/port/atomics/arch-arm.h +0 -32
  738. data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
  739. data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
  740. data/ext/pg_query/include/port/atomics/fallback.h +0 -170
  741. data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
  742. data/ext/pg_query/include/port/atomics/generic.h +0 -401
  743. data/ext/pg_query/include/port/atomics.h +0 -524
  744. data/ext/pg_query/include/port/pg_bitutils.h +0 -302
  745. data/ext/pg_query/include/port/pg_bswap.h +0 -161
  746. data/ext/pg_query/include/port/pg_crc32c.h +0 -101
  747. data/ext/pg_query/include/port.h +0 -553
  748. data/ext/pg_query/include/portability/instr_time.h +0 -256
  749. data/ext/pg_query/include/postgres.h +0 -808
  750. data/ext/pg_query/include/postgres_ext.h +0 -74
  751. data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
  752. data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
  753. data/ext/pg_query/include/postmaster/bgworker.h +0 -162
  754. data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
  755. data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
  756. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  757. data/ext/pg_query/include/postmaster/interrupt.h +0 -32
  758. data/ext/pg_query/include/postmaster/pgarch.h +0 -73
  759. data/ext/pg_query/include/postmaster/postmaster.h +0 -78
  760. data/ext/pg_query/include/postmaster/startup.h +0 -39
  761. data/ext/pg_query/include/postmaster/syslogger.h +0 -103
  762. data/ext/pg_query/include/postmaster/walwriter.h +0 -21
  763. data/ext/pg_query/include/regex/regex.h +0 -186
  764. data/ext/pg_query/include/replication/logicallauncher.h +0 -29
  765. data/ext/pg_query/include/replication/logicalproto.h +0 -254
  766. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  767. data/ext/pg_query/include/replication/origin.h +0 -73
  768. data/ext/pg_query/include/replication/reorderbuffer.h +0 -685
  769. data/ext/pg_query/include/replication/slot.h +0 -230
  770. data/ext/pg_query/include/replication/syncrep.h +0 -115
  771. data/ext/pg_query/include/replication/walreceiver.h +0 -472
  772. data/ext/pg_query/include/replication/walsender.h +0 -74
  773. data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
  774. data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -38
  775. data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
  776. data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
  777. data/ext/pg_query/include/storage/backendid.h +0 -37
  778. data/ext/pg_query/include/storage/block.h +0 -115
  779. data/ext/pg_query/include/storage/buf.h +0 -46
  780. data/ext/pg_query/include/storage/bufmgr.h +0 -297
  781. data/ext/pg_query/include/storage/bufpage.h +0 -457
  782. data/ext/pg_query/include/storage/condition_variable.h +0 -73
  783. data/ext/pg_query/include/storage/dsm.h +0 -64
  784. data/ext/pg_query/include/storage/dsm_impl.h +0 -76
  785. data/ext/pg_query/include/storage/fd.h +0 -198
  786. data/ext/pg_query/include/storage/fileset.h +0 -40
  787. data/ext/pg_query/include/storage/ipc.h +0 -84
  788. data/ext/pg_query/include/storage/item.h +0 -19
  789. data/ext/pg_query/include/storage/itemid.h +0 -184
  790. data/ext/pg_query/include/storage/itemptr.h +0 -208
  791. data/ext/pg_query/include/storage/large_object.h +0 -100
  792. data/ext/pg_query/include/storage/latch.h +0 -186
  793. data/ext/pg_query/include/storage/lmgr.h +0 -115
  794. data/ext/pg_query/include/storage/lock.h +0 -616
  795. data/ext/pg_query/include/storage/lockdefs.h +0 -59
  796. data/ext/pg_query/include/storage/lwlock.h +0 -206
  797. data/ext/pg_query/include/storage/lwlocknames.h +0 -50
  798. data/ext/pg_query/include/storage/off.h +0 -57
  799. data/ext/pg_query/include/storage/pg_sema.h +0 -61
  800. data/ext/pg_query/include/storage/pg_shmem.h +0 -92
  801. data/ext/pg_query/include/storage/pmsignal.h +0 -105
  802. data/ext/pg_query/include/storage/predicate.h +0 -87
  803. data/ext/pg_query/include/storage/proc.h +0 -461
  804. data/ext/pg_query/include/storage/procarray.h +0 -98
  805. data/ext/pg_query/include/storage/proclist_types.h +0 -51
  806. data/ext/pg_query/include/storage/procsignal.h +0 -71
  807. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  808. data/ext/pg_query/include/storage/s_lock.h +0 -1110
  809. data/ext/pg_query/include/storage/sharedfileset.h +0 -37
  810. data/ext/pg_query/include/storage/shm_mq.h +0 -86
  811. data/ext/pg_query/include/storage/shm_toc.h +0 -58
  812. data/ext/pg_query/include/storage/shmem.h +0 -81
  813. data/ext/pg_query/include/storage/sinval.h +0 -153
  814. data/ext/pg_query/include/storage/sinvaladt.h +0 -43
  815. data/ext/pg_query/include/storage/smgr.h +0 -111
  816. data/ext/pg_query/include/storage/spin.h +0 -77
  817. data/ext/pg_query/include/storage/standby.h +0 -98
  818. data/ext/pg_query/include/storage/standbydefs.h +0 -74
  819. data/ext/pg_query/include/storage/sync.h +0 -66
  820. data/ext/pg_query/include/tcop/cmdtag.h +0 -58
  821. data/ext/pg_query/include/tcop/cmdtaglist.h +0 -218
  822. data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
  823. data/ext/pg_query/include/tcop/dest.h +0 -149
  824. data/ext/pg_query/include/tcop/fastpath.h +0 -20
  825. data/ext/pg_query/include/tcop/pquery.h +0 -51
  826. data/ext/pg_query/include/tcop/tcopprot.h +0 -97
  827. data/ext/pg_query/include/tcop/utility.h +0 -112
  828. data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
  829. data/ext/pg_query/include/utils/acl.h +0 -333
  830. data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
  831. data/ext/pg_query/include/utils/array.h +0 -464
  832. data/ext/pg_query/include/utils/backend_progress.h +0 -44
  833. data/ext/pg_query/include/utils/backend_status.h +0 -321
  834. data/ext/pg_query/include/utils/builtins.h +0 -127
  835. data/ext/pg_query/include/utils/bytea.h +0 -28
  836. data/ext/pg_query/include/utils/catcache.h +0 -231
  837. data/ext/pg_query/include/utils/date.h +0 -90
  838. data/ext/pg_query/include/utils/datetime.h +0 -344
  839. data/ext/pg_query/include/utils/datum.h +0 -76
  840. data/ext/pg_query/include/utils/dsa.h +0 -123
  841. data/ext/pg_query/include/utils/dynahash.h +0 -20
  842. data/ext/pg_query/include/utils/elog.h +0 -470
  843. data/ext/pg_query/include/utils/errcodes.h +0 -354
  844. data/ext/pg_query/include/utils/expandeddatum.h +0 -159
  845. data/ext/pg_query/include/utils/expandedrecord.h +0 -231
  846. data/ext/pg_query/include/utils/float.h +0 -356
  847. data/ext/pg_query/include/utils/fmgroids.h +0 -3261
  848. data/ext/pg_query/include/utils/fmgrprotos.h +0 -2829
  849. data/ext/pg_query/include/utils/fmgrtab.h +0 -49
  850. data/ext/pg_query/include/utils/guc.h +0 -469
  851. data/ext/pg_query/include/utils/guc_tables.h +0 -276
  852. data/ext/pg_query/include/utils/hsearch.h +0 -153
  853. data/ext/pg_query/include/utils/inval.h +0 -68
  854. data/ext/pg_query/include/utils/lsyscache.h +0 -208
  855. data/ext/pg_query/include/utils/memdebug.h +0 -82
  856. data/ext/pg_query/include/utils/memutils.h +0 -230
  857. data/ext/pg_query/include/utils/numeric.h +0 -90
  858. data/ext/pg_query/include/utils/palloc.h +0 -158
  859. data/ext/pg_query/include/utils/partcache.h +0 -102
  860. data/ext/pg_query/include/utils/pg_locale.h +0 -127
  861. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  862. data/ext/pg_query/include/utils/pgstat_internal.h +0 -784
  863. data/ext/pg_query/include/utils/pidfile.h +0 -56
  864. data/ext/pg_query/include/utils/plancache.h +0 -236
  865. data/ext/pg_query/include/utils/portal.h +0 -252
  866. data/ext/pg_query/include/utils/probes.h +0 -114
  867. data/ext/pg_query/include/utils/ps_status.h +0 -25
  868. data/ext/pg_query/include/utils/queryenvironment.h +0 -74
  869. data/ext/pg_query/include/utils/queryjumble.h +0 -88
  870. data/ext/pg_query/include/utils/regproc.h +0 -39
  871. data/ext/pg_query/include/utils/rel.h +0 -695
  872. data/ext/pg_query/include/utils/relcache.h +0 -153
  873. data/ext/pg_query/include/utils/reltrigger.h +0 -81
  874. data/ext/pg_query/include/utils/resowner.h +0 -86
  875. data/ext/pg_query/include/utils/rls.h +0 -50
  876. data/ext/pg_query/include/utils/ruleutils.h +0 -47
  877. data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
  878. data/ext/pg_query/include/utils/snapmgr.h +0 -179
  879. data/ext/pg_query/include/utils/snapshot.h +0 -219
  880. data/ext/pg_query/include/utils/sortsupport.h +0 -391
  881. data/ext/pg_query/include/utils/syscache.h +0 -224
  882. data/ext/pg_query/include/utils/timeout.h +0 -95
  883. data/ext/pg_query/include/utils/timestamp.h +0 -117
  884. data/ext/pg_query/include/utils/tuplesort.h +0 -291
  885. data/ext/pg_query/include/utils/tuplestore.h +0 -91
  886. data/ext/pg_query/include/utils/typcache.h +0 -209
  887. data/ext/pg_query/include/utils/tzparser.h +0 -39
  888. data/ext/pg_query/include/utils/varlena.h +0 -41
  889. data/ext/pg_query/include/utils/wait_event.h +0 -289
  890. data/ext/pg_query/include/utils/xml.h +0 -84
  891. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
  892. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  893. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  894. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  895. data/ext/pg_query/src_common_pg_prng.c +0 -152
  896. data/ext/pg_query/src_common_string.c +0 -92
  897. data/ext/pg_query/src_port_pgsleep.c +0 -69
  898. data/ext/pg_query/src_port_strnlen.c +0 -39
  899. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
  900. /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
  901. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -1,1593 +0,0 @@
1
- /*-------------------------------------------------------------------------
2
- *
3
- * primnodes.h
4
- * Definitions for "primitive" node types, those that are used in more
5
- * than one of the parse/plan/execute stages of the query pipeline.
6
- * Currently, these are mostly nodes for executable expressions
7
- * and join trees.
8
- *
9
- *
10
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
11
- * Portions Copyright (c) 1994, Regents of the University of California
12
- *
13
- * src/include/nodes/primnodes.h
14
- *
15
- *-------------------------------------------------------------------------
16
- */
17
- #ifndef PRIMNODES_H
18
- #define PRIMNODES_H
19
-
20
- #include "access/attnum.h"
21
- #include "nodes/bitmapset.h"
22
- #include "nodes/pg_list.h"
23
-
24
-
25
- /* ----------------------------------------------------------------
26
- * node definitions
27
- * ----------------------------------------------------------------
28
- */
29
-
30
- /*
31
- * Alias -
32
- * specifies an alias for a range variable; the alias might also
33
- * specify renaming of columns within the table.
34
- *
35
- * Note: colnames is a list of String nodes. In Alias structs
36
- * associated with RTEs, there may be entries corresponding to dropped
37
- * columns; these are normally empty strings (""). See parsenodes.h for info.
38
- */
39
- typedef struct Alias
40
- {
41
- NodeTag type;
42
- char *aliasname; /* aliased rel name (never qualified) */
43
- List *colnames; /* optional list of column aliases */
44
- } Alias;
45
-
46
- /* What to do at commit time for temporary relations */
47
- typedef enum OnCommitAction
48
- {
49
- ONCOMMIT_NOOP, /* No ON COMMIT clause (do nothing) */
50
- ONCOMMIT_PRESERVE_ROWS, /* ON COMMIT PRESERVE ROWS (do nothing) */
51
- ONCOMMIT_DELETE_ROWS, /* ON COMMIT DELETE ROWS */
52
- ONCOMMIT_DROP /* ON COMMIT DROP */
53
- } OnCommitAction;
54
-
55
- /*
56
- * RangeVar - range variable, used in FROM clauses
57
- *
58
- * Also used to represent table names in utility statements; there, the alias
59
- * field is not used, and inh tells whether to apply the operation
60
- * recursively to child tables. In some contexts it is also useful to carry
61
- * a TEMP table indication here.
62
- */
63
- typedef struct RangeVar
64
- {
65
- NodeTag type;
66
- char *catalogname; /* the catalog (database) name, or NULL */
67
- char *schemaname; /* the schema name, or NULL */
68
- char *relname; /* the relation/sequence name */
69
- bool inh; /* expand rel by inheritance? recursively act
70
- * on children? */
71
- char relpersistence; /* see RELPERSISTENCE_* in pg_class.h */
72
- Alias *alias; /* table alias & optional column aliases */
73
- int location; /* token location, or -1 if unknown */
74
- } RangeVar;
75
-
76
- /*
77
- * TableFunc - node for a table function, such as XMLTABLE.
78
- *
79
- * Entries in the ns_names list are either String nodes containing
80
- * literal namespace names, or NULL pointers to represent DEFAULT.
81
- */
82
- typedef struct TableFunc
83
- {
84
- NodeTag type;
85
- List *ns_uris; /* list of namespace URI expressions */
86
- List *ns_names; /* list of namespace names or NULL */
87
- Node *docexpr; /* input document expression */
88
- Node *rowexpr; /* row filter expression */
89
- List *colnames; /* column names (list of String) */
90
- List *coltypes; /* OID list of column type OIDs */
91
- List *coltypmods; /* integer list of column typmods */
92
- List *colcollations; /* OID list of column collation OIDs */
93
- List *colexprs; /* list of column filter expressions */
94
- List *coldefexprs; /* list of column default expressions */
95
- Bitmapset *notnulls; /* nullability flag for each output column */
96
- int ordinalitycol; /* counts from 0; -1 if none specified */
97
- int location; /* token location, or -1 if unknown */
98
- } TableFunc;
99
-
100
- /*
101
- * IntoClause - target information for SELECT INTO, CREATE TABLE AS, and
102
- * CREATE MATERIALIZED VIEW
103
- *
104
- * For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten
105
- * SELECT Query for the view; otherwise it's NULL. (Although it's actually
106
- * Query*, we declare it as Node* to avoid a forward reference.)
107
- */
108
- typedef struct IntoClause
109
- {
110
- NodeTag type;
111
-
112
- RangeVar *rel; /* target relation name */
113
- List *colNames; /* column names to assign, or NIL */
114
- char *accessMethod; /* table access method */
115
- List *options; /* options from WITH clause */
116
- OnCommitAction onCommit; /* what do we do at COMMIT? */
117
- char *tableSpaceName; /* table space to use, or NULL */
118
- Node *viewQuery; /* materialized view's SELECT query */
119
- bool skipData; /* true for WITH NO DATA */
120
- } IntoClause;
121
-
122
-
123
- /* ----------------------------------------------------------------
124
- * node types for executable expressions
125
- * ----------------------------------------------------------------
126
- */
127
-
128
- /*
129
- * Expr - generic superclass for executable-expression nodes
130
- *
131
- * All node types that are used in executable expression trees should derive
132
- * from Expr (that is, have Expr as their first field). Since Expr only
133
- * contains NodeTag, this is a formality, but it is an easy form of
134
- * documentation. See also the ExprState node types in execnodes.h.
135
- */
136
- typedef struct Expr
137
- {
138
- NodeTag type;
139
- } Expr;
140
-
141
- /*
142
- * Var - expression node representing a variable (ie, a table column)
143
- *
144
- * In the parser and planner, varno and varattno identify the semantic
145
- * referent, which is a base-relation column unless the reference is to a join
146
- * USING column that isn't semantically equivalent to either join input column
147
- * (because it is a FULL join or the input column requires a type coercion).
148
- * In those cases varno and varattno refer to the JOIN RTE. (Early in the
149
- * planner, we replace such join references by the implied expression; but up
150
- * till then we want join reference Vars to keep their original identity for
151
- * query-printing purposes.)
152
- *
153
- * At the end of planning, Var nodes appearing in upper-level plan nodes are
154
- * reassigned to point to the outputs of their subplans; for example, in a
155
- * join node varno becomes INNER_VAR or OUTER_VAR and varattno becomes the
156
- * index of the proper element of that subplan's target list. Similarly,
157
- * INDEX_VAR is used to identify Vars that reference an index column rather
158
- * than a heap column. (In ForeignScan and CustomScan plan nodes, INDEX_VAR
159
- * is abused to signify references to columns of a custom scan tuple type.)
160
- *
161
- * ROWID_VAR is used in the planner to identify nonce variables that carry
162
- * row identity information during UPDATE/DELETE/MERGE. This value should
163
- * never be seen outside the planner.
164
- *
165
- * In the parser, varnosyn and varattnosyn are either identical to
166
- * varno/varattno, or they specify the column's position in an aliased JOIN
167
- * RTE that hides the semantic referent RTE's refname. This is a syntactic
168
- * identifier as opposed to the semantic identifier; it tells ruleutils.c
169
- * how to print the Var properly. varnosyn/varattnosyn retain their values
170
- * throughout planning and execution, so they are particularly helpful to
171
- * identify Vars when debugging. Note, however, that a Var that is generated
172
- * in the planner and doesn't correspond to any simple relation column may
173
- * have varnosyn = varattnosyn = 0.
174
- */
175
- #define INNER_VAR (-1) /* reference to inner subplan */
176
- #define OUTER_VAR (-2) /* reference to outer subplan */
177
- #define INDEX_VAR (-3) /* reference to index column */
178
- #define ROWID_VAR (-4) /* row identity column during planning */
179
-
180
- #define IS_SPECIAL_VARNO(varno) ((int) (varno) < 0)
181
-
182
- /* Symbols for the indexes of the special RTE entries in rules */
183
- #define PRS2_OLD_VARNO 1
184
- #define PRS2_NEW_VARNO 2
185
-
186
- typedef struct Var
187
- {
188
- Expr xpr;
189
- int varno; /* index of this var's relation in the range
190
- * table, or INNER_VAR/OUTER_VAR/etc */
191
- AttrNumber varattno; /* attribute number of this var, or zero for
192
- * all attrs ("whole-row Var") */
193
- Oid vartype; /* pg_type OID for the type of this var */
194
- int32 vartypmod; /* pg_attribute typmod value */
195
- Oid varcollid; /* OID of collation, or InvalidOid if none */
196
- Index varlevelsup; /* for subquery variables referencing outer
197
- * relations; 0 in a normal var, >0 means N
198
- * levels up */
199
- Index varnosyn; /* syntactic relation index (0 if unknown) */
200
- AttrNumber varattnosyn; /* syntactic attribute number */
201
- int location; /* token location, or -1 if unknown */
202
- } Var;
203
-
204
- /*
205
- * Const
206
- *
207
- * Note: for varlena data types, we make a rule that a Const node's value
208
- * must be in non-extended form (4-byte header, no compression or external
209
- * references). This ensures that the Const node is self-contained and makes
210
- * it more likely that equal() will see logically identical values as equal.
211
- */
212
- typedef struct Const
213
- {
214
- Expr xpr;
215
- Oid consttype; /* pg_type OID of the constant's datatype */
216
- int32 consttypmod; /* typmod value, if any */
217
- Oid constcollid; /* OID of collation, or InvalidOid if none */
218
- int constlen; /* typlen of the constant's datatype */
219
- Datum constvalue; /* the constant's value */
220
- bool constisnull; /* whether the constant is null (if true,
221
- * constvalue is undefined) */
222
- bool constbyval; /* whether this datatype is passed by value.
223
- * If true, then all the information is stored
224
- * in the Datum. If false, then the Datum
225
- * contains a pointer to the information. */
226
- int location; /* token location, or -1 if unknown */
227
- } Const;
228
-
229
- /*
230
- * Param
231
- *
232
- * paramkind specifies the kind of parameter. The possible values
233
- * for this field are:
234
- *
235
- * PARAM_EXTERN: The parameter value is supplied from outside the plan.
236
- * Such parameters are numbered from 1 to n.
237
- *
238
- * PARAM_EXEC: The parameter is an internal executor parameter, used
239
- * for passing values into and out of sub-queries or from
240
- * nestloop joins to their inner scans.
241
- * For historical reasons, such parameters are numbered from 0.
242
- * These numbers are independent of PARAM_EXTERN numbers.
243
- *
244
- * PARAM_SUBLINK: The parameter represents an output column of a SubLink
245
- * node's sub-select. The column number is contained in the
246
- * `paramid' field. (This type of Param is converted to
247
- * PARAM_EXEC during planning.)
248
- *
249
- * PARAM_MULTIEXPR: Like PARAM_SUBLINK, the parameter represents an
250
- * output column of a SubLink node's sub-select, but here, the
251
- * SubLink is always a MULTIEXPR SubLink. The high-order 16 bits
252
- * of the `paramid' field contain the SubLink's subLinkId, and
253
- * the low-order 16 bits contain the column number. (This type
254
- * of Param is also converted to PARAM_EXEC during planning.)
255
- */
256
- typedef enum ParamKind
257
- {
258
- PARAM_EXTERN,
259
- PARAM_EXEC,
260
- PARAM_SUBLINK,
261
- PARAM_MULTIEXPR
262
- } ParamKind;
263
-
264
- typedef struct Param
265
- {
266
- Expr xpr;
267
- ParamKind paramkind; /* kind of parameter. See above */
268
- int paramid; /* numeric ID for parameter */
269
- Oid paramtype; /* pg_type OID of parameter's datatype */
270
- int32 paramtypmod; /* typmod value, if known */
271
- Oid paramcollid; /* OID of collation, or InvalidOid if none */
272
- int location; /* token location, or -1 if unknown */
273
- } Param;
274
-
275
- /*
276
- * Aggref
277
- *
278
- * The aggregate's args list is a targetlist, ie, a list of TargetEntry nodes.
279
- *
280
- * For a normal (non-ordered-set) aggregate, the non-resjunk TargetEntries
281
- * represent the aggregate's regular arguments (if any) and resjunk TLEs can
282
- * be added at the end to represent ORDER BY expressions that are not also
283
- * arguments. As in a top-level Query, the TLEs can be marked with
284
- * ressortgroupref indexes to let them be referenced by SortGroupClause
285
- * entries in the aggorder and/or aggdistinct lists. This represents ORDER BY
286
- * and DISTINCT operations to be applied to the aggregate input rows before
287
- * they are passed to the transition function. The grammar only allows a
288
- * simple "DISTINCT" specifier for the arguments, but we use the full
289
- * query-level representation to allow more code sharing.
290
- *
291
- * For an ordered-set aggregate, the args list represents the WITHIN GROUP
292
- * (aggregated) arguments, all of which will be listed in the aggorder list.
293
- * DISTINCT is not supported in this case, so aggdistinct will be NIL.
294
- * The direct arguments appear in aggdirectargs (as a list of plain
295
- * expressions, not TargetEntry nodes).
296
- *
297
- * aggtranstype is the data type of the state transition values for this
298
- * aggregate (resolved to an actual type, if agg's transtype is polymorphic).
299
- * This is determined during planning and is InvalidOid before that.
300
- *
301
- * aggargtypes is an OID list of the data types of the direct and regular
302
- * arguments. Normally it's redundant with the aggdirectargs and args lists,
303
- * but in a combining aggregate, it's not because the args list has been
304
- * replaced with a single argument representing the partial-aggregate
305
- * transition values.
306
- *
307
- * aggsplit indicates the expected partial-aggregation mode for the Aggref's
308
- * parent plan node. It's always set to AGGSPLIT_SIMPLE in the parser, but
309
- * the planner might change it to something else. We use this mainly as
310
- * a crosscheck that the Aggrefs match the plan; but note that when aggsplit
311
- * indicates a non-final mode, aggtype reflects the transition data type
312
- * not the SQL-level output type of the aggregate.
313
- *
314
- * aggno and aggtransno are -1 in the parse stage, and are set in planning.
315
- * Aggregates with the same 'aggno' represent the same aggregate expression,
316
- * and can share the result. Aggregates with same 'transno' but different
317
- * 'aggno' can share the same transition state, only the final function needs
318
- * to be called separately.
319
- */
320
- typedef struct Aggref
321
- {
322
- Expr xpr;
323
- Oid aggfnoid; /* pg_proc Oid of the aggregate */
324
- Oid aggtype; /* type Oid of result of the aggregate */
325
- Oid aggcollid; /* OID of collation of result */
326
- Oid inputcollid; /* OID of collation that function should use */
327
- Oid aggtranstype; /* type Oid of aggregate's transition value */
328
- List *aggargtypes; /* type Oids of direct and aggregated args */
329
- List *aggdirectargs; /* direct arguments, if an ordered-set agg */
330
- List *args; /* aggregated arguments and sort expressions */
331
- List *aggorder; /* ORDER BY (list of SortGroupClause) */
332
- List *aggdistinct; /* DISTINCT (list of SortGroupClause) */
333
- Expr *aggfilter; /* FILTER expression, if any */
334
- bool aggstar; /* true if argument list was really '*' */
335
- bool aggvariadic; /* true if variadic arguments have been
336
- * combined into an array last argument */
337
- char aggkind; /* aggregate kind (see pg_aggregate.h) */
338
- Index agglevelsup; /* > 0 if agg belongs to outer query */
339
- AggSplit aggsplit; /* expected agg-splitting mode of parent Agg */
340
- int aggno; /* unique ID within the Agg node */
341
- int aggtransno; /* unique ID of transition state in the Agg */
342
- int location; /* token location, or -1 if unknown */
343
- } Aggref;
344
-
345
- /*
346
- * GroupingFunc
347
- *
348
- * A GroupingFunc is a GROUPING(...) expression, which behaves in many ways
349
- * like an aggregate function (e.g. it "belongs" to a specific query level,
350
- * which might not be the one immediately containing it), but also differs in
351
- * an important respect: it never evaluates its arguments, they merely
352
- * designate expressions from the GROUP BY clause of the query level to which
353
- * it belongs.
354
- *
355
- * The spec defines the evaluation of GROUPING() purely by syntactic
356
- * replacement, but we make it a real expression for optimization purposes so
357
- * that one Agg node can handle multiple grouping sets at once. Evaluating the
358
- * result only needs the column positions to check against the grouping set
359
- * being projected. However, for EXPLAIN to produce meaningful output, we have
360
- * to keep the original expressions around, since expression deparse does not
361
- * give us any feasible way to get at the GROUP BY clause.
362
- *
363
- * Also, we treat two GroupingFunc nodes as equal if they have equal arguments
364
- * lists and agglevelsup, without comparing the refs and cols annotations.
365
- *
366
- * In raw parse output we have only the args list; parse analysis fills in the
367
- * refs list, and the planner fills in the cols list.
368
- */
369
- typedef struct GroupingFunc
370
- {
371
- Expr xpr;
372
- List *args; /* arguments, not evaluated but kept for
373
- * benefit of EXPLAIN etc. */
374
- List *refs; /* ressortgrouprefs of arguments */
375
- List *cols; /* actual column positions set by planner */
376
- Index agglevelsup; /* same as Aggref.agglevelsup */
377
- int location; /* token location */
378
- } GroupingFunc;
379
-
380
- /*
381
- * WindowFunc
382
- */
383
- typedef struct WindowFunc
384
- {
385
- Expr xpr;
386
- Oid winfnoid; /* pg_proc Oid of the function */
387
- Oid wintype; /* type Oid of result of the window function */
388
- Oid wincollid; /* OID of collation of result */
389
- Oid inputcollid; /* OID of collation that function should use */
390
- List *args; /* arguments to the window function */
391
- Expr *aggfilter; /* FILTER expression, if any */
392
- Index winref; /* index of associated WindowClause */
393
- bool winstar; /* true if argument list was really '*' */
394
- bool winagg; /* is function a simple aggregate? */
395
- int location; /* token location, or -1 if unknown */
396
- } WindowFunc;
397
-
398
- /*
399
- * SubscriptingRef: describes a subscripting operation over a container
400
- * (array, etc).
401
- *
402
- * A SubscriptingRef can describe fetching a single element from a container,
403
- * fetching a part of a container (e.g. an array slice), storing a single
404
- * element into a container, or storing a slice. The "store" cases work with
405
- * an initial container value and a source value that is inserted into the
406
- * appropriate part of the container; the result of the operation is an
407
- * entire new modified container value.
408
- *
409
- * If reflowerindexpr = NIL, then we are fetching or storing a single container
410
- * element at the subscripts given by refupperindexpr. Otherwise we are
411
- * fetching or storing a container slice, that is a rectangular subcontainer
412
- * with lower and upper bounds given by the index expressions.
413
- * reflowerindexpr must be the same length as refupperindexpr when it
414
- * is not NIL.
415
- *
416
- * In the slice case, individual expressions in the subscript lists can be
417
- * NULL, meaning "substitute the array's current lower or upper bound".
418
- * (Non-array containers may or may not support this.)
419
- *
420
- * refcontainertype is the actual container type that determines the
421
- * subscripting semantics. (This will generally be either the exposed type of
422
- * refexpr, or the base type if that is a domain.) refelemtype is the type of
423
- * the container's elements; this is saved for the use of the subscripting
424
- * functions, but is not used by the core code. refrestype, reftypmod, and
425
- * refcollid describe the type of the SubscriptingRef's result. In a store
426
- * expression, refrestype will always match refcontainertype; in a fetch,
427
- * it could be refelemtype for an element fetch, or refcontainertype for a
428
- * slice fetch, or possibly something else as determined by type-specific
429
- * subscripting logic. Likewise, reftypmod and refcollid will match the
430
- * container's properties in a store, but could be different in a fetch.
431
- *
432
- * Note: for the cases where a container is returned, if refexpr yields a R/W
433
- * expanded container, then the implementation is allowed to modify that
434
- * object in-place and return the same object.
435
- */
436
- typedef struct SubscriptingRef
437
- {
438
- Expr xpr;
439
- Oid refcontainertype; /* type of the container proper */
440
- Oid refelemtype; /* the container type's pg_type.typelem */
441
- Oid refrestype; /* type of the SubscriptingRef's result */
442
- int32 reftypmod; /* typmod of the result */
443
- Oid refcollid; /* collation of result, or InvalidOid if none */
444
- List *refupperindexpr; /* expressions that evaluate to upper
445
- * container indexes */
446
- List *reflowerindexpr; /* expressions that evaluate to lower
447
- * container indexes, or NIL for single
448
- * container element */
449
- Expr *refexpr; /* the expression that evaluates to a
450
- * container value */
451
- Expr *refassgnexpr; /* expression for the source value, or NULL if
452
- * fetch */
453
- } SubscriptingRef;
454
-
455
- /*
456
- * CoercionContext - distinguishes the allowed set of type casts
457
- *
458
- * NB: ordering of the alternatives is significant; later (larger) values
459
- * allow more casts than earlier ones.
460
- */
461
- typedef enum CoercionContext
462
- {
463
- COERCION_IMPLICIT, /* coercion in context of expression */
464
- COERCION_ASSIGNMENT, /* coercion in context of assignment */
465
- COERCION_PLPGSQL, /* if no assignment cast, use CoerceViaIO */
466
- COERCION_EXPLICIT /* explicit cast operation */
467
- } CoercionContext;
468
-
469
- /*
470
- * CoercionForm - how to display a FuncExpr or related node
471
- *
472
- * "Coercion" is a bit of a misnomer, since this value records other
473
- * special syntaxes besides casts, but for now we'll keep this naming.
474
- *
475
- * NB: equal() ignores CoercionForm fields, therefore this *must* not carry
476
- * any semantically significant information. We need that behavior so that
477
- * the planner will consider equivalent implicit and explicit casts to be
478
- * equivalent. In cases where those actually behave differently, the coercion
479
- * function's arguments will be different.
480
- */
481
- typedef enum CoercionForm
482
- {
483
- COERCE_EXPLICIT_CALL, /* display as a function call */
484
- COERCE_EXPLICIT_CAST, /* display as an explicit cast */
485
- COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
486
- COERCE_SQL_SYNTAX /* display with SQL-mandated special syntax */
487
- } CoercionForm;
488
-
489
- /*
490
- * FuncExpr - expression node for a function call
491
- */
492
- typedef struct FuncExpr
493
- {
494
- Expr xpr;
495
- Oid funcid; /* PG_PROC OID of the function */
496
- Oid funcresulttype; /* PG_TYPE OID of result value */
497
- bool funcretset; /* true if function returns set */
498
- bool funcvariadic; /* true if variadic arguments have been
499
- * combined into an array last argument */
500
- CoercionForm funcformat; /* how to display this function call */
501
- Oid funccollid; /* OID of collation of result */
502
- Oid inputcollid; /* OID of collation that function should use */
503
- List *args; /* arguments to the function */
504
- int location; /* token location, or -1 if unknown */
505
- } FuncExpr;
506
-
507
- /*
508
- * NamedArgExpr - a named argument of a function
509
- *
510
- * This node type can only appear in the args list of a FuncCall or FuncExpr
511
- * node. We support pure positional call notation (no named arguments),
512
- * named notation (all arguments are named), and mixed notation (unnamed
513
- * arguments followed by named ones).
514
- *
515
- * Parse analysis sets argnumber to the positional index of the argument,
516
- * but doesn't rearrange the argument list.
517
- *
518
- * The planner will convert argument lists to pure positional notation
519
- * during expression preprocessing, so execution never sees a NamedArgExpr.
520
- */
521
- typedef struct NamedArgExpr
522
- {
523
- Expr xpr;
524
- Expr *arg; /* the argument expression */
525
- char *name; /* the name */
526
- int argnumber; /* argument's number in positional notation */
527
- int location; /* argument name location, or -1 if unknown */
528
- } NamedArgExpr;
529
-
530
- /*
531
- * OpExpr - expression node for an operator invocation
532
- *
533
- * Semantically, this is essentially the same as a function call.
534
- *
535
- * Note that opfuncid is not necessarily filled in immediately on creation
536
- * of the node. The planner makes sure it is valid before passing the node
537
- * tree to the executor, but during parsing/planning opfuncid can be 0.
538
- */
539
- typedef struct OpExpr
540
- {
541
- Expr xpr;
542
- Oid opno; /* PG_OPERATOR OID of the operator */
543
- Oid opfuncid; /* PG_PROC OID of underlying function */
544
- Oid opresulttype; /* PG_TYPE OID of result value */
545
- bool opretset; /* true if operator returns set */
546
- Oid opcollid; /* OID of collation of result */
547
- Oid inputcollid; /* OID of collation that operator should use */
548
- List *args; /* arguments to the operator (1 or 2) */
549
- int location; /* token location, or -1 if unknown */
550
- } OpExpr;
551
-
552
- /*
553
- * DistinctExpr - expression node for "x IS DISTINCT FROM y"
554
- *
555
- * Except for the nodetag, this is represented identically to an OpExpr
556
- * referencing the "=" operator for x and y.
557
- * We use "=", not the more obvious "<>", because more datatypes have "="
558
- * than "<>". This means the executor must invert the operator result.
559
- * Note that the operator function won't be called at all if either input
560
- * is NULL, since then the result can be determined directly.
561
- */
562
- typedef OpExpr DistinctExpr;
563
-
564
- /*
565
- * NullIfExpr - a NULLIF expression
566
- *
567
- * Like DistinctExpr, this is represented the same as an OpExpr referencing
568
- * the "=" operator for x and y.
569
- */
570
- typedef OpExpr NullIfExpr;
571
-
572
- /*
573
- * ScalarArrayOpExpr - expression node for "scalar op ANY/ALL (array)"
574
- *
575
- * The operator must yield boolean. It is applied to the left operand
576
- * and each element of the righthand array, and the results are combined
577
- * with OR or AND (for ANY or ALL respectively). The node representation
578
- * is almost the same as for the underlying operator, but we need a useOr
579
- * flag to remember whether it's ANY or ALL, and we don't have to store
580
- * the result type (or the collation) because it must be boolean.
581
- *
582
- * A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution
583
- * by building a hash table containing the Const values from the RHS arg.
584
- * This table is probed during expression evaluation. The planner will set
585
- * hashfuncid to the hash function which must be used to build and probe the
586
- * hash table. The executor determines if it should use hash-based checks or
587
- * the more traditional means based on if the hashfuncid is set or not.
588
- *
589
- * When performing hashed NOT IN, the negfuncid will also be set to the
590
- * equality function which the hash table must use to build and probe the hash
591
- * table. opno and opfuncid will remain set to the <> operator and its
592
- * corresponding function and won't be used during execution. For
593
- * non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
594
- * convert_saop_to_hashed_saop().
595
- */
596
- typedef struct ScalarArrayOpExpr
597
- {
598
- Expr xpr;
599
- Oid opno; /* PG_OPERATOR OID of the operator */
600
- Oid opfuncid; /* PG_PROC OID of comparison function */
601
- Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */
602
- Oid negfuncid; /* PG_PROC OID of negator of opfuncid function
603
- * or InvalidOid. See above */
604
- bool useOr; /* true for ANY, false for ALL */
605
- Oid inputcollid; /* OID of collation that operator should use */
606
- List *args; /* the scalar and array operands */
607
- int location; /* token location, or -1 if unknown */
608
- } ScalarArrayOpExpr;
609
-
610
- /*
611
- * BoolExpr - expression node for the basic Boolean operators AND, OR, NOT
612
- *
613
- * Notice the arguments are given as a List. For NOT, of course the list
614
- * must always have exactly one element. For AND and OR, there can be two
615
- * or more arguments.
616
- */
617
- typedef enum BoolExprType
618
- {
619
- AND_EXPR, OR_EXPR, NOT_EXPR
620
- } BoolExprType;
621
-
622
- typedef struct BoolExpr
623
- {
624
- Expr xpr;
625
- BoolExprType boolop;
626
- List *args; /* arguments to this expression */
627
- int location; /* token location, or -1 if unknown */
628
- } BoolExpr;
629
-
630
- /*
631
- * SubLink
632
- *
633
- * A SubLink represents a subselect appearing in an expression, and in some
634
- * cases also the combining operator(s) just above it. The subLinkType
635
- * indicates the form of the expression represented:
636
- * EXISTS_SUBLINK EXISTS(SELECT ...)
637
- * ALL_SUBLINK (lefthand) op ALL (SELECT ...)
638
- * ANY_SUBLINK (lefthand) op ANY (SELECT ...)
639
- * ROWCOMPARE_SUBLINK (lefthand) op (SELECT ...)
640
- * EXPR_SUBLINK (SELECT with single targetlist item ...)
641
- * MULTIEXPR_SUBLINK (SELECT with multiple targetlist items ...)
642
- * ARRAY_SUBLINK ARRAY(SELECT with single targetlist item ...)
643
- * CTE_SUBLINK WITH query (never actually part of an expression)
644
- * For ALL, ANY, and ROWCOMPARE, the lefthand is a list of expressions of the
645
- * same length as the subselect's targetlist. ROWCOMPARE will *always* have
646
- * a list with more than one entry; if the subselect has just one target
647
- * then the parser will create an EXPR_SUBLINK instead (and any operator
648
- * above the subselect will be represented separately).
649
- * ROWCOMPARE, EXPR, and MULTIEXPR require the subselect to deliver at most
650
- * one row (if it returns no rows, the result is NULL).
651
- * ALL, ANY, and ROWCOMPARE require the combining operators to deliver boolean
652
- * results. ALL and ANY combine the per-row results using AND and OR
653
- * semantics respectively.
654
- * ARRAY requires just one target column, and creates an array of the target
655
- * column's type using any number of rows resulting from the subselect.
656
- *
657
- * SubLink is classed as an Expr node, but it is not actually executable;
658
- * it must be replaced in the expression tree by a SubPlan node during
659
- * planning.
660
- *
661
- * NOTE: in the raw output of gram.y, testexpr contains just the raw form
662
- * of the lefthand expression (if any), and operName is the String name of
663
- * the combining operator. Also, subselect is a raw parsetree. During parse
664
- * analysis, the parser transforms testexpr into a complete boolean expression
665
- * that compares the lefthand value(s) to PARAM_SUBLINK nodes representing the
666
- * output columns of the subselect. And subselect is transformed to a Query.
667
- * This is the representation seen in saved rules and in the rewriter.
668
- *
669
- * In EXISTS, EXPR, MULTIEXPR, and ARRAY SubLinks, testexpr and operName
670
- * are unused and are always null.
671
- *
672
- * subLinkId is currently used only for MULTIEXPR SubLinks, and is zero in
673
- * other SubLinks. This number identifies different multiple-assignment
674
- * subqueries within an UPDATE statement's SET list. It is unique only
675
- * within a particular targetlist. The output column(s) of the MULTIEXPR
676
- * are referenced by PARAM_MULTIEXPR Params appearing elsewhere in the tlist.
677
- *
678
- * The CTE_SUBLINK case never occurs in actual SubLink nodes, but it is used
679
- * in SubPlans generated for WITH subqueries.
680
- */
681
- typedef enum SubLinkType
682
- {
683
- EXISTS_SUBLINK,
684
- ALL_SUBLINK,
685
- ANY_SUBLINK,
686
- ROWCOMPARE_SUBLINK,
687
- EXPR_SUBLINK,
688
- MULTIEXPR_SUBLINK,
689
- ARRAY_SUBLINK,
690
- CTE_SUBLINK /* for SubPlans only */
691
- } SubLinkType;
692
-
693
-
694
- typedef struct SubLink
695
- {
696
- Expr xpr;
697
- SubLinkType subLinkType; /* see above */
698
- int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
699
- Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
700
- List *operName; /* originally specified operator name */
701
- Node *subselect; /* subselect as Query* or raw parsetree */
702
- int location; /* token location, or -1 if unknown */
703
- } SubLink;
704
-
705
- /*
706
- * SubPlan - executable expression node for a subplan (sub-SELECT)
707
- *
708
- * The planner replaces SubLink nodes in expression trees with SubPlan
709
- * nodes after it has finished planning the subquery. SubPlan references
710
- * a sub-plantree stored in the subplans list of the toplevel PlannedStmt.
711
- * (We avoid a direct link to make it easier to copy expression trees
712
- * without causing multiple processing of the subplan.)
713
- *
714
- * In an ordinary subplan, testexpr points to an executable expression
715
- * (OpExpr, an AND/OR tree of OpExprs, or RowCompareExpr) for the combining
716
- * operator(s); the left-hand arguments are the original lefthand expressions,
717
- * and the right-hand arguments are PARAM_EXEC Param nodes representing the
718
- * outputs of the sub-select. (NOTE: runtime coercion functions may be
719
- * inserted as well.) This is just the same expression tree as testexpr in
720
- * the original SubLink node, but the PARAM_SUBLINK nodes are replaced by
721
- * suitably numbered PARAM_EXEC nodes.
722
- *
723
- * If the sub-select becomes an initplan rather than a subplan, the executable
724
- * expression is part of the outer plan's expression tree (and the SubPlan
725
- * node itself is not, but rather is found in the outer plan's initPlan
726
- * list). In this case testexpr is NULL to avoid duplication.
727
- *
728
- * The planner also derives lists of the values that need to be passed into
729
- * and out of the subplan. Input values are represented as a list "args" of
730
- * expressions to be evaluated in the outer-query context (currently these
731
- * args are always just Vars, but in principle they could be any expression).
732
- * The values are assigned to the global PARAM_EXEC params indexed by parParam
733
- * (the parParam and args lists must have the same ordering). setParam is a
734
- * list of the PARAM_EXEC params that are computed by the sub-select, if it
735
- * is an initplan; they are listed in order by sub-select output column
736
- * position. (parParam and setParam are integer Lists, not Bitmapsets,
737
- * because their ordering is significant.)
738
- *
739
- * Also, the planner computes startup and per-call costs for use of the
740
- * SubPlan. Note that these include the cost of the subquery proper,
741
- * evaluation of the testexpr if any, and any hashtable management overhead.
742
- */
743
- typedef struct SubPlan
744
- {
745
- Expr xpr;
746
- /* Fields copied from original SubLink: */
747
- SubLinkType subLinkType; /* see above */
748
- /* The combining operators, transformed to an executable expression: */
749
- Node *testexpr; /* OpExpr or RowCompareExpr expression tree */
750
- List *paramIds; /* IDs of Params embedded in the above */
751
- /* Identification of the Plan tree to use: */
752
- int plan_id; /* Index (from 1) in PlannedStmt.subplans */
753
- /* Identification of the SubPlan for EXPLAIN and debugging purposes: */
754
- char *plan_name; /* A name assigned during planning */
755
- /* Extra data useful for determining subplan's output type: */
756
- Oid firstColType; /* Type of first column of subplan result */
757
- int32 firstColTypmod; /* Typmod of first column of subplan result */
758
- Oid firstColCollation; /* Collation of first column of subplan
759
- * result */
760
- /* Information about execution strategy: */
761
- bool useHashTable; /* true to store subselect output in a hash
762
- * table (implies we are doing "IN") */
763
- bool unknownEqFalse; /* true if it's okay to return FALSE when the
764
- * spec result is UNKNOWN; this allows much
765
- * simpler handling of null values */
766
- bool parallel_safe; /* is the subplan parallel-safe? */
767
- /* Note: parallel_safe does not consider contents of testexpr or args */
768
- /* Information for passing params into and out of the subselect: */
769
- /* setParam and parParam are lists of integers (param IDs) */
770
- List *setParam; /* initplan subqueries have to set these
771
- * Params for parent plan */
772
- List *parParam; /* indices of input Params from parent plan */
773
- List *args; /* exprs to pass as parParam values */
774
- /* Estimated execution costs: */
775
- Cost startup_cost; /* one-time setup cost */
776
- Cost per_call_cost; /* cost for each subplan evaluation */
777
- } SubPlan;
778
-
779
- /*
780
- * AlternativeSubPlan - expression node for a choice among SubPlans
781
- *
782
- * This is used only transiently during planning: by the time the plan
783
- * reaches the executor, all AlternativeSubPlan nodes have been removed.
784
- *
785
- * The subplans are given as a List so that the node definition need not
786
- * change if there's ever more than two alternatives. For the moment,
787
- * though, there are always exactly two; and the first one is the fast-start
788
- * plan.
789
- */
790
- typedef struct AlternativeSubPlan
791
- {
792
- Expr xpr;
793
- List *subplans; /* SubPlan(s) with equivalent results */
794
- } AlternativeSubPlan;
795
-
796
- /* ----------------
797
- * FieldSelect
798
- *
799
- * FieldSelect represents the operation of extracting one field from a tuple
800
- * value. At runtime, the input expression is expected to yield a rowtype
801
- * Datum. The specified field number is extracted and returned as a Datum.
802
- * ----------------
803
- */
804
-
805
- typedef struct FieldSelect
806
- {
807
- Expr xpr;
808
- Expr *arg; /* input expression */
809
- AttrNumber fieldnum; /* attribute number of field to extract */
810
- Oid resulttype; /* type of the field (result type of this
811
- * node) */
812
- int32 resulttypmod; /* output typmod (usually -1) */
813
- Oid resultcollid; /* OID of collation of the field */
814
- } FieldSelect;
815
-
816
- /* ----------------
817
- * FieldStore
818
- *
819
- * FieldStore represents the operation of modifying one field in a tuple
820
- * value, yielding a new tuple value (the input is not touched!). Like
821
- * the assign case of SubscriptingRef, this is used to implement UPDATE of a
822
- * portion of a column.
823
- *
824
- * resulttype is always a named composite type (not a domain). To update
825
- * a composite domain value, apply CoerceToDomain to the FieldStore.
826
- *
827
- * A single FieldStore can actually represent updates of several different
828
- * fields. The parser only generates FieldStores with single-element lists,
829
- * but the planner will collapse multiple updates of the same base column
830
- * into one FieldStore.
831
- * ----------------
832
- */
833
-
834
- typedef struct FieldStore
835
- {
836
- Expr xpr;
837
- Expr *arg; /* input tuple value */
838
- List *newvals; /* new value(s) for field(s) */
839
- List *fieldnums; /* integer list of field attnums */
840
- Oid resulttype; /* type of result (same as type of arg) */
841
- /* Like RowExpr, we deliberately omit a typmod and collation here */
842
- } FieldStore;
843
-
844
- /* ----------------
845
- * RelabelType
846
- *
847
- * RelabelType represents a "dummy" type coercion between two binary-
848
- * compatible datatypes, such as reinterpreting the result of an OID
849
- * expression as an int4. It is a no-op at runtime; we only need it
850
- * to provide a place to store the correct type to be attributed to
851
- * the expression result during type resolution. (We can't get away
852
- * with just overwriting the type field of the input expression node,
853
- * so we need a separate node to show the coercion's result type.)
854
- * ----------------
855
- */
856
-
857
- typedef struct RelabelType
858
- {
859
- Expr xpr;
860
- Expr *arg; /* input expression */
861
- Oid resulttype; /* output type of coercion expression */
862
- int32 resulttypmod; /* output typmod (usually -1) */
863
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
864
- CoercionForm relabelformat; /* how to display this node */
865
- int location; /* token location, or -1 if unknown */
866
- } RelabelType;
867
-
868
- /* ----------------
869
- * CoerceViaIO
870
- *
871
- * CoerceViaIO represents a type coercion between two types whose textual
872
- * representations are compatible, implemented by invoking the source type's
873
- * typoutput function then the destination type's typinput function.
874
- * ----------------
875
- */
876
-
877
- typedef struct CoerceViaIO
878
- {
879
- Expr xpr;
880
- Expr *arg; /* input expression */
881
- Oid resulttype; /* output type of coercion */
882
- /* output typmod is not stored, but is presumed -1 */
883
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
884
- CoercionForm coerceformat; /* how to display this node */
885
- int location; /* token location, or -1 if unknown */
886
- } CoerceViaIO;
887
-
888
- /* ----------------
889
- * ArrayCoerceExpr
890
- *
891
- * ArrayCoerceExpr represents a type coercion from one array type to another,
892
- * which is implemented by applying the per-element coercion expression
893
- * "elemexpr" to each element of the source array. Within elemexpr, the
894
- * source element is represented by a CaseTestExpr node. Note that even if
895
- * elemexpr is a no-op (that is, just CaseTestExpr + RelabelType), the
896
- * coercion still requires some effort: we have to fix the element type OID
897
- * stored in the array header.
898
- * ----------------
899
- */
900
-
901
- typedef struct ArrayCoerceExpr
902
- {
903
- Expr xpr;
904
- Expr *arg; /* input expression (yields an array) */
905
- Expr *elemexpr; /* expression representing per-element work */
906
- Oid resulttype; /* output type of coercion (an array type) */
907
- int32 resulttypmod; /* output typmod (also element typmod) */
908
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
909
- CoercionForm coerceformat; /* how to display this node */
910
- int location; /* token location, or -1 if unknown */
911
- } ArrayCoerceExpr;
912
-
913
- /* ----------------
914
- * ConvertRowtypeExpr
915
- *
916
- * ConvertRowtypeExpr represents a type coercion from one composite type
917
- * to another, where the source type is guaranteed to contain all the columns
918
- * needed for the destination type plus possibly others; the columns need not
919
- * be in the same positions, but are matched up by name. This is primarily
920
- * used to convert a whole-row value of an inheritance child table into a
921
- * valid whole-row value of its parent table's rowtype. Both resulttype
922
- * and the exposed type of "arg" must be named composite types (not domains).
923
- * ----------------
924
- */
925
-
926
- typedef struct ConvertRowtypeExpr
927
- {
928
- Expr xpr;
929
- Expr *arg; /* input expression */
930
- Oid resulttype; /* output type (always a composite type) */
931
- /* Like RowExpr, we deliberately omit a typmod and collation here */
932
- CoercionForm convertformat; /* how to display this node */
933
- int location; /* token location, or -1 if unknown */
934
- } ConvertRowtypeExpr;
935
-
936
- /*----------
937
- * CollateExpr - COLLATE
938
- *
939
- * The planner replaces CollateExpr with RelabelType during expression
940
- * preprocessing, so execution never sees a CollateExpr.
941
- *----------
942
- */
943
- typedef struct CollateExpr
944
- {
945
- Expr xpr;
946
- Expr *arg; /* input expression */
947
- Oid collOid; /* collation's OID */
948
- int location; /* token location, or -1 if unknown */
949
- } CollateExpr;
950
-
951
- /*----------
952
- * CaseExpr - a CASE expression
953
- *
954
- * We support two distinct forms of CASE expression:
955
- * CASE WHEN boolexpr THEN expr [ WHEN boolexpr THEN expr ... ]
956
- * CASE testexpr WHEN compexpr THEN expr [ WHEN compexpr THEN expr ... ]
957
- * These are distinguishable by the "arg" field being NULL in the first case
958
- * and the testexpr in the second case.
959
- *
960
- * In the raw grammar output for the second form, the condition expressions
961
- * of the WHEN clauses are just the comparison values. Parse analysis
962
- * converts these to valid boolean expressions of the form
963
- * CaseTestExpr '=' compexpr
964
- * where the CaseTestExpr node is a placeholder that emits the correct
965
- * value at runtime. This structure is used so that the testexpr need be
966
- * evaluated only once. Note that after parse analysis, the condition
967
- * expressions always yield boolean.
968
- *
969
- * Note: we can test whether a CaseExpr has been through parse analysis
970
- * yet by checking whether casetype is InvalidOid or not.
971
- *----------
972
- */
973
- typedef struct CaseExpr
974
- {
975
- Expr xpr;
976
- Oid casetype; /* type of expression result */
977
- Oid casecollid; /* OID of collation, or InvalidOid if none */
978
- Expr *arg; /* implicit equality comparison argument */
979
- List *args; /* the arguments (list of WHEN clauses) */
980
- Expr *defresult; /* the default result (ELSE clause) */
981
- int location; /* token location, or -1 if unknown */
982
- } CaseExpr;
983
-
984
- /*
985
- * CaseWhen - one arm of a CASE expression
986
- */
987
- typedef struct CaseWhen
988
- {
989
- Expr xpr;
990
- Expr *expr; /* condition expression */
991
- Expr *result; /* substitution result */
992
- int location; /* token location, or -1 if unknown */
993
- } CaseWhen;
994
-
995
- /*
996
- * Placeholder node for the test value to be processed by a CASE expression.
997
- * This is effectively like a Param, but can be implemented more simply
998
- * since we need only one replacement value at a time.
999
- *
1000
- * We also abuse this node type for some other purposes, including:
1001
- * * Placeholder for the current array element value in ArrayCoerceExpr;
1002
- * see build_coercion_expression().
1003
- * * Nested FieldStore/SubscriptingRef assignment expressions in INSERT/UPDATE;
1004
- * see transformAssignmentIndirection().
1005
- *
1006
- * The uses in CaseExpr and ArrayCoerceExpr are safe only to the extent that
1007
- * there is not any other CaseExpr or ArrayCoerceExpr between the value source
1008
- * node and its child CaseTestExpr(s). This is true in the parse analysis
1009
- * output, but the planner's function-inlining logic has to be careful not to
1010
- * break it.
1011
- *
1012
- * The nested-assignment-expression case is safe because the only node types
1013
- * that can be above such CaseTestExprs are FieldStore and SubscriptingRef.
1014
- */
1015
- typedef struct CaseTestExpr
1016
- {
1017
- Expr xpr;
1018
- Oid typeId; /* type for substituted value */
1019
- int32 typeMod; /* typemod for substituted value */
1020
- Oid collation; /* collation for the substituted value */
1021
- } CaseTestExpr;
1022
-
1023
- /*
1024
- * ArrayExpr - an ARRAY[] expression
1025
- *
1026
- * Note: if multidims is false, the constituent expressions all yield the
1027
- * scalar type identified by element_typeid. If multidims is true, the
1028
- * constituent expressions all yield arrays of element_typeid (ie, the same
1029
- * type as array_typeid); at runtime we must check for compatible subscripts.
1030
- */
1031
- typedef struct ArrayExpr
1032
- {
1033
- Expr xpr;
1034
- Oid array_typeid; /* type of expression result */
1035
- Oid array_collid; /* OID of collation, or InvalidOid if none */
1036
- Oid element_typeid; /* common type of array elements */
1037
- List *elements; /* the array elements or sub-arrays */
1038
- bool multidims; /* true if elements are sub-arrays */
1039
- int location; /* token location, or -1 if unknown */
1040
- } ArrayExpr;
1041
-
1042
- /*
1043
- * RowExpr - a ROW() expression
1044
- *
1045
- * Note: the list of fields must have a one-for-one correspondence with
1046
- * physical fields of the associated rowtype, although it is okay for it
1047
- * to be shorter than the rowtype. That is, the N'th list element must
1048
- * match up with the N'th physical field. When the N'th physical field
1049
- * is a dropped column (attisdropped) then the N'th list element can just
1050
- * be a NULL constant. (This case can only occur for named composite types,
1051
- * not RECORD types, since those are built from the RowExpr itself rather
1052
- * than vice versa.) It is important not to assume that length(args) is
1053
- * the same as the number of columns logically present in the rowtype.
1054
- *
1055
- * colnames provides field names if the ROW() result is of type RECORD.
1056
- * Names *must* be provided if row_typeid is RECORDOID; but if it is a
1057
- * named composite type, colnames will be ignored in favor of using the
1058
- * type's cataloged field names, so colnames should be NIL. Like the
1059
- * args list, colnames is defined to be one-for-one with physical fields
1060
- * of the rowtype (although dropped columns shouldn't appear in the
1061
- * RECORD case, so this fine point is currently moot).
1062
- */
1063
- typedef struct RowExpr
1064
- {
1065
- Expr xpr;
1066
- List *args; /* the fields */
1067
- Oid row_typeid; /* RECORDOID or a composite type's ID */
1068
-
1069
- /*
1070
- * row_typeid cannot be a domain over composite, only plain composite. To
1071
- * create a composite domain value, apply CoerceToDomain to the RowExpr.
1072
- *
1073
- * Note: we deliberately do NOT store a typmod. Although a typmod will be
1074
- * associated with specific RECORD types at runtime, it will differ for
1075
- * different backends, and so cannot safely be stored in stored
1076
- * parsetrees. We must assume typmod -1 for a RowExpr node.
1077
- *
1078
- * We don't need to store a collation either. The result type is
1079
- * necessarily composite, and composite types never have a collation.
1080
- */
1081
- CoercionForm row_format; /* how to display this node */
1082
- List *colnames; /* list of String, or NIL */
1083
- int location; /* token location, or -1 if unknown */
1084
- } RowExpr;
1085
-
1086
- /*
1087
- * RowCompareExpr - row-wise comparison, such as (a, b) <= (1, 2)
1088
- *
1089
- * We support row comparison for any operator that can be determined to
1090
- * act like =, <>, <, <=, >, or >= (we determine this by looking for the
1091
- * operator in btree opfamilies). Note that the same operator name might
1092
- * map to a different operator for each pair of row elements, since the
1093
- * element datatypes can vary.
1094
- *
1095
- * A RowCompareExpr node is only generated for the < <= > >= cases;
1096
- * the = and <> cases are translated to simple AND or OR combinations
1097
- * of the pairwise comparisons. However, we include = and <> in the
1098
- * RowCompareType enum for the convenience of parser logic.
1099
- */
1100
- typedef enum RowCompareType
1101
- {
1102
- /* Values of this enum are chosen to match btree strategy numbers */
1103
- ROWCOMPARE_LT = 1, /* BTLessStrategyNumber */
1104
- ROWCOMPARE_LE = 2, /* BTLessEqualStrategyNumber */
1105
- ROWCOMPARE_EQ = 3, /* BTEqualStrategyNumber */
1106
- ROWCOMPARE_GE = 4, /* BTGreaterEqualStrategyNumber */
1107
- ROWCOMPARE_GT = 5, /* BTGreaterStrategyNumber */
1108
- ROWCOMPARE_NE = 6 /* no such btree strategy */
1109
- } RowCompareType;
1110
-
1111
- typedef struct RowCompareExpr
1112
- {
1113
- Expr xpr;
1114
- RowCompareType rctype; /* LT LE GE or GT, never EQ or NE */
1115
- List *opnos; /* OID list of pairwise comparison ops */
1116
- List *opfamilies; /* OID list of containing operator families */
1117
- List *inputcollids; /* OID list of collations for comparisons */
1118
- List *largs; /* the left-hand input arguments */
1119
- List *rargs; /* the right-hand input arguments */
1120
- } RowCompareExpr;
1121
-
1122
- /*
1123
- * CoalesceExpr - a COALESCE expression
1124
- */
1125
- typedef struct CoalesceExpr
1126
- {
1127
- Expr xpr;
1128
- Oid coalescetype; /* type of expression result */
1129
- Oid coalescecollid; /* OID of collation, or InvalidOid if none */
1130
- List *args; /* the arguments */
1131
- int location; /* token location, or -1 if unknown */
1132
- } CoalesceExpr;
1133
-
1134
- /*
1135
- * MinMaxExpr - a GREATEST or LEAST function
1136
- */
1137
- typedef enum MinMaxOp
1138
- {
1139
- IS_GREATEST,
1140
- IS_LEAST
1141
- } MinMaxOp;
1142
-
1143
- typedef struct MinMaxExpr
1144
- {
1145
- Expr xpr;
1146
- Oid minmaxtype; /* common type of arguments and result */
1147
- Oid minmaxcollid; /* OID of collation of result */
1148
- Oid inputcollid; /* OID of collation that function should use */
1149
- MinMaxOp op; /* function to execute */
1150
- List *args; /* the arguments */
1151
- int location; /* token location, or -1 if unknown */
1152
- } MinMaxExpr;
1153
-
1154
- /*
1155
- * SQLValueFunction - parameterless functions with special grammar productions
1156
- *
1157
- * The SQL standard categorizes some of these as <datetime value function>
1158
- * and others as <general value specification>. We call 'em SQLValueFunctions
1159
- * for lack of a better term. We store type and typmod of the result so that
1160
- * some code doesn't need to know each function individually, and because
1161
- * we would need to store typmod anyway for some of the datetime functions.
1162
- * Note that currently, all variants return non-collating datatypes, so we do
1163
- * not need a collation field; also, all these functions are stable.
1164
- */
1165
- typedef enum SQLValueFunctionOp
1166
- {
1167
- SVFOP_CURRENT_DATE,
1168
- SVFOP_CURRENT_TIME,
1169
- SVFOP_CURRENT_TIME_N,
1170
- SVFOP_CURRENT_TIMESTAMP,
1171
- SVFOP_CURRENT_TIMESTAMP_N,
1172
- SVFOP_LOCALTIME,
1173
- SVFOP_LOCALTIME_N,
1174
- SVFOP_LOCALTIMESTAMP,
1175
- SVFOP_LOCALTIMESTAMP_N,
1176
- SVFOP_CURRENT_ROLE,
1177
- SVFOP_CURRENT_USER,
1178
- SVFOP_USER,
1179
- SVFOP_SESSION_USER,
1180
- SVFOP_CURRENT_CATALOG,
1181
- SVFOP_CURRENT_SCHEMA
1182
- } SQLValueFunctionOp;
1183
-
1184
- typedef struct SQLValueFunction
1185
- {
1186
- Expr xpr;
1187
- SQLValueFunctionOp op; /* which function this is */
1188
- Oid type; /* result type/typmod */
1189
- int32 typmod;
1190
- int location; /* token location, or -1 if unknown */
1191
- } SQLValueFunction;
1192
-
1193
- /*
1194
- * XmlExpr - various SQL/XML functions requiring special grammar productions
1195
- *
1196
- * 'name' carries the "NAME foo" argument (already XML-escaped).
1197
- * 'named_args' and 'arg_names' represent an xml_attribute list.
1198
- * 'args' carries all other arguments.
1199
- *
1200
- * Note: result type/typmod/collation are not stored, but can be deduced
1201
- * from the XmlExprOp. The type/typmod fields are just used for display
1202
- * purposes, and are NOT necessarily the true result type of the node.
1203
- */
1204
- typedef enum XmlExprOp
1205
- {
1206
- IS_XMLCONCAT, /* XMLCONCAT(args) */
1207
- IS_XMLELEMENT, /* XMLELEMENT(name, xml_attributes, args) */
1208
- IS_XMLFOREST, /* XMLFOREST(xml_attributes) */
1209
- IS_XMLPARSE, /* XMLPARSE(text, is_doc, preserve_ws) */
1210
- IS_XMLPI, /* XMLPI(name [, args]) */
1211
- IS_XMLROOT, /* XMLROOT(xml, version, standalone) */
1212
- IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval) */
1213
- IS_DOCUMENT /* xmlval IS DOCUMENT */
1214
- } XmlExprOp;
1215
-
1216
- typedef enum XmlOptionType
1217
- {
1218
- XMLOPTION_DOCUMENT,
1219
- XMLOPTION_CONTENT
1220
- } XmlOptionType;
1221
-
1222
- typedef struct XmlExpr
1223
- {
1224
- Expr xpr;
1225
- XmlExprOp op; /* xml function ID */
1226
- char *name; /* name in xml(NAME foo ...) syntaxes */
1227
- List *named_args; /* non-XML expressions for xml_attributes */
1228
- List *arg_names; /* parallel list of String values */
1229
- List *args; /* list of expressions */
1230
- XmlOptionType xmloption; /* DOCUMENT or CONTENT */
1231
- Oid type; /* target type/typmod for XMLSERIALIZE */
1232
- int32 typmod;
1233
- int location; /* token location, or -1 if unknown */
1234
- } XmlExpr;
1235
-
1236
- /* ----------------
1237
- * NullTest
1238
- *
1239
- * NullTest represents the operation of testing a value for NULLness.
1240
- * The appropriate test is performed and returned as a boolean Datum.
1241
- *
1242
- * When argisrow is false, this simply represents a test for the null value.
1243
- *
1244
- * When argisrow is true, the input expression must yield a rowtype, and
1245
- * the node implements "row IS [NOT] NULL" per the SQL standard. This
1246
- * includes checking individual fields for NULLness when the row datum
1247
- * itself isn't NULL.
1248
- *
1249
- * NOTE: the combination of a rowtype input and argisrow==false does NOT
1250
- * correspond to the SQL notation "row IS [NOT] NULL"; instead, this case
1251
- * represents the SQL notation "row IS [NOT] DISTINCT FROM NULL".
1252
- * ----------------
1253
- */
1254
-
1255
- typedef enum NullTestType
1256
- {
1257
- IS_NULL, IS_NOT_NULL
1258
- } NullTestType;
1259
-
1260
- typedef struct NullTest
1261
- {
1262
- Expr xpr;
1263
- Expr *arg; /* input expression */
1264
- NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
1265
- bool argisrow; /* T to perform field-by-field null checks */
1266
- int location; /* token location, or -1 if unknown */
1267
- } NullTest;
1268
-
1269
- /*
1270
- * BooleanTest
1271
- *
1272
- * BooleanTest represents the operation of determining whether a boolean
1273
- * is TRUE, FALSE, or UNKNOWN (ie, NULL). All six meaningful combinations
1274
- * are supported. Note that a NULL input does *not* cause a NULL result.
1275
- * The appropriate test is performed and returned as a boolean Datum.
1276
- */
1277
-
1278
- typedef enum BoolTestType
1279
- {
1280
- IS_TRUE, IS_NOT_TRUE, IS_FALSE, IS_NOT_FALSE, IS_UNKNOWN, IS_NOT_UNKNOWN
1281
- } BoolTestType;
1282
-
1283
- typedef struct BooleanTest
1284
- {
1285
- Expr xpr;
1286
- Expr *arg; /* input expression */
1287
- BoolTestType booltesttype; /* test type */
1288
- int location; /* token location, or -1 if unknown */
1289
- } BooleanTest;
1290
-
1291
- /*
1292
- * CoerceToDomain
1293
- *
1294
- * CoerceToDomain represents the operation of coercing a value to a domain
1295
- * type. At runtime (and not before) the precise set of constraints to be
1296
- * checked will be determined. If the value passes, it is returned as the
1297
- * result; if not, an error is raised. Note that this is equivalent to
1298
- * RelabelType in the scenario where no constraints are applied.
1299
- */
1300
- typedef struct CoerceToDomain
1301
- {
1302
- Expr xpr;
1303
- Expr *arg; /* input expression */
1304
- Oid resulttype; /* domain type ID (result type) */
1305
- int32 resulttypmod; /* output typmod (currently always -1) */
1306
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
1307
- CoercionForm coercionformat; /* how to display this node */
1308
- int location; /* token location, or -1 if unknown */
1309
- } CoerceToDomain;
1310
-
1311
- /*
1312
- * Placeholder node for the value to be processed by a domain's check
1313
- * constraint. This is effectively like a Param, but can be implemented more
1314
- * simply since we need only one replacement value at a time.
1315
- *
1316
- * Note: the typeId/typeMod/collation will be set from the domain's base type,
1317
- * not the domain itself. This is because we shouldn't consider the value
1318
- * to be a member of the domain if we haven't yet checked its constraints.
1319
- */
1320
- typedef struct CoerceToDomainValue
1321
- {
1322
- Expr xpr;
1323
- Oid typeId; /* type for substituted value */
1324
- int32 typeMod; /* typemod for substituted value */
1325
- Oid collation; /* collation for the substituted value */
1326
- int location; /* token location, or -1 if unknown */
1327
- } CoerceToDomainValue;
1328
-
1329
- /*
1330
- * Placeholder node for a DEFAULT marker in an INSERT or UPDATE command.
1331
- *
1332
- * This is not an executable expression: it must be replaced by the actual
1333
- * column default expression during rewriting. But it is convenient to
1334
- * treat it as an expression node during parsing and rewriting.
1335
- */
1336
- typedef struct SetToDefault
1337
- {
1338
- Expr xpr;
1339
- Oid typeId; /* type for substituted value */
1340
- int32 typeMod; /* typemod for substituted value */
1341
- Oid collation; /* collation for the substituted value */
1342
- int location; /* token location, or -1 if unknown */
1343
- } SetToDefault;
1344
-
1345
- /*
1346
- * Node representing [WHERE] CURRENT OF cursor_name
1347
- *
1348
- * CURRENT OF is a bit like a Var, in that it carries the rangetable index
1349
- * of the target relation being constrained; this aids placing the expression
1350
- * correctly during planning. We can assume however that its "levelsup" is
1351
- * always zero, due to the syntactic constraints on where it can appear.
1352
- * Also, cvarno will always be a true RT index, never INNER_VAR etc.
1353
- *
1354
- * The referenced cursor can be represented either as a hardwired string
1355
- * or as a reference to a run-time parameter of type REFCURSOR. The latter
1356
- * case is for the convenience of plpgsql.
1357
- */
1358
- typedef struct CurrentOfExpr
1359
- {
1360
- Expr xpr;
1361
- Index cvarno; /* RT index of target relation */
1362
- char *cursor_name; /* name of referenced cursor, or NULL */
1363
- int cursor_param; /* refcursor parameter number, or 0 */
1364
- } CurrentOfExpr;
1365
-
1366
- /*
1367
- * NextValueExpr - get next value from sequence
1368
- *
1369
- * This has the same effect as calling the nextval() function, but it does not
1370
- * check permissions on the sequence. This is used for identity columns,
1371
- * where the sequence is an implicit dependency without its own permissions.
1372
- */
1373
- typedef struct NextValueExpr
1374
- {
1375
- Expr xpr;
1376
- Oid seqid;
1377
- Oid typeId;
1378
- } NextValueExpr;
1379
-
1380
- /*
1381
- * InferenceElem - an element of a unique index inference specification
1382
- *
1383
- * This mostly matches the structure of IndexElems, but having a dedicated
1384
- * primnode allows for a clean separation between the use of index parameters
1385
- * by utility commands, and this node.
1386
- */
1387
- typedef struct InferenceElem
1388
- {
1389
- Expr xpr;
1390
- Node *expr; /* expression to infer from, or NULL */
1391
- Oid infercollid; /* OID of collation, or InvalidOid */
1392
- Oid inferopclass; /* OID of att opclass, or InvalidOid */
1393
- } InferenceElem;
1394
-
1395
- /*--------------------
1396
- * TargetEntry -
1397
- * a target entry (used in query target lists)
1398
- *
1399
- * Strictly speaking, a TargetEntry isn't an expression node (since it can't
1400
- * be evaluated by ExecEvalExpr). But we treat it as one anyway, since in
1401
- * very many places it's convenient to process a whole query targetlist as a
1402
- * single expression tree.
1403
- *
1404
- * In a SELECT's targetlist, resno should always be equal to the item's
1405
- * ordinal position (counting from 1). However, in an INSERT or UPDATE
1406
- * targetlist, resno represents the attribute number of the destination
1407
- * column for the item; so there may be missing or out-of-order resnos.
1408
- * It is even legal to have duplicated resnos; consider
1409
- * UPDATE table SET arraycol[1] = ..., arraycol[2] = ..., ...
1410
- * In an INSERT, the rewriter and planner will normalize the tlist by
1411
- * reordering it into physical column order and filling in default values
1412
- * for any columns not assigned values by the original query. In an UPDATE,
1413
- * after the rewriter merges multiple assignments for the same column, the
1414
- * planner extracts the target-column numbers into a separate "update_colnos"
1415
- * list, and then renumbers the tlist elements serially. Thus, tlist resnos
1416
- * match ordinal position in all tlists seen by the executor; but it is wrong
1417
- * to assume that before planning has happened.
1418
- *
1419
- * resname is required to represent the correct column name in non-resjunk
1420
- * entries of top-level SELECT targetlists, since it will be used as the
1421
- * column title sent to the frontend. In most other contexts it is only
1422
- * a debugging aid, and may be wrong or even NULL. (In particular, it may
1423
- * be wrong in a tlist from a stored rule, if the referenced column has been
1424
- * renamed by ALTER TABLE since the rule was made. Also, the planner tends
1425
- * to store NULL rather than look up a valid name for tlist entries in
1426
- * non-toplevel plan nodes.) In resjunk entries, resname should be either
1427
- * a specific system-generated name (such as "ctid") or NULL; anything else
1428
- * risks confusing ExecGetJunkAttribute!
1429
- *
1430
- * ressortgroupref is used in the representation of ORDER BY, GROUP BY, and
1431
- * DISTINCT items. Targetlist entries with ressortgroupref=0 are not
1432
- * sort/group items. If ressortgroupref>0, then this item is an ORDER BY,
1433
- * GROUP BY, and/or DISTINCT target value. No two entries in a targetlist
1434
- * may have the same nonzero ressortgroupref --- but there is no particular
1435
- * meaning to the nonzero values, except as tags. (For example, one must
1436
- * not assume that lower ressortgroupref means a more significant sort key.)
1437
- * The order of the associated SortGroupClause lists determine the semantics.
1438
- *
1439
- * resorigtbl/resorigcol identify the source of the column, if it is a
1440
- * simple reference to a column of a base table (or view). If it is not
1441
- * a simple reference, these fields are zeroes.
1442
- *
1443
- * If resjunk is true then the column is a working column (such as a sort key)
1444
- * that should be removed from the final output of the query. Resjunk columns
1445
- * must have resnos that cannot duplicate any regular column's resno. Also
1446
- * note that there are places that assume resjunk columns come after non-junk
1447
- * columns.
1448
- *--------------------
1449
- */
1450
- typedef struct TargetEntry
1451
- {
1452
- Expr xpr;
1453
- Expr *expr; /* expression to evaluate */
1454
- AttrNumber resno; /* attribute number (see notes above) */
1455
- char *resname; /* name of the column (could be NULL) */
1456
- Index ressortgroupref; /* nonzero if referenced by a sort/group
1457
- * clause */
1458
- Oid resorigtbl; /* OID of column's source table */
1459
- AttrNumber resorigcol; /* column's number in source table */
1460
- bool resjunk; /* set to true to eliminate the attribute from
1461
- * final target list */
1462
- } TargetEntry;
1463
-
1464
-
1465
- /* ----------------------------------------------------------------
1466
- * node types for join trees
1467
- *
1468
- * The leaves of a join tree structure are RangeTblRef nodes. Above
1469
- * these, JoinExpr nodes can appear to denote a specific kind of join
1470
- * or qualified join. Also, FromExpr nodes can appear to denote an
1471
- * ordinary cross-product join ("FROM foo, bar, baz WHERE ...").
1472
- * FromExpr is like a JoinExpr of jointype JOIN_INNER, except that it
1473
- * may have any number of child nodes, not just two.
1474
- *
1475
- * NOTE: the top level of a Query's jointree is always a FromExpr.
1476
- * Even if the jointree contains no rels, there will be a FromExpr.
1477
- *
1478
- * NOTE: the qualification expressions present in JoinExpr nodes are
1479
- * *in addition to* the query's main WHERE clause, which appears as the
1480
- * qual of the top-level FromExpr. The reason for associating quals with
1481
- * specific nodes in the jointree is that the position of a qual is critical
1482
- * when outer joins are present. (If we enforce a qual too soon or too late,
1483
- * that may cause the outer join to produce the wrong set of NULL-extended
1484
- * rows.) If all joins are inner joins then all the qual positions are
1485
- * semantically interchangeable.
1486
- *
1487
- * NOTE: in the raw output of gram.y, a join tree contains RangeVar,
1488
- * RangeSubselect, and RangeFunction nodes, which are all replaced by
1489
- * RangeTblRef nodes during the parse analysis phase. Also, the top-level
1490
- * FromExpr is added during parse analysis; the grammar regards FROM and
1491
- * WHERE as separate.
1492
- * ----------------------------------------------------------------
1493
- */
1494
-
1495
- /*
1496
- * RangeTblRef - reference to an entry in the query's rangetable
1497
- *
1498
- * We could use direct pointers to the RT entries and skip having these
1499
- * nodes, but multiple pointers to the same node in a querytree cause
1500
- * lots of headaches, so it seems better to store an index into the RT.
1501
- */
1502
- typedef struct RangeTblRef
1503
- {
1504
- NodeTag type;
1505
- int rtindex;
1506
- } RangeTblRef;
1507
-
1508
- /*----------
1509
- * JoinExpr - for SQL JOIN expressions
1510
- *
1511
- * isNatural, usingClause, and quals are interdependent. The user can write
1512
- * only one of NATURAL, USING(), or ON() (this is enforced by the grammar).
1513
- * If he writes NATURAL then parse analysis generates the equivalent USING()
1514
- * list, and from that fills in "quals" with the right equality comparisons.
1515
- * If he writes USING() then "quals" is filled with equality comparisons.
1516
- * If he writes ON() then only "quals" is set. Note that NATURAL/USING
1517
- * are not equivalent to ON() since they also affect the output column list.
1518
- *
1519
- * alias is an Alias node representing the AS alias-clause attached to the
1520
- * join expression, or NULL if no clause. NB: presence or absence of the
1521
- * alias has a critical impact on semantics, because a join with an alias
1522
- * restricts visibility of the tables/columns inside it.
1523
- *
1524
- * join_using_alias is an Alias node representing the join correlation
1525
- * name that SQL:2016 and later allow to be attached to JOIN/USING.
1526
- * Its column alias list includes only the common column names from USING,
1527
- * and it does not restrict visibility of the join's input tables.
1528
- *
1529
- * During parse analysis, an RTE is created for the Join, and its index
1530
- * is filled into rtindex. This RTE is present mainly so that Vars can
1531
- * be created that refer to the outputs of the join. The planner sometimes
1532
- * generates JoinExprs internally; these can have rtindex = 0 if there are
1533
- * no join alias variables referencing such joins.
1534
- *----------
1535
- */
1536
- typedef struct JoinExpr
1537
- {
1538
- NodeTag type;
1539
- JoinType jointype; /* type of join */
1540
- bool isNatural; /* Natural join? Will need to shape table */
1541
- Node *larg; /* left subtree */
1542
- Node *rarg; /* right subtree */
1543
- List *usingClause; /* USING clause, if any (list of String) */
1544
- Alias *join_using_alias; /* alias attached to USING clause, if any */
1545
- Node *quals; /* qualifiers on join, if any */
1546
- Alias *alias; /* user-written alias clause, if any */
1547
- int rtindex; /* RT index assigned for join, or 0 */
1548
- } JoinExpr;
1549
-
1550
- /*----------
1551
- * FromExpr - represents a FROM ... WHERE ... construct
1552
- *
1553
- * This is both more flexible than a JoinExpr (it can have any number of
1554
- * children, including zero) and less so --- we don't need to deal with
1555
- * aliases and so on. The output column set is implicitly just the union
1556
- * of the outputs of the children.
1557
- *----------
1558
- */
1559
- typedef struct FromExpr
1560
- {
1561
- NodeTag type;
1562
- List *fromlist; /* List of join subtrees */
1563
- Node *quals; /* qualifiers on join, if any */
1564
- } FromExpr;
1565
-
1566
- /*----------
1567
- * OnConflictExpr - represents an ON CONFLICT DO ... expression
1568
- *
1569
- * The optimizer requires a list of inference elements, and optionally a WHERE
1570
- * clause to infer a unique index. The unique index (or, occasionally,
1571
- * indexes) inferred are used to arbitrate whether or not the alternative ON
1572
- * CONFLICT path is taken.
1573
- *----------
1574
- */
1575
- typedef struct OnConflictExpr
1576
- {
1577
- NodeTag type;
1578
- OnConflictAction action; /* DO NOTHING or UPDATE? */
1579
-
1580
- /* Arbiter */
1581
- List *arbiterElems; /* unique index arbiter list (of
1582
- * InferenceElem's) */
1583
- Node *arbiterWhere; /* unique index arbiter WHERE clause */
1584
- Oid constraint; /* pg_constraint OID for arbiter */
1585
-
1586
- /* ON CONFLICT UPDATE */
1587
- List *onConflictSet; /* List of ON CONFLICT SET TargetEntrys */
1588
- Node *onConflictWhere; /* qualifiers to restrict UPDATE to */
1589
- int exclRelIndex; /* RT index of 'excluded' relation */
1590
- List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
1591
- } OnConflictExpr;
1592
-
1593
- #endif /* PRIMNODES_H */