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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* snapmgr.h
|
|
4
4
|
* POSTGRES snapshot manager
|
|
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/utils/snapmgr.h
|
|
@@ -37,8 +37,7 @@
|
|
|
37
37
|
*/
|
|
38
38
|
#define RelationAllowsEarlyPruning(rel) \
|
|
39
39
|
( \
|
|
40
|
-
(rel)
|
|
41
|
-
&& !IsCatalogRelation(rel) \
|
|
40
|
+
RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
|
|
42
41
|
&& !RelationIsAccessibleInLogicalDecoding(rel) \
|
|
43
42
|
)
|
|
44
43
|
|
|
@@ -52,13 +51,12 @@ extern Size SnapMgrShmemSize(void);
|
|
|
52
51
|
extern void SnapMgrInit(void);
|
|
53
52
|
extern TimestampTz GetSnapshotCurrentTimestamp(void);
|
|
54
53
|
extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
|
|
54
|
+
extern void SnapshotTooOldMagicForTest(void);
|
|
55
55
|
|
|
56
|
-
extern bool FirstSnapshotSet;
|
|
56
|
+
extern PGDLLIMPORT bool FirstSnapshotSet;
|
|
57
57
|
|
|
58
58
|
extern PGDLLIMPORT TransactionId TransactionXmin;
|
|
59
59
|
extern PGDLLIMPORT TransactionId RecentXmin;
|
|
60
|
-
extern PGDLLIMPORT TransactionId RecentGlobalXmin;
|
|
61
|
-
extern PGDLLIMPORT TransactionId RecentGlobalDataXmin;
|
|
62
60
|
|
|
63
61
|
/* Variables representing various special snapshot semantics */
|
|
64
62
|
extern PGDLLIMPORT SnapshotData SnapshotSelfData;
|
|
@@ -78,11 +76,12 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
|
|
|
78
76
|
|
|
79
77
|
/*
|
|
80
78
|
* Similarly, some initialization is required for a NonVacuumable snapshot.
|
|
81
|
-
* The caller must supply the
|
|
79
|
+
* The caller must supply the visibility cutoff state to use (c.f.
|
|
80
|
+
* GlobalVisTestFor()).
|
|
82
81
|
*/
|
|
83
|
-
#define InitNonVacuumableSnapshot(snapshotdata,
|
|
82
|
+
#define InitNonVacuumableSnapshot(snapshotdata, vistestp) \
|
|
84
83
|
((snapshotdata).snapshot_type = SNAPSHOT_NON_VACUUMABLE, \
|
|
85
|
-
(snapshotdata).
|
|
84
|
+
(snapshotdata).vistest = (vistestp))
|
|
86
85
|
|
|
87
86
|
/*
|
|
88
87
|
* Similarly, some initialization is required for SnapshotToast. We need
|
|
@@ -98,6 +97,11 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
|
|
|
98
97
|
((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
|
|
99
98
|
(snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
|
|
100
99
|
|
|
100
|
+
static inline bool
|
|
101
|
+
OldSnapshotThresholdActive(void)
|
|
102
|
+
{
|
|
103
|
+
return old_snapshot_threshold >= 0;
|
|
104
|
+
}
|
|
101
105
|
|
|
102
106
|
extern Snapshot GetTransactionSnapshot(void);
|
|
103
107
|
extern Snapshot GetLatestSnapshot(void);
|
|
@@ -110,6 +114,7 @@ extern void InvalidateCatalogSnapshot(void);
|
|
|
110
114
|
extern void InvalidateCatalogSnapshotConditionally(void);
|
|
111
115
|
|
|
112
116
|
extern void PushActiveSnapshot(Snapshot snapshot);
|
|
117
|
+
extern void PushActiveSnapshotWithLevel(Snapshot snapshot, int snap_level);
|
|
113
118
|
extern void PushCopiedSnapshot(Snapshot snapshot);
|
|
114
119
|
extern void UpdateActiveSnapshotCommandId(void);
|
|
115
120
|
extern void PopActiveSnapshot(void);
|
|
@@ -121,8 +126,6 @@ extern void UnregisterSnapshot(Snapshot snapshot);
|
|
|
121
126
|
extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
|
|
122
127
|
extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
|
|
123
128
|
|
|
124
|
-
extern FullTransactionId GetFullRecentGlobalXmin(void);
|
|
125
|
-
|
|
126
129
|
extern void AtSubCommit_Snapshot(int level);
|
|
127
130
|
extern void AtSubAbort_Snapshot(int level);
|
|
128
131
|
extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
|
|
@@ -130,14 +133,32 @@ extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
|
|
|
130
133
|
extern void ImportSnapshot(const char *idstr);
|
|
131
134
|
extern bool XactHasExportedSnapshots(void);
|
|
132
135
|
extern void DeleteAllExportedSnapshotFiles(void);
|
|
136
|
+
extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
|
|
133
137
|
extern bool ThereAreNoPriorRegisteredSnapshots(void);
|
|
134
|
-
extern
|
|
135
|
-
|
|
138
|
+
extern bool HaveRegisteredOrActiveSnapshot(void);
|
|
139
|
+
extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
|
|
140
|
+
Relation relation,
|
|
141
|
+
TransactionId *limit_xid,
|
|
142
|
+
TimestampTz *limit_ts);
|
|
143
|
+
extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
|
|
136
144
|
extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
|
|
137
145
|
TransactionId xmin);
|
|
138
146
|
|
|
139
147
|
extern char *ExportSnapshot(Snapshot snapshot);
|
|
140
148
|
|
|
149
|
+
/*
|
|
150
|
+
* These live in procarray.c because they're intimately linked to the
|
|
151
|
+
* procarray contents, but thematically they better fit into snapmgr.h.
|
|
152
|
+
*/
|
|
153
|
+
typedef struct GlobalVisState GlobalVisState;
|
|
154
|
+
extern GlobalVisState *GlobalVisTestFor(Relation rel);
|
|
155
|
+
extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
|
|
156
|
+
extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
|
|
157
|
+
extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
|
|
158
|
+
extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
|
|
159
|
+
extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
|
|
160
|
+
extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
|
|
161
|
+
|
|
141
162
|
/*
|
|
142
163
|
* Utility functions for implementing visibility routines in table AMs.
|
|
143
164
|
*/
|
|
@@ -153,6 +174,6 @@ extern bool HistoricSnapshotActive(void);
|
|
|
153
174
|
extern Size EstimateSnapshotSpace(Snapshot snapshot);
|
|
154
175
|
extern void SerializeSnapshot(Snapshot snapshot, char *start_address);
|
|
155
176
|
extern Snapshot RestoreSnapshot(char *start_address);
|
|
156
|
-
extern void RestoreTransactionSnapshot(Snapshot snapshot, void *
|
|
177
|
+
extern void RestoreTransactionSnapshot(Snapshot snapshot, void *source_pgproc);
|
|
157
178
|
|
|
158
179
|
#endif /* SNAPMGR_H */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* snapshot.h
|
|
4
4
|
* POSTGRES snapshot definition
|
|
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/utils/snapshot.h
|
|
@@ -192,6 +192,12 @@ typedef struct SnapshotData
|
|
|
192
192
|
*/
|
|
193
193
|
uint32 speculativeToken;
|
|
194
194
|
|
|
195
|
+
/*
|
|
196
|
+
* For SNAPSHOT_NON_VACUUMABLE (and hopefully more in the future) this is
|
|
197
|
+
* used to determine whether row could be vacuumed.
|
|
198
|
+
*/
|
|
199
|
+
struct GlobalVisState *vistest;
|
|
200
|
+
|
|
195
201
|
/*
|
|
196
202
|
* Book-keeping information, used by the snapshot manager
|
|
197
203
|
*/
|
|
@@ -201,6 +207,13 @@ typedef struct SnapshotData
|
|
|
201
207
|
|
|
202
208
|
TimestampTz whenTaken; /* timestamp when snapshot was taken */
|
|
203
209
|
XLogRecPtr lsn; /* position in the WAL stream when taken */
|
|
210
|
+
|
|
211
|
+
/*
|
|
212
|
+
* The transaction completion count at the time GetSnapshotData() built
|
|
213
|
+
* this snapshot. Allows to avoid re-computing static snapshots when no
|
|
214
|
+
* transactions completed since the last GetSnapshotData().
|
|
215
|
+
*/
|
|
216
|
+
uint64 snapXactCompletionCount;
|
|
204
217
|
} SnapshotData;
|
|
205
218
|
|
|
206
219
|
#endif /* SNAPSHOT_H */
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* function will have a shim set up by sort support automatically. However,
|
|
25
25
|
* opclasses that support the optional additional abbreviated key capability
|
|
26
26
|
* must always provide an authoritative comparator used to tie-break
|
|
27
|
-
* inconclusive abbreviated comparisons and also used
|
|
27
|
+
* inconclusive abbreviated comparisons and also used when aborting
|
|
28
28
|
* abbreviation. Furthermore, a converter and abort/costing function must be
|
|
29
29
|
* provided.
|
|
30
30
|
*
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* function for such cases, but probably not any other acceleration method.
|
|
43
43
|
*
|
|
44
44
|
*
|
|
45
|
-
* Portions Copyright (c) 1996-
|
|
45
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
46
46
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
47
47
|
*
|
|
48
48
|
* src/include/utils/sortsupport.h
|
|
@@ -229,6 +229,109 @@ ApplySortComparator(Datum datum1, bool isNull1,
|
|
|
229
229
|
return compare;
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
+
static inline int
|
|
233
|
+
ApplyUnsignedSortComparator(Datum datum1, bool isNull1,
|
|
234
|
+
Datum datum2, bool isNull2,
|
|
235
|
+
SortSupport ssup)
|
|
236
|
+
{
|
|
237
|
+
int compare;
|
|
238
|
+
|
|
239
|
+
if (isNull1)
|
|
240
|
+
{
|
|
241
|
+
if (isNull2)
|
|
242
|
+
compare = 0; /* NULL "=" NULL */
|
|
243
|
+
else if (ssup->ssup_nulls_first)
|
|
244
|
+
compare = -1; /* NULL "<" NOT_NULL */
|
|
245
|
+
else
|
|
246
|
+
compare = 1; /* NULL ">" NOT_NULL */
|
|
247
|
+
}
|
|
248
|
+
else if (isNull2)
|
|
249
|
+
{
|
|
250
|
+
if (ssup->ssup_nulls_first)
|
|
251
|
+
compare = 1; /* NOT_NULL ">" NULL */
|
|
252
|
+
else
|
|
253
|
+
compare = -1; /* NOT_NULL "<" NULL */
|
|
254
|
+
}
|
|
255
|
+
else
|
|
256
|
+
{
|
|
257
|
+
compare = datum1 < datum2 ? -1 : datum1 > datum2 ? 1 : 0;
|
|
258
|
+
if (ssup->ssup_reverse)
|
|
259
|
+
INVERT_COMPARE_RESULT(compare);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return compare;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#if SIZEOF_DATUM >= 8
|
|
266
|
+
static inline int
|
|
267
|
+
ApplySignedSortComparator(Datum datum1, bool isNull1,
|
|
268
|
+
Datum datum2, bool isNull2,
|
|
269
|
+
SortSupport ssup)
|
|
270
|
+
{
|
|
271
|
+
int compare;
|
|
272
|
+
|
|
273
|
+
if (isNull1)
|
|
274
|
+
{
|
|
275
|
+
if (isNull2)
|
|
276
|
+
compare = 0; /* NULL "=" NULL */
|
|
277
|
+
else if (ssup->ssup_nulls_first)
|
|
278
|
+
compare = -1; /* NULL "<" NOT_NULL */
|
|
279
|
+
else
|
|
280
|
+
compare = 1; /* NULL ">" NOT_NULL */
|
|
281
|
+
}
|
|
282
|
+
else if (isNull2)
|
|
283
|
+
{
|
|
284
|
+
if (ssup->ssup_nulls_first)
|
|
285
|
+
compare = 1; /* NOT_NULL ">" NULL */
|
|
286
|
+
else
|
|
287
|
+
compare = -1; /* NOT_NULL "<" NULL */
|
|
288
|
+
}
|
|
289
|
+
else
|
|
290
|
+
{
|
|
291
|
+
compare = DatumGetInt64(datum1) < DatumGetInt64(datum2) ? -1 :
|
|
292
|
+
DatumGetInt64(datum1) > DatumGetInt64(datum2) ? 1 : 0;
|
|
293
|
+
if (ssup->ssup_reverse)
|
|
294
|
+
INVERT_COMPARE_RESULT(compare);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return compare;
|
|
298
|
+
}
|
|
299
|
+
#endif
|
|
300
|
+
|
|
301
|
+
static inline int
|
|
302
|
+
ApplyInt32SortComparator(Datum datum1, bool isNull1,
|
|
303
|
+
Datum datum2, bool isNull2,
|
|
304
|
+
SortSupport ssup)
|
|
305
|
+
{
|
|
306
|
+
int compare;
|
|
307
|
+
|
|
308
|
+
if (isNull1)
|
|
309
|
+
{
|
|
310
|
+
if (isNull2)
|
|
311
|
+
compare = 0; /* NULL "=" NULL */
|
|
312
|
+
else if (ssup->ssup_nulls_first)
|
|
313
|
+
compare = -1; /* NULL "<" NOT_NULL */
|
|
314
|
+
else
|
|
315
|
+
compare = 1; /* NULL ">" NOT_NULL */
|
|
316
|
+
}
|
|
317
|
+
else if (isNull2)
|
|
318
|
+
{
|
|
319
|
+
if (ssup->ssup_nulls_first)
|
|
320
|
+
compare = 1; /* NOT_NULL ">" NULL */
|
|
321
|
+
else
|
|
322
|
+
compare = -1; /* NOT_NULL "<" NULL */
|
|
323
|
+
}
|
|
324
|
+
else
|
|
325
|
+
{
|
|
326
|
+
compare = DatumGetInt32(datum1) < DatumGetInt32(datum2) ? -1 :
|
|
327
|
+
DatumGetInt32(datum1) > DatumGetInt32(datum2) ? 1 : 0;
|
|
328
|
+
if (ssup->ssup_reverse)
|
|
329
|
+
INVERT_COMPARE_RESULT(compare);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return compare;
|
|
333
|
+
}
|
|
334
|
+
|
|
232
335
|
/*
|
|
233
336
|
* Apply a sort comparator function and return a 3-way comparison using full,
|
|
234
337
|
* authoritative comparator. This takes care of handling reverse-sort and
|
|
@@ -267,10 +370,22 @@ ApplySortAbbrevFullComparator(Datum datum1, bool isNull1,
|
|
|
267
370
|
return compare;
|
|
268
371
|
}
|
|
269
372
|
|
|
373
|
+
/*
|
|
374
|
+
* Datum comparison functions that we have specialized sort routines for.
|
|
375
|
+
* Datatypes that install these as their comparator or abbrevated comparator
|
|
376
|
+
* are eligible for faster sorting.
|
|
377
|
+
*/
|
|
378
|
+
extern int ssup_datum_unsigned_cmp(Datum x, Datum y, SortSupport ssup);
|
|
379
|
+
#if SIZEOF_DATUM >= 8
|
|
380
|
+
extern int ssup_datum_signed_cmp(Datum x, Datum y, SortSupport ssup);
|
|
381
|
+
#endif
|
|
382
|
+
extern int ssup_datum_int32_cmp(Datum x, Datum y, SortSupport ssup);
|
|
383
|
+
|
|
270
384
|
/* Other functions in utils/sort/sortsupport.c */
|
|
271
385
|
extern void PrepareSortSupportComparisonShim(Oid cmpFunc, SortSupport ssup);
|
|
272
386
|
extern void PrepareSortSupportFromOrderingOp(Oid orderingOp, SortSupport ssup);
|
|
273
387
|
extern void PrepareSortSupportFromIndexRel(Relation indexRel, int16 strategy,
|
|
274
388
|
SortSupport ssup);
|
|
389
|
+
extern void PrepareSortSupportFromGistIndexRel(Relation indexRel, SortSupport ssup);
|
|
275
390
|
|
|
276
391
|
#endif /* SORTSUPPORT_H */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* See also lsyscache.h, which provides convenience routines for
|
|
7
7
|
* common cache-lookup operations.
|
|
8
8
|
*
|
|
9
|
-
* Portions Copyright (c) 1996-
|
|
9
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
10
10
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
11
11
|
*
|
|
12
12
|
* src/include/utils/syscache.h
|
|
@@ -72,13 +72,18 @@ enum SysCacheIdentifier
|
|
|
72
72
|
OPEROID,
|
|
73
73
|
OPFAMILYAMNAMENSP,
|
|
74
74
|
OPFAMILYOID,
|
|
75
|
+
PARAMETERACLNAME,
|
|
76
|
+
PARAMETERACLOID,
|
|
75
77
|
PARTRELID,
|
|
76
78
|
PROCNAMEARGSNSP,
|
|
77
79
|
PROCOID,
|
|
78
80
|
PUBLICATIONNAME,
|
|
81
|
+
PUBLICATIONNAMESPACE,
|
|
82
|
+
PUBLICATIONNAMESPACEMAP,
|
|
79
83
|
PUBLICATIONOID,
|
|
80
84
|
PUBLICATIONREL,
|
|
81
85
|
PUBLICATIONRELMAP,
|
|
86
|
+
RANGEMULTIRANGE,
|
|
82
87
|
RANGETYPE,
|
|
83
88
|
RELNAMENSP,
|
|
84
89
|
RELOID,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Routines to multiplex SIGALRM interrupts for multiple timeout reasons.
|
|
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/utils/timeout.h
|
|
@@ -31,10 +31,14 @@ typedef enum TimeoutId
|
|
|
31
31
|
STANDBY_TIMEOUT,
|
|
32
32
|
STANDBY_LOCK_TIMEOUT,
|
|
33
33
|
IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
|
|
34
|
+
IDLE_SESSION_TIMEOUT,
|
|
35
|
+
IDLE_STATS_UPDATE_TIMEOUT,
|
|
36
|
+
CLIENT_CONNECTION_CHECK_TIMEOUT,
|
|
37
|
+
STARTUP_PROGRESS_TIMEOUT,
|
|
34
38
|
/* First user-definable timeout reason */
|
|
35
39
|
USER_TIMEOUT,
|
|
36
40
|
/* Maximum number of timeout reasons */
|
|
37
|
-
MAX_TIMEOUTS =
|
|
41
|
+
MAX_TIMEOUTS = USER_TIMEOUT + 10
|
|
38
42
|
} TimeoutId;
|
|
39
43
|
|
|
40
44
|
/* callback function signature */
|
|
@@ -46,14 +50,15 @@ typedef void (*timeout_handler_proc) (void);
|
|
|
46
50
|
typedef enum TimeoutType
|
|
47
51
|
{
|
|
48
52
|
TMPARAM_AFTER,
|
|
49
|
-
TMPARAM_AT
|
|
53
|
+
TMPARAM_AT,
|
|
54
|
+
TMPARAM_EVERY
|
|
50
55
|
} TimeoutType;
|
|
51
56
|
|
|
52
57
|
typedef struct
|
|
53
58
|
{
|
|
54
59
|
TimeoutId id; /* timeout to set */
|
|
55
60
|
TimeoutType type; /* TMPARAM_AFTER or TMPARAM_AT */
|
|
56
|
-
int delay_ms; /* only used for TMPARAM_AFTER */
|
|
61
|
+
int delay_ms; /* only used for TMPARAM_AFTER/EVERY */
|
|
57
62
|
TimestampTz fin_time; /* only used for TMPARAM_AT */
|
|
58
63
|
} EnableTimeoutParams;
|
|
59
64
|
|
|
@@ -73,6 +78,8 @@ extern void reschedule_timeouts(void);
|
|
|
73
78
|
|
|
74
79
|
/* timeout operation */
|
|
75
80
|
extern void enable_timeout_after(TimeoutId id, int delay_ms);
|
|
81
|
+
extern void enable_timeout_every(TimeoutId id, TimestampTz fin_time,
|
|
82
|
+
int delay_ms);
|
|
76
83
|
extern void enable_timeout_at(TimeoutId id, TimestampTz fin_time);
|
|
77
84
|
extern void enable_timeouts(const EnableTimeoutParams *timeouts, int count);
|
|
78
85
|
extern void disable_timeout(TimeoutId id, bool keep_indicator);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* timestamp.h
|
|
4
4
|
* Definitions for the SQL "timestamp" and "interval" types.
|
|
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/utils/timestamp.h
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
/* Set at postmaster start */
|
|
60
|
-
extern TimestampTz PgStartTime;
|
|
60
|
+
extern PGDLLIMPORT TimestampTz PgStartTime;
|
|
61
61
|
|
|
62
62
|
/* Set at configuration reload */
|
|
63
|
-
extern TimestampTz PgReloadTime;
|
|
63
|
+
extern PGDLLIMPORT TimestampTz PgReloadTime;
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
/* Internal routines (not fmgr-callable) */
|
|
@@ -88,8 +88,9 @@ extern int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm *tm,
|
|
|
88
88
|
fsec_t *fsec, const char **tzn, pg_tz *attimezone);
|
|
89
89
|
extern void dt2time(Timestamp dt, int *hour, int *min, int *sec, fsec_t *fsec);
|
|
90
90
|
|
|
91
|
-
extern
|
|
92
|
-
extern int
|
|
91
|
+
extern void interval2itm(Interval span, struct pg_itm *itm);
|
|
92
|
+
extern int itm2interval(struct pg_itm *itm, Interval *span);
|
|
93
|
+
extern int itmin2interval(struct pg_itm_in *itm_in, Interval *span);
|
|
93
94
|
|
|
94
95
|
extern Timestamp SetEpochTimestamp(void);
|
|
95
96
|
extern void GetEpochTime(struct pg_tm *tm);
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* algorithm. Parallel sorts use a variant of this external sort
|
|
12
12
|
* algorithm, and are typically only used for large amounts of data.
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
* src/include/utils/tuplesort.h
|
|
@@ -86,6 +86,15 @@ typedef enum
|
|
|
86
86
|
SORT_SPACE_TYPE_MEMORY
|
|
87
87
|
} TuplesortSpaceType;
|
|
88
88
|
|
|
89
|
+
/* Bitwise option flags for tuple sorts */
|
|
90
|
+
#define TUPLESORT_NONE 0
|
|
91
|
+
|
|
92
|
+
/* specifies whether non-sequential access to the sort result is required */
|
|
93
|
+
#define TUPLESORT_RANDOMACCESS (1 << 0)
|
|
94
|
+
|
|
95
|
+
/* specifies if the tuplesort is able to support bounded sorts */
|
|
96
|
+
#define TUPLESORT_ALLOWBOUNDED (1 << 1)
|
|
97
|
+
|
|
89
98
|
typedef struct TuplesortInstrumentation
|
|
90
99
|
{
|
|
91
100
|
TuplesortMethod sortMethod; /* sort algorithm used */
|
|
@@ -201,27 +210,33 @@ extern Tuplesortstate *tuplesort_begin_heap(TupleDesc tupDesc,
|
|
|
201
210
|
Oid *sortOperators, Oid *sortCollations,
|
|
202
211
|
bool *nullsFirstFlags,
|
|
203
212
|
int workMem, SortCoordinate coordinate,
|
|
204
|
-
|
|
213
|
+
int sortopt);
|
|
205
214
|
extern Tuplesortstate *tuplesort_begin_cluster(TupleDesc tupDesc,
|
|
206
215
|
Relation indexRel, int workMem,
|
|
207
|
-
SortCoordinate coordinate,
|
|
216
|
+
SortCoordinate coordinate,
|
|
217
|
+
int sortopt);
|
|
208
218
|
extern Tuplesortstate *tuplesort_begin_index_btree(Relation heapRel,
|
|
209
219
|
Relation indexRel,
|
|
210
220
|
bool enforceUnique,
|
|
221
|
+
bool uniqueNullsNotDistinct,
|
|
211
222
|
int workMem, SortCoordinate coordinate,
|
|
212
|
-
|
|
223
|
+
int sortopt);
|
|
213
224
|
extern Tuplesortstate *tuplesort_begin_index_hash(Relation heapRel,
|
|
214
225
|
Relation indexRel,
|
|
215
226
|
uint32 high_mask,
|
|
216
227
|
uint32 low_mask,
|
|
217
228
|
uint32 max_buckets,
|
|
218
229
|
int workMem, SortCoordinate coordinate,
|
|
219
|
-
|
|
230
|
+
int sortopt);
|
|
231
|
+
extern Tuplesortstate *tuplesort_begin_index_gist(Relation heapRel,
|
|
232
|
+
Relation indexRel,
|
|
233
|
+
int workMem, SortCoordinate coordinate,
|
|
234
|
+
int sortopt);
|
|
220
235
|
extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
|
|
221
236
|
Oid sortOperator, Oid sortCollation,
|
|
222
237
|
bool nullsFirstFlag,
|
|
223
238
|
int workMem, SortCoordinate coordinate,
|
|
224
|
-
|
|
239
|
+
int sortopt);
|
|
225
240
|
|
|
226
241
|
extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound);
|
|
227
242
|
extern bool tuplesort_used_bound(Tuplesortstate *state);
|
|
@@ -264,12 +279,11 @@ extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers,
|
|
|
264
279
|
extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg);
|
|
265
280
|
|
|
266
281
|
/*
|
|
267
|
-
* These routines may only be called if
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
282
|
+
* These routines may only be called if TUPLESORT_RANDOMACCESS was specified
|
|
283
|
+
* during tuplesort_begin_*. Additionally backwards scan in gettuple/getdatum
|
|
284
|
+
* also require TUPLESORT_RANDOMACCESS. Note that parallel sorts do not
|
|
285
|
+
* support random access.
|
|
271
286
|
*/
|
|
272
|
-
|
|
273
287
|
extern void tuplesort_rescan(Tuplesortstate *state);
|
|
274
288
|
extern void tuplesort_markpos(Tuplesortstate *state);
|
|
275
289
|
extern void tuplesort_restorepos(Tuplesortstate *state);
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Also, we have changed the API to return tuples in TupleTableSlots,
|
|
22
22
|
* so that there is a check to prevent attempted access to system columns.
|
|
23
23
|
*
|
|
24
|
-
* Portions Copyright (c) 1996-
|
|
24
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
25
25
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
26
26
|
*
|
|
27
27
|
* src/include/utils/tuplestore.h
|
|
@@ -56,7 +56,7 @@ extern void tuplestore_puttuple(Tuplestorestate *state, HeapTuple tuple);
|
|
|
56
56
|
extern void tuplestore_putvalues(Tuplestorestate *state, TupleDesc tdesc,
|
|
57
57
|
Datum *values, bool *isnull);
|
|
58
58
|
|
|
59
|
-
/*
|
|
59
|
+
/* Backwards compatibility macro */
|
|
60
60
|
#define tuplestore_donestoring(state) ((void) 0)
|
|
61
61
|
|
|
62
62
|
extern int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags);
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* The type cache exists to speed lookup of certain information about data
|
|
7
7
|
* types that is not directly available from a type's pg_type row.
|
|
8
8
|
*
|
|
9
|
-
* Portions Copyright (c) 1996-
|
|
9
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
10
10
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
11
11
|
*
|
|
12
12
|
* src/include/utils/typcache.h
|
|
@@ -42,6 +42,7 @@ typedef struct TypeCacheEntry
|
|
|
42
42
|
char typstorage;
|
|
43
43
|
char typtype;
|
|
44
44
|
Oid typrelid;
|
|
45
|
+
Oid typsubscript;
|
|
45
46
|
Oid typelem;
|
|
46
47
|
Oid typcollation;
|
|
47
48
|
|
|
@@ -100,6 +101,11 @@ typedef struct TypeCacheEntry
|
|
|
100
101
|
FmgrInfo rng_canonical_finfo; /* canonicalization function, if any */
|
|
101
102
|
FmgrInfo rng_subdiff_finfo; /* difference function, if any */
|
|
102
103
|
|
|
104
|
+
/*
|
|
105
|
+
* Fields computed when TYPECACHE_MULTIRANGE_INFO is required.
|
|
106
|
+
*/
|
|
107
|
+
struct TypeCacheEntry *rngtype; /* multirange's range underlying type */
|
|
108
|
+
|
|
103
109
|
/*
|
|
104
110
|
* Domain's base type and typmod if it's a domain type. Zeroes if not
|
|
105
111
|
* domain, or if information hasn't been requested.
|
|
@@ -127,22 +133,23 @@ typedef struct TypeCacheEntry
|
|
|
127
133
|
} TypeCacheEntry;
|
|
128
134
|
|
|
129
135
|
/* Bit flags to indicate which fields a given caller needs to have set */
|
|
130
|
-
#define TYPECACHE_EQ_OPR
|
|
131
|
-
#define TYPECACHE_LT_OPR
|
|
132
|
-
#define TYPECACHE_GT_OPR
|
|
133
|
-
#define TYPECACHE_CMP_PROC
|
|
134
|
-
#define TYPECACHE_HASH_PROC
|
|
135
|
-
#define TYPECACHE_EQ_OPR_FINFO
|
|
136
|
-
#define TYPECACHE_CMP_PROC_FINFO
|
|
137
|
-
#define TYPECACHE_HASH_PROC_FINFO
|
|
138
|
-
#define TYPECACHE_TUPDESC
|
|
139
|
-
#define TYPECACHE_BTREE_OPFAMILY
|
|
140
|
-
#define TYPECACHE_HASH_OPFAMILY
|
|
141
|
-
#define TYPECACHE_RANGE_INFO
|
|
142
|
-
#define TYPECACHE_DOMAIN_BASE_INFO
|
|
143
|
-
#define TYPECACHE_DOMAIN_CONSTR_INFO
|
|
144
|
-
#define TYPECACHE_HASH_EXTENDED_PROC
|
|
145
|
-
#define TYPECACHE_HASH_EXTENDED_PROC_FINFO
|
|
136
|
+
#define TYPECACHE_EQ_OPR 0x00001
|
|
137
|
+
#define TYPECACHE_LT_OPR 0x00002
|
|
138
|
+
#define TYPECACHE_GT_OPR 0x00004
|
|
139
|
+
#define TYPECACHE_CMP_PROC 0x00008
|
|
140
|
+
#define TYPECACHE_HASH_PROC 0x00010
|
|
141
|
+
#define TYPECACHE_EQ_OPR_FINFO 0x00020
|
|
142
|
+
#define TYPECACHE_CMP_PROC_FINFO 0x00040
|
|
143
|
+
#define TYPECACHE_HASH_PROC_FINFO 0x00080
|
|
144
|
+
#define TYPECACHE_TUPDESC 0x00100
|
|
145
|
+
#define TYPECACHE_BTREE_OPFAMILY 0x00200
|
|
146
|
+
#define TYPECACHE_HASH_OPFAMILY 0x00400
|
|
147
|
+
#define TYPECACHE_RANGE_INFO 0x00800
|
|
148
|
+
#define TYPECACHE_DOMAIN_BASE_INFO 0x01000
|
|
149
|
+
#define TYPECACHE_DOMAIN_CONSTR_INFO 0x02000
|
|
150
|
+
#define TYPECACHE_HASH_EXTENDED_PROC 0x04000
|
|
151
|
+
#define TYPECACHE_HASH_EXTENDED_PROC_FINFO 0x08000
|
|
152
|
+
#define TYPECACHE_MULTIRANGE_INFO 0x10000
|
|
146
153
|
|
|
147
154
|
/* This value will not equal any valid tupledesc identifier, nor 0 */
|
|
148
155
|
#define INVALID_TUPLEDESC_IDENTIFIER ((uint64) 1)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* tzparser.h
|
|
4
4
|
* Timezone offset file parsing definitions.
|
|
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/utils/tzparser.h
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* varlena.h
|
|
4
4
|
* Functions for the variable-length built-in types.
|
|
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/utils/varlena.h
|
|
@@ -33,7 +33,9 @@ extern bool SplitDirectoriesString(char *rawstring, char separator,
|
|
|
33
33
|
List **namelist);
|
|
34
34
|
extern bool SplitGUCList(char *rawstring, char separator,
|
|
35
35
|
List **namelist);
|
|
36
|
-
extern text *replace_text_regexp(text *src_text,
|
|
37
|
-
text *replace_text,
|
|
36
|
+
extern text *replace_text_regexp(text *src_text, text *pattern_text,
|
|
37
|
+
text *replace_text,
|
|
38
|
+
int cflags, Oid collation,
|
|
39
|
+
int search_start, int n);
|
|
38
40
|
|
|
39
41
|
#endif
|