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