pg_query 2.2.0 → 4.2.1
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 +25 -0
- data/README.md +59 -31
- 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 +1106 -373
- 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 +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- 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
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* always be so; try to be careful to maintain the distinction.)
|
|
28
28
|
*
|
|
29
29
|
*
|
|
30
|
-
* Portions Copyright (c) 1996-
|
|
30
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
31
31
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
32
32
|
*
|
|
33
33
|
* src/include/nodes/pg_list.h
|
|
@@ -144,26 +144,6 @@ list_second_cell(const List *l)
|
|
|
144
144
|
return NULL;
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
/* Fetch address of list's third cell, if it has one, else NULL */
|
|
148
|
-
static inline ListCell *
|
|
149
|
-
list_third_cell(const List *l)
|
|
150
|
-
{
|
|
151
|
-
if (l && l->length >= 3)
|
|
152
|
-
return &l->elements[2];
|
|
153
|
-
else
|
|
154
|
-
return NULL;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/* Fetch address of list's fourth cell, if it has one, else NULL */
|
|
158
|
-
static inline ListCell *
|
|
159
|
-
list_fourth_cell(const List *l)
|
|
160
|
-
{
|
|
161
|
-
if (l && l->length >= 4)
|
|
162
|
-
return &l->elements[3];
|
|
163
|
-
else
|
|
164
|
-
return NULL;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
147
|
/* Fetch list's length */
|
|
168
148
|
static inline int
|
|
169
149
|
list_length(const List *l)
|
|
@@ -186,35 +166,34 @@ list_length(const List *l)
|
|
|
186
166
|
* linitial() than lfirst(): given a List, lsecond() returns the data
|
|
187
167
|
* in the second list cell.
|
|
188
168
|
*/
|
|
189
|
-
|
|
190
169
|
#define lfirst(lc) ((lc)->ptr_value)
|
|
191
170
|
#define lfirst_int(lc) ((lc)->int_value)
|
|
192
171
|
#define lfirst_oid(lc) ((lc)->oid_value)
|
|
193
172
|
#define lfirst_node(type,lc) castNode(type, lfirst(lc))
|
|
194
173
|
|
|
195
|
-
#define linitial(l) lfirst(
|
|
196
|
-
#define linitial_int(l) lfirst_int(
|
|
197
|
-
#define linitial_oid(l) lfirst_oid(
|
|
174
|
+
#define linitial(l) lfirst(list_nth_cell(l, 0))
|
|
175
|
+
#define linitial_int(l) lfirst_int(list_nth_cell(l, 0))
|
|
176
|
+
#define linitial_oid(l) lfirst_oid(list_nth_cell(l, 0))
|
|
198
177
|
#define linitial_node(type,l) castNode(type, linitial(l))
|
|
199
178
|
|
|
200
|
-
#define lsecond(l) lfirst(
|
|
201
|
-
#define lsecond_int(l) lfirst_int(
|
|
202
|
-
#define lsecond_oid(l) lfirst_oid(
|
|
179
|
+
#define lsecond(l) lfirst(list_nth_cell(l, 1))
|
|
180
|
+
#define lsecond_int(l) lfirst_int(list_nth_cell(l, 1))
|
|
181
|
+
#define lsecond_oid(l) lfirst_oid(list_nth_cell(l, 1))
|
|
203
182
|
#define lsecond_node(type,l) castNode(type, lsecond(l))
|
|
204
183
|
|
|
205
|
-
#define lthird(l) lfirst(
|
|
206
|
-
#define lthird_int(l) lfirst_int(
|
|
207
|
-
#define lthird_oid(l) lfirst_oid(
|
|
184
|
+
#define lthird(l) lfirst(list_nth_cell(l, 2))
|
|
185
|
+
#define lthird_int(l) lfirst_int(list_nth_cell(l, 2))
|
|
186
|
+
#define lthird_oid(l) lfirst_oid(list_nth_cell(l, 2))
|
|
208
187
|
#define lthird_node(type,l) castNode(type, lthird(l))
|
|
209
188
|
|
|
210
|
-
#define lfourth(l) lfirst(
|
|
211
|
-
#define lfourth_int(l) lfirst_int(
|
|
212
|
-
#define lfourth_oid(l) lfirst_oid(
|
|
189
|
+
#define lfourth(l) lfirst(list_nth_cell(l, 3))
|
|
190
|
+
#define lfourth_int(l) lfirst_int(list_nth_cell(l, 3))
|
|
191
|
+
#define lfourth_oid(l) lfirst_oid(list_nth_cell(l, 3))
|
|
213
192
|
#define lfourth_node(type,l) castNode(type, lfourth(l))
|
|
214
193
|
|
|
215
|
-
#define llast(l) lfirst(
|
|
216
|
-
#define llast_int(l) lfirst_int(
|
|
217
|
-
#define llast_oid(l) lfirst_oid(
|
|
194
|
+
#define llast(l) lfirst(list_last_cell(l))
|
|
195
|
+
#define llast_int(l) lfirst_int(list_last_cell(l))
|
|
196
|
+
#define llast_oid(l) lfirst_oid(list_last_cell(l))
|
|
218
197
|
#define llast_node(type,l) castNode(type, llast(l))
|
|
219
198
|
|
|
220
199
|
/*
|
|
@@ -234,6 +213,10 @@ list_length(const List *l)
|
|
|
234
213
|
#define list_make4(x1,x2,x3,x4) \
|
|
235
214
|
list_make4_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2), \
|
|
236
215
|
list_make_ptr_cell(x3), list_make_ptr_cell(x4))
|
|
216
|
+
#define list_make5(x1,x2,x3,x4,x5) \
|
|
217
|
+
list_make5_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2), \
|
|
218
|
+
list_make_ptr_cell(x3), list_make_ptr_cell(x4), \
|
|
219
|
+
list_make_ptr_cell(x5))
|
|
237
220
|
|
|
238
221
|
#define list_make1_int(x1) \
|
|
239
222
|
list_make1_impl(T_IntList, list_make_int_cell(x1))
|
|
@@ -245,6 +228,10 @@ list_length(const List *l)
|
|
|
245
228
|
#define list_make4_int(x1,x2,x3,x4) \
|
|
246
229
|
list_make4_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2), \
|
|
247
230
|
list_make_int_cell(x3), list_make_int_cell(x4))
|
|
231
|
+
#define list_make5_int(x1,x2,x3,x4,x5) \
|
|
232
|
+
list_make5_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2), \
|
|
233
|
+
list_make_int_cell(x3), list_make_int_cell(x4), \
|
|
234
|
+
list_make_int_cell(x5))
|
|
248
235
|
|
|
249
236
|
#define list_make1_oid(x1) \
|
|
250
237
|
list_make1_impl(T_OidList, list_make_oid_cell(x1))
|
|
@@ -256,6 +243,10 @@ list_length(const List *l)
|
|
|
256
243
|
#define list_make4_oid(x1,x2,x3,x4) \
|
|
257
244
|
list_make4_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2), \
|
|
258
245
|
list_make_oid_cell(x3), list_make_oid_cell(x4))
|
|
246
|
+
#define list_make5_oid(x1,x2,x3,x4,x5) \
|
|
247
|
+
list_make5_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2), \
|
|
248
|
+
list_make_oid_cell(x3), list_make_oid_cell(x4), \
|
|
249
|
+
list_make_oid_cell(x5))
|
|
259
250
|
|
|
260
251
|
/*
|
|
261
252
|
* Locate the n'th cell (counting from 0) of the list.
|
|
@@ -269,6 +260,16 @@ list_nth_cell(const List *list, int n)
|
|
|
269
260
|
return &list->elements[n];
|
|
270
261
|
}
|
|
271
262
|
|
|
263
|
+
/*
|
|
264
|
+
* Return the last cell in a non-NIL List.
|
|
265
|
+
*/
|
|
266
|
+
static inline ListCell *
|
|
267
|
+
list_last_cell(const List *list)
|
|
268
|
+
{
|
|
269
|
+
Assert(list != NIL);
|
|
270
|
+
return &list->elements[list->length - 1];
|
|
271
|
+
}
|
|
272
|
+
|
|
272
273
|
/*
|
|
273
274
|
* Return the pointer value contained in the n'th element of the
|
|
274
275
|
* specified list. (List elements begin at 0.)
|
|
@@ -531,38 +532,41 @@ extern List *list_make3_impl(NodeTag t, ListCell datum1, ListCell datum2,
|
|
|
531
532
|
ListCell datum3);
|
|
532
533
|
extern List *list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2,
|
|
533
534
|
ListCell datum3, ListCell datum4);
|
|
535
|
+
extern List *list_make5_impl(NodeTag t, ListCell datum1, ListCell datum2,
|
|
536
|
+
ListCell datum3, ListCell datum4,
|
|
537
|
+
ListCell datum5);
|
|
534
538
|
|
|
535
|
-
extern List *lappend(List *list, void *datum);
|
|
536
|
-
extern List *lappend_int(List *list, int datum);
|
|
537
|
-
extern List *lappend_oid(List *list, Oid datum);
|
|
539
|
+
extern pg_nodiscard List *lappend(List *list, void *datum);
|
|
540
|
+
extern pg_nodiscard List *lappend_int(List *list, int datum);
|
|
541
|
+
extern pg_nodiscard List *lappend_oid(List *list, Oid datum);
|
|
538
542
|
|
|
539
|
-
extern List *list_insert_nth(List *list, int pos, void *datum);
|
|
540
|
-
extern List *list_insert_nth_int(List *list, int pos, int datum);
|
|
541
|
-
extern List *list_insert_nth_oid(List *list, int pos, Oid datum);
|
|
543
|
+
extern pg_nodiscard List *list_insert_nth(List *list, int pos, void *datum);
|
|
544
|
+
extern pg_nodiscard List *list_insert_nth_int(List *list, int pos, int datum);
|
|
545
|
+
extern pg_nodiscard List *list_insert_nth_oid(List *list, int pos, Oid datum);
|
|
542
546
|
|
|
543
|
-
extern List *lcons(void *datum, List *list);
|
|
544
|
-
extern List *lcons_int(int datum, List *list);
|
|
545
|
-
extern List *lcons_oid(Oid datum, List *list);
|
|
547
|
+
extern pg_nodiscard List *lcons(void *datum, List *list);
|
|
548
|
+
extern pg_nodiscard List *lcons_int(int datum, List *list);
|
|
549
|
+
extern pg_nodiscard List *lcons_oid(Oid datum, List *list);
|
|
546
550
|
|
|
547
|
-
extern List *list_concat(List *list1, const List *list2);
|
|
548
|
-
extern List *list_concat_copy(const List *list1, const List *list2);
|
|
551
|
+
extern pg_nodiscard List *list_concat(List *list1, const List *list2);
|
|
552
|
+
extern pg_nodiscard List *list_concat_copy(const List *list1, const List *list2);
|
|
549
553
|
|
|
550
|
-
extern List *list_truncate(List *list, int new_size);
|
|
554
|
+
extern pg_nodiscard List *list_truncate(List *list, int new_size);
|
|
551
555
|
|
|
552
556
|
extern bool list_member(const List *list, const void *datum);
|
|
553
557
|
extern bool list_member_ptr(const List *list, const void *datum);
|
|
554
558
|
extern bool list_member_int(const List *list, int datum);
|
|
555
559
|
extern bool list_member_oid(const List *list, Oid datum);
|
|
556
560
|
|
|
557
|
-
extern List *list_delete(List *list, void *datum);
|
|
558
|
-
extern List *list_delete_ptr(List *list, void *datum);
|
|
559
|
-
extern List *list_delete_int(List *list, int datum);
|
|
560
|
-
extern List *list_delete_oid(List *list, Oid datum);
|
|
561
|
-
extern List *list_delete_first(List *list);
|
|
562
|
-
extern List *list_delete_last(List *list);
|
|
563
|
-
extern List *list_delete_first_n(List *list, int n);
|
|
564
|
-
extern List *list_delete_nth_cell(List *list, int n);
|
|
565
|
-
extern List *list_delete_cell(List *list, ListCell *cell);
|
|
561
|
+
extern pg_nodiscard List *list_delete(List *list, void *datum);
|
|
562
|
+
extern pg_nodiscard List *list_delete_ptr(List *list, void *datum);
|
|
563
|
+
extern pg_nodiscard List *list_delete_int(List *list, int datum);
|
|
564
|
+
extern pg_nodiscard List *list_delete_oid(List *list, Oid datum);
|
|
565
|
+
extern pg_nodiscard List *list_delete_first(List *list);
|
|
566
|
+
extern pg_nodiscard List *list_delete_last(List *list);
|
|
567
|
+
extern pg_nodiscard List *list_delete_first_n(List *list, int n);
|
|
568
|
+
extern pg_nodiscard List *list_delete_nth_cell(List *list, int n);
|
|
569
|
+
extern pg_nodiscard List *list_delete_cell(List *list, ListCell *cell);
|
|
566
570
|
|
|
567
571
|
extern List *list_union(const List *list1, const List *list2);
|
|
568
572
|
extern List *list_union_ptr(const List *list1, const List *list2);
|
|
@@ -579,28 +583,30 @@ extern List *list_difference_ptr(const List *list1, const List *list2);
|
|
|
579
583
|
extern List *list_difference_int(const List *list1, const List *list2);
|
|
580
584
|
extern List *list_difference_oid(const List *list1, const List *list2);
|
|
581
585
|
|
|
582
|
-
extern List *list_append_unique(List *list, void *datum);
|
|
583
|
-
extern List *list_append_unique_ptr(List *list, void *datum);
|
|
584
|
-
extern List *list_append_unique_int(List *list, int datum);
|
|
585
|
-
extern List *list_append_unique_oid(List *list, Oid datum);
|
|
586
|
+
extern pg_nodiscard List *list_append_unique(List *list, void *datum);
|
|
587
|
+
extern pg_nodiscard List *list_append_unique_ptr(List *list, void *datum);
|
|
588
|
+
extern pg_nodiscard List *list_append_unique_int(List *list, int datum);
|
|
589
|
+
extern pg_nodiscard List *list_append_unique_oid(List *list, Oid datum);
|
|
586
590
|
|
|
587
|
-
extern List *list_concat_unique(List *list1, const List *list2);
|
|
588
|
-
extern List *list_concat_unique_ptr(List *list1, const List *list2);
|
|
589
|
-
extern List *list_concat_unique_int(List *list1, const List *list2);
|
|
590
|
-
extern List *list_concat_unique_oid(List *list1, const List *list2);
|
|
591
|
+
extern pg_nodiscard List *list_concat_unique(List *list1, const List *list2);
|
|
592
|
+
extern pg_nodiscard List *list_concat_unique_ptr(List *list1, const List *list2);
|
|
593
|
+
extern pg_nodiscard List *list_concat_unique_int(List *list1, const List *list2);
|
|
594
|
+
extern pg_nodiscard List *list_concat_unique_oid(List *list1, const List *list2);
|
|
591
595
|
|
|
592
596
|
extern void list_deduplicate_oid(List *list);
|
|
593
597
|
|
|
594
598
|
extern void list_free(List *list);
|
|
595
599
|
extern void list_free_deep(List *list);
|
|
596
600
|
|
|
597
|
-
extern List *list_copy(const List *list);
|
|
598
|
-
extern List *
|
|
599
|
-
extern List *
|
|
601
|
+
extern pg_nodiscard List *list_copy(const List *list);
|
|
602
|
+
extern pg_nodiscard List *list_copy_head(const List *oldlist, int len);
|
|
603
|
+
extern pg_nodiscard List *list_copy_tail(const List *list, int nskip);
|
|
604
|
+
extern pg_nodiscard List *list_copy_deep(const List *oldlist);
|
|
600
605
|
|
|
601
606
|
typedef int (*list_sort_comparator) (const ListCell *a, const ListCell *b);
|
|
602
607
|
extern void list_sort(List *list, list_sort_comparator cmp);
|
|
603
608
|
|
|
609
|
+
extern int list_int_cmp(const ListCell *p1, const ListCell *p2);
|
|
604
610
|
extern int list_oid_cmp(const ListCell *p1, const ListCell *p2);
|
|
605
611
|
|
|
606
612
|
#endif /* PG_LIST_H */
|
|
@@ -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-2022, 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
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include "lib/stringinfo.h"
|
|
20
20
|
#include "nodes/bitmapset.h"
|
|
21
21
|
#include "nodes/lockoptions.h"
|
|
22
|
+
#include "nodes/parsenodes.h"
|
|
22
23
|
#include "nodes/primnodes.h"
|
|
23
24
|
|
|
24
25
|
|
|
@@ -43,7 +44,7 @@ typedef struct PlannedStmt
|
|
|
43
44
|
{
|
|
44
45
|
NodeTag type;
|
|
45
46
|
|
|
46
|
-
CmdType commandType; /* select|insert|update|delete|utility */
|
|
47
|
+
CmdType commandType; /* select|insert|update|delete|merge|utility */
|
|
47
48
|
|
|
48
49
|
uint64 queryId; /* query identifier (copied from Query) */
|
|
49
50
|
|
|
@@ -65,15 +66,9 @@ typedef struct PlannedStmt
|
|
|
65
66
|
|
|
66
67
|
List *rtable; /* list of RangeTblEntry nodes */
|
|
67
68
|
|
|
68
|
-
/* rtable indexes of target relations for INSERT/UPDATE/DELETE */
|
|
69
|
+
/* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */
|
|
69
70
|
List *resultRelations; /* integer list of RT indexes, or NIL */
|
|
70
71
|
|
|
71
|
-
/*
|
|
72
|
-
* rtable indexes of partitioned table roots that are UPDATE/DELETE
|
|
73
|
-
* targets; needed for trigger firing.
|
|
74
|
-
*/
|
|
75
|
-
List *rootResultRelations;
|
|
76
|
-
|
|
77
72
|
List *appendRelations; /* list of AppendRelInfo nodes */
|
|
78
73
|
|
|
79
74
|
List *subplans; /* Plan trees for SubPlan expressions; note
|
|
@@ -126,7 +121,7 @@ typedef struct Plan
|
|
|
126
121
|
/*
|
|
127
122
|
* planner's estimate of result size of this plan step
|
|
128
123
|
*/
|
|
129
|
-
|
|
124
|
+
Cardinality plan_rows; /* number of rows plan is expected to emit */
|
|
130
125
|
int plan_width; /* average row width in bytes */
|
|
131
126
|
|
|
132
127
|
/*
|
|
@@ -135,6 +130,11 @@ typedef struct Plan
|
|
|
135
130
|
bool parallel_aware; /* engage parallel-aware logic? */
|
|
136
131
|
bool parallel_safe; /* OK to use as part of parallel plan? */
|
|
137
132
|
|
|
133
|
+
/*
|
|
134
|
+
* information needed for asynchronous execution
|
|
135
|
+
*/
|
|
136
|
+
bool async_capable; /* engage asynchronous-capable logic? */
|
|
137
|
+
|
|
138
138
|
/*
|
|
139
139
|
* Common structural data for all Plan types.
|
|
140
140
|
*/
|
|
@@ -202,31 +202,29 @@ typedef struct ProjectSet
|
|
|
202
202
|
|
|
203
203
|
/* ----------------
|
|
204
204
|
* ModifyTable node -
|
|
205
|
-
* Apply rows produced by
|
|
205
|
+
* Apply rows produced by outer plan to result table(s),
|
|
206
206
|
* by inserting, updating, or deleting.
|
|
207
207
|
*
|
|
208
208
|
* If the originally named target table is a partitioned table, both
|
|
209
209
|
* nominalRelation and rootRelation contain the RT index of the partition
|
|
210
210
|
* root, which is not otherwise mentioned in the plan. Otherwise rootRelation
|
|
211
211
|
* is zero. However, nominalRelation will always be set, as it's the rel that
|
|
212
|
-
* EXPLAIN should claim is the INSERT/UPDATE/DELETE target.
|
|
212
|
+
* EXPLAIN should claim is the INSERT/UPDATE/DELETE/MERGE target.
|
|
213
213
|
*
|
|
214
214
|
* Note that rowMarks and epqParam are presumed to be valid for all the
|
|
215
|
-
*
|
|
215
|
+
* table(s); they can't contain any info that varies across tables.
|
|
216
216
|
* ----------------
|
|
217
217
|
*/
|
|
218
218
|
typedef struct ModifyTable
|
|
219
219
|
{
|
|
220
220
|
Plan plan;
|
|
221
|
-
CmdType operation; /* INSERT, UPDATE, or
|
|
221
|
+
CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
|
|
222
222
|
bool canSetTag; /* do we set the command tag/es_processed? */
|
|
223
223
|
Index nominalRelation; /* Parent RT index for use of EXPLAIN */
|
|
224
224
|
Index rootRelation; /* Root RT index, if target is partitioned */
|
|
225
|
-
bool partColsUpdated; /* some part key in hierarchy updated */
|
|
225
|
+
bool partColsUpdated; /* some part key in hierarchy updated? */
|
|
226
226
|
List *resultRelations; /* integer list of RT indexes */
|
|
227
|
-
|
|
228
|
-
int rootResultRelIndex; /* index of the partitioned table root */
|
|
229
|
-
List *plans; /* plan(s) producing source data */
|
|
227
|
+
List *updateColnosLists; /* per-target-table update_colnos lists */
|
|
230
228
|
List *withCheckOptionLists; /* per-target-table WCO lists */
|
|
231
229
|
List *returningLists; /* per-target-table RETURNING tlists */
|
|
232
230
|
List *fdwPrivLists; /* per-target-table FDW private data lists */
|
|
@@ -235,10 +233,13 @@ typedef struct ModifyTable
|
|
|
235
233
|
int epqParam; /* ID of Param for EvalPlanQual re-eval */
|
|
236
234
|
OnConflictAction onConflictAction; /* ON CONFLICT action */
|
|
237
235
|
List *arbiterIndexes; /* List of ON CONFLICT arbiter index OIDs */
|
|
238
|
-
List *onConflictSet; /*
|
|
236
|
+
List *onConflictSet; /* INSERT ON CONFLICT DO UPDATE targetlist */
|
|
237
|
+
List *onConflictCols; /* target column numbers for onConflictSet */
|
|
239
238
|
Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */
|
|
240
239
|
Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */
|
|
241
240
|
List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
|
|
241
|
+
List *mergeActionLists; /* per-target-table lists of actions for
|
|
242
|
+
* MERGE */
|
|
242
243
|
} ModifyTable;
|
|
243
244
|
|
|
244
245
|
struct PartitionPruneInfo; /* forward reference to struct below */
|
|
@@ -253,6 +254,7 @@ typedef struct Append
|
|
|
253
254
|
Plan plan;
|
|
254
255
|
Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
|
|
255
256
|
List *appendplans;
|
|
257
|
+
int nasyncplans; /* # of asynchronous plans */
|
|
256
258
|
|
|
257
259
|
/*
|
|
258
260
|
* All 'appendplans' preceding this index are non-partial plans. All
|
|
@@ -349,7 +351,10 @@ typedef struct Scan
|
|
|
349
351
|
* sequential scan node
|
|
350
352
|
* ----------------
|
|
351
353
|
*/
|
|
352
|
-
typedef
|
|
354
|
+
typedef struct SeqScan
|
|
355
|
+
{
|
|
356
|
+
Scan scan;
|
|
357
|
+
} SeqScan;
|
|
353
358
|
|
|
354
359
|
/* ----------------
|
|
355
360
|
* table sample scan node
|
|
@@ -447,10 +452,10 @@ typedef struct IndexOnlyScan
|
|
|
447
452
|
Scan scan;
|
|
448
453
|
Oid indexid; /* OID of index to scan */
|
|
449
454
|
List *indexqual; /* list of index quals (usually OpExprs) */
|
|
455
|
+
List *recheckqual; /* index quals in recheckable form */
|
|
450
456
|
List *indexorderby; /* list of index ORDER BY exprs */
|
|
451
457
|
List *indextlist; /* TargetEntry list describing index's cols */
|
|
452
458
|
ScanDirection indexorderdir; /* forward or backward or don't care */
|
|
453
|
-
List *recheckqual; /* index quals in recheckable form */
|
|
454
459
|
} IndexOnlyScan;
|
|
455
460
|
|
|
456
461
|
/* ----------------
|
|
@@ -508,6 +513,19 @@ typedef struct TidScan
|
|
|
508
513
|
List *tidquals; /* qual(s) involving CTID = something */
|
|
509
514
|
} TidScan;
|
|
510
515
|
|
|
516
|
+
/* ----------------
|
|
517
|
+
* tid range scan node
|
|
518
|
+
*
|
|
519
|
+
* tidrangequals is an implicitly AND'ed list of qual expressions of the form
|
|
520
|
+
* "CTID relop pseudoconstant", where relop is one of >,>=,<,<=.
|
|
521
|
+
* ----------------
|
|
522
|
+
*/
|
|
523
|
+
typedef struct TidRangeScan
|
|
524
|
+
{
|
|
525
|
+
Scan scan;
|
|
526
|
+
List *tidrangequals; /* qual(s) involving CTID op something */
|
|
527
|
+
} TidRangeScan;
|
|
528
|
+
|
|
511
529
|
/* ----------------
|
|
512
530
|
* subquery scan node
|
|
513
531
|
*
|
|
@@ -518,16 +536,28 @@ typedef struct TidScan
|
|
|
518
536
|
* relation, we make this a descendant of Scan anyway for code-sharing
|
|
519
537
|
* purposes.
|
|
520
538
|
*
|
|
539
|
+
* SubqueryScanStatus caches the trivial_subqueryscan property of the node.
|
|
540
|
+
* SUBQUERY_SCAN_UNKNOWN means not yet determined. This is only used during
|
|
541
|
+
* planning.
|
|
542
|
+
*
|
|
521
543
|
* Note: we store the sub-plan in the type-specific subplan field, not in
|
|
522
544
|
* the generic lefttree field as you might expect. This is because we do
|
|
523
545
|
* not want plan-tree-traversal routines to recurse into the subplan without
|
|
524
546
|
* knowing that they are changing Query contexts.
|
|
525
547
|
* ----------------
|
|
526
548
|
*/
|
|
549
|
+
typedef enum SubqueryScanStatus
|
|
550
|
+
{
|
|
551
|
+
SUBQUERY_SCAN_UNKNOWN,
|
|
552
|
+
SUBQUERY_SCAN_TRIVIAL,
|
|
553
|
+
SUBQUERY_SCAN_NONTRIVIAL
|
|
554
|
+
} SubqueryScanStatus;
|
|
555
|
+
|
|
527
556
|
typedef struct SubqueryScan
|
|
528
557
|
{
|
|
529
558
|
Scan scan;
|
|
530
559
|
Plan *subplan;
|
|
560
|
+
SubqueryScanStatus scanstatus;
|
|
531
561
|
} SubqueryScan;
|
|
532
562
|
|
|
533
563
|
/* ----------------
|
|
@@ -622,12 +652,20 @@ typedef struct WorkTableScan
|
|
|
622
652
|
* When the plan node represents a foreign join, scan.scanrelid is zero and
|
|
623
653
|
* fs_relids must be consulted to identify the join relation. (fs_relids
|
|
624
654
|
* is valid for simple scans as well, but will always match scan.scanrelid.)
|
|
655
|
+
*
|
|
656
|
+
* If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan
|
|
657
|
+
* node to perform the UPDATE or DELETE operation directly in the remote
|
|
658
|
+
* server, it sets 'operation' and 'resultRelation' to identify the operation
|
|
659
|
+
* type and target relation. Note that these fields are only set if the
|
|
660
|
+
* modification is performed *fully* remotely; otherwise, the modification is
|
|
661
|
+
* driven by a local ModifyTable node and 'operation' is left to CMD_SELECT.
|
|
625
662
|
* ----------------
|
|
626
663
|
*/
|
|
627
664
|
typedef struct ForeignScan
|
|
628
665
|
{
|
|
629
666
|
Scan scan;
|
|
630
667
|
CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
|
|
668
|
+
Index resultRelation; /* direct modification target's RT index */
|
|
631
669
|
Oid fs_server; /* OID of foreign server */
|
|
632
670
|
List *fdw_exprs; /* expressions that FDW may evaluate */
|
|
633
671
|
List *fdw_private; /* private data for FDW */
|
|
@@ -775,6 +813,31 @@ typedef struct Material
|
|
|
775
813
|
Plan plan;
|
|
776
814
|
} Material;
|
|
777
815
|
|
|
816
|
+
/* ----------------
|
|
817
|
+
* memoize node
|
|
818
|
+
* ----------------
|
|
819
|
+
*/
|
|
820
|
+
typedef struct Memoize
|
|
821
|
+
{
|
|
822
|
+
Plan plan;
|
|
823
|
+
|
|
824
|
+
int numKeys; /* size of the two arrays below */
|
|
825
|
+
|
|
826
|
+
Oid *hashOperators; /* hash operators for each key */
|
|
827
|
+
Oid *collations; /* collations for each key */
|
|
828
|
+
List *param_exprs; /* cache keys in the form of exprs containing
|
|
829
|
+
* parameters */
|
|
830
|
+
bool singlerow; /* true if the cache entry should be marked as
|
|
831
|
+
* complete after we store the first tuple in
|
|
832
|
+
* it. */
|
|
833
|
+
bool binary_mode; /* true when cache key should be compared bit
|
|
834
|
+
* by bit, false when using hash equality ops */
|
|
835
|
+
uint32 est_entries; /* The maximum number of entries that the
|
|
836
|
+
* planner expects will fit in the cache, or 0
|
|
837
|
+
* if unknown */
|
|
838
|
+
Bitmapset *keyparamids; /* paramids from param_exprs */
|
|
839
|
+
} Memoize;
|
|
840
|
+
|
|
778
841
|
/* ----------------
|
|
779
842
|
* sort node
|
|
780
843
|
* ----------------
|
|
@@ -864,12 +927,16 @@ typedef struct WindowAgg
|
|
|
864
927
|
int frameOptions; /* frame_clause options, see WindowDef */
|
|
865
928
|
Node *startOffset; /* expression for starting bound, if any */
|
|
866
929
|
Node *endOffset; /* expression for ending bound, if any */
|
|
930
|
+
List *runCondition; /* qual to help short-circuit execution */
|
|
931
|
+
List *runConditionOrig; /* runCondition for display in EXPLAIN */
|
|
867
932
|
/* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
|
|
868
933
|
Oid startInRangeFunc; /* in_range function for startOffset */
|
|
869
934
|
Oid endInRangeFunc; /* in_range function for endOffset */
|
|
870
935
|
Oid inRangeColl; /* collation for in_range tests */
|
|
871
936
|
bool inRangeAsc; /* use ASC sort order for in_range tests? */
|
|
872
937
|
bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
|
|
938
|
+
bool topWindow; /* false for all apart from the WindowAgg
|
|
939
|
+
* that's closest to the root of the plan */
|
|
873
940
|
} WindowAgg;
|
|
874
941
|
|
|
875
942
|
/* ----------------
|
|
@@ -947,7 +1014,7 @@ typedef struct Hash
|
|
|
947
1014
|
AttrNumber skewColumn; /* outer join key's column #, or zero */
|
|
948
1015
|
bool skewInherit; /* is outer join rel an inheritance tree? */
|
|
949
1016
|
/* all other info is in the parent HashJoin node */
|
|
950
|
-
|
|
1017
|
+
Cardinality rows_total; /* estimate total rows if parallel_aware */
|
|
951
1018
|
} Hash;
|
|
952
1019
|
|
|
953
1020
|
/* ----------------
|
|
@@ -1060,9 +1127,9 @@ typedef enum RowMarkType
|
|
|
1060
1127
|
* When the planner discovers that a relation is the root of an inheritance
|
|
1061
1128
|
* tree, it sets isParent true, and adds an additional PlanRowMark to the
|
|
1062
1129
|
* list for each child relation (including the target rel itself in its role
|
|
1063
|
-
* as a child
|
|
1064
|
-
* relations
|
|
1065
|
-
* entries have rti == child rel's RT index and prti == parent's RT index,
|
|
1130
|
+
* as a child, if it is not a partitioned table). Any non-leaf partitioned
|
|
1131
|
+
* child relations will also have entries with isParent = true. The child
|
|
1132
|
+
* entries have rti == child rel's RT index and prti == top parent's RT index,
|
|
1066
1133
|
* and can therefore be recognized as children by the fact that prti != rti.
|
|
1067
1134
|
* The parent's allMarkTypes field gets the OR of (1<<markType) across all
|
|
1068
1135
|
* its children (this definition allows children to use different markTypes).
|
|
@@ -1083,8 +1150,7 @@ typedef enum RowMarkType
|
|
|
1083
1150
|
* means we needn't renumber rowmarkIds when flattening subqueries, which
|
|
1084
1151
|
* would require finding and renaming the resjunk columns as well.)
|
|
1085
1152
|
* Note this means that all tables in an inheritance hierarchy share the
|
|
1086
|
-
* same resjunk column names.
|
|
1087
|
-
* columns could have different physical column numbers in each subplan.
|
|
1153
|
+
* same resjunk column names.
|
|
1088
1154
|
*/
|
|
1089
1155
|
typedef struct PlanRowMark
|
|
1090
1156
|
{
|
|
@@ -1190,7 +1256,7 @@ typedef struct PartitionPruneStep
|
|
|
1190
1256
|
} PartitionPruneStep;
|
|
1191
1257
|
|
|
1192
1258
|
/*
|
|
1193
|
-
* PartitionPruneStepOp - Information to prune using a set of mutually
|
|
1259
|
+
* PartitionPruneStepOp - Information to prune using a set of mutually ANDed
|
|
1194
1260
|
* OpExpr clauses
|
|
1195
1261
|
*
|
|
1196
1262
|
* This contains information extracted from up to partnatts OpExpr clauses,
|
|
@@ -1263,4 +1329,21 @@ typedef struct PlanInvalItem
|
|
|
1263
1329
|
uint32 hashValue; /* hash value of object's cache lookup key */
|
|
1264
1330
|
} PlanInvalItem;
|
|
1265
1331
|
|
|
1332
|
+
/*
|
|
1333
|
+
* MonotonicFunction
|
|
1334
|
+
*
|
|
1335
|
+
* Allows the planner to track monotonic properties of functions. A function
|
|
1336
|
+
* is monotonically increasing if a subsequent call cannot yield a lower value
|
|
1337
|
+
* than the previous call. A monotonically decreasing function cannot yield a
|
|
1338
|
+
* higher value on subsequent calls, and a function which is both must return
|
|
1339
|
+
* the same value on each call.
|
|
1340
|
+
*/
|
|
1341
|
+
typedef enum MonotonicFunction
|
|
1342
|
+
{
|
|
1343
|
+
MONOTONICFUNC_NONE = 0,
|
|
1344
|
+
MONOTONICFUNC_INCREASING = (1 << 0),
|
|
1345
|
+
MONOTONICFUNC_DECREASING = (1 << 1),
|
|
1346
|
+
MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
|
|
1347
|
+
} MonotonicFunction;
|
|
1348
|
+
|
|
1266
1349
|
#endif /* PLANNODES_H */
|