pg_query 2.1.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 +104 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/extconf.rb +8 -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 +5 -1
- data/ext/pg_query/include/access/xact.h +79 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +50 -14
- 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 +148 -32
- 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 +10 -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 +45 -15
- data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
- 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 +5 -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 +21 -16
- 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 -4
- 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 +56 -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 +4 -5
- 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 +3 -1
- data/ext/pg_query/include/commands/trigger.h +27 -17
- 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 +150 -25
- 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 +31 -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 +106 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +71 -52
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +272 -80
- 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 +327 -94
- data/ext/pg_query/include/nodes/pathnodes.h +245 -67
- data/ext/pg_query/include/nodes/pg_list.h +75 -68
- data/ext/pg_query/include/nodes/plannodes.h +128 -30
- 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 -22
- 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 +4 -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 +94 -46
- 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 +1220 -422
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1237
- 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 +88 -12
- 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 +72 -43
- 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 +1422 -916
- 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 +262 -44
- data/ext/pg_query/include/replication/slot.h +23 -12
- 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 +17 -13
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +6 -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 +183 -55
- 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 +67 -4
- 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 +7 -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 +11 -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 +5 -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 +12 -1
- 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 -20
- data/ext/pg_query/include/utils/relcache.h +9 -7
- 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 +35 -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 +4318 -2307
- data/ext/pg_query/pg_query_deparse.c +1114 -381
- data/ext/pg_query/pg_query_fingerprint.c +46 -10
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
- data/ext/pg_query/pg_query_normalize.c +163 -20
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +65 -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_parse_plpgsql.c +79 -16
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_ruby.c +1 -1
- 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 +21 -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 +424 -109
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +86 -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 +33890 -31262
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +644 -441
- 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 +73 -24
- 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 +109 -15
- 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 +207 -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 +712 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
- 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 -52
- 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 +46 -20
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +6 -4
- data/lib/pg_query/fingerprint.rb +18 -3
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +87 -51
- data/lib/pg_query/pg_query_pb.rb +1109 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- metadata +29 -18
- 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/src_backend_libpq_pqcomm.c +0 -651
- 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,37 +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 *
|
|
564
|
-
extern List *
|
|
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);
|
|
565
570
|
|
|
566
571
|
extern List *list_union(const List *list1, const List *list2);
|
|
567
572
|
extern List *list_union_ptr(const List *list1, const List *list2);
|
|
@@ -578,28 +583,30 @@ extern List *list_difference_ptr(const List *list1, const List *list2);
|
|
|
578
583
|
extern List *list_difference_int(const List *list1, const List *list2);
|
|
579
584
|
extern List *list_difference_oid(const List *list1, const List *list2);
|
|
580
585
|
|
|
581
|
-
extern List *list_append_unique(List *list, void *datum);
|
|
582
|
-
extern List *list_append_unique_ptr(List *list, void *datum);
|
|
583
|
-
extern List *list_append_unique_int(List *list, int datum);
|
|
584
|
-
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);
|
|
585
590
|
|
|
586
|
-
extern List *list_concat_unique(List *list1, const List *list2);
|
|
587
|
-
extern List *list_concat_unique_ptr(List *list1, const List *list2);
|
|
588
|
-
extern List *list_concat_unique_int(List *list1, const List *list2);
|
|
589
|
-
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);
|
|
590
595
|
|
|
591
596
|
extern void list_deduplicate_oid(List *list);
|
|
592
597
|
|
|
593
598
|
extern void list_free(List *list);
|
|
594
599
|
extern void list_free_deep(List *list);
|
|
595
600
|
|
|
596
|
-
extern List *list_copy(const List *list);
|
|
597
|
-
extern List *
|
|
598
|
-
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);
|
|
599
605
|
|
|
600
606
|
typedef int (*list_sort_comparator) (const ListCell *a, const ListCell *b);
|
|
601
607
|
extern void list_sort(List *list, list_sort_comparator cmp);
|
|
602
608
|
|
|
609
|
+
extern int list_int_cmp(const ListCell *p1, const ListCell *p2);
|
|
603
610
|
extern int list_oid_cmp(const ListCell *p1, const ListCell *p2);
|
|
604
611
|
|
|
605
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
|
|
@@ -418,14 +423,28 @@ typedef struct IndexScan
|
|
|
418
423
|
* index-only scan, in which the data comes from the index not the heap.
|
|
419
424
|
* Because of this, *all* Vars in the plan node's targetlist, qual, and
|
|
420
425
|
* index expressions reference index columns and have varno = INDEX_VAR.
|
|
421
|
-
*
|
|
422
|
-
*
|
|
426
|
+
*
|
|
427
|
+
* We could almost use indexqual directly against the index's output tuple
|
|
428
|
+
* when rechecking lossy index operators, but that won't work for quals on
|
|
429
|
+
* index columns that are not retrievable. Hence, recheckqual is needed
|
|
430
|
+
* for rechecks: it expresses the same condition as indexqual, but using
|
|
431
|
+
* only index columns that are retrievable. (We will not generate an
|
|
432
|
+
* index-only scan if this is not possible. An example is that if an
|
|
433
|
+
* index has table column "x" in a retrievable index column "ind1", plus
|
|
434
|
+
* an expression f(x) in a non-retrievable column "ind2", an indexable
|
|
435
|
+
* query on f(x) will use "ind2" in indexqual and f(ind1) in recheckqual.
|
|
436
|
+
* Without the "ind1" column, an index-only scan would be disallowed.)
|
|
437
|
+
*
|
|
438
|
+
* We don't currently need a recheckable equivalent of indexorderby,
|
|
439
|
+
* because we don't support lossy operators in index ORDER BY.
|
|
423
440
|
*
|
|
424
441
|
* To help EXPLAIN interpret the index Vars for display, we provide
|
|
425
442
|
* indextlist, which represents the contents of the index as a targetlist
|
|
426
443
|
* with one TLE per index column. Vars appearing in this list reference
|
|
427
444
|
* the base table, and this is the only field in the plan node that may
|
|
428
|
-
* contain such Vars.
|
|
445
|
+
* contain such Vars. Also, for the convenience of setrefs.c, TLEs in
|
|
446
|
+
* indextlist are marked as resjunk if they correspond to columns that
|
|
447
|
+
* the index AM cannot reconstruct.
|
|
429
448
|
* ----------------
|
|
430
449
|
*/
|
|
431
450
|
typedef struct IndexOnlyScan
|
|
@@ -433,6 +452,7 @@ typedef struct IndexOnlyScan
|
|
|
433
452
|
Scan scan;
|
|
434
453
|
Oid indexid; /* OID of index to scan */
|
|
435
454
|
List *indexqual; /* list of index quals (usually OpExprs) */
|
|
455
|
+
List *recheckqual; /* index quals in recheckable form */
|
|
436
456
|
List *indexorderby; /* list of index ORDER BY exprs */
|
|
437
457
|
List *indextlist; /* TargetEntry list describing index's cols */
|
|
438
458
|
ScanDirection indexorderdir; /* forward or backward or don't care */
|
|
@@ -493,6 +513,19 @@ typedef struct TidScan
|
|
|
493
513
|
List *tidquals; /* qual(s) involving CTID = something */
|
|
494
514
|
} TidScan;
|
|
495
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
|
+
|
|
496
529
|
/* ----------------
|
|
497
530
|
* subquery scan node
|
|
498
531
|
*
|
|
@@ -503,16 +536,28 @@ typedef struct TidScan
|
|
|
503
536
|
* relation, we make this a descendant of Scan anyway for code-sharing
|
|
504
537
|
* purposes.
|
|
505
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
|
+
*
|
|
506
543
|
* Note: we store the sub-plan in the type-specific subplan field, not in
|
|
507
544
|
* the generic lefttree field as you might expect. This is because we do
|
|
508
545
|
* not want plan-tree-traversal routines to recurse into the subplan without
|
|
509
546
|
* knowing that they are changing Query contexts.
|
|
510
547
|
* ----------------
|
|
511
548
|
*/
|
|
549
|
+
typedef enum SubqueryScanStatus
|
|
550
|
+
{
|
|
551
|
+
SUBQUERY_SCAN_UNKNOWN,
|
|
552
|
+
SUBQUERY_SCAN_TRIVIAL,
|
|
553
|
+
SUBQUERY_SCAN_NONTRIVIAL
|
|
554
|
+
} SubqueryScanStatus;
|
|
555
|
+
|
|
512
556
|
typedef struct SubqueryScan
|
|
513
557
|
{
|
|
514
558
|
Scan scan;
|
|
515
559
|
Plan *subplan;
|
|
560
|
+
SubqueryScanStatus scanstatus;
|
|
516
561
|
} SubqueryScan;
|
|
517
562
|
|
|
518
563
|
/* ----------------
|
|
@@ -607,12 +652,20 @@ typedef struct WorkTableScan
|
|
|
607
652
|
* When the plan node represents a foreign join, scan.scanrelid is zero and
|
|
608
653
|
* fs_relids must be consulted to identify the join relation. (fs_relids
|
|
609
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.
|
|
610
662
|
* ----------------
|
|
611
663
|
*/
|
|
612
664
|
typedef struct ForeignScan
|
|
613
665
|
{
|
|
614
666
|
Scan scan;
|
|
615
667
|
CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
|
|
668
|
+
Index resultRelation; /* direct modification target's RT index */
|
|
616
669
|
Oid fs_server; /* OID of foreign server */
|
|
617
670
|
List *fdw_exprs; /* expressions that FDW may evaluate */
|
|
618
671
|
List *fdw_private; /* private data for FDW */
|
|
@@ -760,6 +813,31 @@ typedef struct Material
|
|
|
760
813
|
Plan plan;
|
|
761
814
|
} Material;
|
|
762
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
|
+
|
|
763
841
|
/* ----------------
|
|
764
842
|
* sort node
|
|
765
843
|
* ----------------
|
|
@@ -849,12 +927,16 @@ typedef struct WindowAgg
|
|
|
849
927
|
int frameOptions; /* frame_clause options, see WindowDef */
|
|
850
928
|
Node *startOffset; /* expression for starting bound, if any */
|
|
851
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 */
|
|
852
932
|
/* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
|
|
853
933
|
Oid startInRangeFunc; /* in_range function for startOffset */
|
|
854
934
|
Oid endInRangeFunc; /* in_range function for endOffset */
|
|
855
935
|
Oid inRangeColl; /* collation for in_range tests */
|
|
856
936
|
bool inRangeAsc; /* use ASC sort order for in_range tests? */
|
|
857
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 */
|
|
858
940
|
} WindowAgg;
|
|
859
941
|
|
|
860
942
|
/* ----------------
|
|
@@ -932,7 +1014,7 @@ typedef struct Hash
|
|
|
932
1014
|
AttrNumber skewColumn; /* outer join key's column #, or zero */
|
|
933
1015
|
bool skewInherit; /* is outer join rel an inheritance tree? */
|
|
934
1016
|
/* all other info is in the parent HashJoin node */
|
|
935
|
-
|
|
1017
|
+
Cardinality rows_total; /* estimate total rows if parallel_aware */
|
|
936
1018
|
} Hash;
|
|
937
1019
|
|
|
938
1020
|
/* ----------------
|
|
@@ -1045,9 +1127,9 @@ typedef enum RowMarkType
|
|
|
1045
1127
|
* When the planner discovers that a relation is the root of an inheritance
|
|
1046
1128
|
* tree, it sets isParent true, and adds an additional PlanRowMark to the
|
|
1047
1129
|
* list for each child relation (including the target rel itself in its role
|
|
1048
|
-
* as a child
|
|
1049
|
-
* relations
|
|
1050
|
-
* 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,
|
|
1051
1133
|
* and can therefore be recognized as children by the fact that prti != rti.
|
|
1052
1134
|
* The parent's allMarkTypes field gets the OR of (1<<markType) across all
|
|
1053
1135
|
* its children (this definition allows children to use different markTypes).
|
|
@@ -1068,8 +1150,7 @@ typedef enum RowMarkType
|
|
|
1068
1150
|
* means we needn't renumber rowmarkIds when flattening subqueries, which
|
|
1069
1151
|
* would require finding and renaming the resjunk columns as well.)
|
|
1070
1152
|
* Note this means that all tables in an inheritance hierarchy share the
|
|
1071
|
-
* same resjunk column names.
|
|
1072
|
-
* columns could have different physical column numbers in each subplan.
|
|
1153
|
+
* same resjunk column names.
|
|
1073
1154
|
*/
|
|
1074
1155
|
typedef struct PlanRowMark
|
|
1075
1156
|
{
|
|
@@ -1175,7 +1256,7 @@ typedef struct PartitionPruneStep
|
|
|
1175
1256
|
} PartitionPruneStep;
|
|
1176
1257
|
|
|
1177
1258
|
/*
|
|
1178
|
-
* PartitionPruneStepOp - Information to prune using a set of mutually
|
|
1259
|
+
* PartitionPruneStepOp - Information to prune using a set of mutually ANDed
|
|
1179
1260
|
* OpExpr clauses
|
|
1180
1261
|
*
|
|
1181
1262
|
* This contains information extracted from up to partnatts OpExpr clauses,
|
|
@@ -1248,4 +1329,21 @@ typedef struct PlanInvalItem
|
|
|
1248
1329
|
uint32 hashValue; /* hash value of object's cache lookup key */
|
|
1249
1330
|
} PlanInvalItem;
|
|
1250
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
|
+
|
|
1251
1349
|
#endif /* PLANNODES_H */
|