pg_query 2.2.1 → 4.2.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 +5 -0
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +986 -301
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +8 -7
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +23 -13
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
@@ -4,7 +4,7 @@
|
|
4
4
|
* definitions for executor state nodes
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/nodes/execnodes.h
|
@@ -17,6 +17,7 @@
|
|
17
17
|
#include "access/tupconvert.h"
|
18
18
|
#include "executor/instrument.h"
|
19
19
|
#include "fmgr.h"
|
20
|
+
#include "lib/ilist.h"
|
20
21
|
#include "lib/pairingheap.h"
|
21
22
|
#include "nodes/params.h"
|
22
23
|
#include "nodes/plannodes.h"
|
@@ -33,7 +34,6 @@
|
|
33
34
|
#include "utils/tuplestore.h"
|
34
35
|
|
35
36
|
struct PlanState; /* forward references in this file */
|
36
|
-
struct PartitionRoutingInfo;
|
37
37
|
struct ParallelHashJoinState;
|
38
38
|
struct ExecRowMark;
|
39
39
|
struct ExprState;
|
@@ -41,6 +41,7 @@ struct ExprContext;
|
|
41
41
|
struct RangeTblEntry; /* avoid including parsenodes.h here */
|
42
42
|
struct ExprEvalStep; /* avoid including execExpr.h everywhere */
|
43
43
|
struct CopyMultiInsertBuffer;
|
44
|
+
struct LogicalTapeSet;
|
44
45
|
|
45
46
|
|
46
47
|
/* ----------------
|
@@ -60,7 +61,7 @@ typedef Datum (*ExprStateEvalFunc) (struct ExprState *expression,
|
|
60
61
|
|
61
62
|
typedef struct ExprState
|
62
63
|
{
|
63
|
-
NodeTag
|
64
|
+
NodeTag type;
|
64
65
|
|
65
66
|
uint8 flags; /* bitmask of EEO_FLAG_* bits, see above */
|
66
67
|
|
@@ -141,6 +142,8 @@ typedef struct ExprState
|
|
141
142
|
* Unique is it a unique index?
|
142
143
|
* OpclassOptions opclass-specific options, or NULL if none
|
143
144
|
* ReadyForInserts is it valid for inserts?
|
145
|
+
* CheckedUnchanged IndexUnchanged status determined yet?
|
146
|
+
* IndexUnchanged aminsert hint, cached for retail inserts
|
144
147
|
* Concurrent are we doing a concurrent index build?
|
145
148
|
* BrokenHotChain did we detect any broken HOT chains?
|
146
149
|
* ParallelWorkers # of workers requested (excludes leader)
|
@@ -170,7 +173,10 @@ typedef struct IndexInfo
|
|
170
173
|
uint16 *ii_UniqueStrats; /* array with one entry per column */
|
171
174
|
Datum *ii_OpclassOptions; /* array with one entry per column */
|
172
175
|
bool ii_Unique;
|
176
|
+
bool ii_NullsNotDistinct;
|
173
177
|
bool ii_ReadyForInserts;
|
178
|
+
bool ii_CheckedUnchanged;
|
179
|
+
bool ii_IndexUnchanged;
|
174
180
|
bool ii_Concurrent;
|
175
181
|
bool ii_BrokenHotChain;
|
176
182
|
int ii_ParallelWorkers;
|
@@ -357,10 +363,6 @@ typedef struct ProjectionInfo
|
|
357
363
|
* attribute numbers of the "original" tuple and the
|
358
364
|
* attribute numbers of the "clean" tuple.
|
359
365
|
* resultSlot: tuple slot used to hold cleaned tuple.
|
360
|
-
* junkAttNo: not used by junkfilter code. Can be used by caller
|
361
|
-
* to remember the attno of a specific junk attribute
|
362
|
-
* (nodeModifyTable.c keeps the "ctid" or "wholerow"
|
363
|
-
* attno here).
|
364
366
|
* ----------------
|
365
367
|
*/
|
366
368
|
typedef struct JunkFilter
|
@@ -370,7 +372,6 @@ typedef struct JunkFilter
|
|
370
372
|
TupleDesc jf_cleanTupType;
|
371
373
|
AttrNumber *jf_cleanMap;
|
372
374
|
TupleTableSlot *jf_resultSlot;
|
373
|
-
AttrNumber jf_junkAttNo;
|
374
375
|
} JunkFilter;
|
375
376
|
|
376
377
|
/*
|
@@ -388,6 +389,22 @@ typedef struct OnConflictSetState
|
|
388
389
|
ExprState *oc_WhereClause; /* state for the WHERE clause */
|
389
390
|
} OnConflictSetState;
|
390
391
|
|
392
|
+
/* ----------------
|
393
|
+
* MergeActionState information
|
394
|
+
*
|
395
|
+
* Executor state for a MERGE action.
|
396
|
+
* ----------------
|
397
|
+
*/
|
398
|
+
typedef struct MergeActionState
|
399
|
+
{
|
400
|
+
NodeTag type;
|
401
|
+
|
402
|
+
MergeAction *mas_action; /* associated MergeAction node */
|
403
|
+
ProjectionInfo *mas_proj; /* projection of the action's targetlist for
|
404
|
+
* this rel */
|
405
|
+
ExprState *mas_whenqual; /* WHEN [NOT] MATCHED AND conditions */
|
406
|
+
} MergeActionState;
|
407
|
+
|
391
408
|
/*
|
392
409
|
* ResultRelInfo
|
393
410
|
*
|
@@ -424,6 +441,21 @@ typedef struct ResultRelInfo
|
|
424
441
|
/* array of key/attr info for indices */
|
425
442
|
IndexInfo **ri_IndexRelationInfo;
|
426
443
|
|
444
|
+
/*
|
445
|
+
* For UPDATE/DELETE result relations, the attribute number of the row
|
446
|
+
* identity junk attribute in the source plan's output tuples
|
447
|
+
*/
|
448
|
+
AttrNumber ri_RowIdAttNo;
|
449
|
+
|
450
|
+
/* Projection to generate new tuple in an INSERT/UPDATE */
|
451
|
+
ProjectionInfo *ri_projectNew;
|
452
|
+
/* Slot to hold that tuple */
|
453
|
+
TupleTableSlot *ri_newTupleSlot;
|
454
|
+
/* Slot to hold the old tuple being updated */
|
455
|
+
TupleTableSlot *ri_oldTupleSlot;
|
456
|
+
/* Have the projection and the slots above been initialized? */
|
457
|
+
bool ri_projectNewInfoValid;
|
458
|
+
|
427
459
|
/* triggers to be fired, if any */
|
428
460
|
TriggerDesc *ri_TrigDesc;
|
429
461
|
|
@@ -450,6 +482,13 @@ typedef struct ResultRelInfo
|
|
450
482
|
/* true when modifying foreign table directly */
|
451
483
|
bool ri_usesFdwDirectModify;
|
452
484
|
|
485
|
+
/* batch insert stuff */
|
486
|
+
int ri_NumSlots; /* number of slots in the array */
|
487
|
+
int ri_NumSlotsInitialized; /* number of initialized slots */
|
488
|
+
int ri_BatchSize; /* max slots inserted in a single batch */
|
489
|
+
TupleTableSlot **ri_Slots; /* input tuples for batch insert */
|
490
|
+
TupleTableSlot **ri_PlanSlots;
|
491
|
+
|
453
492
|
/* list of WithCheckOption's to be checked */
|
454
493
|
List *ri_WithCheckOptions;
|
455
494
|
|
@@ -465,9 +504,6 @@ typedef struct ResultRelInfo
|
|
465
504
|
/* number of stored generated columns we need to compute */
|
466
505
|
int ri_NumGeneratedNeeded;
|
467
506
|
|
468
|
-
/* for removing junk attributes from tuples */
|
469
|
-
JunkFilter *ri_junkFilter;
|
470
|
-
|
471
507
|
/* list of RETURNING expressions */
|
472
508
|
List *ri_returningList;
|
473
509
|
|
@@ -480,31 +516,69 @@ typedef struct ResultRelInfo
|
|
480
516
|
/* ON CONFLICT evaluation state */
|
481
517
|
OnConflictSetState *ri_onConflict;
|
482
518
|
|
483
|
-
/*
|
484
|
-
List *
|
519
|
+
/* for MERGE, lists of MergeActionState */
|
520
|
+
List *ri_matchedMergeAction;
|
521
|
+
List *ri_notMatchedMergeAction;
|
485
522
|
|
486
|
-
/* partition check expression state */
|
523
|
+
/* partition check expression state (NULL if not set up yet) */
|
487
524
|
ExprState *ri_PartitionCheckExpr;
|
488
525
|
|
489
526
|
/*
|
527
|
+
* Information needed by tuple routing target relations
|
528
|
+
*
|
490
529
|
* RootResultRelInfo gives the target relation mentioned in the query, if
|
491
530
|
* it's a partitioned table. It is not set if the target relation
|
492
531
|
* mentioned in the query is an inherited table, nor when tuple routing is
|
493
532
|
* not needed.
|
533
|
+
*
|
534
|
+
* RootToPartitionMap and PartitionTupleSlot, initialized by
|
535
|
+
* ExecInitRoutingInfo, are non-NULL if partition has a different tuple
|
536
|
+
* format than the root table.
|
494
537
|
*/
|
495
538
|
struct ResultRelInfo *ri_RootResultRelInfo;
|
539
|
+
TupleConversionMap *ri_RootToPartitionMap;
|
540
|
+
TupleTableSlot *ri_PartitionTupleSlot;
|
496
541
|
|
497
|
-
/*
|
498
|
-
|
542
|
+
/*
|
543
|
+
* Map to convert child result relation tuples to the format of the table
|
544
|
+
* actually mentioned in the query (called "root"). Computed only if
|
545
|
+
* needed. A NULL map value indicates that no conversion is needed, so we
|
546
|
+
* must have a separate flag to show if the map has been computed.
|
547
|
+
*/
|
548
|
+
TupleConversionMap *ri_ChildToRootMap;
|
549
|
+
bool ri_ChildToRootMapValid;
|
499
550
|
|
500
|
-
/*
|
551
|
+
/* for use by copyfrom.c when performing multi-inserts */
|
501
552
|
struct CopyMultiInsertBuffer *ri_CopyMultiInsertBuffer;
|
553
|
+
|
554
|
+
/*
|
555
|
+
* Used when a leaf partition is involved in a cross-partition update of
|
556
|
+
* one of its ancestors; see ExecCrossPartitionUpdateForeignKey().
|
557
|
+
*/
|
558
|
+
List *ri_ancestorResultRels;
|
502
559
|
} ResultRelInfo;
|
503
560
|
|
561
|
+
/* ----------------
|
562
|
+
* AsyncRequest
|
563
|
+
*
|
564
|
+
* State for an asynchronous tuple request.
|
565
|
+
* ----------------
|
566
|
+
*/
|
567
|
+
typedef struct AsyncRequest
|
568
|
+
{
|
569
|
+
struct PlanState *requestor; /* Node that wants a tuple */
|
570
|
+
struct PlanState *requestee; /* Node from which a tuple is wanted */
|
571
|
+
int request_index; /* Scratch space for requestor */
|
572
|
+
bool callback_pending; /* Callback is needed */
|
573
|
+
bool request_complete; /* Request complete, result valid */
|
574
|
+
TupleTableSlot *result; /* Result (NULL or an empty slot if no more
|
575
|
+
* tuples) */
|
576
|
+
} AsyncRequest;
|
577
|
+
|
504
578
|
/* ----------------
|
505
579
|
* EState information
|
506
580
|
*
|
507
|
-
*
|
581
|
+
* Working state for an Executor invocation
|
508
582
|
* ----------------
|
509
583
|
*/
|
510
584
|
typedef struct EState
|
@@ -530,23 +604,18 @@ typedef struct EState
|
|
530
604
|
CommandId es_output_cid;
|
531
605
|
|
532
606
|
/* Info about target table(s) for insert/update/delete queries: */
|
533
|
-
ResultRelInfo
|
534
|
-
|
535
|
-
|
607
|
+
ResultRelInfo **es_result_relations; /* Array of per-range-table-entry
|
608
|
+
* ResultRelInfo pointers, or NULL
|
609
|
+
* if not a target table */
|
610
|
+
List *es_opened_result_relations; /* List of non-NULL entries in
|
611
|
+
* es_result_relations in no
|
612
|
+
* specific order */
|
536
613
|
|
537
|
-
/*
|
538
|
-
* Info about the partition root table(s) for insert/update/delete queries
|
539
|
-
* targeting partitioned tables. Only leaf partitions are mentioned in
|
540
|
-
* es_result_relations, but we need access to the roots for firing
|
541
|
-
* triggers and for runtime tuple routing.
|
542
|
-
*/
|
543
|
-
ResultRelInfo *es_root_result_relations; /* array of ResultRelInfos */
|
544
|
-
int es_num_root_result_relations; /* length of the array */
|
545
614
|
PartitionDirectory es_partition_directory; /* for PartitionDesc lookup */
|
546
615
|
|
547
616
|
/*
|
548
617
|
* The following list contains ResultRelInfos created by the tuple routing
|
549
|
-
* code for partitions that
|
618
|
+
* code for partitions that aren't found in the es_result_relations array.
|
550
619
|
*/
|
551
620
|
List *es_tuple_routing_result_relations;
|
552
621
|
|
@@ -652,10 +721,7 @@ typedef struct ExecRowMark
|
|
652
721
|
* Each LockRows and ModifyTable node keeps a list of the rowmarks it needs to
|
653
722
|
* deal with. In addition to a pointer to the related entry in es_rowmarks,
|
654
723
|
* this struct carries the column number(s) of the resjunk columns associated
|
655
|
-
* with the rowmark (see comments for PlanRowMark for more detail).
|
656
|
-
* case of ModifyTable, there has to be a separate ExecAuxRowMark list for
|
657
|
-
* each child plan, because the resjunk columns could be at different physical
|
658
|
-
* column positions in different subplans.
|
724
|
+
* with the rowmark (see comments for PlanRowMark for more detail).
|
659
725
|
*/
|
660
726
|
typedef struct ExecAuxRowMark
|
661
727
|
{
|
@@ -750,17 +816,6 @@ typedef tuplehash_iterator TupleHashIterator;
|
|
750
816
|
* ----------------------------------------------------------------
|
751
817
|
*/
|
752
818
|
|
753
|
-
/* ----------------
|
754
|
-
* AggrefExprState node
|
755
|
-
* ----------------
|
756
|
-
*/
|
757
|
-
typedef struct AggrefExprState
|
758
|
-
{
|
759
|
-
NodeTag type;
|
760
|
-
Aggref *aggref; /* expression plan node */
|
761
|
-
int aggno; /* ID number for agg within its plan node */
|
762
|
-
} AggrefExprState;
|
763
|
-
|
764
819
|
/* ----------------
|
765
820
|
* WindowFuncExprState node
|
766
821
|
* ----------------
|
@@ -888,18 +943,6 @@ typedef struct SubPlanState
|
|
888
943
|
ExprState *cur_eq_comp; /* equality comparator for LHS vs. table */
|
889
944
|
} SubPlanState;
|
890
945
|
|
891
|
-
/* ----------------
|
892
|
-
* AlternativeSubPlanState node
|
893
|
-
* ----------------
|
894
|
-
*/
|
895
|
-
typedef struct AlternativeSubPlanState
|
896
|
-
{
|
897
|
-
NodeTag type;
|
898
|
-
AlternativeSubPlan *subplan; /* expression plan node */
|
899
|
-
List *subplans; /* SubPlanStates of alternative subplans */
|
900
|
-
int active; /* list index of the one we're using */
|
901
|
-
} AlternativeSubPlanState;
|
902
|
-
|
903
946
|
/*
|
904
947
|
* DomainConstraintState - one item to check during CoerceToDomain
|
905
948
|
*
|
@@ -994,6 +1037,8 @@ typedef struct PlanState
|
|
994
1037
|
ExprContext *ps_ExprContext; /* node's expression-evaluation context */
|
995
1038
|
ProjectionInfo *ps_ProjInfo; /* info for doing tuple projection */
|
996
1039
|
|
1040
|
+
bool async_capable; /* true if node is async-capable */
|
1041
|
+
|
997
1042
|
/*
|
998
1043
|
* Scanslot's descriptor if known. This is a bit of a hack, but otherwise
|
999
1044
|
* it's hard for expression compilation to optimize based on the
|
@@ -1080,9 +1125,8 @@ typedef struct PlanState
|
|
1080
1125
|
* EvalPlanQualSlot), and/or found using the rowmark mechanism (non-locking
|
1081
1126
|
* rowmarks by the EPQ machinery itself, locking ones by the caller).
|
1082
1127
|
*
|
1083
|
-
* While the plan to be checked may be changed using EvalPlanQualSetPlan()
|
1084
|
-
*
|
1085
|
-
* plans need to share the same EState.
|
1128
|
+
* While the plan to be checked may be changed using EvalPlanQualSetPlan(),
|
1129
|
+
* all such plans need to share the same EState.
|
1086
1130
|
*/
|
1087
1131
|
typedef struct EPQState
|
1088
1132
|
{
|
@@ -1166,6 +1210,12 @@ typedef struct ProjectSetState
|
|
1166
1210
|
MemoryContext argcontext; /* context for SRF arguments */
|
1167
1211
|
} ProjectSetState;
|
1168
1212
|
|
1213
|
+
|
1214
|
+
/* flags for mt_merge_subcommands */
|
1215
|
+
#define MERGE_INSERT 0x01
|
1216
|
+
#define MERGE_UPDATE 0x02
|
1217
|
+
#define MERGE_DELETE 0x04
|
1218
|
+
|
1169
1219
|
/* ----------------
|
1170
1220
|
* ModifyTableState information
|
1171
1221
|
* ----------------
|
@@ -1173,21 +1223,34 @@ typedef struct ProjectSetState
|
|
1173
1223
|
typedef struct ModifyTableState
|
1174
1224
|
{
|
1175
1225
|
PlanState ps; /* its first field is NodeTag */
|
1176
|
-
CmdType operation; /* INSERT, UPDATE, or
|
1226
|
+
CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
|
1177
1227
|
bool canSetTag; /* do we set the command tag/es_processed? */
|
1178
1228
|
bool mt_done; /* are we done? */
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1229
|
+
int mt_nrels; /* number of entries in resultRelInfo[] */
|
1230
|
+
ResultRelInfo *resultRelInfo; /* info about target relation(s) */
|
1231
|
+
|
1232
|
+
/*
|
1233
|
+
* Target relation mentioned in the original statement, used to fire
|
1234
|
+
* statement-level triggers and as the root for tuple routing. (This
|
1235
|
+
* might point to one of the resultRelInfo[] entries, but it can also be a
|
1236
|
+
* distinct struct.)
|
1237
|
+
*/
|
1238
|
+
ResultRelInfo *rootResultRelInfo;
|
1239
|
+
|
1188
1240
|
EPQState mt_epqstate; /* for evaluating EvalPlanQual rechecks */
|
1189
1241
|
bool fireBSTriggers; /* do we need to fire stmt triggers? */
|
1190
1242
|
|
1243
|
+
/*
|
1244
|
+
* These fields are used for inherited UPDATE and DELETE, to track which
|
1245
|
+
* target relation a given tuple is from. If there are a lot of target
|
1246
|
+
* relations, we use a hash table to translate table OIDs to
|
1247
|
+
* resultRelInfo[] indexes; otherwise mt_resultOidHash is NULL.
|
1248
|
+
*/
|
1249
|
+
int mt_resultOidAttno; /* resno of "tableoid" junk attr */
|
1250
|
+
Oid mt_lastResultOid; /* last-seen value of tableoid */
|
1251
|
+
int mt_lastResultIndex; /* corresponding index in resultRelInfo[] */
|
1252
|
+
HTAB *mt_resultOidHash; /* optional hash table to speed lookups */
|
1253
|
+
|
1191
1254
|
/*
|
1192
1255
|
* Slot for storing tuples in the root partitioned table's rowtype during
|
1193
1256
|
* an UPDATE of a partitioned table.
|
@@ -1203,20 +1266,25 @@ typedef struct ModifyTableState
|
|
1203
1266
|
/* controls transition table population for INSERT...ON CONFLICT UPDATE */
|
1204
1267
|
struct TransitionCaptureState *mt_oc_transition_capture;
|
1205
1268
|
|
1206
|
-
/*
|
1207
|
-
|
1269
|
+
/* Flags showing which subcommands are present INS/UPD/DEL/DO NOTHING */
|
1270
|
+
int mt_merge_subcommands;
|
1271
|
+
|
1272
|
+
/* tuple counters for MERGE */
|
1273
|
+
double mt_merge_inserted;
|
1274
|
+
double mt_merge_updated;
|
1275
|
+
double mt_merge_deleted;
|
1208
1276
|
} ModifyTableState;
|
1209
1277
|
|
1210
1278
|
/* ----------------
|
1211
1279
|
* AppendState information
|
1212
1280
|
*
|
1213
1281
|
* nplans how many plans are in the array
|
1214
|
-
* whichplan which plan is being executed (0 .. n-1)
|
1215
|
-
* special negative value. See nodeAppend.c.
|
1282
|
+
* whichplan which synchronous plan is being executed (0 .. n-1)
|
1283
|
+
* or a special negative value. See nodeAppend.c.
|
1216
1284
|
* prune_state details required to allow partitions to be
|
1217
1285
|
* eliminated from the scan, or NULL if not possible.
|
1218
|
-
* valid_subplans for runtime pruning, valid appendplans
|
1219
|
-
* scan.
|
1286
|
+
* valid_subplans for runtime pruning, valid synchronous appendplans
|
1287
|
+
* indexes to scan.
|
1220
1288
|
* ----------------
|
1221
1289
|
*/
|
1222
1290
|
|
@@ -1232,12 +1300,25 @@ struct AppendState
|
|
1232
1300
|
PlanState **appendplans; /* array of PlanStates for my inputs */
|
1233
1301
|
int as_nplans;
|
1234
1302
|
int as_whichplan;
|
1303
|
+
bool as_begun; /* false means need to initialize */
|
1304
|
+
Bitmapset *as_asyncplans; /* asynchronous plans indexes */
|
1305
|
+
int as_nasyncplans; /* # of asynchronous plans */
|
1306
|
+
AsyncRequest **as_asyncrequests; /* array of AsyncRequests */
|
1307
|
+
TupleTableSlot **as_asyncresults; /* unreturned results of async plans */
|
1308
|
+
int as_nasyncresults; /* # of valid entries in as_asyncresults */
|
1309
|
+
bool as_syncdone; /* true if all synchronous plans done in
|
1310
|
+
* asynchronous mode, else false */
|
1311
|
+
int as_nasyncremain; /* # of remaining asynchronous plans */
|
1312
|
+
Bitmapset *as_needrequest; /* asynchronous plans needing a new request */
|
1313
|
+
struct WaitEventSet *as_eventset; /* WaitEventSet used to configure file
|
1314
|
+
* descriptor wait events */
|
1235
1315
|
int as_first_partial_plan; /* Index of 'appendplans' containing
|
1236
1316
|
* the first partial plan */
|
1237
1317
|
ParallelAppendState *as_pstate; /* parallel coordination info */
|
1238
1318
|
Size pstate_len; /* size of parallel coordination info */
|
1239
1319
|
struct PartitionPruneState *as_prune_state;
|
1240
1320
|
Bitmapset *as_valid_subplans;
|
1321
|
+
Bitmapset *as_valid_asyncplans; /* valid asynchronous plans indexes */
|
1241
1322
|
bool (*choose_next_subplan) (AppendState *);
|
1242
1323
|
};
|
1243
1324
|
|
@@ -1636,6 +1717,24 @@ typedef struct TidScanState
|
|
1636
1717
|
HeapTupleData tss_htup;
|
1637
1718
|
} TidScanState;
|
1638
1719
|
|
1720
|
+
/* ----------------
|
1721
|
+
* TidRangeScanState information
|
1722
|
+
*
|
1723
|
+
* trss_tidexprs list of TidOpExpr structs (see nodeTidrangescan.c)
|
1724
|
+
* trss_mintid the lowest TID in the scan range
|
1725
|
+
* trss_maxtid the highest TID in the scan range
|
1726
|
+
* trss_inScan is a scan currently in progress?
|
1727
|
+
* ----------------
|
1728
|
+
*/
|
1729
|
+
typedef struct TidRangeScanState
|
1730
|
+
{
|
1731
|
+
ScanState ss; /* its first field is NodeTag */
|
1732
|
+
List *trss_tidexprs;
|
1733
|
+
ItemPointerData trss_mintid;
|
1734
|
+
ItemPointerData trss_maxtid;
|
1735
|
+
bool trss_inScan;
|
1736
|
+
} TidRangeScanState;
|
1737
|
+
|
1639
1738
|
/* ----------------
|
1640
1739
|
* SubqueryScanState information
|
1641
1740
|
*
|
@@ -1804,6 +1903,7 @@ typedef struct ForeignScanState
|
|
1804
1903
|
ScanState ss; /* its first field is NodeTag */
|
1805
1904
|
ExprState *fdw_recheck_quals; /* original quals not in ss.ps.qual */
|
1806
1905
|
Size pscan_len; /* size of parallel coordination information */
|
1906
|
+
ResultRelInfo *resultRelInfo; /* result rel info, if UPDATE or DELETE */
|
1807
1907
|
/* use struct pointer to avoid including fdwapi.h here */
|
1808
1908
|
struct FdwRoutine *fdwroutine;
|
1809
1909
|
void *fdw_state; /* foreign-data wrapper can keep state here */
|
@@ -1992,6 +2092,75 @@ typedef struct MaterialState
|
|
1992
2092
|
Tuplestorestate *tuplestorestate;
|
1993
2093
|
} MaterialState;
|
1994
2094
|
|
2095
|
+
struct MemoizeEntry;
|
2096
|
+
struct MemoizeTuple;
|
2097
|
+
struct MemoizeKey;
|
2098
|
+
|
2099
|
+
typedef struct MemoizeInstrumentation
|
2100
|
+
{
|
2101
|
+
uint64 cache_hits; /* number of rescans where we've found the
|
2102
|
+
* scan parameter values to be cached */
|
2103
|
+
uint64 cache_misses; /* number of rescans where we've not found the
|
2104
|
+
* scan parameter values to be cached. */
|
2105
|
+
uint64 cache_evictions; /* number of cache entries removed due to
|
2106
|
+
* the need to free memory */
|
2107
|
+
uint64 cache_overflows; /* number of times we've had to bypass the
|
2108
|
+
* cache when filling it due to not being
|
2109
|
+
* able to free enough space to store the
|
2110
|
+
* current scan's tuples. */
|
2111
|
+
uint64 mem_peak; /* peak memory usage in bytes */
|
2112
|
+
} MemoizeInstrumentation;
|
2113
|
+
|
2114
|
+
/* ----------------
|
2115
|
+
* Shared memory container for per-worker memoize information
|
2116
|
+
* ----------------
|
2117
|
+
*/
|
2118
|
+
typedef struct SharedMemoizeInfo
|
2119
|
+
{
|
2120
|
+
int num_workers;
|
2121
|
+
MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
|
2122
|
+
} SharedMemoizeInfo;
|
2123
|
+
|
2124
|
+
/* ----------------
|
2125
|
+
* MemoizeState information
|
2126
|
+
*
|
2127
|
+
* memoize nodes are used to cache recent and commonly seen results from
|
2128
|
+
* a parameterized scan.
|
2129
|
+
* ----------------
|
2130
|
+
*/
|
2131
|
+
typedef struct MemoizeState
|
2132
|
+
{
|
2133
|
+
ScanState ss; /* its first field is NodeTag */
|
2134
|
+
int mstatus; /* value of ExecMemoize state machine */
|
2135
|
+
int nkeys; /* number of cache keys */
|
2136
|
+
struct memoize_hash *hashtable; /* hash table for cache entries */
|
2137
|
+
TupleDesc hashkeydesc; /* tuple descriptor for cache keys */
|
2138
|
+
TupleTableSlot *tableslot; /* min tuple slot for existing cache entries */
|
2139
|
+
TupleTableSlot *probeslot; /* virtual slot used for hash lookups */
|
2140
|
+
ExprState *cache_eq_expr; /* Compare exec params to hash key */
|
2141
|
+
ExprState **param_exprs; /* exprs containing the parameters to this
|
2142
|
+
* node */
|
2143
|
+
FmgrInfo *hashfunctions; /* lookup data for hash funcs nkeys in size */
|
2144
|
+
Oid *collations; /* collation for comparisons nkeys in size */
|
2145
|
+
uint64 mem_used; /* bytes of memory used by cache */
|
2146
|
+
uint64 mem_limit; /* memory limit in bytes for the cache */
|
2147
|
+
MemoryContext tableContext; /* memory context to store cache data */
|
2148
|
+
dlist_head lru_list; /* least recently used entry list */
|
2149
|
+
struct MemoizeTuple *last_tuple; /* Used to point to the last tuple
|
2150
|
+
* returned during a cache hit and the
|
2151
|
+
* tuple we last stored when
|
2152
|
+
* populating the cache. */
|
2153
|
+
struct MemoizeEntry *entry; /* the entry that 'last_tuple' belongs to or
|
2154
|
+
* NULL if 'last_tuple' is NULL. */
|
2155
|
+
bool singlerow; /* true if the cache entry is to be marked as
|
2156
|
+
* complete after caching the first tuple. */
|
2157
|
+
bool binary_mode; /* true when cache key should be compared bit
|
2158
|
+
* by bit, false when using hash equality ops */
|
2159
|
+
MemoizeInstrumentation stats; /* execution statistics */
|
2160
|
+
SharedMemoizeInfo *shared_info; /* statistics for parallel workers */
|
2161
|
+
Bitmapset *keyparamids; /* Param->paramids of expressions belonging to
|
2162
|
+
* param_exprs */
|
2163
|
+
} MemoizeState;
|
1995
2164
|
|
1996
2165
|
/* ----------------
|
1997
2166
|
* When performing sorting by multiple keys, it's possible that the input
|
@@ -2032,6 +2201,7 @@ typedef struct SortState
|
|
2032
2201
|
int64 bound_Done; /* value of bound we did the sort with */
|
2033
2202
|
void *tuplesortstate; /* private state of tuplesort.c */
|
2034
2203
|
bool am_worker; /* are we a worker? */
|
2204
|
+
bool datumSort; /* Datum sort instead of tuple sort? */
|
2035
2205
|
SharedSortInfo *shared_info; /* one entry per worker */
|
2036
2206
|
} SortState;
|
2037
2207
|
|
@@ -2196,7 +2366,7 @@ typedef struct AggState
|
|
2196
2366
|
bool table_filled; /* hash table filled yet? */
|
2197
2367
|
int num_hashes;
|
2198
2368
|
MemoryContext hash_metacxt; /* memory for hash table itself */
|
2199
|
-
struct
|
2369
|
+
struct LogicalTapeSet *hash_tapeset; /* tape set for hash spill tapes */
|
2200
2370
|
struct HashAggSpill *hash_spills; /* HashAggSpill for each grouping set,
|
2201
2371
|
* exists only during first pass */
|
2202
2372
|
TupleTableSlot *hash_spill_rslot; /* for reading spill files */
|
@@ -2236,6 +2406,18 @@ typedef struct AggState
|
|
2236
2406
|
typedef struct WindowStatePerFuncData *WindowStatePerFunc;
|
2237
2407
|
typedef struct WindowStatePerAggData *WindowStatePerAgg;
|
2238
2408
|
|
2409
|
+
/*
|
2410
|
+
* WindowAggStatus -- Used to track the status of WindowAggState
|
2411
|
+
*/
|
2412
|
+
typedef enum WindowAggStatus
|
2413
|
+
{
|
2414
|
+
WINDOWAGG_DONE, /* No more processing to do */
|
2415
|
+
WINDOWAGG_RUN, /* Normal processing of window funcs */
|
2416
|
+
WINDOWAGG_PASSTHROUGH, /* Don't eval window funcs */
|
2417
|
+
WINDOWAGG_PASSTHROUGH_STRICT /* Pass-through plus don't store new
|
2418
|
+
* tuples during spool */
|
2419
|
+
} WindowAggStatus;
|
2420
|
+
|
2239
2421
|
typedef struct WindowAggState
|
2240
2422
|
{
|
2241
2423
|
ScanState ss; /* its first field is NodeTag */
|
@@ -2262,6 +2444,7 @@ typedef struct WindowAggState
|
|
2262
2444
|
struct WindowObjectData *agg_winobj; /* winobj for aggregate fetches */
|
2263
2445
|
int64 aggregatedbase; /* start row for current aggregates */
|
2264
2446
|
int64 aggregatedupto; /* rows before this one are aggregated */
|
2447
|
+
WindowAggStatus status; /* run status of WindowAggState */
|
2265
2448
|
|
2266
2449
|
int frameOptions; /* frame_clause options, see WindowDef */
|
2267
2450
|
ExprState *startOffset; /* expression for starting bound offset */
|
@@ -2288,8 +2471,17 @@ typedef struct WindowAggState
|
|
2288
2471
|
MemoryContext curaggcontext; /* current aggregate's working data */
|
2289
2472
|
ExprContext *tmpcontext; /* short-term evaluation context */
|
2290
2473
|
|
2474
|
+
ExprState *runcondition; /* Condition which must remain true otherwise
|
2475
|
+
* execution of the WindowAgg will finish or
|
2476
|
+
* go into pass-through mode. NULL when there
|
2477
|
+
* is no such condition. */
|
2478
|
+
|
2479
|
+
bool use_pass_through; /* When false, stop execution when
|
2480
|
+
* runcondition is no longer true. Else
|
2481
|
+
* just stop evaluating window funcs. */
|
2482
|
+
bool top_window; /* true if this is the top-most WindowAgg or
|
2483
|
+
* the only WindowAgg in this query level */
|
2291
2484
|
bool all_first; /* true if the scan is starting */
|
2292
|
-
bool all_done; /* true if the scan is finished */
|
2293
2485
|
bool partition_spooled; /* true if all tuples in current partition
|
2294
2486
|
* have been spooled into tuplestore */
|
2295
2487
|
bool more_partitions; /* true if there's more partitions after
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Definitions for extensible nodes and custom scans
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/nodes/extensible.h
|
@@ -76,10 +76,12 @@ extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *name,
|
|
76
76
|
|
77
77
|
/*
|
78
78
|
* Flags for custom paths, indicating what capabilities the resulting scan
|
79
|
-
* will have.
|
79
|
+
* will have. The flags fields of CustomPath and CustomScan nodes are
|
80
|
+
* bitmasks of these flags.
|
80
81
|
*/
|
81
82
|
#define CUSTOMPATH_SUPPORT_BACKWARD_SCAN 0x0001
|
82
83
|
#define CUSTOMPATH_SUPPORT_MARK_RESTORE 0x0002
|
84
|
+
#define CUSTOMPATH_SUPPORT_PROJECTION 0x0004
|
83
85
|
|
84
86
|
/*
|
85
87
|
* Custom path methods. Mostly, we just need to know how to convert a
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* prototypes for the creator functions of various nodes
|
5
5
|
*
|
6
6
|
*
|
7
|
-
* Portions Copyright (c) 1996-
|
7
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
9
9
|
*
|
10
10
|
* src/include/nodes/makefuncs.h
|
@@ -24,18 +24,18 @@ extern A_Expr *makeA_Expr(A_Expr_Kind kind, List *name,
|
|
24
24
|
extern A_Expr *makeSimpleA_Expr(A_Expr_Kind kind, char *name,
|
25
25
|
Node *lexpr, Node *rexpr, int location);
|
26
26
|
|
27
|
-
extern Var *makeVar(
|
27
|
+
extern Var *makeVar(int varno,
|
28
28
|
AttrNumber varattno,
|
29
29
|
Oid vartype,
|
30
30
|
int32 vartypmod,
|
31
31
|
Oid varcollid,
|
32
32
|
Index varlevelsup);
|
33
33
|
|
34
|
-
extern Var *makeVarFromTargetEntry(
|
34
|
+
extern Var *makeVarFromTargetEntry(int varno,
|
35
35
|
TargetEntry *tle);
|
36
36
|
|
37
37
|
extern Var *makeWholeRowVar(RangeTblEntry *rte,
|
38
|
-
|
38
|
+
int varno,
|
39
39
|
Index varlevelsup,
|
40
40
|
bool allowScalar);
|
41
41
|
|
@@ -79,7 +79,8 @@ extern ColumnDef *makeColumnDef(const char *colname,
|
|
79
79
|
extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype, List *args,
|
80
80
|
Oid funccollid, Oid inputcollid, CoercionForm fformat);
|
81
81
|
|
82
|
-
extern FuncCall *makeFuncCall(List *name, List *args,
|
82
|
+
extern FuncCall *makeFuncCall(List *name, List *args,
|
83
|
+
CoercionForm funcformat, int location);
|
83
84
|
|
84
85
|
extern Expr *make_opclause(Oid opno, Oid opresulttype, bool opretset,
|
85
86
|
Expr *leftop, Expr *rightop,
|
@@ -95,7 +96,7 @@ extern List *make_ands_implicit(Expr *clause);
|
|
95
96
|
|
96
97
|
extern IndexInfo *makeIndexInfo(int numattrs, int numkeyattrs, Oid amoid,
|
97
98
|
List *expressions, List *predicates,
|
98
|
-
bool unique, bool isready, bool concurrent);
|
99
|
+
bool unique, bool nulls_not_distinct, bool isready, bool concurrent);
|
99
100
|
|
100
101
|
extern DefElem *makeDefElem(char *name, Node *arg, int location);
|
101
102
|
extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg,
|