pg_query 5.1.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +1 -1
- data/Rakefile +4 -4
- data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
- data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
- data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/extconf.rb +20 -6
- data/ext/pg_query/include/pg_query.h +4 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
- data/ext/pg_query/include/postgres/access/amapi.h +14 -3
- data/ext/pg_query/include/postgres/access/attmap.h +1 -1
- data/ext/pg_query/include/postgres/access/attnum.h +1 -1
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +2 -3
- data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
- data/ext/pg_query/include/postgres/access/detoast.h +1 -1
- data/ext/pg_query/include/postgres/access/genam.h +17 -4
- data/ext/pg_query/include/postgres/access/gin.h +1 -1
- data/ext/pg_query/include/postgres/access/htup.h +1 -1
- data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
- data/ext/pg_query/include/postgres/access/itup.h +3 -3
- data/ext/pg_query/include/postgres/access/parallel.h +1 -2
- data/ext/pg_query/include/postgres/access/printtup.h +1 -1
- data/ext/pg_query/include/postgres/access/relation.h +1 -1
- data/ext/pg_query/include/postgres/access/relscan.h +1 -1
- data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
- data/ext/pg_query/include/postgres/access/sdir.h +1 -1
- data/ext/pg_query/include/postgres/access/skey.h +1 -1
- data/ext/pg_query/include/postgres/access/slru.h +218 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
- data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
- data/ext/pg_query/include/postgres/access/table.h +1 -1
- data/ext/pg_query/include/postgres/access/tableam.h +35 -25
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
- data/ext/pg_query/include/postgres/access/transam.h +50 -7
- data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
- data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
- data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
- data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
- data/ext/pg_query/include/postgres/access/twophase.h +2 -2
- data/ext/pg_query/include/postgres/access/xact.h +5 -5
- data/ext/pg_query/include/postgres/access/xlog.h +20 -12
- data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
- data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
- data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
- data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
- data/ext/pg_query/include/postgres/c.h +32 -37
- data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
- data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
- data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
- data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
- data/ext/pg_query/include/postgres/catalog/index.h +22 -18
- data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
- data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +2 -6
- data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
- data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
- data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
- data/ext/pg_query/include/postgres/commands/explain.h +19 -3
- data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
- data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
- data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
- data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
- data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
- data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
- data/ext/pg_query/include/postgres/common/int.h +79 -4
- data/ext/pg_query/include/postgres/common/keywords.h +1 -1
- data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
- data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
- data/ext/pg_query/include/postgres/common/relpath.h +4 -4
- data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
- data/ext/pg_query/include/postgres/common/sha2.h +1 -1
- data/ext/pg_query/include/postgres/common/string.h +1 -1
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
- data/ext/pg_query/include/postgres/executor/executor.h +6 -5
- data/ext/pg_query/include/postgres/executor/functions.h +2 -1
- data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
- data/ext/pg_query/include/postgres/executor/spi.h +2 -8
- data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
- data/ext/pg_query/include/postgres/fmgr.h +2 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
- data/ext/pg_query/include/postgres/funcapi.h +2 -2
- data/ext/pg_query/include/postgres/gram.h +871 -830
- data/ext/pg_query/include/postgres/gramparse.h +1 -1
- data/ext/pg_query/include/postgres/jit/jit.h +4 -3
- data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
- data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
- data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
- data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
- data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
- data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
- data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
- data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
- data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
- data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
- data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
- data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/postgres/miscadmin.h +72 -52
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
- data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
- data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
- data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
- data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
- data/ext/pg_query/include/postgres/nodes/params.h +1 -1
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
- data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
- data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
- data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
- data/ext/pg_query/include/postgres/nodes/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
- data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
- data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
- data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
- data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
- data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
- data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
- data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
- data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
- data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
- data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
- data/ext/pg_query/include/postgres/parser/parser.h +3 -3
- data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
- data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
- data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/postgres/pg_config.h +53 -45
- data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
- data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
- data/ext/pg_query/include/postgres/pg_trace.h +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +13 -11
- data/ext/pg_query/include/postgres/pgtime.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
- data/ext/pg_query/include/postgres/plpgsql.h +15 -13
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
- data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
- data/ext/pg_query/include/postgres/port/atomics.h +93 -6
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
- data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +48 -1
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
- data/ext/pg_query/include/postgres/port.h +39 -4
- data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres/postgres.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
- data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
- data/ext/pg_query/include/postgres/regex/regex.h +92 -9
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
- data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
- data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
- data/ext/pg_query/include/postgres/replication/origin.h +1 -1
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
- data/ext/pg_query/include/postgres/replication/slot.h +45 -5
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
- data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
- data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/postgres/storage/block.h +1 -1
- data/ext/pg_query/include/postgres/storage/buf.h +1 -1
- data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
- data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
- data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
- data/ext/pg_query/include/postgres/storage/fd.h +30 -13
- data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
- data/ext/pg_query/include/postgres/storage/item.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
- data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
- data/ext/pg_query/include/postgres/storage/latch.h +4 -2
- data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
- data/ext/pg_query/include/postgres/storage/lock.h +19 -19
- data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
- data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
- data/ext/pg_query/include/postgres/storage/off.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
- data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
- data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
- data/ext/pg_query/include/postgres/storage/proc.h +48 -26
- data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
- data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
- data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
- data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
- data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
- data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
- data/ext/pg_query/include/postgres/storage/spin.h +1 -1
- data/ext/pg_query/include/postgres/storage/standby.h +13 -3
- data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/postgres/storage/sync.h +4 -4
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
- data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
- data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
- data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
- data/ext/pg_query/include/postgres/utils/acl.h +19 -7
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/postgres/utils/array.h +1 -2
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
- data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
- data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
- data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
- data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
- data/ext/pg_query/include/postgres/utils/date.h +1 -1
- data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
- data/ext/pg_query/include/postgres/utils/datum.h +1 -1
- data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
- data/ext/pg_query/include/postgres/utils/elog.h +3 -8
- data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/postgres/utils/float.h +1 -1
- data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/postgres/utils/guc.h +20 -6
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
- data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
- data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +1 -1
- data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
- data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
- data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
- data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
- data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
- data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
- data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
- data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
- data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
- data/ext/pg_query/include/postgres/utils/portal.h +10 -10
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
- data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
- data/ext/pg_query/include/postgres/utils/rel.h +14 -15
- data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
- data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
- data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
- data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
- data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
- data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
- data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
- data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
- data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
- data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
- data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
- data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
- data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +4 -4
- data/ext/pg_query/include/postgres/varatt.h +1 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
- data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
- data/ext/pg_query/pg_query.pb-c.c +6598 -3739
- data/ext/pg_query/pg_query_normalize.c +42 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/postgres_deparse.c +601 -172
- data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
- data/ext/pg_query/src_backend_commands_define.c +2 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +3 -7
- data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
- data/ext/pg_query/src_backend_parser_parser.c +8 -8
- data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
- data/ext/pg_query/src_backend_parser_scansup.c +2 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
- data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
- 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 +4 -5
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
- data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
- data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
- data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
- data/ext/pg_query/src_common_encnames.c +43 -44
- 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 +511 -466
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +18 -1
- data/ext/pg_query/src_common_wchar.c +92 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
- 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 +19 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_port_pg_bitutils.c +173 -28
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +15 -18
- data/ext/pg_query/src_port_strerror.c +1 -3
- data/ext/pg_query/src_port_strlcpy.c +1 -1
- data/lib/pg_query/fingerprint.rb +3 -5
- data/lib/pg_query/param_refs.rb +2 -2
- data/lib/pg_query/parse.rb +5 -7
- data/lib/pg_query/parse_error.rb +1 -0
- data/lib/pg_query/pg_query_pb.rb +27 -25
- data/lib/pg_query/scan.rb +1 -0
- data/lib/pg_query/treewalker.rb +38 -15
- data/lib/pg_query/truncate.rb +18 -20
- data/lib/pg_query/version.rb +1 -1
- metadata +31 -82
- data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
- data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
- /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -6,7 +6,7 @@
|
|
6
6
|
* We don't support copying RelOptInfo, IndexOptInfo, or Path nodes.
|
7
7
|
* There are some subsidiary structs that are useful to copy, though.
|
8
8
|
*
|
9
|
-
* Portions Copyright (c) 1996-
|
9
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
10
10
|
* Portions Copyright (c) 1994, Regents of the University of California
|
11
11
|
*
|
12
12
|
* src/include/nodes/pathnodes.h
|
@@ -76,7 +76,7 @@ typedef enum UpperRelationKind
|
|
76
76
|
UPPERREL_PARTIAL_DISTINCT, /* result of partial "SELECT DISTINCT", if any */
|
77
77
|
UPPERREL_DISTINCT, /* result of "SELECT DISTINCT", if any */
|
78
78
|
UPPERREL_ORDERED, /* result of ORDER BY, if any */
|
79
|
-
UPPERREL_FINAL /* result of any remaining top-level actions */
|
79
|
+
UPPERREL_FINAL, /* result of any remaining top-level actions */
|
80
80
|
/* NB: UPPERREL_FINAL must be last enum entry; it's used to size arrays */
|
81
81
|
} UpperRelationKind;
|
82
82
|
|
@@ -104,6 +104,9 @@ typedef struct PlannerGlobal
|
|
104
104
|
/* Plans for SubPlan nodes */
|
105
105
|
List *subplans;
|
106
106
|
|
107
|
+
/* Paths from which the SubPlan Plans were made */
|
108
|
+
List *subpaths;
|
109
|
+
|
107
110
|
/* PlannerInfos for SubPlan nodes */
|
108
111
|
List *subroots pg_node_attr(read_write_ignore);
|
109
112
|
|
@@ -397,6 +400,8 @@ struct PlannerInfo
|
|
397
400
|
List *distinct_pathkeys;
|
398
401
|
/* sortClause pathkeys, if any */
|
399
402
|
List *sort_pathkeys;
|
403
|
+
/* set operator pathkeys, if any */
|
404
|
+
List *setop_pathkeys;
|
400
405
|
|
401
406
|
/* Canonicalised partition schemes used in the query. */
|
402
407
|
List *part_schemes pg_node_attr(read_write_ignore);
|
@@ -421,7 +426,11 @@ struct PlannerInfo
|
|
421
426
|
* items to be proven redundant, implying that there is only one group
|
422
427
|
* containing all the query's rows. Hence, if you want to check whether
|
423
428
|
* GROUP BY was specified, test for nonempty parse->groupClause, not for
|
424
|
-
* nonempty processed_groupClause.
|
429
|
+
* nonempty processed_groupClause. Optimizer chooses specific order of
|
430
|
+
* group-by clauses during the upper paths generation process, attempting
|
431
|
+
* to use different strategies to minimize number of sorts or engage
|
432
|
+
* incremental sort. See preprocess_groupclause() and
|
433
|
+
* get_useful_group_keys_orderings() for details.
|
425
434
|
*
|
426
435
|
* Currently, when grouping sets are specified we do not attempt to
|
427
436
|
* optimize the groupClause, so that processed_groupClause will be
|
@@ -814,7 +823,7 @@ typedef enum RelOptKind
|
|
814
823
|
RELOPT_OTHER_MEMBER_REL,
|
815
824
|
RELOPT_OTHER_JOINREL,
|
816
825
|
RELOPT_UPPER_REL,
|
817
|
-
RELOPT_OTHER_UPPER_REL
|
826
|
+
RELOPT_OTHER_UPPER_REL,
|
818
827
|
} RelOptKind;
|
819
828
|
|
820
829
|
/*
|
@@ -913,6 +922,12 @@ typedef struct RelOptInfo
|
|
913
922
|
Relids *attr_needed pg_node_attr(read_write_ignore);
|
914
923
|
/* array indexed [min_attr .. max_attr] */
|
915
924
|
int32 *attr_widths pg_node_attr(read_write_ignore);
|
925
|
+
|
926
|
+
/*
|
927
|
+
* Zero-based set containing attnums of NOT NULL columns. Not populated
|
928
|
+
* for rels corresponding to non-partitioned inh==true RTEs.
|
929
|
+
*/
|
930
|
+
Bitmapset *notnullattnums;
|
916
931
|
/* relids of outer joins that can null this baserel */
|
917
932
|
Relids nulling_relids;
|
918
933
|
/* LATERAL Vars and PHVs referenced by rel */
|
@@ -1086,6 +1101,9 @@ typedef struct IndexOptInfo IndexOptInfo;
|
|
1086
1101
|
#define HAVE_INDEXOPTINFO_TYPEDEF 1
|
1087
1102
|
#endif
|
1088
1103
|
|
1104
|
+
struct IndexPath; /* avoid including pathnodes.h here */
|
1105
|
+
struct PlannerInfo; /* avoid including pathnodes.h here */
|
1106
|
+
|
1089
1107
|
struct IndexOptInfo
|
1090
1108
|
{
|
1091
1109
|
pg_node_attr(no_copy_equal, no_read, no_query_jumble)
|
@@ -1185,7 +1203,7 @@ struct IndexOptInfo
|
|
1185
1203
|
bool amcanmarkpos;
|
1186
1204
|
/* AM's cost estimator */
|
1187
1205
|
/* Rather than include amapi.h here, we declare amcostestimate like this */
|
1188
|
-
void (*amcostestimate) () pg_node_attr(read_write_ignore);
|
1206
|
+
void (*amcostestimate) (struct PlannerInfo *, struct IndexPath *, double, Cost *, Cost *, Selectivity *, double *, double *) pg_node_attr(read_write_ignore);
|
1189
1207
|
};
|
1190
1208
|
|
1191
1209
|
/*
|
@@ -1456,6 +1474,23 @@ typedef struct PathKey
|
|
1456
1474
|
bool pk_nulls_first; /* do NULLs come before normal values? */
|
1457
1475
|
} PathKey;
|
1458
1476
|
|
1477
|
+
/*
|
1478
|
+
* Contains an order of group-by clauses and the corresponding list of
|
1479
|
+
* pathkeys.
|
1480
|
+
*
|
1481
|
+
* The elements of 'clauses' list should have the same order as the head of
|
1482
|
+
* 'pathkeys' list. The tleSortGroupRef of the clause should be equal to
|
1483
|
+
* ec_sortref of the pathkey equivalence class. If there are redundant
|
1484
|
+
* clauses with the same tleSortGroupRef, they must be grouped together.
|
1485
|
+
*/
|
1486
|
+
typedef struct GroupByOrdering
|
1487
|
+
{
|
1488
|
+
NodeTag type;
|
1489
|
+
|
1490
|
+
List *pathkeys;
|
1491
|
+
List *clauses;
|
1492
|
+
} GroupByOrdering;
|
1493
|
+
|
1459
1494
|
/*
|
1460
1495
|
* VolatileFunctionStatus -- allows nodes to cache their
|
1461
1496
|
* contain_volatile_functions properties. VOLATILITY_UNKNOWN means not yet
|
@@ -1465,7 +1500,7 @@ typedef enum VolatileFunctionStatus
|
|
1465
1500
|
{
|
1466
1501
|
VOLATILITY_UNKNOWN = 0,
|
1467
1502
|
VOLATILITY_VOLATILE,
|
1468
|
-
VOLATILITY_NOVOLATILE
|
1503
|
+
VOLATILITY_NOVOLATILE,
|
1469
1504
|
} VolatileFunctionStatus;
|
1470
1505
|
|
1471
1506
|
/*
|
@@ -1822,6 +1857,10 @@ typedef struct SubqueryScanPath
|
|
1822
1857
|
* ForeignPath represents a potential scan of a foreign table, foreign join
|
1823
1858
|
* or foreign upper-relation.
|
1824
1859
|
*
|
1860
|
+
* In the case of a foreign join, fdw_restrictinfo stores the RestrictInfos to
|
1861
|
+
* apply to the join, which are used by createplan.c to get pseudoconstant
|
1862
|
+
* clauses evaluated as one-time quals in a gating Result plan node.
|
1863
|
+
*
|
1825
1864
|
* fdw_private stores FDW private data about the scan. While fdw_private is
|
1826
1865
|
* not actually touched by the core code during normal operations, it's
|
1827
1866
|
* generally a good idea to use a representation that can be dumped by
|
@@ -1832,6 +1871,7 @@ typedef struct ForeignPath
|
|
1832
1871
|
{
|
1833
1872
|
Path path;
|
1834
1873
|
Path *fdw_outerpath;
|
1874
|
+
List *fdw_restrictinfo;
|
1835
1875
|
List *fdw_private;
|
1836
1876
|
} ForeignPath;
|
1837
1877
|
|
@@ -1841,7 +1881,7 @@ typedef struct ForeignPath
|
|
1841
1881
|
*
|
1842
1882
|
* We provide a set of hooks here - which the provider must take care to set
|
1843
1883
|
* up correctly - to allow extensions to supply their own methods of scanning
|
1844
|
-
* a relation or
|
1884
|
+
* a relation or join relations. For example, a provider might provide GPU
|
1845
1885
|
* acceleration, a cache-based scan, or some other kind of logic we haven't
|
1846
1886
|
* dreamed up yet.
|
1847
1887
|
*
|
@@ -1849,6 +1889,10 @@ typedef struct ForeignPath
|
|
1849
1889
|
* relation by set_rel_pathlist_hook or set_join_pathlist_hook functions,
|
1850
1890
|
* respectively.
|
1851
1891
|
*
|
1892
|
+
* In the case of a table join, custom_restrictinfo stores the RestrictInfos
|
1893
|
+
* to apply to the join, which are used by createplan.c to get pseudoconstant
|
1894
|
+
* clauses evaluated as one-time quals in a gating Result plan node.
|
1895
|
+
*
|
1852
1896
|
* Core code must avoid assuming that the CustomPath is only as large as
|
1853
1897
|
* the structure declared here; providers are allowed to make it the first
|
1854
1898
|
* element in a larger structure. (Since the planner never copies Paths,
|
@@ -1865,6 +1909,7 @@ typedef struct CustomPath
|
|
1865
1909
|
uint32 flags; /* mask of CUSTOMPATH_* flags, see
|
1866
1910
|
* nodes/extensible.h */
|
1867
1911
|
List *custom_paths; /* list of child Path nodes, if any */
|
1912
|
+
List *custom_restrictinfo;
|
1868
1913
|
List *custom_private;
|
1869
1914
|
const struct CustomPathMethods *methods;
|
1870
1915
|
} CustomPath;
|
@@ -1977,7 +2022,7 @@ typedef enum UniquePathMethod
|
|
1977
2022
|
{
|
1978
2023
|
UNIQUE_PATH_NOOP, /* input is known unique already */
|
1979
2024
|
UNIQUE_PATH_HASH, /* use hashing */
|
1980
|
-
UNIQUE_PATH_SORT /* use sorting */
|
2025
|
+
UNIQUE_PATH_SORT, /* use sorting */
|
1981
2026
|
} UniquePathMethod;
|
1982
2027
|
|
1983
2028
|
typedef struct UniquePath
|
@@ -2277,6 +2322,7 @@ typedef struct WindowAggPath
|
|
2277
2322
|
Path *subpath; /* path representing input source */
|
2278
2323
|
WindowClause *winclause; /* WindowClause we'll be using */
|
2279
2324
|
List *qual; /* lower-level WindowAgg runconditions */
|
2325
|
+
List *runCondition; /* OpExpr List to short-circuit execution */
|
2280
2326
|
bool topwindow; /* false for all apart from the WindowAgg
|
2281
2327
|
* that's closest to the root of the plan */
|
2282
2328
|
} WindowAggPath;
|
@@ -2345,6 +2391,8 @@ typedef struct ModifyTablePath
|
|
2345
2391
|
int epqParam; /* ID of Param for EvalPlanQual re-eval */
|
2346
2392
|
List *mergeActionLists; /* per-target-table lists of actions for
|
2347
2393
|
* MERGE */
|
2394
|
+
List *mergeJoinConditions; /* per-target-table join conditions
|
2395
|
+
* for MERGE */
|
2348
2396
|
} ModifyTablePath;
|
2349
2397
|
|
2350
2398
|
/*
|
@@ -2578,7 +2626,10 @@ typedef struct RestrictInfo
|
|
2578
2626
|
* 2. If we manufacture a commuted version of a qual to use as an index
|
2579
2627
|
* condition, it copies the original's rinfo_serial, since it is in
|
2580
2628
|
* practice the same condition.
|
2581
|
-
* 3.
|
2629
|
+
* 3. If we reduce a qual to constant-FALSE, the new constant-FALSE qual
|
2630
|
+
* copies the original's rinfo_serial, since it is in practice the same
|
2631
|
+
* condition.
|
2632
|
+
* 4. RestrictInfos made for a child relation copy their parent's
|
2582
2633
|
* rinfo_serial. Likewise, when an EquivalenceClass makes a derived
|
2583
2634
|
* equality clause for a child relation, it copies the rinfo_serial of
|
2584
2635
|
* the matching equality clause for the parent. This allows detection
|
@@ -2829,6 +2880,9 @@ typedef struct PlaceHolderVar
|
|
2829
2880
|
* cost estimation purposes it is sometimes useful to know the join size under
|
2830
2881
|
* plain innerjoin semantics. Note that lhs_strict and the semi_xxx fields
|
2831
2882
|
* are not set meaningfully within such structs.
|
2883
|
+
*
|
2884
|
+
* We also create transient SpecialJoinInfos for child joins during
|
2885
|
+
* partitionwise join planning, which are also not present in join_info_list.
|
2832
2886
|
*/
|
2833
2887
|
#ifndef HAVE_SPECIALJOININFO_TYPEDEF
|
2834
2888
|
typedef struct SpecialJoinInfo SpecialJoinInfo;
|
@@ -3218,7 +3272,7 @@ typedef enum
|
|
3218
3272
|
{
|
3219
3273
|
PARTITIONWISE_AGGREGATE_NONE,
|
3220
3274
|
PARTITIONWISE_AGGREGATE_FULL,
|
3221
|
-
PARTITIONWISE_AGGREGATE_PARTIAL
|
3275
|
+
PARTITIONWISE_AGGREGATE_PARTIAL,
|
3222
3276
|
} PartitionwiseAggregateType;
|
3223
3277
|
|
3224
3278
|
/*
|
@@ -29,7 +29,7 @@
|
|
29
29
|
* always be so; be careful to use the appropriate list type for your data.)
|
30
30
|
*
|
31
31
|
*
|
32
|
-
* Portions Copyright (c) 1996-
|
32
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
33
33
|
* Portions Copyright (c) 1994, Regents of the University of California
|
34
34
|
*
|
35
35
|
* src/include/nodes/pg_list.h
|
@@ -381,26 +381,26 @@ lnext(const List *l, const ListCell *c)
|
|
381
381
|
/*
|
382
382
|
* foreach_delete_current -
|
383
383
|
* delete the current list element from the List associated with a
|
384
|
-
* surrounding foreach() loop, returning the new List
|
384
|
+
* surrounding foreach() or foreach_*() loop, returning the new List
|
385
|
+
* pointer; pass the name of the iterator variable.
|
385
386
|
*
|
386
|
-
* This is
|
387
|
-
*
|
388
|
-
*
|
387
|
+
* This is similar to list_delete_cell(), but it also adjusts the loop's state
|
388
|
+
* so that no list elements will be missed. Do not delete elements from an
|
389
|
+
* active foreach or foreach_* loop's list in any other way!
|
389
390
|
*/
|
390
|
-
#define foreach_delete_current(lst,
|
391
|
-
(
|
392
|
-
(List *) (cell##__state.l = list_delete_cell(lst, cell)))
|
391
|
+
#define foreach_delete_current(lst, var_or_cell) \
|
392
|
+
((List *) (var_or_cell##__state.l = list_delete_nth_cell(lst, var_or_cell##__state.i--)))
|
393
393
|
|
394
394
|
/*
|
395
395
|
* foreach_current_index -
|
396
|
-
* get the zero-based list index of a surrounding foreach()
|
397
|
-
* current element; pass the name of the
|
396
|
+
* get the zero-based list index of a surrounding foreach() or foreach_*()
|
397
|
+
* loop's current element; pass the name of the iterator variable.
|
398
398
|
*
|
399
399
|
* Beware of using this after foreach_delete_current(); the value will be
|
400
400
|
* out of sync for the rest of the current loop iteration. Anyway, since
|
401
401
|
* you just deleted the current element, the value is pretty meaningless.
|
402
402
|
*/
|
403
|
-
#define foreach_current_index(
|
403
|
+
#define foreach_current_index(var_or_cell) (var_or_cell##__state.i)
|
404
404
|
|
405
405
|
/*
|
406
406
|
* for_each_from -
|
@@ -452,6 +452,57 @@ for_each_cell_setup(const List *lst, const ListCell *initcell)
|
|
452
452
|
return r;
|
453
453
|
}
|
454
454
|
|
455
|
+
/*
|
456
|
+
* Convenience macros that loop through a list without needing a separate
|
457
|
+
* "ListCell *" variable. Instead, the macros declare a locally-scoped loop
|
458
|
+
* variable with the provided name and the appropriate type.
|
459
|
+
*
|
460
|
+
* Since the variable is scoped to the loop, it's not possible to detect an
|
461
|
+
* early break by checking its value after the loop completes, as is common
|
462
|
+
* practice. If you need to do this, you can either use foreach() instead or
|
463
|
+
* manually track early breaks with a separate variable declared outside of the
|
464
|
+
* loop.
|
465
|
+
*
|
466
|
+
* Note that the caveats described in the comment above the foreach() macro
|
467
|
+
* also apply to these convenience macros.
|
468
|
+
*/
|
469
|
+
#define foreach_ptr(type, var, lst) foreach_internal(type, *, var, lst, lfirst)
|
470
|
+
#define foreach_int(var, lst) foreach_internal(int, , var, lst, lfirst_int)
|
471
|
+
#define foreach_oid(var, lst) foreach_internal(Oid, , var, lst, lfirst_oid)
|
472
|
+
#define foreach_xid(var, lst) foreach_internal(TransactionId, , var, lst, lfirst_xid)
|
473
|
+
|
474
|
+
/*
|
475
|
+
* The internal implementation of the above macros. Do not use directly.
|
476
|
+
*
|
477
|
+
* This macro actually generates two loops in order to declare two variables of
|
478
|
+
* different types. The outer loop only iterates once, so we expect optimizing
|
479
|
+
* compilers will unroll it, thereby optimizing it away.
|
480
|
+
*/
|
481
|
+
#define foreach_internal(type, pointer, var, lst, func) \
|
482
|
+
for (type pointer var = 0, pointer var##__outerloop = (type pointer) 1; \
|
483
|
+
var##__outerloop; \
|
484
|
+
var##__outerloop = 0) \
|
485
|
+
for (ForEachState var##__state = {(lst), 0}; \
|
486
|
+
(var##__state.l != NIL && \
|
487
|
+
var##__state.i < var##__state.l->length && \
|
488
|
+
(var = (type pointer) func(&var##__state.l->elements[var##__state.i]), true)); \
|
489
|
+
var##__state.i++)
|
490
|
+
|
491
|
+
/*
|
492
|
+
* foreach_node -
|
493
|
+
* The same as foreach_ptr, but asserts that the element is of the specified
|
494
|
+
* node type.
|
495
|
+
*/
|
496
|
+
#define foreach_node(type, var, lst) \
|
497
|
+
for (type * var = 0, *var##__outerloop = (type *) 1; \
|
498
|
+
var##__outerloop; \
|
499
|
+
var##__outerloop = 0) \
|
500
|
+
for (ForEachState var##__state = {(lst), 0}; \
|
501
|
+
(var##__state.l != NIL && \
|
502
|
+
var##__state.i < var##__state.l->length && \
|
503
|
+
(var = lfirst_node(type, &var##__state.l->elements[var##__state.i]), true)); \
|
504
|
+
var##__state.i++)
|
505
|
+
|
455
506
|
/*
|
456
507
|
* forboth -
|
457
508
|
* a convenience macro for advancing through two linked lists
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* definitions for query plan nodes
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/nodes/plannodes.h
|
@@ -20,7 +20,6 @@
|
|
20
20
|
#include "lib/stringinfo.h"
|
21
21
|
#include "nodes/bitmapset.h"
|
22
22
|
#include "nodes/lockoptions.h"
|
23
|
-
#include "nodes/parsenodes.h"
|
24
23
|
#include "nodes/primnodes.h"
|
25
24
|
|
26
25
|
|
@@ -54,9 +53,9 @@ typedef struct PlannedStmt
|
|
54
53
|
|
55
54
|
uint64 queryId; /* query identifier (copied from Query) */
|
56
55
|
|
57
|
-
bool hasReturning; /* is it insert|update|delete RETURNING? */
|
56
|
+
bool hasReturning; /* is it insert|update|delete|merge RETURNING? */
|
58
57
|
|
59
|
-
bool hasModifyingCTE; /* has insert|update|delete in WITH? */
|
58
|
+
bool hasModifyingCTE; /* has insert|update|delete|merge in WITH? */
|
60
59
|
|
61
60
|
bool canSetTag; /* do I set the command result tag? */
|
62
61
|
|
@@ -96,8 +95,8 @@ typedef struct PlannedStmt
|
|
96
95
|
Node *utilityStmt; /* non-null if this is utility stmt */
|
97
96
|
|
98
97
|
/* statement location in source string (copied from Query) */
|
99
|
-
|
100
|
-
|
98
|
+
ParseLoc stmt_location; /* start location, or -1 if unknown */
|
99
|
+
ParseLoc stmt_len; /* length in bytes; 0 means "rest of string" */
|
101
100
|
} PlannedStmt;
|
102
101
|
|
103
102
|
/* macro for fetching the Plan associated with a SubPlan node */
|
@@ -252,6 +251,8 @@ typedef struct ModifyTable
|
|
252
251
|
List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
|
253
252
|
List *mergeActionLists; /* per-target-table lists of actions for
|
254
253
|
* MERGE */
|
254
|
+
List *mergeJoinConditions; /* per-target-table join conditions
|
255
|
+
* for MERGE */
|
255
256
|
} ModifyTable;
|
256
257
|
|
257
258
|
struct PartitionPruneInfo; /* forward reference to struct below */
|
@@ -591,7 +592,7 @@ typedef enum SubqueryScanStatus
|
|
591
592
|
{
|
592
593
|
SUBQUERY_SCAN_UNKNOWN,
|
593
594
|
SUBQUERY_SCAN_TRIVIAL,
|
594
|
-
SUBQUERY_SCAN_NONTRIVIAL
|
595
|
+
SUBQUERY_SCAN_NONTRIVIAL,
|
595
596
|
} SubqueryScanStatus;
|
596
597
|
|
597
598
|
typedef struct SubqueryScan
|
@@ -1330,7 +1331,7 @@ typedef enum RowMarkType
|
|
1330
1331
|
ROW_MARK_SHARE, /* obtain shared tuple lock */
|
1331
1332
|
ROW_MARK_KEYSHARE, /* obtain keyshare tuple lock */
|
1332
1333
|
ROW_MARK_REFERENCE, /* just fetch the TID, don't lock it */
|
1333
|
-
ROW_MARK_COPY /* physically copy the row value */
|
1334
|
+
ROW_MARK_COPY, /* physically copy the row value */
|
1334
1335
|
} RowMarkType;
|
1335
1336
|
|
1336
1337
|
#define RowMarkRequiresRowShareLock(marktype) ((marktype) <= ROW_MARK_KEYSHARE)
|
@@ -1542,7 +1543,7 @@ typedef struct PartitionPruneStepOp
|
|
1542
1543
|
typedef enum PartitionPruneCombineOp
|
1543
1544
|
{
|
1544
1545
|
PARTPRUNE_COMBINE_UNION,
|
1545
|
-
PARTPRUNE_COMBINE_INTERSECT
|
1546
|
+
PARTPRUNE_COMBINE_INTERSECT,
|
1546
1547
|
} PartitionPruneCombineOp;
|
1547
1548
|
|
1548
1549
|
typedef struct PartitionPruneStepCombine
|
@@ -1586,7 +1587,7 @@ typedef enum MonotonicFunction
|
|
1586
1587
|
MONOTONICFUNC_NONE = 0,
|
1587
1588
|
MONOTONICFUNC_INCREASING = (1 << 0),
|
1588
1589
|
MONOTONICFUNC_DECREASING = (1 << 1),
|
1589
|
-
MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
|
1590
|
+
MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING,
|
1590
1591
|
} MonotonicFunction;
|
1591
1592
|
|
1592
1593
|
#endif /* PLANNODES_H */
|