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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* and join trees.
|
|
8
8
|
*
|
|
9
9
|
*
|
|
10
|
-
* Portions Copyright (c) 1996-
|
|
10
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
11
11
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
12
12
|
*
|
|
13
13
|
* src/include/nodes/primnodes.h
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* specifies an alias for a range variable; the alias might also
|
|
33
33
|
* specify renaming of columns within the table.
|
|
34
34
|
*
|
|
35
|
-
* Note: colnames is a list of
|
|
35
|
+
* Note: colnames is a list of String nodes. In Alias structs
|
|
36
36
|
* associated with RTEs, there may be entries corresponding to dropped
|
|
37
37
|
* columns; these are normally empty strings (""). See parsenodes.h for info.
|
|
38
38
|
*/
|
|
@@ -76,7 +76,7 @@ typedef struct RangeVar
|
|
|
76
76
|
/*
|
|
77
77
|
* TableFunc - node for a table function, such as XMLTABLE.
|
|
78
78
|
*
|
|
79
|
-
* Entries in the ns_names list are either
|
|
79
|
+
* Entries in the ns_names list are either String nodes containing
|
|
80
80
|
* literal namespace names, or NULL pointers to represent DEFAULT.
|
|
81
81
|
*/
|
|
82
82
|
typedef struct TableFunc
|
|
@@ -158,6 +158,10 @@ typedef struct Expr
|
|
|
158
158
|
* than a heap column. (In ForeignScan and CustomScan plan nodes, INDEX_VAR
|
|
159
159
|
* is abused to signify references to columns of a custom scan tuple type.)
|
|
160
160
|
*
|
|
161
|
+
* ROWID_VAR is used in the planner to identify nonce variables that carry
|
|
162
|
+
* row identity information during UPDATE/DELETE/MERGE. This value should
|
|
163
|
+
* never be seen outside the planner.
|
|
164
|
+
*
|
|
161
165
|
* In the parser, varnosyn and varattnosyn are either identical to
|
|
162
166
|
* varno/varattno, or they specify the column's position in an aliased JOIN
|
|
163
167
|
* RTE that hides the semantic referent RTE's refname. This is a syntactic
|
|
@@ -168,11 +172,12 @@ typedef struct Expr
|
|
|
168
172
|
* in the planner and doesn't correspond to any simple relation column may
|
|
169
173
|
* have varnosyn = varattnosyn = 0.
|
|
170
174
|
*/
|
|
171
|
-
#define INNER_VAR
|
|
172
|
-
#define OUTER_VAR
|
|
173
|
-
#define INDEX_VAR
|
|
175
|
+
#define INNER_VAR (-1) /* reference to inner subplan */
|
|
176
|
+
#define OUTER_VAR (-2) /* reference to outer subplan */
|
|
177
|
+
#define INDEX_VAR (-3) /* reference to index column */
|
|
178
|
+
#define ROWID_VAR (-4) /* row identity column during planning */
|
|
174
179
|
|
|
175
|
-
#define IS_SPECIAL_VARNO(varno) ((varno)
|
|
180
|
+
#define IS_SPECIAL_VARNO(varno) ((int) (varno) < 0)
|
|
176
181
|
|
|
177
182
|
/* Symbols for the indexes of the special RTE entries in rules */
|
|
178
183
|
#define PRS2_OLD_VARNO 1
|
|
@@ -181,8 +186,8 @@ typedef struct Expr
|
|
|
181
186
|
typedef struct Var
|
|
182
187
|
{
|
|
183
188
|
Expr xpr;
|
|
184
|
-
|
|
185
|
-
* table, or INNER_VAR/OUTER_VAR/
|
|
189
|
+
int varno; /* index of this var's relation in the range
|
|
190
|
+
* table, or INNER_VAR/OUTER_VAR/etc */
|
|
186
191
|
AttrNumber varattno; /* attribute number of this var, or zero for
|
|
187
192
|
* all attrs ("whole-row Var") */
|
|
188
193
|
Oid vartype; /* pg_type OID for the type of this var */
|
|
@@ -305,6 +310,12 @@ typedef struct Param
|
|
|
305
310
|
* a crosscheck that the Aggrefs match the plan; but note that when aggsplit
|
|
306
311
|
* indicates a non-final mode, aggtype reflects the transition data type
|
|
307
312
|
* not the SQL-level output type of the aggregate.
|
|
313
|
+
*
|
|
314
|
+
* aggno and aggtransno are -1 in the parse stage, and are set in planning.
|
|
315
|
+
* Aggregates with the same 'aggno' represent the same aggregate expression,
|
|
316
|
+
* and can share the result. Aggregates with same 'transno' but different
|
|
317
|
+
* 'aggno' can share the same transition state, only the final function needs
|
|
318
|
+
* to be called separately.
|
|
308
319
|
*/
|
|
309
320
|
typedef struct Aggref
|
|
310
321
|
{
|
|
@@ -326,6 +337,8 @@ typedef struct Aggref
|
|
|
326
337
|
char aggkind; /* aggregate kind (see pg_aggregate.h) */
|
|
327
338
|
Index agglevelsup; /* > 0 if agg belongs to outer query */
|
|
328
339
|
AggSplit aggsplit; /* expected agg-splitting mode of parent Agg */
|
|
340
|
+
int aggno; /* unique ID within the Agg node */
|
|
341
|
+
int aggtransno; /* unique ID of transition state in the Agg */
|
|
329
342
|
int location; /* token location, or -1 if unknown */
|
|
330
343
|
} Aggref;
|
|
331
344
|
|
|
@@ -382,14 +395,14 @@ typedef struct WindowFunc
|
|
|
382
395
|
int location; /* token location, or -1 if unknown */
|
|
383
396
|
} WindowFunc;
|
|
384
397
|
|
|
385
|
-
/*
|
|
386
|
-
*
|
|
387
|
-
*
|
|
398
|
+
/*
|
|
399
|
+
* SubscriptingRef: describes a subscripting operation over a container
|
|
400
|
+
* (array, etc).
|
|
388
401
|
*
|
|
389
402
|
* A SubscriptingRef can describe fetching a single element from a container,
|
|
390
|
-
* fetching a part of container (e.g. array slice), storing a single
|
|
391
|
-
* a container, or storing a slice. The "store" cases work with
|
|
392
|
-
* initial container value and a source value that is inserted into the
|
|
403
|
+
* fetching a part of a container (e.g. an array slice), storing a single
|
|
404
|
+
* element into a container, or storing a slice. The "store" cases work with
|
|
405
|
+
* an initial container value and a source value that is inserted into the
|
|
393
406
|
* appropriate part of the container; the result of the operation is an
|
|
394
407
|
* entire new modified container value.
|
|
395
408
|
*
|
|
@@ -402,23 +415,32 @@ typedef struct WindowFunc
|
|
|
402
415
|
*
|
|
403
416
|
* In the slice case, individual expressions in the subscript lists can be
|
|
404
417
|
* NULL, meaning "substitute the array's current lower or upper bound".
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
* type of
|
|
418
|
+
* (Non-array containers may or may not support this.)
|
|
419
|
+
*
|
|
420
|
+
* refcontainertype is the actual container type that determines the
|
|
421
|
+
* subscripting semantics. (This will generally be either the exposed type of
|
|
422
|
+
* refexpr, or the base type if that is a domain.) refelemtype is the type of
|
|
423
|
+
* the container's elements; this is saved for the use of the subscripting
|
|
424
|
+
* functions, but is not used by the core code. refrestype, reftypmod, and
|
|
425
|
+
* refcollid describe the type of the SubscriptingRef's result. In a store
|
|
426
|
+
* expression, refrestype will always match refcontainertype; in a fetch,
|
|
427
|
+
* it could be refelemtype for an element fetch, or refcontainertype for a
|
|
428
|
+
* slice fetch, or possibly something else as determined by type-specific
|
|
429
|
+
* subscripting logic. Likewise, reftypmod and refcollid will match the
|
|
430
|
+
* container's properties in a store, but could be different in a fetch.
|
|
409
431
|
*
|
|
410
432
|
* Note: for the cases where a container is returned, if refexpr yields a R/W
|
|
411
|
-
* expanded container, then the implementation is allowed to modify that
|
|
412
|
-
* in-place and return the same object.
|
|
413
|
-
* ----------------
|
|
433
|
+
* expanded container, then the implementation is allowed to modify that
|
|
434
|
+
* object in-place and return the same object.
|
|
414
435
|
*/
|
|
415
436
|
typedef struct SubscriptingRef
|
|
416
437
|
{
|
|
417
438
|
Expr xpr;
|
|
418
439
|
Oid refcontainertype; /* type of the container proper */
|
|
419
|
-
Oid refelemtype; /*
|
|
420
|
-
|
|
421
|
-
|
|
440
|
+
Oid refelemtype; /* the container type's pg_type.typelem */
|
|
441
|
+
Oid refrestype; /* type of the SubscriptingRef's result */
|
|
442
|
+
int32 reftypmod; /* typmod of the result */
|
|
443
|
+
Oid refcollid; /* collation of result, or InvalidOid if none */
|
|
422
444
|
List *refupperindexpr; /* expressions that evaluate to upper
|
|
423
445
|
* container indexes */
|
|
424
446
|
List *reflowerindexpr; /* expressions that evaluate to lower
|
|
@@ -426,7 +448,6 @@ typedef struct SubscriptingRef
|
|
|
426
448
|
* container element */
|
|
427
449
|
Expr *refexpr; /* the expression that evaluates to a
|
|
428
450
|
* container value */
|
|
429
|
-
|
|
430
451
|
Expr *refassgnexpr; /* expression for the source value, or NULL if
|
|
431
452
|
* fetch */
|
|
432
453
|
} SubscriptingRef;
|
|
@@ -441,11 +462,15 @@ typedef enum CoercionContext
|
|
|
441
462
|
{
|
|
442
463
|
COERCION_IMPLICIT, /* coercion in context of expression */
|
|
443
464
|
COERCION_ASSIGNMENT, /* coercion in context of assignment */
|
|
465
|
+
COERCION_PLPGSQL, /* if no assignment cast, use CoerceViaIO */
|
|
444
466
|
COERCION_EXPLICIT /* explicit cast operation */
|
|
445
467
|
} CoercionContext;
|
|
446
468
|
|
|
447
469
|
/*
|
|
448
|
-
* CoercionForm - how to display a
|
|
470
|
+
* CoercionForm - how to display a FuncExpr or related node
|
|
471
|
+
*
|
|
472
|
+
* "Coercion" is a bit of a misnomer, since this value records other
|
|
473
|
+
* special syntaxes besides casts, but for now we'll keep this naming.
|
|
449
474
|
*
|
|
450
475
|
* NB: equal() ignores CoercionForm fields, therefore this *must* not carry
|
|
451
476
|
* any semantically significant information. We need that behavior so that
|
|
@@ -457,7 +482,8 @@ typedef enum CoercionForm
|
|
|
457
482
|
{
|
|
458
483
|
COERCE_EXPLICIT_CALL, /* display as a function call */
|
|
459
484
|
COERCE_EXPLICIT_CAST, /* display as an explicit cast */
|
|
460
|
-
COERCE_IMPLICIT_CAST /* implicit cast, so hide it */
|
|
485
|
+
COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
|
|
486
|
+
COERCE_SQL_SYNTAX /* display with SQL-mandated special syntax */
|
|
461
487
|
} CoercionForm;
|
|
462
488
|
|
|
463
489
|
/*
|
|
@@ -552,12 +578,29 @@ typedef OpExpr NullIfExpr;
|
|
|
552
578
|
* is almost the same as for the underlying operator, but we need a useOr
|
|
553
579
|
* flag to remember whether it's ANY or ALL, and we don't have to store
|
|
554
580
|
* the result type (or the collation) because it must be boolean.
|
|
581
|
+
*
|
|
582
|
+
* A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution
|
|
583
|
+
* by building a hash table containing the Const values from the RHS arg.
|
|
584
|
+
* This table is probed during expression evaluation. The planner will set
|
|
585
|
+
* hashfuncid to the hash function which must be used to build and probe the
|
|
586
|
+
* hash table. The executor determines if it should use hash-based checks or
|
|
587
|
+
* the more traditional means based on if the hashfuncid is set or not.
|
|
588
|
+
*
|
|
589
|
+
* When performing hashed NOT IN, the negfuncid will also be set to the
|
|
590
|
+
* equality function which the hash table must use to build and probe the hash
|
|
591
|
+
* table. opno and opfuncid will remain set to the <> operator and its
|
|
592
|
+
* corresponding function and won't be used during execution. For
|
|
593
|
+
* non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
|
|
594
|
+
* convert_saop_to_hashed_saop().
|
|
555
595
|
*/
|
|
556
596
|
typedef struct ScalarArrayOpExpr
|
|
557
597
|
{
|
|
558
598
|
Expr xpr;
|
|
559
599
|
Oid opno; /* PG_OPERATOR OID of the operator */
|
|
560
|
-
Oid opfuncid; /* PG_PROC OID of
|
|
600
|
+
Oid opfuncid; /* PG_PROC OID of comparison function */
|
|
601
|
+
Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */
|
|
602
|
+
Oid negfuncid; /* PG_PROC OID of negator of opfuncid function
|
|
603
|
+
* or InvalidOid. See above */
|
|
561
604
|
bool useOr; /* true for ANY, false for ALL */
|
|
562
605
|
Oid inputcollid; /* OID of collation that operator should use */
|
|
563
606
|
List *args; /* the scalar and array operands */
|
|
@@ -736,6 +779,9 @@ typedef struct SubPlan
|
|
|
736
779
|
/*
|
|
737
780
|
* AlternativeSubPlan - expression node for a choice among SubPlans
|
|
738
781
|
*
|
|
782
|
+
* This is used only transiently during planning: by the time the plan
|
|
783
|
+
* reaches the executor, all AlternativeSubPlan nodes have been removed.
|
|
784
|
+
*
|
|
739
785
|
* The subplans are given as a List so that the node definition need not
|
|
740
786
|
* change if there's ever more than two alternatives. For the moment,
|
|
741
787
|
* though, there are always exactly two; and the first one is the fast-start
|
|
@@ -1006,15 +1052,13 @@ typedef struct ArrayExpr
|
|
|
1006
1052
|
* than vice versa.) It is important not to assume that length(args) is
|
|
1007
1053
|
* the same as the number of columns logically present in the rowtype.
|
|
1008
1054
|
*
|
|
1009
|
-
* colnames provides field names
|
|
1010
|
-
*
|
|
1011
|
-
*
|
|
1012
|
-
*
|
|
1013
|
-
*
|
|
1014
|
-
*
|
|
1015
|
-
*
|
|
1016
|
-
* otherwise be very difficult to extract from the parsetree). Like the
|
|
1017
|
-
* args list, colnames is one-for-one with physical fields of the rowtype.
|
|
1055
|
+
* colnames provides field names if the ROW() result is of type RECORD.
|
|
1056
|
+
* Names *must* be provided if row_typeid is RECORDOID; but if it is a
|
|
1057
|
+
* named composite type, colnames will be ignored in favor of using the
|
|
1058
|
+
* type's cataloged field names, so colnames should be NIL. Like the
|
|
1059
|
+
* args list, colnames is defined to be one-for-one with physical fields
|
|
1060
|
+
* of the rowtype (although dropped columns shouldn't appear in the
|
|
1061
|
+
* RECORD case, so this fine point is currently moot).
|
|
1018
1062
|
*/
|
|
1019
1063
|
typedef struct RowExpr
|
|
1020
1064
|
{
|
|
@@ -1169,7 +1213,7 @@ typedef enum XmlExprOp
|
|
|
1169
1213
|
IS_DOCUMENT /* xmlval IS DOCUMENT */
|
|
1170
1214
|
} XmlExprOp;
|
|
1171
1215
|
|
|
1172
|
-
typedef enum
|
|
1216
|
+
typedef enum XmlOptionType
|
|
1173
1217
|
{
|
|
1174
1218
|
XMLOPTION_DOCUMENT,
|
|
1175
1219
|
XMLOPTION_CONTENT
|
|
@@ -1181,7 +1225,7 @@ typedef struct XmlExpr
|
|
|
1181
1225
|
XmlExprOp op; /* xml function ID */
|
|
1182
1226
|
char *name; /* name in xml(NAME foo ...) syntaxes */
|
|
1183
1227
|
List *named_args; /* non-XML expressions for xml_attributes */
|
|
1184
|
-
List *arg_names; /* parallel list of
|
|
1228
|
+
List *arg_names; /* parallel list of String values */
|
|
1185
1229
|
List *args; /* list of expressions */
|
|
1186
1230
|
XmlOptionType xmloption; /* DOCUMENT or CONTENT */
|
|
1187
1231
|
Oid type; /* target type/typmod for XMLSERIALIZE */
|
|
@@ -1305,6 +1349,7 @@ typedef struct SetToDefault
|
|
|
1305
1349
|
* of the target relation being constrained; this aids placing the expression
|
|
1306
1350
|
* correctly during planning. We can assume however that its "levelsup" is
|
|
1307
1351
|
* always zero, due to the syntactic constraints on where it can appear.
|
|
1352
|
+
* Also, cvarno will always be a true RT index, never INNER_VAR etc.
|
|
1308
1353
|
*
|
|
1309
1354
|
* The referenced cursor can be represented either as a hardwired string
|
|
1310
1355
|
* or as a reference to a run-time parameter of type REFCURSOR. The latter
|
|
@@ -1362,13 +1407,14 @@ typedef struct InferenceElem
|
|
|
1362
1407
|
* column for the item; so there may be missing or out-of-order resnos.
|
|
1363
1408
|
* It is even legal to have duplicated resnos; consider
|
|
1364
1409
|
* UPDATE table SET arraycol[1] = ..., arraycol[2] = ..., ...
|
|
1365
|
-
*
|
|
1366
|
-
*
|
|
1367
|
-
*
|
|
1368
|
-
*
|
|
1369
|
-
*
|
|
1370
|
-
*
|
|
1371
|
-
*
|
|
1410
|
+
* In an INSERT, the rewriter and planner will normalize the tlist by
|
|
1411
|
+
* reordering it into physical column order and filling in default values
|
|
1412
|
+
* for any columns not assigned values by the original query. In an UPDATE,
|
|
1413
|
+
* after the rewriter merges multiple assignments for the same column, the
|
|
1414
|
+
* planner extracts the target-column numbers into a separate "update_colnos"
|
|
1415
|
+
* list, and then renumbers the tlist elements serially. Thus, tlist resnos
|
|
1416
|
+
* match ordinal position in all tlists seen by the executor; but it is wrong
|
|
1417
|
+
* to assume that before planning has happened.
|
|
1372
1418
|
*
|
|
1373
1419
|
* resname is required to represent the correct column name in non-resjunk
|
|
1374
1420
|
* entries of top-level SELECT targetlists, since it will be used as the
|
|
@@ -1475,6 +1521,11 @@ typedef struct RangeTblRef
|
|
|
1475
1521
|
* alias has a critical impact on semantics, because a join with an alias
|
|
1476
1522
|
* restricts visibility of the tables/columns inside it.
|
|
1477
1523
|
*
|
|
1524
|
+
* join_using_alias is an Alias node representing the join correlation
|
|
1525
|
+
* name that SQL:2016 and later allow to be attached to JOIN/USING.
|
|
1526
|
+
* Its column alias list includes only the common column names from USING,
|
|
1527
|
+
* and it does not restrict visibility of the join's input tables.
|
|
1528
|
+
*
|
|
1478
1529
|
* During parse analysis, an RTE is created for the Join, and its index
|
|
1479
1530
|
* is filled into rtindex. This RTE is present mainly so that Vars can
|
|
1480
1531
|
* be created that refer to the outputs of the join. The planner sometimes
|
|
@@ -1490,6 +1541,7 @@ typedef struct JoinExpr
|
|
|
1490
1541
|
Node *larg; /* left subtree */
|
|
1491
1542
|
Node *rarg; /* right subtree */
|
|
1492
1543
|
List *usingClause; /* USING clause, if any (list of String) */
|
|
1544
|
+
Alias *join_using_alias; /* alias attached to USING clause, if any */
|
|
1493
1545
|
Node *quals; /* qualifiers on join, if any */
|
|
1494
1546
|
Alias *alias; /* user-written alias clause, if any */
|
|
1495
1547
|
int rtindex; /* RT index assigned for join, or 0 */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* definitions for nodes/print.c
|
|
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/print.h
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*-------------------------------------------------------------------------
|
|
2
2
|
*
|
|
3
3
|
* value.h
|
|
4
|
-
* interface for
|
|
4
|
+
* interface for value nodes
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Copyright (c) 2003-
|
|
7
|
+
* Copyright (c) 2003-2022, PostgreSQL Global Development Group
|
|
8
8
|
*
|
|
9
9
|
* src/include/nodes/value.h
|
|
10
10
|
*
|
|
@@ -16,46 +16,65 @@
|
|
|
16
16
|
|
|
17
17
|
#include "nodes/nodes.h"
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
*
|
|
19
|
+
/*
|
|
20
|
+
* The node types Integer, Float, String, and BitString are used to represent
|
|
21
|
+
* literals in the lexer and are also used to pass constants around in the
|
|
22
|
+
* parser. One difference between these node types and, say, a plain int or
|
|
23
|
+
* char * is that the nodes can be put into a List.
|
|
21
24
|
*
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
25
|
+
* (There used to be a Value node, which encompassed all these different node types. Hence the name of this file.)
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
typedef struct Integer
|
|
29
|
+
{
|
|
30
|
+
NodeTag type;
|
|
31
|
+
int ival;
|
|
32
|
+
} Integer;
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* Float is internally represented as string. Using T_Float as the node type
|
|
36
|
+
* simply indicates that the contents of the string look like a valid numeric
|
|
37
|
+
* literal. The value might end up being converted to NUMERIC, so we can't
|
|
38
|
+
* store it internally as a C double, since that could lose precision. Since
|
|
39
|
+
* these nodes are generally only used in the parsing process, not for runtime
|
|
40
|
+
* data, it's better to use the more general representation.
|
|
38
41
|
*
|
|
39
|
-
*
|
|
40
|
-
|
|
42
|
+
* Note that an integer-looking string will get lexed as T_Float if the value
|
|
43
|
+
* is too large to fit in an 'int'.
|
|
41
44
|
*/
|
|
42
|
-
typedef struct
|
|
45
|
+
typedef struct Float
|
|
43
46
|
{
|
|
44
|
-
NodeTag type;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
NodeTag type;
|
|
48
|
+
char *fval;
|
|
49
|
+
} Float;
|
|
50
|
+
|
|
51
|
+
typedef struct Boolean
|
|
52
|
+
{
|
|
53
|
+
NodeTag type;
|
|
54
|
+
bool boolval;
|
|
55
|
+
} Boolean;
|
|
56
|
+
|
|
57
|
+
typedef struct String
|
|
58
|
+
{
|
|
59
|
+
NodeTag type;
|
|
60
|
+
char *sval;
|
|
61
|
+
} String;
|
|
62
|
+
|
|
63
|
+
typedef struct BitString
|
|
64
|
+
{
|
|
65
|
+
NodeTag type;
|
|
66
|
+
char *bsval;
|
|
67
|
+
} BitString;
|
|
68
|
+
|
|
69
|
+
#define intVal(v) (castNode(Integer, v)->ival)
|
|
70
|
+
#define floatVal(v) atof(castNode(Float, v)->fval)
|
|
71
|
+
#define boolVal(v) (castNode(Boolean, v)->boolval)
|
|
72
|
+
#define strVal(v) (castNode(String, v)->sval)
|
|
73
|
+
|
|
74
|
+
extern Integer *makeInteger(int i);
|
|
75
|
+
extern Float *makeFloat(char *numericStr);
|
|
76
|
+
extern Boolean *makeBoolean(bool var);
|
|
77
|
+
extern String *makeString(char *str);
|
|
78
|
+
extern BitString *makeBitString(char *str);
|
|
60
79
|
|
|
61
80
|
#endif /* VALUE_H */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* prototypes for costsize.c and clausesel.c.
|
|
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/optimizer/cost.h
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
/* defaults for costsize.c's Cost parameters */
|
|
22
22
|
/* NB: cost-estimation code should use the variables, not these constants! */
|
|
23
|
-
/* If you change these, update backend/utils/misc/postgresql.sample
|
|
23
|
+
/* If you change these, update backend/utils/misc/postgresql.conf.sample */
|
|
24
24
|
#define DEFAULT_SEQ_PAGE_COST 1.0
|
|
25
25
|
#define DEFAULT_RANDOM_PAGE_COST 4.0
|
|
26
26
|
#define DEFAULT_CPU_TUPLE_COST 0.01
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
#define DEFAULT_PARALLEL_TUPLE_COST 0.1
|
|
30
30
|
#define DEFAULT_PARALLEL_SETUP_COST 1000.0
|
|
31
31
|
|
|
32
|
+
/* defaults for non-Cost parameters */
|
|
33
|
+
#define DEFAULT_RECURSIVE_WORKTABLE_FACTOR 10.0
|
|
32
34
|
#define DEFAULT_EFFECTIVE_CACHE_SIZE 524288 /* measured in pages */
|
|
33
35
|
|
|
34
36
|
typedef enum
|
|
@@ -57,6 +59,7 @@ extern PGDLLIMPORT bool enable_incremental_sort;
|
|
|
57
59
|
extern PGDLLIMPORT bool enable_hashagg;
|
|
58
60
|
extern PGDLLIMPORT bool enable_nestloop;
|
|
59
61
|
extern PGDLLIMPORT bool enable_material;
|
|
62
|
+
extern PGDLLIMPORT bool enable_memoize;
|
|
60
63
|
extern PGDLLIMPORT bool enable_mergejoin;
|
|
61
64
|
extern PGDLLIMPORT bool enable_hashjoin;
|
|
62
65
|
extern PGDLLIMPORT bool enable_gathermerge;
|
|
@@ -65,6 +68,7 @@ extern PGDLLIMPORT bool enable_partitionwise_aggregate;
|
|
|
65
68
|
extern PGDLLIMPORT bool enable_parallel_append;
|
|
66
69
|
extern PGDLLIMPORT bool enable_parallel_hash;
|
|
67
70
|
extern PGDLLIMPORT bool enable_partition_pruning;
|
|
71
|
+
extern PGDLLIMPORT bool enable_async_append;
|
|
68
72
|
extern PGDLLIMPORT int constraint_exclusion;
|
|
69
73
|
|
|
70
74
|
extern double index_pages_fetched(double tuples_fetched, BlockNumber pages,
|
|
@@ -83,6 +87,9 @@ extern void cost_bitmap_or_node(BitmapOrPath *path, PlannerInfo *root);
|
|
|
83
87
|
extern void cost_bitmap_tree_node(Path *path, Cost *cost, Selectivity *selec);
|
|
84
88
|
extern void cost_tidscan(Path *path, PlannerInfo *root,
|
|
85
89
|
RelOptInfo *baserel, List *tidquals, ParamPathInfo *param_info);
|
|
90
|
+
extern void cost_tidrangescan(Path *path, PlannerInfo *root,
|
|
91
|
+
RelOptInfo *baserel, List *tidrangequals,
|
|
92
|
+
ParamPathInfo *param_info);
|
|
86
93
|
extern void cost_subqueryscan(SubqueryScanPath *path, PlannerInfo *root,
|
|
87
94
|
RelOptInfo *baserel, ParamPathInfo *param_info);
|
|
88
95
|
extern void cost_functionscan(Path *path, PlannerInfo *root,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* geqo.h
|
|
4
4
|
* prototypes for various files in optimizer/geqo
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/optimizer/geqo.h
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#ifndef GEQO_H
|
|
23
23
|
#define GEQO_H
|
|
24
24
|
|
|
25
|
+
#include "common/pg_prng.h"
|
|
25
26
|
#include "nodes/pathnodes.h"
|
|
26
27
|
#include "optimizer/geqo_gene.h"
|
|
27
28
|
|
|
@@ -48,23 +49,24 @@
|
|
|
48
49
|
*
|
|
49
50
|
* If you change these, update backend/utils/misc/postgresql.conf.sample
|
|
50
51
|
*/
|
|
51
|
-
extern int
|
|
52
|
+
extern PGDLLIMPORT int Geqo_effort; /* 1 .. 10, knob for adjustment of
|
|
53
|
+
* defaults */
|
|
52
54
|
|
|
53
55
|
#define DEFAULT_GEQO_EFFORT 5
|
|
54
56
|
#define MIN_GEQO_EFFORT 1
|
|
55
57
|
#define MAX_GEQO_EFFORT 10
|
|
56
58
|
|
|
57
|
-
extern int
|
|
59
|
+
extern PGDLLIMPORT int Geqo_pool_size; /* 2 .. inf, or 0 to use default */
|
|
58
60
|
|
|
59
|
-
extern int
|
|
61
|
+
extern PGDLLIMPORT int Geqo_generations; /* 1 .. inf, or 0 to use default */
|
|
60
62
|
|
|
61
|
-
extern double Geqo_selection_bias;
|
|
63
|
+
extern PGDLLIMPORT double Geqo_selection_bias;
|
|
62
64
|
|
|
63
65
|
#define DEFAULT_GEQO_SELECTION_BIAS 2.0
|
|
64
66
|
#define MIN_GEQO_SELECTION_BIAS 1.5
|
|
65
67
|
#define MAX_GEQO_SELECTION_BIAS 2.0
|
|
66
68
|
|
|
67
|
-
extern double Geqo_seed;
|
|
69
|
+
extern PGDLLIMPORT double Geqo_seed; /* 0 .. 1 */
|
|
68
70
|
|
|
69
71
|
|
|
70
72
|
/*
|
|
@@ -73,7 +75,7 @@ extern double Geqo_seed; /* 0 .. 1 */
|
|
|
73
75
|
typedef struct
|
|
74
76
|
{
|
|
75
77
|
List *initial_rels; /* the base relations we are joining */
|
|
76
|
-
|
|
78
|
+
pg_prng_state random_state; /* PRNG state */
|
|
77
79
|
} GeqoPrivateData;
|
|
78
80
|
|
|
79
81
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* geqo_gene.h
|
|
4
4
|
* genome representation in optimizer/geqo
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/optimizer/geqo_gene.h
|