pg_query 4.2.1 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/README.md +6 -8
- data/Rakefile +5 -6
- data/ext/pg_query/extconf.rb +14 -4
- data/ext/pg_query/include/pg_query.h +27 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
- data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
- data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
- 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 +1 -1
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
- 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 +1 -1
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
- data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
- 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 +58 -98
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
- data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
- data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -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 +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
- 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 +4 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
- 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 +1 -1
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
- 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/{common → postgres/common}/string.h +5 -3
- data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
- 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 +11 -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 +34 -17
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
- 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} +21 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
- 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 +2 -2
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
- data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
- 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 +35 -18
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
- 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 +96 -511
- 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 +377 -139
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
- 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/{nodes → postgres/nodes}/value.h +12 -2
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
- 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 +1 -1
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +158 -218
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
- 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} +1 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -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 +1 -1
- 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 +62 -25
- 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} +42 -75
- 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 +1 -4
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
- data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
- data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
- 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 +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
- data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -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 +94 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
- 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 +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
- data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
- 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 +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
- 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 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
- 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 +41 -21
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
- 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 +7 -6
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
- 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 +20 -5
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
- data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
- 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/{utils → postgres/utils}/regproc.h +3 -3
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
- 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 +6 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
- data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
- data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_deparse.c +1 -10635
- data/ext/pg_query/pg_query_fingerprint.c +12 -8
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
- data/ext/pg_query/pg_query_ruby.c +5 -0
- data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +3 -3
- data/ext/pg_query/postgres_deparse.c +11067 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
- data/ext/pg_query/src_backend_commands_define.c +1 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +14 -2
- data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
- data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
- data/ext/pg_query/src_backend_parser_parser.c +28 -2
- data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
- data/ext/pg_query/src_backend_parser_scansup.c +1 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
- data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
- 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 +449 -312
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
- 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 +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +534 -510
- 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 +9 -8
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/src_port_pg_bitutils.c +79 -5
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +6 -10
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/fingerprint.rb +2 -3
- data/lib/pg_query/node.rb +16 -11
- data/lib/pg_query/parse.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +23 -5
- data/lib/pg_query/version.rb +1 -1
- metadata +432 -380
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/ip.h +0 -31
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1095
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/postmaster/pgarch.h +0 -73
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -20
- 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/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
- data/ext/pg_query/src_common_pg_prng.c +0 -152
- data/ext/pg_query/src_common_string.c +0 -92
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_strnlen.c +0 -39
- /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
- /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
- /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
- /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.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
|
@@ -63,14 +63,27 @@ 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
|
/*
|
@@ -82,19 +95,32 @@ typedef struct RangeVar
|
|
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
|
|
@@ -162,6 +193,14 @@ typedef struct Expr
|
|
162
193
|
* row identity information during UPDATE/DELETE/MERGE. This value should
|
163
194
|
* never be seen outside the planner.
|
164
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
|
+
*
|
165
204
|
* In the parser, varnosyn and varattnosyn are either identical to
|
166
205
|
* varno/varattno, or they specify the column's position in an aliased JOIN
|
167
206
|
* RTE that hides the semantic referent RTE's refname. This is a syntactic
|
@@ -186,19 +225,50 @@ typedef struct Expr
|
|
186
225
|
typedef struct Var
|
187
226
|
{
|
188
227
|
Expr xpr;
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
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;
|
202
272
|
} Var;
|
203
273
|
|
204
274
|
/*
|
@@ -208,22 +278,39 @@ typedef struct Var
|
|
208
278
|
* must be in non-extended form (4-byte header, no compression or external
|
209
279
|
* references). This ensures that the Const node is self-contained and makes
|
210
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.
|
211
283
|
*/
|
212
284
|
typedef struct Const
|
213
285
|
{
|
286
|
+
pg_node_attr(custom_copy_equal, custom_read_write)
|
287
|
+
|
214
288
|
Expr xpr;
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
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);
|
227
314
|
} Const;
|
228
315
|
|
229
316
|
/*
|
@@ -267,9 +354,12 @@ typedef struct Param
|
|
267
354
|
ParamKind paramkind; /* kind of parameter. See above */
|
268
355
|
int paramid; /* numeric ID for parameter */
|
269
356
|
Oid paramtype; /* pg_type OID of parameter's datatype */
|
270
|
-
|
271
|
-
|
272
|
-
|
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;
|
273
363
|
} Param;
|
274
364
|
|
275
365
|
/*
|
@@ -304,6 +394,10 @@ typedef struct Param
|
|
304
394
|
* replaced with a single argument representing the partial-aggregate
|
305
395
|
* transition values.
|
306
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
|
+
*
|
307
401
|
* aggsplit indicates the expected partial-aggregation mode for the Aggref's
|
308
402
|
* parent plan node. It's always set to AGGSPLIT_SIMPLE in the parser, but
|
309
403
|
* the planner might change it to something else. We use this mainly as
|
@@ -316,30 +410,79 @@ typedef struct Param
|
|
316
410
|
* and can share the result. Aggregates with same 'transno' but different
|
317
411
|
* 'aggno' can share the same transition state, only the final function needs
|
318
412
|
* to be called separately.
|
413
|
+
*
|
414
|
+
* Information related to collations, transition types and internal states
|
415
|
+
* are irrelevant for the query jumbling.
|
319
416
|
*/
|
320
417
|
typedef struct Aggref
|
321
418
|
{
|
322
419
|
Expr xpr;
|
323
|
-
|
324
|
-
|
325
|
-
Oid
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
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;
|
343
486
|
} Aggref;
|
344
487
|
|
345
488
|
/*
|
@@ -365,34 +508,59 @@ typedef struct Aggref
|
|
365
508
|
*
|
366
509
|
* In raw parse output we have only the args list; parse analysis fills in the
|
367
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.
|
368
514
|
*/
|
369
515
|
typedef struct GroupingFunc
|
370
516
|
{
|
371
517
|
Expr xpr;
|
372
|
-
|
373
|
-
|
374
|
-
List *
|
375
|
-
|
376
|
-
|
377
|
-
|
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;
|
378
533
|
} GroupingFunc;
|
379
534
|
|
380
535
|
/*
|
381
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".
|
382
540
|
*/
|
383
541
|
typedef struct WindowFunc
|
384
542
|
{
|
385
543
|
Expr xpr;
|
386
|
-
|
387
|
-
Oid
|
388
|
-
|
389
|
-
Oid
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
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;
|
396
564
|
} WindowFunc;
|
397
565
|
|
398
566
|
/*
|
@@ -429,6 +597,8 @@ typedef struct WindowFunc
|
|
429
597
|
* subscripting logic. Likewise, reftypmod and refcollid will match the
|
430
598
|
* container's properties in a store, but could be different in a fetch.
|
431
599
|
*
|
600
|
+
* Any internal state data is ignored for the query jumbling.
|
601
|
+
*
|
432
602
|
* Note: for the cases where a container is returned, if refexpr yields a R/W
|
433
603
|
* expanded container, then the implementation is allowed to modify that
|
434
604
|
* object in-place and return the same object.
|
@@ -436,20 +606,28 @@ typedef struct WindowFunc
|
|
436
606
|
typedef struct SubscriptingRef
|
437
607
|
{
|
438
608
|
Expr xpr;
|
439
|
-
|
440
|
-
Oid
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
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;
|
453
631
|
} SubscriptingRef;
|
454
632
|
|
455
633
|
/*
|
@@ -488,20 +666,35 @@ typedef enum CoercionForm
|
|
488
666
|
|
489
667
|
/*
|
490
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.
|
491
672
|
*/
|
492
673
|
typedef struct FuncExpr
|
493
674
|
{
|
494
675
|
Expr xpr;
|
495
|
-
|
496
|
-
Oid
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
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;
|
505
698
|
} FuncExpr;
|
506
699
|
|
507
700
|
/*
|
@@ -521,10 +714,14 @@ typedef struct FuncExpr
|
|
521
714
|
typedef struct NamedArgExpr
|
522
715
|
{
|
523
716
|
Expr xpr;
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
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;
|
528
725
|
} NamedArgExpr;
|
529
726
|
|
530
727
|
/*
|
@@ -535,18 +732,38 @@ typedef struct NamedArgExpr
|
|
535
732
|
* Note that opfuncid is not necessarily filled in immediately on creation
|
536
733
|
* of the node. The planner makes sure it is valid before passing the node
|
537
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.
|
538
739
|
*/
|
539
740
|
typedef struct OpExpr
|
540
741
|
{
|
541
742
|
Expr xpr;
|
542
|
-
|
543
|
-
|
544
|
-
Oid
|
545
|
-
|
546
|
-
|
547
|
-
Oid
|
548
|
-
|
549
|
-
|
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;
|
550
767
|
} OpExpr;
|
551
768
|
|
552
769
|
/*
|
@@ -592,19 +809,41 @@ typedef OpExpr NullIfExpr;
|
|
592
809
|
* corresponding function and won't be used during execution. For
|
593
810
|
* non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
|
594
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.
|
595
819
|
*/
|
596
820
|
typedef struct ScalarArrayOpExpr
|
597
821
|
{
|
598
822
|
Expr xpr;
|
599
|
-
|
600
|
-
|
601
|
-
Oid
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
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;
|
608
847
|
} ScalarArrayOpExpr;
|
609
848
|
|
610
849
|
/*
|
@@ -621,6 +860,8 @@ typedef enum BoolExprType
|
|
621
860
|
|
622
861
|
typedef struct BoolExpr
|
623
862
|
{
|
863
|
+
pg_node_attr(custom_read_write)
|
864
|
+
|
624
865
|
Expr xpr;
|
625
866
|
BoolExprType boolop;
|
626
867
|
List *args; /* arguments to this expression */
|
@@ -697,8 +938,10 @@ typedef struct SubLink
|
|
697
938
|
SubLinkType subLinkType; /* see above */
|
698
939
|
int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
|
699
940
|
Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
|
700
|
-
|
701
|
-
|
941
|
+
/* originally specified operator name */
|
942
|
+
List *operName pg_node_attr(query_jumble_ignore);
|
943
|
+
/* subselect as Query* or raw parsetree */
|
944
|
+
Node *subselect;
|
702
945
|
int location; /* token location, or -1 if unknown */
|
703
946
|
} SubLink;
|
704
947
|
|
@@ -732,9 +975,9 @@ typedef struct SubLink
|
|
732
975
|
* The values are assigned to the global PARAM_EXEC params indexed by parParam
|
733
976
|
* (the parParam and args lists must have the same ordering). setParam is a
|
734
977
|
* list of the PARAM_EXEC params that are computed by the sub-select, if it
|
735
|
-
* is an initplan; they are listed in order by sub-select
|
736
|
-
* position. (parParam and setParam are integer Lists, not
|
737
|
-
* 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.)
|
738
981
|
*
|
739
982
|
* Also, the planner computes startup and per-call costs for use of the
|
740
983
|
* SubPlan. Note that these include the cost of the subquery proper,
|
@@ -742,6 +985,8 @@ typedef struct SubLink
|
|
742
985
|
*/
|
743
986
|
typedef struct SubPlan
|
744
987
|
{
|
988
|
+
pg_node_attr(no_query_jumble)
|
989
|
+
|
745
990
|
Expr xpr;
|
746
991
|
/* Fields copied from original SubLink: */
|
747
992
|
SubLinkType subLinkType; /* see above */
|
@@ -767,8 +1012,8 @@ typedef struct SubPlan
|
|
767
1012
|
/* Note: parallel_safe does not consider contents of testexpr or args */
|
768
1013
|
/* Information for passing params into and out of the subselect: */
|
769
1014
|
/* setParam and parParam are lists of integers (param IDs) */
|
770
|
-
List *setParam; /* initplan subqueries have to
|
771
|
-
* Params for parent plan */
|
1015
|
+
List *setParam; /* initplan and MULTIEXPR subqueries have to
|
1016
|
+
* set these Params for parent plan */
|
772
1017
|
List *parParam; /* indices of input Params from parent plan */
|
773
1018
|
List *args; /* exprs to pass as parParam values */
|
774
1019
|
/* Estimated execution costs: */
|
@@ -789,6 +1034,8 @@ typedef struct SubPlan
|
|
789
1034
|
*/
|
790
1035
|
typedef struct AlternativeSubPlan
|
791
1036
|
{
|
1037
|
+
pg_node_attr(no_query_jumble)
|
1038
|
+
|
792
1039
|
Expr xpr;
|
793
1040
|
List *subplans; /* SubPlan(s) with equivalent results */
|
794
1041
|
} AlternativeSubPlan;
|
@@ -807,10 +1054,12 @@ typedef struct FieldSelect
|
|
807
1054
|
Expr xpr;
|
808
1055
|
Expr *arg; /* input expression */
|
809
1056
|
AttrNumber fieldnum; /* attribute number of field to extract */
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
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);
|
814
1063
|
} FieldSelect;
|
815
1064
|
|
816
1065
|
/* ----------------
|
@@ -836,8 +1085,10 @@ typedef struct FieldStore
|
|
836
1085
|
Expr xpr;
|
837
1086
|
Expr *arg; /* input tuple value */
|
838
1087
|
List *newvals; /* new value(s) for field(s) */
|
839
|
-
|
840
|
-
|
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);
|
841
1092
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
842
1093
|
} FieldStore;
|
843
1094
|
|
@@ -859,9 +1110,12 @@ typedef struct RelabelType
|
|
859
1110
|
Expr xpr;
|
860
1111
|
Expr *arg; /* input expression */
|
861
1112
|
Oid resulttype; /* output type of coercion expression */
|
862
|
-
|
863
|
-
|
864
|
-
|
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);
|
865
1119
|
int location; /* token location, or -1 if unknown */
|
866
1120
|
} RelabelType;
|
867
1121
|
|
@@ -880,8 +1134,10 @@ typedef struct CoerceViaIO
|
|
880
1134
|
Expr *arg; /* input expression */
|
881
1135
|
Oid resulttype; /* output type of coercion */
|
882
1136
|
/* output typmod is not stored, but is presumed -1 */
|
883
|
-
|
884
|
-
|
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);
|
885
1141
|
int location; /* token location, or -1 if unknown */
|
886
1142
|
} CoerceViaIO;
|
887
1143
|
|
@@ -904,9 +1160,12 @@ typedef struct ArrayCoerceExpr
|
|
904
1160
|
Expr *arg; /* input expression (yields an array) */
|
905
1161
|
Expr *elemexpr; /* expression representing per-element work */
|
906
1162
|
Oid resulttype; /* output type of coercion (an array type) */
|
907
|
-
|
908
|
-
|
909
|
-
|
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);
|
910
1169
|
int location; /* token location, or -1 if unknown */
|
911
1170
|
} ArrayCoerceExpr;
|
912
1171
|
|
@@ -929,7 +1188,8 @@ typedef struct ConvertRowtypeExpr
|
|
929
1188
|
Expr *arg; /* input expression */
|
930
1189
|
Oid resulttype; /* output type (always a composite type) */
|
931
1190
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
932
|
-
|
1191
|
+
/* how to display this node */
|
1192
|
+
CoercionForm convertformat pg_node_attr(query_jumble_ignore);
|
933
1193
|
int location; /* token location, or -1 if unknown */
|
934
1194
|
} ConvertRowtypeExpr;
|
935
1195
|
|
@@ -973,8 +1233,10 @@ typedef struct CollateExpr
|
|
973
1233
|
typedef struct CaseExpr
|
974
1234
|
{
|
975
1235
|
Expr xpr;
|
976
|
-
|
977
|
-
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);
|
978
1240
|
Expr *arg; /* implicit equality comparison argument */
|
979
1241
|
List *args; /* the arguments (list of WHEN clauses) */
|
980
1242
|
Expr *defresult; /* the default result (ELSE clause) */
|
@@ -1002,6 +1264,8 @@ typedef struct CaseWhen
|
|
1002
1264
|
* see build_coercion_expression().
|
1003
1265
|
* * Nested FieldStore/SubscriptingRef assignment expressions in INSERT/UPDATE;
|
1004
1266
|
* see transformAssignmentIndirection().
|
1267
|
+
* * Placeholder for intermediate results in some SQL/JSON expression nodes,
|
1268
|
+
* such as JsonConstructorExpr.
|
1005
1269
|
*
|
1006
1270
|
* The uses in CaseExpr and ArrayCoerceExpr are safe only to the extent that
|
1007
1271
|
* there is not any other CaseExpr or ArrayCoerceExpr between the value source
|
@@ -1016,8 +1280,10 @@ typedef struct CaseTestExpr
|
|
1016
1280
|
{
|
1017
1281
|
Expr xpr;
|
1018
1282
|
Oid typeId; /* type for substituted value */
|
1019
|
-
|
1020
|
-
|
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);
|
1021
1287
|
} CaseTestExpr;
|
1022
1288
|
|
1023
1289
|
/*
|
@@ -1031,12 +1297,18 @@ typedef struct CaseTestExpr
|
|
1031
1297
|
typedef struct ArrayExpr
|
1032
1298
|
{
|
1033
1299
|
Expr xpr;
|
1034
|
-
|
1035
|
-
Oid
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
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;
|
1040
1312
|
} ArrayExpr;
|
1041
1313
|
|
1042
1314
|
/*
|
@@ -1064,7 +1336,9 @@ typedef struct RowExpr
|
|
1064
1336
|
{
|
1065
1337
|
Expr xpr;
|
1066
1338
|
List *args; /* the fields */
|
1067
|
-
|
1339
|
+
|
1340
|
+
/* RECORDOID or a composite type's ID */
|
1341
|
+
Oid row_typeid pg_node_attr(query_jumble_ignore);
|
1068
1342
|
|
1069
1343
|
/*
|
1070
1344
|
* row_typeid cannot be a domain over composite, only plain composite. To
|
@@ -1078,8 +1352,13 @@ typedef struct RowExpr
|
|
1078
1352
|
* We don't need to store a collation either. The result type is
|
1079
1353
|
* necessarily composite, and composite types never have a collation.
|
1080
1354
|
*/
|
1081
|
-
|
1082
|
-
|
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
|
+
|
1083
1362
|
int location; /* token location, or -1 if unknown */
|
1084
1363
|
} RowExpr;
|
1085
1364
|
|
@@ -1111,12 +1390,19 @@ typedef enum RowCompareType
|
|
1111
1390
|
typedef struct RowCompareExpr
|
1112
1391
|
{
|
1113
1392
|
Expr xpr;
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
List *
|
1119
|
-
|
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;
|
1120
1406
|
} RowCompareExpr;
|
1121
1407
|
|
1122
1408
|
/*
|
@@ -1125,10 +1411,14 @@ typedef struct RowCompareExpr
|
|
1125
1411
|
typedef struct CoalesceExpr
|
1126
1412
|
{
|
1127
1413
|
Expr xpr;
|
1128
|
-
|
1129
|
-
Oid
|
1130
|
-
|
1131
|
-
|
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;
|
1132
1422
|
} CoalesceExpr;
|
1133
1423
|
|
1134
1424
|
/*
|
@@ -1143,12 +1433,18 @@ typedef enum MinMaxOp
|
|
1143
1433
|
typedef struct MinMaxExpr
|
1144
1434
|
{
|
1145
1435
|
Expr xpr;
|
1146
|
-
|
1147
|
-
Oid
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
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;
|
1152
1448
|
} MinMaxExpr;
|
1153
1449
|
|
1154
1450
|
/*
|
@@ -1185,7 +1481,12 @@ typedef struct SQLValueFunction
|
|
1185
1481
|
{
|
1186
1482
|
Expr xpr;
|
1187
1483
|
SQLValueFunctionOp op; /* which function this is */
|
1188
|
-
|
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);
|
1189
1490
|
int32 typmod;
|
1190
1491
|
int location; /* token location, or -1 if unknown */
|
1191
1492
|
} SQLValueFunction;
|
@@ -1209,7 +1510,7 @@ typedef enum XmlExprOp
|
|
1209
1510
|
IS_XMLPARSE, /* XMLPARSE(text, is_doc, preserve_ws) */
|
1210
1511
|
IS_XMLPI, /* XMLPI(name [, args]) */
|
1211
1512
|
IS_XMLROOT, /* XMLROOT(xml, version, standalone) */
|
1212
|
-
IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval) */
|
1513
|
+
IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval, indent) */
|
1213
1514
|
IS_DOCUMENT /* xmlval IS DOCUMENT */
|
1214
1515
|
} XmlExprOp;
|
1215
1516
|
|
@@ -1222,17 +1523,142 @@ typedef enum XmlOptionType
|
|
1222
1523
|
typedef struct XmlExpr
|
1223
1524
|
{
|
1224
1525
|
Expr xpr;
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
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;
|
1234
1545
|
} XmlExpr;
|
1235
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
|
+
|
1236
1662
|
/* ----------------
|
1237
1663
|
* NullTest
|
1238
1664
|
*
|
@@ -1262,7 +1688,8 @@ typedef struct NullTest
|
|
1262
1688
|
Expr xpr;
|
1263
1689
|
Expr *arg; /* input expression */
|
1264
1690
|
NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
|
1265
|
-
|
1691
|
+
/* T to perform field-by-field null checks */
|
1692
|
+
bool argisrow pg_node_attr(query_jumble_ignore);
|
1266
1693
|
int location; /* token location, or -1 if unknown */
|
1267
1694
|
} NullTest;
|
1268
1695
|
|
@@ -1302,9 +1729,12 @@ typedef struct CoerceToDomain
|
|
1302
1729
|
Expr xpr;
|
1303
1730
|
Expr *arg; /* input expression */
|
1304
1731
|
Oid resulttype; /* domain type ID (result type) */
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
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);
|
1308
1738
|
int location; /* token location, or -1 if unknown */
|
1309
1739
|
} CoerceToDomain;
|
1310
1740
|
|
@@ -1320,10 +1750,14 @@ typedef struct CoerceToDomain
|
|
1320
1750
|
typedef struct CoerceToDomainValue
|
1321
1751
|
{
|
1322
1752
|
Expr xpr;
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
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;
|
1327
1761
|
} CoerceToDomainValue;
|
1328
1762
|
|
1329
1763
|
/*
|
@@ -1336,10 +1770,14 @@ typedef struct CoerceToDomainValue
|
|
1336
1770
|
typedef struct SetToDefault
|
1337
1771
|
{
|
1338
1772
|
Expr xpr;
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
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;
|
1343
1781
|
} SetToDefault;
|
1344
1782
|
|
1345
1783
|
/*
|
@@ -1450,15 +1888,20 @@ typedef struct InferenceElem
|
|
1450
1888
|
typedef struct TargetEntry
|
1451
1889
|
{
|
1452
1890
|
Expr xpr;
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
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);
|
1462
1905
|
} TargetEntry;
|
1463
1906
|
|
1464
1907
|
|
@@ -1540,11 +1983,16 @@ typedef struct JoinExpr
|
|
1540
1983
|
bool isNatural; /* Natural join? Will need to shape table */
|
1541
1984
|
Node *larg; /* left subtree */
|
1542
1985
|
Node *rarg; /* right subtree */
|
1543
|
-
|
1544
|
-
|
1545
|
-
|
1546
|
-
Alias *
|
1547
|
-
|
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;
|
1548
1996
|
} JoinExpr;
|
1549
1997
|
|
1550
1998
|
/*----------
|