pg_query 2.0.3 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +165 -0
- data/README.md +67 -29
- data/Rakefile +8 -23
- data/ext/pg_query/extconf.rb +21 -3
- data/ext/pg_query/include/pg_query.h +29 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
- data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
- data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
- data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
- data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
- data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
- data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
- data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
- data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
- data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
- data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
- data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
- data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
- data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
- data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
- data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
- data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
- data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
- data/ext/pg_query/include/postgres/common/int.h +437 -0
- data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
- data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
- data/ext/pg_query/include/postgres/common/sha2.h +32 -0
- data/ext/pg_query/include/postgres/common/string.h +44 -0
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
- data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
- data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
- data/ext/pg_query/include/postgres/gram.h +1127 -0
- data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
- data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
- data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
- data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
- data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
- data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
- data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
- data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +90 -0
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
- data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/postgres/parser/parser.h +68 -0
- data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
- data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +778 -0
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
- data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
- data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
- data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
- data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
- data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
- data/ext/pg_query/include/postgres/port/simd.h +375 -0
- data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
- data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
- data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
- data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
- data/ext/pg_query/include/postgres/port/win32.h +59 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
- data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
- data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
- data/ext/pg_query/include/postgres/postgres.h +579 -0
- data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
- data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
- data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
- data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
- data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
- data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
- data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
- data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
- data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
- data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
- data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
- data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
- data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
- data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
- data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
- data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
- data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
- data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
- data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
- data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
- data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
- data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
- data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
- data/ext/pg_query/include/protobuf-c.h +7 -3
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +21026 -17002
- data/ext/pg_query/pg_query_deparse.c +1 -9896
- data/ext/pg_query/pg_query_fingerprint.c +162 -50
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
- data/ext/pg_query/pg_query_normalize.c +259 -64
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
- data/ext/pg_query/pg_query_ruby.c +6 -1
- data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
- data/ext/pg_query/pg_query_scan.c +3 -2
- data/ext/pg_query/pg_query_split.c +6 -5
- data/ext/pg_query/postgres_deparse.c +11067 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/protobuf-c.c +34 -27
- data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +99 -12
- data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
- data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
- data/ext/pg_query/src_backend_parser_parser.c +53 -8
- data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
- data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
- data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
- data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
- data/ext/pg_query/src_common_encnames.c +4 -1
- data/ext/pg_query/src_common_hashfn.c +420 -0
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +545 -498
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_stringinfo.c +4 -4
- data/ext/pg_query/src_common_wchar.c +717 -113
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
- data/ext/pg_query/src_port_pg_bitutils.c +103 -40
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +51 -29
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +7 -5
- data/lib/pg_query/fingerprint.rb +21 -9
- data/lib/pg_query/node.rb +18 -13
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +141 -50
- data/lib/pg_query/pg_query_pb.rb +175 -3031
- data/lib/pg_query/treewalker.rb +26 -2
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- data/lib/pg_query.rb +0 -1
- metadata +443 -380
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/rmgr.h +0 -35
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/catalog/genbki.h +0 -64
- data/ext/pg_query/include/catalog/indexing.h +0 -366
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/ip.h +0 -37
- data/ext/pg_query/include/common/string.h +0 -19
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1072
- data/ext/pg_query/include/nodes/value.h +0 -61
- data/ext/pg_query/include/parser/gram.h +0 -1067
- data/ext/pg_query/include/parser/kwlist.h +0 -477
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/include/parser/parser.h +0 -41
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/pgstat.h +0 -1487
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/replication/logicalproto.h +0 -110
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -19
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/pidfile.h +0 -56
- data/ext/pg_query/include/utils/ps_status.h +0 -25
- data/ext/pg_query/include/utils/regproc.h +0 -28
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
- data/ext/pg_query/src_common_string.c +0 -86
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_random.c +0 -31
- data/ext/pg_query/src_port_strnlen.c +0 -39
- data/lib/pg_query/json_field_names.rb +0 -1402
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* and join trees.
|
|
8
8
|
*
|
|
9
9
|
*
|
|
10
|
-
* Portions Copyright (c) 1996-
|
|
10
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
11
11
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
12
12
|
*
|
|
13
13
|
* src/include/nodes/primnodes.h
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* specifies an alias for a range variable; the alias might also
|
|
33
33
|
* specify renaming of columns within the table.
|
|
34
34
|
*
|
|
35
|
-
* Note: colnames is a list of
|
|
35
|
+
* Note: colnames is a list of String nodes. In Alias structs
|
|
36
36
|
* associated with RTEs, there may be entries corresponding to dropped
|
|
37
37
|
* columns; these are normally empty strings (""). See parsenodes.h for info.
|
|
38
38
|
*/
|
|
@@ -63,38 +63,64 @@ typedef enum OnCommitAction
|
|
|
63
63
|
typedef struct RangeVar
|
|
64
64
|
{
|
|
65
65
|
NodeTag type;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
char *
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
char
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
|
|
67
|
+
/* the catalog (database) name, or NULL */
|
|
68
|
+
char *catalogname;
|
|
69
|
+
|
|
70
|
+
/* the schema name, or NULL */
|
|
71
|
+
char *schemaname;
|
|
72
|
+
|
|
73
|
+
/* the relation/sequence name */
|
|
74
|
+
char *relname;
|
|
75
|
+
|
|
76
|
+
/* expand rel by inheritance? recursively act on children? */
|
|
77
|
+
bool inh;
|
|
78
|
+
|
|
79
|
+
/* see RELPERSISTENCE_* in pg_class.h */
|
|
80
|
+
char relpersistence;
|
|
81
|
+
|
|
82
|
+
/* table alias & optional column aliases */
|
|
83
|
+
Alias *alias;
|
|
84
|
+
|
|
85
|
+
/* token location, or -1 if unknown */
|
|
86
|
+
int location;
|
|
74
87
|
} RangeVar;
|
|
75
88
|
|
|
76
89
|
/*
|
|
77
90
|
* TableFunc - node for a table function, such as XMLTABLE.
|
|
78
91
|
*
|
|
79
|
-
* Entries in the ns_names list are either
|
|
92
|
+
* Entries in the ns_names list are either String nodes containing
|
|
80
93
|
* literal namespace names, or NULL pointers to represent DEFAULT.
|
|
81
94
|
*/
|
|
82
95
|
typedef struct TableFunc
|
|
83
96
|
{
|
|
84
97
|
NodeTag type;
|
|
85
|
-
|
|
86
|
-
List *
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
List *
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
+
/* list of namespace URI expressions */
|
|
99
|
+
List *ns_uris pg_node_attr(query_jumble_ignore);
|
|
100
|
+
/* list of namespace names or NULL */
|
|
101
|
+
List *ns_names pg_node_attr(query_jumble_ignore);
|
|
102
|
+
/* input document expression */
|
|
103
|
+
Node *docexpr;
|
|
104
|
+
/* row filter expression */
|
|
105
|
+
Node *rowexpr;
|
|
106
|
+
/* column names (list of String) */
|
|
107
|
+
List *colnames pg_node_attr(query_jumble_ignore);
|
|
108
|
+
/* OID list of column type OIDs */
|
|
109
|
+
List *coltypes pg_node_attr(query_jumble_ignore);
|
|
110
|
+
/* integer list of column typmods */
|
|
111
|
+
List *coltypmods pg_node_attr(query_jumble_ignore);
|
|
112
|
+
/* OID list of column collation OIDs */
|
|
113
|
+
List *colcollations pg_node_attr(query_jumble_ignore);
|
|
114
|
+
/* list of column filter expressions */
|
|
115
|
+
List *colexprs;
|
|
116
|
+
/* list of column default expressions */
|
|
117
|
+
List *coldefexprs pg_node_attr(query_jumble_ignore);
|
|
118
|
+
/* nullability flag for each output column */
|
|
119
|
+
Bitmapset *notnulls pg_node_attr(query_jumble_ignore);
|
|
120
|
+
/* counts from 0; -1 if none specified */
|
|
121
|
+
int ordinalitycol pg_node_attr(query_jumble_ignore);
|
|
122
|
+
/* token location, or -1 if unknown */
|
|
123
|
+
int location;
|
|
98
124
|
} TableFunc;
|
|
99
125
|
|
|
100
126
|
/*
|
|
@@ -102,8 +128,10 @@ typedef struct TableFunc
|
|
|
102
128
|
* CREATE MATERIALIZED VIEW
|
|
103
129
|
*
|
|
104
130
|
* For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten
|
|
105
|
-
* SELECT Query for the view; otherwise it's NULL.
|
|
106
|
-
*
|
|
131
|
+
* SELECT Query for the view; otherwise it's NULL. This is irrelevant in
|
|
132
|
+
* the query jumbling as CreateTableAsStmt already includes a reference to
|
|
133
|
+
* its own Query, so ignore it. (Although it's actually Query*, we declare
|
|
134
|
+
* it as Node* to avoid a forward reference.)
|
|
107
135
|
*/
|
|
108
136
|
typedef struct IntoClause
|
|
109
137
|
{
|
|
@@ -115,7 +143,8 @@ typedef struct IntoClause
|
|
|
115
143
|
List *options; /* options from WITH clause */
|
|
116
144
|
OnCommitAction onCommit; /* what do we do at COMMIT? */
|
|
117
145
|
char *tableSpaceName; /* table space to use, or NULL */
|
|
118
|
-
|
|
146
|
+
/* materialized view's SELECT query */
|
|
147
|
+
Node *viewQuery pg_node_attr(query_jumble_ignore);
|
|
119
148
|
bool skipData; /* true for WITH NO DATA */
|
|
120
149
|
} IntoClause;
|
|
121
150
|
|
|
@@ -135,6 +164,8 @@ typedef struct IntoClause
|
|
|
135
164
|
*/
|
|
136
165
|
typedef struct Expr
|
|
137
166
|
{
|
|
167
|
+
pg_node_attr(abstract)
|
|
168
|
+
|
|
138
169
|
NodeTag type;
|
|
139
170
|
} Expr;
|
|
140
171
|
|
|
@@ -158,6 +189,18 @@ typedef struct Expr
|
|
|
158
189
|
* than a heap column. (In ForeignScan and CustomScan plan nodes, INDEX_VAR
|
|
159
190
|
* is abused to signify references to columns of a custom scan tuple type.)
|
|
160
191
|
*
|
|
192
|
+
* ROWID_VAR is used in the planner to identify nonce variables that carry
|
|
193
|
+
* row identity information during UPDATE/DELETE/MERGE. This value should
|
|
194
|
+
* never be seen outside the planner.
|
|
195
|
+
*
|
|
196
|
+
* varnullingrels is the set of RT indexes of outer joins that can force
|
|
197
|
+
* the Var's value to null (at the point where it appears in the query).
|
|
198
|
+
* See optimizer/README for discussion of that.
|
|
199
|
+
*
|
|
200
|
+
* varlevelsup is greater than zero in Vars that represent outer references.
|
|
201
|
+
* Note that it affects the meaning of all of varno, varnullingrels, and
|
|
202
|
+
* varnosyn, all of which refer to the range table of that query level.
|
|
203
|
+
*
|
|
161
204
|
* In the parser, varnosyn and varattnosyn are either identical to
|
|
162
205
|
* varno/varattno, or they specify the column's position in an aliased JOIN
|
|
163
206
|
* RTE that hides the semantic referent RTE's refname. This is a syntactic
|
|
@@ -168,11 +211,12 @@ typedef struct Expr
|
|
|
168
211
|
* in the planner and doesn't correspond to any simple relation column may
|
|
169
212
|
* have varnosyn = varattnosyn = 0.
|
|
170
213
|
*/
|
|
171
|
-
#define INNER_VAR
|
|
172
|
-
#define OUTER_VAR
|
|
173
|
-
#define INDEX_VAR
|
|
214
|
+
#define INNER_VAR (-1) /* reference to inner subplan */
|
|
215
|
+
#define OUTER_VAR (-2) /* reference to outer subplan */
|
|
216
|
+
#define INDEX_VAR (-3) /* reference to index column */
|
|
217
|
+
#define ROWID_VAR (-4) /* row identity column during planning */
|
|
174
218
|
|
|
175
|
-
#define IS_SPECIAL_VARNO(varno) ((varno)
|
|
219
|
+
#define IS_SPECIAL_VARNO(varno) ((int) (varno) < 0)
|
|
176
220
|
|
|
177
221
|
/* Symbols for the indexes of the special RTE entries in rules */
|
|
178
222
|
#define PRS2_OLD_VARNO 1
|
|
@@ -181,19 +225,50 @@ typedef struct Expr
|
|
|
181
225
|
typedef struct Var
|
|
182
226
|
{
|
|
183
227
|
Expr xpr;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
228
|
+
|
|
229
|
+
/*
|
|
230
|
+
* index of this var's relation in the range table, or
|
|
231
|
+
* INNER_VAR/OUTER_VAR/etc
|
|
232
|
+
*/
|
|
233
|
+
int varno;
|
|
234
|
+
|
|
235
|
+
/*
|
|
236
|
+
* attribute number of this var, or zero for all attrs ("whole-row Var")
|
|
237
|
+
*/
|
|
238
|
+
AttrNumber varattno;
|
|
239
|
+
|
|
240
|
+
/* pg_type OID for the type of this var */
|
|
241
|
+
Oid vartype pg_node_attr(query_jumble_ignore);
|
|
242
|
+
/* pg_attribute typmod value */
|
|
243
|
+
int32 vartypmod pg_node_attr(query_jumble_ignore);
|
|
244
|
+
/* OID of collation, or InvalidOid if none */
|
|
245
|
+
Oid varcollid pg_node_attr(query_jumble_ignore);
|
|
246
|
+
|
|
247
|
+
/*
|
|
248
|
+
* RT indexes of outer joins that can replace the Var's value with null.
|
|
249
|
+
* We can omit varnullingrels in the query jumble, because it's fully
|
|
250
|
+
* determined by varno/varlevelsup plus the Var's query location.
|
|
251
|
+
*/
|
|
252
|
+
Bitmapset *varnullingrels pg_node_attr(query_jumble_ignore);
|
|
253
|
+
|
|
254
|
+
/*
|
|
255
|
+
* for subquery variables referencing outer relations; 0 in a normal var,
|
|
256
|
+
* >0 means N levels up
|
|
257
|
+
*/
|
|
258
|
+
Index varlevelsup;
|
|
259
|
+
|
|
260
|
+
/*
|
|
261
|
+
* varnosyn/varattnosyn are ignored for equality, because Vars with
|
|
262
|
+
* different syntactic identifiers are semantically the same as long as
|
|
263
|
+
* their varno/varattno match.
|
|
264
|
+
*/
|
|
265
|
+
/* syntactic relation index (0 if unknown) */
|
|
266
|
+
Index varnosyn pg_node_attr(equal_ignore, query_jumble_ignore);
|
|
267
|
+
/* syntactic attribute number */
|
|
268
|
+
AttrNumber varattnosyn pg_node_attr(equal_ignore, query_jumble_ignore);
|
|
269
|
+
|
|
270
|
+
/* token location, or -1 if unknown */
|
|
271
|
+
int location;
|
|
197
272
|
} Var;
|
|
198
273
|
|
|
199
274
|
/*
|
|
@@ -203,22 +278,39 @@ typedef struct Var
|
|
|
203
278
|
* must be in non-extended form (4-byte header, no compression or external
|
|
204
279
|
* references). This ensures that the Const node is self-contained and makes
|
|
205
280
|
* it more likely that equal() will see logically identical values as equal.
|
|
281
|
+
*
|
|
282
|
+
* Only the constant type OID is relevant for the query jumbling.
|
|
206
283
|
*/
|
|
207
284
|
typedef struct Const
|
|
208
285
|
{
|
|
286
|
+
pg_node_attr(custom_copy_equal, custom_read_write)
|
|
287
|
+
|
|
209
288
|
Expr xpr;
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
289
|
+
/* pg_type OID of the constant's datatype */
|
|
290
|
+
Oid consttype;
|
|
291
|
+
/* typmod value, if any */
|
|
292
|
+
int32 consttypmod pg_node_attr(query_jumble_ignore);
|
|
293
|
+
/* OID of collation, or InvalidOid if none */
|
|
294
|
+
Oid constcollid pg_node_attr(query_jumble_ignore);
|
|
295
|
+
/* typlen of the constant's datatype */
|
|
296
|
+
int constlen pg_node_attr(query_jumble_ignore);
|
|
297
|
+
/* the constant's value */
|
|
298
|
+
Datum constvalue pg_node_attr(query_jumble_ignore);
|
|
299
|
+
/* whether the constant is null (if true, constvalue is undefined) */
|
|
300
|
+
bool constisnull pg_node_attr(query_jumble_ignore);
|
|
301
|
+
|
|
302
|
+
/*
|
|
303
|
+
* Whether this datatype is passed by value. If true, then all the
|
|
304
|
+
* information is stored in the Datum. If false, then the Datum contains
|
|
305
|
+
* a pointer to the information.
|
|
306
|
+
*/
|
|
307
|
+
bool constbyval pg_node_attr(query_jumble_ignore);
|
|
308
|
+
|
|
309
|
+
/*
|
|
310
|
+
* token location, or -1 if unknown. All constants are tracked as
|
|
311
|
+
* locations in query jumbling, to be marked as parameters.
|
|
312
|
+
*/
|
|
313
|
+
int location pg_node_attr(query_jumble_location);
|
|
222
314
|
} Const;
|
|
223
315
|
|
|
224
316
|
/*
|
|
@@ -262,9 +354,12 @@ typedef struct Param
|
|
|
262
354
|
ParamKind paramkind; /* kind of parameter. See above */
|
|
263
355
|
int paramid; /* numeric ID for parameter */
|
|
264
356
|
Oid paramtype; /* pg_type OID of parameter's datatype */
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
357
|
+
/* typmod value, if known */
|
|
358
|
+
int32 paramtypmod pg_node_attr(query_jumble_ignore);
|
|
359
|
+
/* OID of collation, or InvalidOid if none */
|
|
360
|
+
Oid paramcollid pg_node_attr(query_jumble_ignore);
|
|
361
|
+
/* token location, or -1 if unknown */
|
|
362
|
+
int location;
|
|
268
363
|
} Param;
|
|
269
364
|
|
|
270
365
|
/*
|
|
@@ -299,34 +394,95 @@ typedef struct Param
|
|
|
299
394
|
* replaced with a single argument representing the partial-aggregate
|
|
300
395
|
* transition values.
|
|
301
396
|
*
|
|
397
|
+
* aggpresorted is set by the query planner for ORDER BY and DISTINCT
|
|
398
|
+
* aggregates where the chosen plan provides presorted input for this
|
|
399
|
+
* aggregate during execution.
|
|
400
|
+
*
|
|
302
401
|
* aggsplit indicates the expected partial-aggregation mode for the Aggref's
|
|
303
402
|
* parent plan node. It's always set to AGGSPLIT_SIMPLE in the parser, but
|
|
304
403
|
* the planner might change it to something else. We use this mainly as
|
|
305
404
|
* a crosscheck that the Aggrefs match the plan; but note that when aggsplit
|
|
306
405
|
* indicates a non-final mode, aggtype reflects the transition data type
|
|
307
406
|
* not the SQL-level output type of the aggregate.
|
|
407
|
+
*
|
|
408
|
+
* aggno and aggtransno are -1 in the parse stage, and are set in planning.
|
|
409
|
+
* Aggregates with the same 'aggno' represent the same aggregate expression,
|
|
410
|
+
* and can share the result. Aggregates with same 'transno' but different
|
|
411
|
+
* 'aggno' can share the same transition state, only the final function needs
|
|
412
|
+
* to be called separately.
|
|
413
|
+
*
|
|
414
|
+
* Information related to collations, transition types and internal states
|
|
415
|
+
* are irrelevant for the query jumbling.
|
|
308
416
|
*/
|
|
309
417
|
typedef struct Aggref
|
|
310
418
|
{
|
|
311
419
|
Expr xpr;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
Oid
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
420
|
+
|
|
421
|
+
/* pg_proc Oid of the aggregate */
|
|
422
|
+
Oid aggfnoid;
|
|
423
|
+
|
|
424
|
+
/* type Oid of result of the aggregate */
|
|
425
|
+
Oid aggtype pg_node_attr(query_jumble_ignore);
|
|
426
|
+
|
|
427
|
+
/* OID of collation of result */
|
|
428
|
+
Oid aggcollid pg_node_attr(query_jumble_ignore);
|
|
429
|
+
|
|
430
|
+
/* OID of collation that function should use */
|
|
431
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
432
|
+
|
|
433
|
+
/*
|
|
434
|
+
* type Oid of aggregate's transition value; ignored for equal since it
|
|
435
|
+
* might not be set yet
|
|
436
|
+
*/
|
|
437
|
+
Oid aggtranstype pg_node_attr(equal_ignore, query_jumble_ignore);
|
|
438
|
+
|
|
439
|
+
/* type Oids of direct and aggregated args */
|
|
440
|
+
List *aggargtypes pg_node_attr(query_jumble_ignore);
|
|
441
|
+
|
|
442
|
+
/* direct arguments, if an ordered-set agg */
|
|
443
|
+
List *aggdirectargs;
|
|
444
|
+
|
|
445
|
+
/* aggregated arguments and sort expressions */
|
|
446
|
+
List *args;
|
|
447
|
+
|
|
448
|
+
/* ORDER BY (list of SortGroupClause) */
|
|
449
|
+
List *aggorder;
|
|
450
|
+
|
|
451
|
+
/* DISTINCT (list of SortGroupClause) */
|
|
452
|
+
List *aggdistinct;
|
|
453
|
+
|
|
454
|
+
/* FILTER expression, if any */
|
|
455
|
+
Expr *aggfilter;
|
|
456
|
+
|
|
457
|
+
/* true if argument list was really '*' */
|
|
458
|
+
bool aggstar pg_node_attr(query_jumble_ignore);
|
|
459
|
+
|
|
460
|
+
/*
|
|
461
|
+
* true if variadic arguments have been combined into an array last
|
|
462
|
+
* argument
|
|
463
|
+
*/
|
|
464
|
+
bool aggvariadic pg_node_attr(query_jumble_ignore);
|
|
465
|
+
|
|
466
|
+
/* aggregate kind (see pg_aggregate.h) */
|
|
467
|
+
char aggkind pg_node_attr(query_jumble_ignore);
|
|
468
|
+
|
|
469
|
+
/* aggregate input already sorted */
|
|
470
|
+
bool aggpresorted pg_node_attr(equal_ignore, query_jumble_ignore);
|
|
471
|
+
|
|
472
|
+
/* > 0 if agg belongs to outer query */
|
|
473
|
+
Index agglevelsup pg_node_attr(query_jumble_ignore);
|
|
474
|
+
|
|
475
|
+
/* expected agg-splitting mode of parent Agg */
|
|
476
|
+
AggSplit aggsplit pg_node_attr(query_jumble_ignore);
|
|
477
|
+
|
|
478
|
+
/* unique ID within the Agg node */
|
|
479
|
+
int aggno pg_node_attr(query_jumble_ignore);
|
|
480
|
+
|
|
481
|
+
/* unique ID of transition state in the Agg */
|
|
482
|
+
int aggtransno pg_node_attr(query_jumble_ignore);
|
|
483
|
+
|
|
484
|
+
/* token location, or -1 if unknown */
|
|
485
|
+
int location;
|
|
330
486
|
} Aggref;
|
|
331
487
|
|
|
332
488
|
/*
|
|
@@ -352,44 +508,69 @@ typedef struct Aggref
|
|
|
352
508
|
*
|
|
353
509
|
* In raw parse output we have only the args list; parse analysis fills in the
|
|
354
510
|
* refs list, and the planner fills in the cols list.
|
|
511
|
+
*
|
|
512
|
+
* All the fields used as information for an internal state are irrelevant
|
|
513
|
+
* for the query jumbling.
|
|
355
514
|
*/
|
|
356
515
|
typedef struct GroupingFunc
|
|
357
516
|
{
|
|
358
517
|
Expr xpr;
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
List *
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
518
|
+
|
|
519
|
+
/* arguments, not evaluated but kept for benefit of EXPLAIN etc. */
|
|
520
|
+
List *args pg_node_attr(query_jumble_ignore);
|
|
521
|
+
|
|
522
|
+
/* ressortgrouprefs of arguments */
|
|
523
|
+
List *refs pg_node_attr(equal_ignore);
|
|
524
|
+
|
|
525
|
+
/* actual column positions set by planner */
|
|
526
|
+
List *cols pg_node_attr(equal_ignore, query_jumble_ignore);
|
|
527
|
+
|
|
528
|
+
/* same as Aggref.agglevelsup */
|
|
529
|
+
Index agglevelsup;
|
|
530
|
+
|
|
531
|
+
/* token location */
|
|
532
|
+
int location;
|
|
365
533
|
} GroupingFunc;
|
|
366
534
|
|
|
367
535
|
/*
|
|
368
536
|
* WindowFunc
|
|
537
|
+
*
|
|
538
|
+
* Collation information is irrelevant for the query jumbling, as is the
|
|
539
|
+
* internal state information of the node like "winstar" and "winagg".
|
|
369
540
|
*/
|
|
370
541
|
typedef struct WindowFunc
|
|
371
542
|
{
|
|
372
543
|
Expr xpr;
|
|
373
|
-
|
|
374
|
-
Oid
|
|
375
|
-
|
|
376
|
-
Oid
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
544
|
+
/* pg_proc Oid of the function */
|
|
545
|
+
Oid winfnoid;
|
|
546
|
+
/* type Oid of result of the window function */
|
|
547
|
+
Oid wintype pg_node_attr(query_jumble_ignore);
|
|
548
|
+
/* OID of collation of result */
|
|
549
|
+
Oid wincollid pg_node_attr(query_jumble_ignore);
|
|
550
|
+
/* OID of collation that function should use */
|
|
551
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
552
|
+
/* arguments to the window function */
|
|
553
|
+
List *args;
|
|
554
|
+
/* FILTER expression, if any */
|
|
555
|
+
Expr *aggfilter;
|
|
556
|
+
/* index of associated WindowClause */
|
|
557
|
+
Index winref;
|
|
558
|
+
/* true if argument list was really '*' */
|
|
559
|
+
bool winstar pg_node_attr(query_jumble_ignore);
|
|
560
|
+
/* is function a simple aggregate? */
|
|
561
|
+
bool winagg pg_node_attr(query_jumble_ignore);
|
|
562
|
+
/* token location, or -1 if unknown */
|
|
563
|
+
int location;
|
|
383
564
|
} WindowFunc;
|
|
384
565
|
|
|
385
|
-
/*
|
|
386
|
-
*
|
|
387
|
-
*
|
|
566
|
+
/*
|
|
567
|
+
* SubscriptingRef: describes a subscripting operation over a container
|
|
568
|
+
* (array, etc).
|
|
388
569
|
*
|
|
389
570
|
* A SubscriptingRef can describe fetching a single element from a container,
|
|
390
|
-
* fetching a part of container (e.g. array slice), storing a single
|
|
391
|
-
* a container, or storing a slice. The "store" cases work with
|
|
392
|
-
* initial container value and a source value that is inserted into the
|
|
571
|
+
* fetching a part of a container (e.g. an array slice), storing a single
|
|
572
|
+
* element into a container, or storing a slice. The "store" cases work with
|
|
573
|
+
* an initial container value and a source value that is inserted into the
|
|
393
574
|
* appropriate part of the container; the result of the operation is an
|
|
394
575
|
* entire new modified container value.
|
|
395
576
|
*
|
|
@@ -402,33 +583,51 @@ typedef struct WindowFunc
|
|
|
402
583
|
*
|
|
403
584
|
* In the slice case, individual expressions in the subscript lists can be
|
|
404
585
|
* NULL, meaning "substitute the array's current lower or upper bound".
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
* type of
|
|
586
|
+
* (Non-array containers may or may not support this.)
|
|
587
|
+
*
|
|
588
|
+
* refcontainertype is the actual container type that determines the
|
|
589
|
+
* subscripting semantics. (This will generally be either the exposed type of
|
|
590
|
+
* refexpr, or the base type if that is a domain.) refelemtype is the type of
|
|
591
|
+
* the container's elements; this is saved for the use of the subscripting
|
|
592
|
+
* functions, but is not used by the core code. refrestype, reftypmod, and
|
|
593
|
+
* refcollid describe the type of the SubscriptingRef's result. In a store
|
|
594
|
+
* expression, refrestype will always match refcontainertype; in a fetch,
|
|
595
|
+
* it could be refelemtype for an element fetch, or refcontainertype for a
|
|
596
|
+
* slice fetch, or possibly something else as determined by type-specific
|
|
597
|
+
* subscripting logic. Likewise, reftypmod and refcollid will match the
|
|
598
|
+
* container's properties in a store, but could be different in a fetch.
|
|
599
|
+
*
|
|
600
|
+
* Any internal state data is ignored for the query jumbling.
|
|
409
601
|
*
|
|
410
602
|
* 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
|
|
412
|
-
* in-place and return the same object.
|
|
413
|
-
* ----------------
|
|
603
|
+
* expanded container, then the implementation is allowed to modify that
|
|
604
|
+
* object in-place and return the same object.
|
|
414
605
|
*/
|
|
415
606
|
typedef struct SubscriptingRef
|
|
416
607
|
{
|
|
417
608
|
Expr xpr;
|
|
418
|
-
|
|
419
|
-
Oid
|
|
420
|
-
|
|
421
|
-
Oid
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
609
|
+
/* type of the container proper */
|
|
610
|
+
Oid refcontainertype pg_node_attr(query_jumble_ignore);
|
|
611
|
+
/* the container type's pg_type.typelem */
|
|
612
|
+
Oid refelemtype pg_node_attr(query_jumble_ignore);
|
|
613
|
+
/* type of the SubscriptingRef's result */
|
|
614
|
+
Oid refrestype pg_node_attr(query_jumble_ignore);
|
|
615
|
+
/* typmod of the result */
|
|
616
|
+
int32 reftypmod pg_node_attr(query_jumble_ignore);
|
|
617
|
+
/* collation of result, or InvalidOid if none */
|
|
618
|
+
Oid refcollid pg_node_attr(query_jumble_ignore);
|
|
619
|
+
/* expressions that evaluate to upper container indexes */
|
|
620
|
+
List *refupperindexpr;
|
|
621
|
+
|
|
622
|
+
/*
|
|
623
|
+
* expressions that evaluate to lower container indexes, or NIL for single
|
|
624
|
+
* container element.
|
|
625
|
+
*/
|
|
626
|
+
List *reflowerindexpr;
|
|
627
|
+
/* the expression that evaluates to a container value */
|
|
628
|
+
Expr *refexpr;
|
|
629
|
+
/* expression for the source value, or NULL if fetch */
|
|
630
|
+
Expr *refassgnexpr;
|
|
432
631
|
} SubscriptingRef;
|
|
433
632
|
|
|
434
633
|
/*
|
|
@@ -441,11 +640,15 @@ typedef enum CoercionContext
|
|
|
441
640
|
{
|
|
442
641
|
COERCION_IMPLICIT, /* coercion in context of expression */
|
|
443
642
|
COERCION_ASSIGNMENT, /* coercion in context of assignment */
|
|
643
|
+
COERCION_PLPGSQL, /* if no assignment cast, use CoerceViaIO */
|
|
444
644
|
COERCION_EXPLICIT /* explicit cast operation */
|
|
445
645
|
} CoercionContext;
|
|
446
646
|
|
|
447
647
|
/*
|
|
448
|
-
* CoercionForm - how to display a
|
|
648
|
+
* CoercionForm - how to display a FuncExpr or related node
|
|
649
|
+
*
|
|
650
|
+
* "Coercion" is a bit of a misnomer, since this value records other
|
|
651
|
+
* special syntaxes besides casts, but for now we'll keep this naming.
|
|
449
652
|
*
|
|
450
653
|
* NB: equal() ignores CoercionForm fields, therefore this *must* not carry
|
|
451
654
|
* any semantically significant information. We need that behavior so that
|
|
@@ -457,25 +660,41 @@ typedef enum CoercionForm
|
|
|
457
660
|
{
|
|
458
661
|
COERCE_EXPLICIT_CALL, /* display as a function call */
|
|
459
662
|
COERCE_EXPLICIT_CAST, /* display as an explicit cast */
|
|
460
|
-
COERCE_IMPLICIT_CAST /* implicit cast, so hide it */
|
|
663
|
+
COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
|
|
664
|
+
COERCE_SQL_SYNTAX /* display with SQL-mandated special syntax */
|
|
461
665
|
} CoercionForm;
|
|
462
666
|
|
|
463
667
|
/*
|
|
464
668
|
* FuncExpr - expression node for a function call
|
|
669
|
+
*
|
|
670
|
+
* Collation information is irrelevant for the query jumbling, only the
|
|
671
|
+
* arguments and the function OID matter.
|
|
465
672
|
*/
|
|
466
673
|
typedef struct FuncExpr
|
|
467
674
|
{
|
|
468
675
|
Expr xpr;
|
|
469
|
-
|
|
470
|
-
Oid
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
676
|
+
/* PG_PROC OID of the function */
|
|
677
|
+
Oid funcid;
|
|
678
|
+
/* PG_TYPE OID of result value */
|
|
679
|
+
Oid funcresulttype pg_node_attr(query_jumble_ignore);
|
|
680
|
+
/* true if function returns set */
|
|
681
|
+
bool funcretset pg_node_attr(query_jumble_ignore);
|
|
682
|
+
|
|
683
|
+
/*
|
|
684
|
+
* true if variadic arguments have been combined into an array last
|
|
685
|
+
* argument
|
|
686
|
+
*/
|
|
687
|
+
bool funcvariadic pg_node_attr(query_jumble_ignore);
|
|
688
|
+
/* how to display this function call */
|
|
689
|
+
CoercionForm funcformat pg_node_attr(query_jumble_ignore);
|
|
690
|
+
/* OID of collation of result */
|
|
691
|
+
Oid funccollid pg_node_attr(query_jumble_ignore);
|
|
692
|
+
/* OID of collation that function should use */
|
|
693
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
694
|
+
/* arguments to the function */
|
|
695
|
+
List *args;
|
|
696
|
+
/* token location, or -1 if unknown */
|
|
697
|
+
int location;
|
|
479
698
|
} FuncExpr;
|
|
480
699
|
|
|
481
700
|
/*
|
|
@@ -495,10 +714,14 @@ typedef struct FuncExpr
|
|
|
495
714
|
typedef struct NamedArgExpr
|
|
496
715
|
{
|
|
497
716
|
Expr xpr;
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
717
|
+
/* the argument expression */
|
|
718
|
+
Expr *arg;
|
|
719
|
+
/* the name */
|
|
720
|
+
char *name pg_node_attr(query_jumble_ignore);
|
|
721
|
+
/* argument's number in positional notation */
|
|
722
|
+
int argnumber;
|
|
723
|
+
/* argument name location, or -1 if unknown */
|
|
724
|
+
int location;
|
|
502
725
|
} NamedArgExpr;
|
|
503
726
|
|
|
504
727
|
/*
|
|
@@ -509,18 +732,38 @@ typedef struct NamedArgExpr
|
|
|
509
732
|
* Note that opfuncid is not necessarily filled in immediately on creation
|
|
510
733
|
* of the node. The planner makes sure it is valid before passing the node
|
|
511
734
|
* tree to the executor, but during parsing/planning opfuncid can be 0.
|
|
735
|
+
* Therefore, equal() will accept a zero value as being equal to other values.
|
|
736
|
+
*
|
|
737
|
+
* Internal state information and collation data is irrelevant for the query
|
|
738
|
+
* jumbling.
|
|
512
739
|
*/
|
|
513
740
|
typedef struct OpExpr
|
|
514
741
|
{
|
|
515
742
|
Expr xpr;
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
Oid
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
Oid
|
|
522
|
-
|
|
523
|
-
|
|
743
|
+
|
|
744
|
+
/* PG_OPERATOR OID of the operator */
|
|
745
|
+
Oid opno;
|
|
746
|
+
|
|
747
|
+
/* PG_PROC OID of underlying function */
|
|
748
|
+
Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
|
|
749
|
+
|
|
750
|
+
/* PG_TYPE OID of result value */
|
|
751
|
+
Oid opresulttype pg_node_attr(query_jumble_ignore);
|
|
752
|
+
|
|
753
|
+
/* true if operator returns set */
|
|
754
|
+
bool opretset pg_node_attr(query_jumble_ignore);
|
|
755
|
+
|
|
756
|
+
/* OID of collation of result */
|
|
757
|
+
Oid opcollid pg_node_attr(query_jumble_ignore);
|
|
758
|
+
|
|
759
|
+
/* OID of collation that operator should use */
|
|
760
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
761
|
+
|
|
762
|
+
/* arguments to the operator (1 or 2) */
|
|
763
|
+
List *args;
|
|
764
|
+
|
|
765
|
+
/* token location, or -1 if unknown */
|
|
766
|
+
int location;
|
|
524
767
|
} OpExpr;
|
|
525
768
|
|
|
526
769
|
/*
|
|
@@ -552,16 +795,55 @@ typedef OpExpr NullIfExpr;
|
|
|
552
795
|
* is almost the same as for the underlying operator, but we need a useOr
|
|
553
796
|
* flag to remember whether it's ANY or ALL, and we don't have to store
|
|
554
797
|
* the result type (or the collation) because it must be boolean.
|
|
798
|
+
*
|
|
799
|
+
* A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution
|
|
800
|
+
* by building a hash table containing the Const values from the RHS arg.
|
|
801
|
+
* This table is probed during expression evaluation. The planner will set
|
|
802
|
+
* hashfuncid to the hash function which must be used to build and probe the
|
|
803
|
+
* hash table. The executor determines if it should use hash-based checks or
|
|
804
|
+
* the more traditional means based on if the hashfuncid is set or not.
|
|
805
|
+
*
|
|
806
|
+
* When performing hashed NOT IN, the negfuncid will also be set to the
|
|
807
|
+
* equality function which the hash table must use to build and probe the hash
|
|
808
|
+
* table. opno and opfuncid will remain set to the <> operator and its
|
|
809
|
+
* corresponding function and won't be used during execution. For
|
|
810
|
+
* non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
|
|
811
|
+
* convert_saop_to_hashed_saop().
|
|
812
|
+
*
|
|
813
|
+
* Similar to OpExpr, opfuncid, hashfuncid, and negfuncid are not necessarily
|
|
814
|
+
* filled in right away, so will be ignored for equality if they are not set
|
|
815
|
+
* yet.
|
|
816
|
+
*
|
|
817
|
+
* OID entries of the internal function types are irrelevant for the query
|
|
818
|
+
* jumbling, but the operator OID and the arguments are.
|
|
555
819
|
*/
|
|
556
820
|
typedef struct ScalarArrayOpExpr
|
|
557
821
|
{
|
|
558
822
|
Expr xpr;
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
823
|
+
|
|
824
|
+
/* PG_OPERATOR OID of the operator */
|
|
825
|
+
Oid opno;
|
|
826
|
+
|
|
827
|
+
/* PG_PROC OID of comparison function */
|
|
828
|
+
Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
|
|
829
|
+
|
|
830
|
+
/* PG_PROC OID of hash func or InvalidOid */
|
|
831
|
+
Oid hashfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
|
|
832
|
+
|
|
833
|
+
/* PG_PROC OID of negator of opfuncid function or InvalidOid. See above */
|
|
834
|
+
Oid negfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
|
|
835
|
+
|
|
836
|
+
/* true for ANY, false for ALL */
|
|
837
|
+
bool useOr;
|
|
838
|
+
|
|
839
|
+
/* OID of collation that operator should use */
|
|
840
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
841
|
+
|
|
842
|
+
/* the scalar and array operands */
|
|
843
|
+
List *args;
|
|
844
|
+
|
|
845
|
+
/* token location, or -1 if unknown */
|
|
846
|
+
int location;
|
|
565
847
|
} ScalarArrayOpExpr;
|
|
566
848
|
|
|
567
849
|
/*
|
|
@@ -578,6 +860,8 @@ typedef enum BoolExprType
|
|
|
578
860
|
|
|
579
861
|
typedef struct BoolExpr
|
|
580
862
|
{
|
|
863
|
+
pg_node_attr(custom_read_write)
|
|
864
|
+
|
|
581
865
|
Expr xpr;
|
|
582
866
|
BoolExprType boolop;
|
|
583
867
|
List *args; /* arguments to this expression */
|
|
@@ -654,8 +938,10 @@ typedef struct SubLink
|
|
|
654
938
|
SubLinkType subLinkType; /* see above */
|
|
655
939
|
int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
|
|
656
940
|
Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
|
|
657
|
-
|
|
658
|
-
|
|
941
|
+
/* originally specified operator name */
|
|
942
|
+
List *operName pg_node_attr(query_jumble_ignore);
|
|
943
|
+
/* subselect as Query* or raw parsetree */
|
|
944
|
+
Node *subselect;
|
|
659
945
|
int location; /* token location, or -1 if unknown */
|
|
660
946
|
} SubLink;
|
|
661
947
|
|
|
@@ -689,9 +975,9 @@ typedef struct SubLink
|
|
|
689
975
|
* The values are assigned to the global PARAM_EXEC params indexed by parParam
|
|
690
976
|
* (the parParam and args lists must have the same ordering). setParam is a
|
|
691
977
|
* 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
|
|
693
|
-
* position. (parParam and setParam are integer Lists, not
|
|
694
|
-
* because their ordering is significant.)
|
|
978
|
+
* is an initplan or MULTIEXPR plan; they are listed in order by sub-select
|
|
979
|
+
* output column position. (parParam and setParam are integer Lists, not
|
|
980
|
+
* Bitmapsets, because their ordering is significant.)
|
|
695
981
|
*
|
|
696
982
|
* Also, the planner computes startup and per-call costs for use of the
|
|
697
983
|
* SubPlan. Note that these include the cost of the subquery proper,
|
|
@@ -699,6 +985,8 @@ typedef struct SubLink
|
|
|
699
985
|
*/
|
|
700
986
|
typedef struct SubPlan
|
|
701
987
|
{
|
|
988
|
+
pg_node_attr(no_query_jumble)
|
|
989
|
+
|
|
702
990
|
Expr xpr;
|
|
703
991
|
/* Fields copied from original SubLink: */
|
|
704
992
|
SubLinkType subLinkType; /* see above */
|
|
@@ -724,8 +1012,8 @@ typedef struct SubPlan
|
|
|
724
1012
|
/* Note: parallel_safe does not consider contents of testexpr or args */
|
|
725
1013
|
/* Information for passing params into and out of the subselect: */
|
|
726
1014
|
/* setParam and parParam are lists of integers (param IDs) */
|
|
727
|
-
List *setParam; /* initplan subqueries have to
|
|
728
|
-
* Params for parent plan */
|
|
1015
|
+
List *setParam; /* initplan and MULTIEXPR subqueries have to
|
|
1016
|
+
* set these Params for parent plan */
|
|
729
1017
|
List *parParam; /* indices of input Params from parent plan */
|
|
730
1018
|
List *args; /* exprs to pass as parParam values */
|
|
731
1019
|
/* Estimated execution costs: */
|
|
@@ -736,6 +1024,9 @@ typedef struct SubPlan
|
|
|
736
1024
|
/*
|
|
737
1025
|
* AlternativeSubPlan - expression node for a choice among SubPlans
|
|
738
1026
|
*
|
|
1027
|
+
* This is used only transiently during planning: by the time the plan
|
|
1028
|
+
* reaches the executor, all AlternativeSubPlan nodes have been removed.
|
|
1029
|
+
*
|
|
739
1030
|
* The subplans are given as a List so that the node definition need not
|
|
740
1031
|
* change if there's ever more than two alternatives. For the moment,
|
|
741
1032
|
* though, there are always exactly two; and the first one is the fast-start
|
|
@@ -743,6 +1034,8 @@ typedef struct SubPlan
|
|
|
743
1034
|
*/
|
|
744
1035
|
typedef struct AlternativeSubPlan
|
|
745
1036
|
{
|
|
1037
|
+
pg_node_attr(no_query_jumble)
|
|
1038
|
+
|
|
746
1039
|
Expr xpr;
|
|
747
1040
|
List *subplans; /* SubPlan(s) with equivalent results */
|
|
748
1041
|
} AlternativeSubPlan;
|
|
@@ -761,10 +1054,12 @@ typedef struct FieldSelect
|
|
|
761
1054
|
Expr xpr;
|
|
762
1055
|
Expr *arg; /* input expression */
|
|
763
1056
|
AttrNumber fieldnum; /* attribute number of field to extract */
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
1057
|
+
/* type of the field (result type of this node) */
|
|
1058
|
+
Oid resulttype pg_node_attr(query_jumble_ignore);
|
|
1059
|
+
/* output typmod (usually -1) */
|
|
1060
|
+
int32 resulttypmod pg_node_attr(query_jumble_ignore);
|
|
1061
|
+
/* OID of collation of the field */
|
|
1062
|
+
Oid resultcollid pg_node_attr(query_jumble_ignore);
|
|
768
1063
|
} FieldSelect;
|
|
769
1064
|
|
|
770
1065
|
/* ----------------
|
|
@@ -790,8 +1085,10 @@ typedef struct FieldStore
|
|
|
790
1085
|
Expr xpr;
|
|
791
1086
|
Expr *arg; /* input tuple value */
|
|
792
1087
|
List *newvals; /* new value(s) for field(s) */
|
|
793
|
-
|
|
794
|
-
|
|
1088
|
+
/* integer list of field attnums */
|
|
1089
|
+
List *fieldnums pg_node_attr(query_jumble_ignore);
|
|
1090
|
+
/* type of result (same as type of arg) */
|
|
1091
|
+
Oid resulttype pg_node_attr(query_jumble_ignore);
|
|
795
1092
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
|
796
1093
|
} FieldStore;
|
|
797
1094
|
|
|
@@ -813,9 +1110,12 @@ typedef struct RelabelType
|
|
|
813
1110
|
Expr xpr;
|
|
814
1111
|
Expr *arg; /* input expression */
|
|
815
1112
|
Oid resulttype; /* output type of coercion expression */
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
1113
|
+
/* output typmod (usually -1) */
|
|
1114
|
+
int32 resulttypmod pg_node_attr(query_jumble_ignore);
|
|
1115
|
+
/* OID of collation, or InvalidOid if none */
|
|
1116
|
+
Oid resultcollid pg_node_attr(query_jumble_ignore);
|
|
1117
|
+
/* how to display this node */
|
|
1118
|
+
CoercionForm relabelformat pg_node_attr(query_jumble_ignore);
|
|
819
1119
|
int location; /* token location, or -1 if unknown */
|
|
820
1120
|
} RelabelType;
|
|
821
1121
|
|
|
@@ -834,8 +1134,10 @@ typedef struct CoerceViaIO
|
|
|
834
1134
|
Expr *arg; /* input expression */
|
|
835
1135
|
Oid resulttype; /* output type of coercion */
|
|
836
1136
|
/* output typmod is not stored, but is presumed -1 */
|
|
837
|
-
|
|
838
|
-
|
|
1137
|
+
/* OID of collation, or InvalidOid if none */
|
|
1138
|
+
Oid resultcollid pg_node_attr(query_jumble_ignore);
|
|
1139
|
+
/* how to display this node */
|
|
1140
|
+
CoercionForm coerceformat pg_node_attr(query_jumble_ignore);
|
|
839
1141
|
int location; /* token location, or -1 if unknown */
|
|
840
1142
|
} CoerceViaIO;
|
|
841
1143
|
|
|
@@ -858,9 +1160,12 @@ typedef struct ArrayCoerceExpr
|
|
|
858
1160
|
Expr *arg; /* input expression (yields an array) */
|
|
859
1161
|
Expr *elemexpr; /* expression representing per-element work */
|
|
860
1162
|
Oid resulttype; /* output type of coercion (an array type) */
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1163
|
+
/* output typmod (also element typmod) */
|
|
1164
|
+
int32 resulttypmod pg_node_attr(query_jumble_ignore);
|
|
1165
|
+
/* OID of collation, or InvalidOid if none */
|
|
1166
|
+
Oid resultcollid pg_node_attr(query_jumble_ignore);
|
|
1167
|
+
/* how to display this node */
|
|
1168
|
+
CoercionForm coerceformat pg_node_attr(query_jumble_ignore);
|
|
864
1169
|
int location; /* token location, or -1 if unknown */
|
|
865
1170
|
} ArrayCoerceExpr;
|
|
866
1171
|
|
|
@@ -883,7 +1188,8 @@ typedef struct ConvertRowtypeExpr
|
|
|
883
1188
|
Expr *arg; /* input expression */
|
|
884
1189
|
Oid resulttype; /* output type (always a composite type) */
|
|
885
1190
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
|
886
|
-
|
|
1191
|
+
/* how to display this node */
|
|
1192
|
+
CoercionForm convertformat pg_node_attr(query_jumble_ignore);
|
|
887
1193
|
int location; /* token location, or -1 if unknown */
|
|
888
1194
|
} ConvertRowtypeExpr;
|
|
889
1195
|
|
|
@@ -927,8 +1233,10 @@ typedef struct CollateExpr
|
|
|
927
1233
|
typedef struct CaseExpr
|
|
928
1234
|
{
|
|
929
1235
|
Expr xpr;
|
|
930
|
-
|
|
931
|
-
Oid
|
|
1236
|
+
/* type of expression result */
|
|
1237
|
+
Oid casetype pg_node_attr(query_jumble_ignore);
|
|
1238
|
+
/* OID of collation, or InvalidOid if none */
|
|
1239
|
+
Oid casecollid pg_node_attr(query_jumble_ignore);
|
|
932
1240
|
Expr *arg; /* implicit equality comparison argument */
|
|
933
1241
|
List *args; /* the arguments (list of WHEN clauses) */
|
|
934
1242
|
Expr *defresult; /* the default result (ELSE clause) */
|
|
@@ -956,6 +1264,8 @@ typedef struct CaseWhen
|
|
|
956
1264
|
* see build_coercion_expression().
|
|
957
1265
|
* * Nested FieldStore/SubscriptingRef assignment expressions in INSERT/UPDATE;
|
|
958
1266
|
* see transformAssignmentIndirection().
|
|
1267
|
+
* * Placeholder for intermediate results in some SQL/JSON expression nodes,
|
|
1268
|
+
* such as JsonConstructorExpr.
|
|
959
1269
|
*
|
|
960
1270
|
* The uses in CaseExpr and ArrayCoerceExpr are safe only to the extent that
|
|
961
1271
|
* there is not any other CaseExpr or ArrayCoerceExpr between the value source
|
|
@@ -970,8 +1280,10 @@ typedef struct CaseTestExpr
|
|
|
970
1280
|
{
|
|
971
1281
|
Expr xpr;
|
|
972
1282
|
Oid typeId; /* type for substituted value */
|
|
973
|
-
|
|
974
|
-
|
|
1283
|
+
/* typemod for substituted value */
|
|
1284
|
+
int32 typeMod pg_node_attr(query_jumble_ignore);
|
|
1285
|
+
/* collation for the substituted value */
|
|
1286
|
+
Oid collation pg_node_attr(query_jumble_ignore);
|
|
975
1287
|
} CaseTestExpr;
|
|
976
1288
|
|
|
977
1289
|
/*
|
|
@@ -985,12 +1297,18 @@ typedef struct CaseTestExpr
|
|
|
985
1297
|
typedef struct ArrayExpr
|
|
986
1298
|
{
|
|
987
1299
|
Expr xpr;
|
|
988
|
-
|
|
989
|
-
Oid
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1300
|
+
/* type of expression result */
|
|
1301
|
+
Oid array_typeid pg_node_attr(query_jumble_ignore);
|
|
1302
|
+
/* OID of collation, or InvalidOid if none */
|
|
1303
|
+
Oid array_collid pg_node_attr(query_jumble_ignore);
|
|
1304
|
+
/* common type of array elements */
|
|
1305
|
+
Oid element_typeid pg_node_attr(query_jumble_ignore);
|
|
1306
|
+
/* the array elements or sub-arrays */
|
|
1307
|
+
List *elements;
|
|
1308
|
+
/* true if elements are sub-arrays */
|
|
1309
|
+
bool multidims pg_node_attr(query_jumble_ignore);
|
|
1310
|
+
/* token location, or -1 if unknown */
|
|
1311
|
+
int location;
|
|
994
1312
|
} ArrayExpr;
|
|
995
1313
|
|
|
996
1314
|
/*
|
|
@@ -1006,21 +1324,21 @@ typedef struct ArrayExpr
|
|
|
1006
1324
|
* than vice versa.) It is important not to assume that length(args) is
|
|
1007
1325
|
* the same as the number of columns logically present in the rowtype.
|
|
1008
1326
|
*
|
|
1009
|
-
* colnames provides field names
|
|
1010
|
-
*
|
|
1011
|
-
*
|
|
1012
|
-
*
|
|
1013
|
-
*
|
|
1014
|
-
*
|
|
1015
|
-
*
|
|
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.
|
|
1327
|
+
* colnames provides field names if the ROW() result is of type RECORD.
|
|
1328
|
+
* Names *must* be provided if row_typeid is RECORDOID; but if it is a
|
|
1329
|
+
* named composite type, colnames will be ignored in favor of using the
|
|
1330
|
+
* type's cataloged field names, so colnames should be NIL. Like the
|
|
1331
|
+
* args list, colnames is defined to be one-for-one with physical fields
|
|
1332
|
+
* of the rowtype (although dropped columns shouldn't appear in the
|
|
1333
|
+
* RECORD case, so this fine point is currently moot).
|
|
1018
1334
|
*/
|
|
1019
1335
|
typedef struct RowExpr
|
|
1020
1336
|
{
|
|
1021
1337
|
Expr xpr;
|
|
1022
1338
|
List *args; /* the fields */
|
|
1023
|
-
|
|
1339
|
+
|
|
1340
|
+
/* RECORDOID or a composite type's ID */
|
|
1341
|
+
Oid row_typeid pg_node_attr(query_jumble_ignore);
|
|
1024
1342
|
|
|
1025
1343
|
/*
|
|
1026
1344
|
* row_typeid cannot be a domain over composite, only plain composite. To
|
|
@@ -1034,8 +1352,13 @@ typedef struct RowExpr
|
|
|
1034
1352
|
* We don't need to store a collation either. The result type is
|
|
1035
1353
|
* necessarily composite, and composite types never have a collation.
|
|
1036
1354
|
*/
|
|
1037
|
-
|
|
1038
|
-
|
|
1355
|
+
|
|
1356
|
+
/* how to display this node */
|
|
1357
|
+
CoercionForm row_format pg_node_attr(query_jumble_ignore);
|
|
1358
|
+
|
|
1359
|
+
/* list of String, or NIL */
|
|
1360
|
+
List *colnames pg_node_attr(query_jumble_ignore);
|
|
1361
|
+
|
|
1039
1362
|
int location; /* token location, or -1 if unknown */
|
|
1040
1363
|
} RowExpr;
|
|
1041
1364
|
|
|
@@ -1067,12 +1390,19 @@ typedef enum RowCompareType
|
|
|
1067
1390
|
typedef struct RowCompareExpr
|
|
1068
1391
|
{
|
|
1069
1392
|
Expr xpr;
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
List *
|
|
1075
|
-
|
|
1393
|
+
|
|
1394
|
+
/* LT LE GE or GT, never EQ or NE */
|
|
1395
|
+
RowCompareType rctype;
|
|
1396
|
+
/* OID list of pairwise comparison ops */
|
|
1397
|
+
List *opnos pg_node_attr(query_jumble_ignore);
|
|
1398
|
+
/* OID list of containing operator families */
|
|
1399
|
+
List *opfamilies pg_node_attr(query_jumble_ignore);
|
|
1400
|
+
/* OID list of collations for comparisons */
|
|
1401
|
+
List *inputcollids pg_node_attr(query_jumble_ignore);
|
|
1402
|
+
/* the left-hand input arguments */
|
|
1403
|
+
List *largs;
|
|
1404
|
+
/* the right-hand input arguments */
|
|
1405
|
+
List *rargs;
|
|
1076
1406
|
} RowCompareExpr;
|
|
1077
1407
|
|
|
1078
1408
|
/*
|
|
@@ -1081,10 +1411,14 @@ typedef struct RowCompareExpr
|
|
|
1081
1411
|
typedef struct CoalesceExpr
|
|
1082
1412
|
{
|
|
1083
1413
|
Expr xpr;
|
|
1084
|
-
|
|
1085
|
-
Oid
|
|
1086
|
-
|
|
1087
|
-
|
|
1414
|
+
/* type of expression result */
|
|
1415
|
+
Oid coalescetype pg_node_attr(query_jumble_ignore);
|
|
1416
|
+
/* OID of collation, or InvalidOid if none */
|
|
1417
|
+
Oid coalescecollid pg_node_attr(query_jumble_ignore);
|
|
1418
|
+
/* the arguments */
|
|
1419
|
+
List *args;
|
|
1420
|
+
/* token location, or -1 if unknown */
|
|
1421
|
+
int location;
|
|
1088
1422
|
} CoalesceExpr;
|
|
1089
1423
|
|
|
1090
1424
|
/*
|
|
@@ -1099,12 +1433,18 @@ typedef enum MinMaxOp
|
|
|
1099
1433
|
typedef struct MinMaxExpr
|
|
1100
1434
|
{
|
|
1101
1435
|
Expr xpr;
|
|
1102
|
-
|
|
1103
|
-
Oid
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1436
|
+
/* common type of arguments and result */
|
|
1437
|
+
Oid minmaxtype pg_node_attr(query_jumble_ignore);
|
|
1438
|
+
/* OID of collation of result */
|
|
1439
|
+
Oid minmaxcollid pg_node_attr(query_jumble_ignore);
|
|
1440
|
+
/* OID of collation that function should use */
|
|
1441
|
+
Oid inputcollid pg_node_attr(query_jumble_ignore);
|
|
1442
|
+
/* function to execute */
|
|
1443
|
+
MinMaxOp op;
|
|
1444
|
+
/* the arguments */
|
|
1445
|
+
List *args;
|
|
1446
|
+
/* token location, or -1 if unknown */
|
|
1447
|
+
int location;
|
|
1108
1448
|
} MinMaxExpr;
|
|
1109
1449
|
|
|
1110
1450
|
/*
|
|
@@ -1141,7 +1481,12 @@ typedef struct SQLValueFunction
|
|
|
1141
1481
|
{
|
|
1142
1482
|
Expr xpr;
|
|
1143
1483
|
SQLValueFunctionOp op; /* which function this is */
|
|
1144
|
-
|
|
1484
|
+
|
|
1485
|
+
/*
|
|
1486
|
+
* Result type/typmod. Type is fully determined by "op", so no need to
|
|
1487
|
+
* include this Oid in the query jumbling.
|
|
1488
|
+
*/
|
|
1489
|
+
Oid type pg_node_attr(query_jumble_ignore);
|
|
1145
1490
|
int32 typmod;
|
|
1146
1491
|
int location; /* token location, or -1 if unknown */
|
|
1147
1492
|
} SQLValueFunction;
|
|
@@ -1165,11 +1510,11 @@ typedef enum XmlExprOp
|
|
|
1165
1510
|
IS_XMLPARSE, /* XMLPARSE(text, is_doc, preserve_ws) */
|
|
1166
1511
|
IS_XMLPI, /* XMLPI(name [, args]) */
|
|
1167
1512
|
IS_XMLROOT, /* XMLROOT(xml, version, standalone) */
|
|
1168
|
-
IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval) */
|
|
1513
|
+
IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval, indent) */
|
|
1169
1514
|
IS_DOCUMENT /* xmlval IS DOCUMENT */
|
|
1170
1515
|
} XmlExprOp;
|
|
1171
1516
|
|
|
1172
|
-
typedef enum
|
|
1517
|
+
typedef enum XmlOptionType
|
|
1173
1518
|
{
|
|
1174
1519
|
XMLOPTION_DOCUMENT,
|
|
1175
1520
|
XMLOPTION_CONTENT
|
|
@@ -1178,17 +1523,142 @@ typedef enum
|
|
|
1178
1523
|
typedef struct XmlExpr
|
|
1179
1524
|
{
|
|
1180
1525
|
Expr xpr;
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1526
|
+
/* xml function ID */
|
|
1527
|
+
XmlExprOp op;
|
|
1528
|
+
/* name in xml(NAME foo ...) syntaxes */
|
|
1529
|
+
char *name pg_node_attr(query_jumble_ignore);
|
|
1530
|
+
/* non-XML expressions for xml_attributes */
|
|
1531
|
+
List *named_args;
|
|
1532
|
+
/* parallel list of String values */
|
|
1533
|
+
List *arg_names pg_node_attr(query_jumble_ignore);
|
|
1534
|
+
/* list of expressions */
|
|
1535
|
+
List *args;
|
|
1536
|
+
/* DOCUMENT or CONTENT */
|
|
1537
|
+
XmlOptionType xmloption pg_node_attr(query_jumble_ignore);
|
|
1538
|
+
/* INDENT option for XMLSERIALIZE */
|
|
1539
|
+
bool indent;
|
|
1540
|
+
/* target type/typmod for XMLSERIALIZE */
|
|
1541
|
+
Oid type pg_node_attr(query_jumble_ignore);
|
|
1542
|
+
int32 typmod pg_node_attr(query_jumble_ignore);
|
|
1543
|
+
/* token location, or -1 if unknown */
|
|
1544
|
+
int location;
|
|
1190
1545
|
} XmlExpr;
|
|
1191
1546
|
|
|
1547
|
+
/*
|
|
1548
|
+
* JsonEncoding -
|
|
1549
|
+
* representation of JSON ENCODING clause
|
|
1550
|
+
*/
|
|
1551
|
+
typedef enum JsonEncoding
|
|
1552
|
+
{
|
|
1553
|
+
JS_ENC_DEFAULT, /* unspecified */
|
|
1554
|
+
JS_ENC_UTF8,
|
|
1555
|
+
JS_ENC_UTF16,
|
|
1556
|
+
JS_ENC_UTF32,
|
|
1557
|
+
} JsonEncoding;
|
|
1558
|
+
|
|
1559
|
+
/*
|
|
1560
|
+
* JsonFormatType -
|
|
1561
|
+
* enumeration of JSON formats used in JSON FORMAT clause
|
|
1562
|
+
*/
|
|
1563
|
+
typedef enum JsonFormatType
|
|
1564
|
+
{
|
|
1565
|
+
JS_FORMAT_DEFAULT, /* unspecified */
|
|
1566
|
+
JS_FORMAT_JSON, /* FORMAT JSON [ENCODING ...] */
|
|
1567
|
+
JS_FORMAT_JSONB /* implicit internal format for RETURNING
|
|
1568
|
+
* jsonb */
|
|
1569
|
+
} JsonFormatType;
|
|
1570
|
+
|
|
1571
|
+
/*
|
|
1572
|
+
* JsonFormat -
|
|
1573
|
+
* representation of JSON FORMAT clause
|
|
1574
|
+
*/
|
|
1575
|
+
typedef struct JsonFormat
|
|
1576
|
+
{
|
|
1577
|
+
NodeTag type;
|
|
1578
|
+
JsonFormatType format_type; /* format type */
|
|
1579
|
+
JsonEncoding encoding; /* JSON encoding */
|
|
1580
|
+
int location; /* token location, or -1 if unknown */
|
|
1581
|
+
} JsonFormat;
|
|
1582
|
+
|
|
1583
|
+
/*
|
|
1584
|
+
* JsonReturning -
|
|
1585
|
+
* transformed representation of JSON RETURNING clause
|
|
1586
|
+
*/
|
|
1587
|
+
typedef struct JsonReturning
|
|
1588
|
+
{
|
|
1589
|
+
NodeTag type;
|
|
1590
|
+
JsonFormat *format; /* output JSON format */
|
|
1591
|
+
Oid typid; /* target type Oid */
|
|
1592
|
+
int32 typmod; /* target type modifier */
|
|
1593
|
+
} JsonReturning;
|
|
1594
|
+
|
|
1595
|
+
/*
|
|
1596
|
+
* JsonValueExpr -
|
|
1597
|
+
* representation of JSON value expression (expr [FORMAT JsonFormat])
|
|
1598
|
+
*
|
|
1599
|
+
* The actual value is obtained by evaluating formatted_expr. raw_expr is
|
|
1600
|
+
* only there for displaying the original user-written expression and is not
|
|
1601
|
+
* evaluated by ExecInterpExpr() and eval_const_exprs_mutator().
|
|
1602
|
+
*/
|
|
1603
|
+
typedef struct JsonValueExpr
|
|
1604
|
+
{
|
|
1605
|
+
NodeTag type;
|
|
1606
|
+
Expr *raw_expr; /* raw expression */
|
|
1607
|
+
Expr *formatted_expr; /* formatted expression */
|
|
1608
|
+
JsonFormat *format; /* FORMAT clause, if specified */
|
|
1609
|
+
} JsonValueExpr;
|
|
1610
|
+
|
|
1611
|
+
typedef enum JsonConstructorType
|
|
1612
|
+
{
|
|
1613
|
+
JSCTOR_JSON_OBJECT = 1,
|
|
1614
|
+
JSCTOR_JSON_ARRAY = 2,
|
|
1615
|
+
JSCTOR_JSON_OBJECTAGG = 3,
|
|
1616
|
+
JSCTOR_JSON_ARRAYAGG = 4
|
|
1617
|
+
} JsonConstructorType;
|
|
1618
|
+
|
|
1619
|
+
/*
|
|
1620
|
+
* JsonConstructorExpr -
|
|
1621
|
+
* wrapper over FuncExpr/Aggref/WindowFunc for SQL/JSON constructors
|
|
1622
|
+
*/
|
|
1623
|
+
typedef struct JsonConstructorExpr
|
|
1624
|
+
{
|
|
1625
|
+
Expr xpr;
|
|
1626
|
+
JsonConstructorType type; /* constructor type */
|
|
1627
|
+
List *args;
|
|
1628
|
+
Expr *func; /* underlying json[b]_xxx() function call */
|
|
1629
|
+
Expr *coercion; /* coercion to RETURNING type */
|
|
1630
|
+
JsonReturning *returning; /* RETURNING clause */
|
|
1631
|
+
bool absent_on_null; /* ABSENT ON NULL? */
|
|
1632
|
+
bool unique; /* WITH UNIQUE KEYS? (JSON_OBJECT[AGG] only) */
|
|
1633
|
+
int location;
|
|
1634
|
+
} JsonConstructorExpr;
|
|
1635
|
+
|
|
1636
|
+
/*
|
|
1637
|
+
* JsonValueType -
|
|
1638
|
+
* representation of JSON item type in IS JSON predicate
|
|
1639
|
+
*/
|
|
1640
|
+
typedef enum JsonValueType
|
|
1641
|
+
{
|
|
1642
|
+
JS_TYPE_ANY, /* IS JSON [VALUE] */
|
|
1643
|
+
JS_TYPE_OBJECT, /* IS JSON OBJECT */
|
|
1644
|
+
JS_TYPE_ARRAY, /* IS JSON ARRAY */
|
|
1645
|
+
JS_TYPE_SCALAR /* IS JSON SCALAR */
|
|
1646
|
+
} JsonValueType;
|
|
1647
|
+
|
|
1648
|
+
/*
|
|
1649
|
+
* JsonIsPredicate -
|
|
1650
|
+
* representation of IS JSON predicate
|
|
1651
|
+
*/
|
|
1652
|
+
typedef struct JsonIsPredicate
|
|
1653
|
+
{
|
|
1654
|
+
NodeTag type;
|
|
1655
|
+
Node *expr; /* subject expression */
|
|
1656
|
+
JsonFormat *format; /* FORMAT clause, if specified */
|
|
1657
|
+
JsonValueType item_type; /* JSON item type */
|
|
1658
|
+
bool unique_keys; /* check key uniqueness? */
|
|
1659
|
+
int location; /* token location, or -1 if unknown */
|
|
1660
|
+
} JsonIsPredicate;
|
|
1661
|
+
|
|
1192
1662
|
/* ----------------
|
|
1193
1663
|
* NullTest
|
|
1194
1664
|
*
|
|
@@ -1218,7 +1688,8 @@ typedef struct NullTest
|
|
|
1218
1688
|
Expr xpr;
|
|
1219
1689
|
Expr *arg; /* input expression */
|
|
1220
1690
|
NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
|
|
1221
|
-
|
|
1691
|
+
/* T to perform field-by-field null checks */
|
|
1692
|
+
bool argisrow pg_node_attr(query_jumble_ignore);
|
|
1222
1693
|
int location; /* token location, or -1 if unknown */
|
|
1223
1694
|
} NullTest;
|
|
1224
1695
|
|
|
@@ -1258,9 +1729,12 @@ typedef struct CoerceToDomain
|
|
|
1258
1729
|
Expr xpr;
|
|
1259
1730
|
Expr *arg; /* input expression */
|
|
1260
1731
|
Oid resulttype; /* domain type ID (result type) */
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1732
|
+
/* output typmod (currently always -1) */
|
|
1733
|
+
int32 resulttypmod pg_node_attr(query_jumble_ignore);
|
|
1734
|
+
/* OID of collation, or InvalidOid if none */
|
|
1735
|
+
Oid resultcollid pg_node_attr(query_jumble_ignore);
|
|
1736
|
+
/* how to display this node */
|
|
1737
|
+
CoercionForm coercionformat pg_node_attr(query_jumble_ignore);
|
|
1264
1738
|
int location; /* token location, or -1 if unknown */
|
|
1265
1739
|
} CoerceToDomain;
|
|
1266
1740
|
|
|
@@ -1276,10 +1750,14 @@ typedef struct CoerceToDomain
|
|
|
1276
1750
|
typedef struct CoerceToDomainValue
|
|
1277
1751
|
{
|
|
1278
1752
|
Expr xpr;
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1753
|
+
/* type for substituted value */
|
|
1754
|
+
Oid typeId;
|
|
1755
|
+
/* typemod for substituted value */
|
|
1756
|
+
int32 typeMod pg_node_attr(query_jumble_ignore);
|
|
1757
|
+
/* collation for the substituted value */
|
|
1758
|
+
Oid collation pg_node_attr(query_jumble_ignore);
|
|
1759
|
+
/* token location, or -1 if unknown */
|
|
1760
|
+
int location;
|
|
1283
1761
|
} CoerceToDomainValue;
|
|
1284
1762
|
|
|
1285
1763
|
/*
|
|
@@ -1292,10 +1770,14 @@ typedef struct CoerceToDomainValue
|
|
|
1292
1770
|
typedef struct SetToDefault
|
|
1293
1771
|
{
|
|
1294
1772
|
Expr xpr;
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1773
|
+
/* type for substituted value */
|
|
1774
|
+
Oid typeId;
|
|
1775
|
+
/* typemod for substituted value */
|
|
1776
|
+
int32 typeMod pg_node_attr(query_jumble_ignore);
|
|
1777
|
+
/* collation for the substituted value */
|
|
1778
|
+
Oid collation pg_node_attr(query_jumble_ignore);
|
|
1779
|
+
/* token location, or -1 if unknown */
|
|
1780
|
+
int location;
|
|
1299
1781
|
} SetToDefault;
|
|
1300
1782
|
|
|
1301
1783
|
/*
|
|
@@ -1305,6 +1787,7 @@ typedef struct SetToDefault
|
|
|
1305
1787
|
* of the target relation being constrained; this aids placing the expression
|
|
1306
1788
|
* correctly during planning. We can assume however that its "levelsup" is
|
|
1307
1789
|
* always zero, due to the syntactic constraints on where it can appear.
|
|
1790
|
+
* Also, cvarno will always be a true RT index, never INNER_VAR etc.
|
|
1308
1791
|
*
|
|
1309
1792
|
* The referenced cursor can be represented either as a hardwired string
|
|
1310
1793
|
* or as a reference to a run-time parameter of type REFCURSOR. The latter
|
|
@@ -1362,13 +1845,14 @@ typedef struct InferenceElem
|
|
|
1362
1845
|
* column for the item; so there may be missing or out-of-order resnos.
|
|
1363
1846
|
* It is even legal to have duplicated resnos; consider
|
|
1364
1847
|
* UPDATE table SET arraycol[1] = ..., arraycol[2] = ..., ...
|
|
1365
|
-
*
|
|
1366
|
-
*
|
|
1367
|
-
*
|
|
1368
|
-
*
|
|
1369
|
-
*
|
|
1370
|
-
*
|
|
1371
|
-
*
|
|
1848
|
+
* In an INSERT, the rewriter and planner will normalize the tlist by
|
|
1849
|
+
* reordering it into physical column order and filling in default values
|
|
1850
|
+
* for any columns not assigned values by the original query. In an UPDATE,
|
|
1851
|
+
* after the rewriter merges multiple assignments for the same column, the
|
|
1852
|
+
* planner extracts the target-column numbers into a separate "update_colnos"
|
|
1853
|
+
* list, and then renumbers the tlist elements serially. Thus, tlist resnos
|
|
1854
|
+
* match ordinal position in all tlists seen by the executor; but it is wrong
|
|
1855
|
+
* to assume that before planning has happened.
|
|
1372
1856
|
*
|
|
1373
1857
|
* resname is required to represent the correct column name in non-resjunk
|
|
1374
1858
|
* entries of top-level SELECT targetlists, since it will be used as the
|
|
@@ -1404,15 +1888,20 @@ typedef struct InferenceElem
|
|
|
1404
1888
|
typedef struct TargetEntry
|
|
1405
1889
|
{
|
|
1406
1890
|
Expr xpr;
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1891
|
+
/* expression to evaluate */
|
|
1892
|
+
Expr *expr;
|
|
1893
|
+
/* attribute number (see notes above) */
|
|
1894
|
+
AttrNumber resno;
|
|
1895
|
+
/* name of the column (could be NULL) */
|
|
1896
|
+
char *resname pg_node_attr(query_jumble_ignore);
|
|
1897
|
+
/* nonzero if referenced by a sort/group clause */
|
|
1898
|
+
Index ressortgroupref;
|
|
1899
|
+
/* OID of column's source table */
|
|
1900
|
+
Oid resorigtbl pg_node_attr(query_jumble_ignore);
|
|
1901
|
+
/* column's number in source table */
|
|
1902
|
+
AttrNumber resorigcol pg_node_attr(query_jumble_ignore);
|
|
1903
|
+
/* set to true to eliminate the attribute from final target list */
|
|
1904
|
+
bool resjunk pg_node_attr(query_jumble_ignore);
|
|
1416
1905
|
} TargetEntry;
|
|
1417
1906
|
|
|
1418
1907
|
|
|
@@ -1475,6 +1964,11 @@ typedef struct RangeTblRef
|
|
|
1475
1964
|
* alias has a critical impact on semantics, because a join with an alias
|
|
1476
1965
|
* restricts visibility of the tables/columns inside it.
|
|
1477
1966
|
*
|
|
1967
|
+
* join_using_alias is an Alias node representing the join correlation
|
|
1968
|
+
* name that SQL:2016 and later allow to be attached to JOIN/USING.
|
|
1969
|
+
* Its column alias list includes only the common column names from USING,
|
|
1970
|
+
* and it does not restrict visibility of the join's input tables.
|
|
1971
|
+
*
|
|
1478
1972
|
* During parse analysis, an RTE is created for the Join, and its index
|
|
1479
1973
|
* is filled into rtindex. This RTE is present mainly so that Vars can
|
|
1480
1974
|
* be created that refer to the outputs of the join. The planner sometimes
|
|
@@ -1489,10 +1983,16 @@ typedef struct JoinExpr
|
|
|
1489
1983
|
bool isNatural; /* Natural join? Will need to shape table */
|
|
1490
1984
|
Node *larg; /* left subtree */
|
|
1491
1985
|
Node *rarg; /* right subtree */
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1986
|
+
/* USING clause, if any (list of String) */
|
|
1987
|
+
List *usingClause pg_node_attr(query_jumble_ignore);
|
|
1988
|
+
/* alias attached to USING clause, if any */
|
|
1989
|
+
Alias *join_using_alias pg_node_attr(query_jumble_ignore);
|
|
1990
|
+
/* qualifiers on join, if any */
|
|
1991
|
+
Node *quals;
|
|
1992
|
+
/* user-written alias clause, if any */
|
|
1993
|
+
Alias *alias pg_node_attr(query_jumble_ignore);
|
|
1994
|
+
/* RT index assigned for join, or 0 */
|
|
1995
|
+
int rtindex;
|
|
1496
1996
|
} JoinExpr;
|
|
1497
1997
|
|
|
1498
1998
|
/*----------
|