pg_query 2.2.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/README.md +59 -31
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +20 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/treewalker.rb +6 -0
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +27 -17
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 32a51d0f608ebfe0e27991db81924289d86c7f0b9a90ab56a321b9ef5c21794e
|
|
4
|
+
data.tar.gz: 0d56fc7fd092c3406a40d102f420d637347d45f77203cc4de2f4613a111438dc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f1adefd8ebb6ab5595bf97f79ca027fb5e3c6cc351fbac310252a1a0f6d13c566c2a09b268ff5c173d0ab968ce7171f6b29dc2c071814b407883d77c315d50ae
|
|
7
|
+
data.tar.gz: 824faa4086e30b42199491049a16c4e7287a9c5b6146aba89ef353b77cfe6a3452ae4f2f09169b5851ff3b266df71bd02a948141f2e4bd05e02425e09db5b6f1
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@
|
|
|
5
5
|
* ...
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
## 4.2.1 2023-05-19
|
|
9
|
+
|
|
10
|
+
* Parse: Fix `ALTER INDEX my_index_name` to return `tables=[]` ([#285](https://github.com/pganalyze/pg_query/pull/285))
|
|
11
|
+
* Parse: Detect tables in a SELECT INTO clause as DDL tables ([#281](https://github.com/pganalyze/pg_query/pull/281))
|
|
12
|
+
* Add support for Ruby 3.2 ([#283](https://github.com/pganalyze/pg_query/pull/283))
|
|
13
|
+
* Bump up `google-protobuf` dependency to `>= 3.22.3`
|
|
14
|
+
- 3.22.0 or newer is required for Ruby 3.2 support
|
|
15
|
+
* Update to libpg_query 15-4.2.1
|
|
16
|
+
- Deparser: Handle INTERVAL correctly when used in SET statements
|
|
17
|
+
- Deparser: Ensure index names are quoted as identifiers
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## 4.2.0 2023-02-08
|
|
21
|
+
|
|
22
|
+
* Update to libpg_query 15-4.2.0
|
|
23
|
+
- Update to PostgreSQL 15.1
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 2.2.1 2023-01-20
|
|
27
|
+
|
|
28
|
+
* Detect tables used in the query of a PREPARE statement ([#273](https://github.com/pganalyze/pg_query/pull/273))
|
|
29
|
+
* Expose recursive walk functionality via walk! ([#268](https://github.com/pganalyze/pg_query/pull/268))
|
|
30
|
+
* Retain schema in name when parsing out functions ([#272](https://github.com/pganalyze/pg_query/pull/272))
|
|
31
|
+
|
|
32
|
+
|
|
8
33
|
## 2.2.0 2022-11-02
|
|
9
34
|
|
|
10
35
|
* Update to libpg_query 13-2.2.0 ([#264](https://github.com/pganalyze/pg_query/pull/264))
|
data/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
This Ruby extension uses the actual PostgreSQL server source to parse SQL queries and return the internal PostgreSQL parsetree.
|
|
4
4
|
|
|
5
|
-
In addition the extension allows you to normalize queries (replacing constant values with
|
|
5
|
+
In addition the extension allows you to normalize queries (replacing constant values with $n) and parse these normalized queries into a parsetree again.
|
|
6
6
|
|
|
7
7
|
When you build this extension, it builds parts of the PostgreSQL server source (see [libpg_query](https://github.com/pganalyze/libpg_query)), and then statically links it into this extension.
|
|
8
8
|
|
|
9
|
-
This
|
|
9
|
+
This may seem like a lot of complexity, but is the only reliable way of parsing all valid PostgreSQL queries.
|
|
10
10
|
|
|
11
11
|
You can find further examples and a longer rationale here: https://pganalyze.com/blog/parse-postgresql-queries-in-ruby.html
|
|
12
12
|
|
|
@@ -25,10 +25,10 @@ Due to compiling parts of PostgreSQL, installation might take a while on slower
|
|
|
25
25
|
```ruby
|
|
26
26
|
PgQuery.parse("SELECT 1")
|
|
27
27
|
|
|
28
|
-
=> #<PgQuery::ParserResult:
|
|
28
|
+
=> #<PgQuery::ParserResult:0x000000012000c438
|
|
29
29
|
@query="SELECT 1",
|
|
30
30
|
@tree=<PgQuery::ParseResult:
|
|
31
|
-
version:
|
|
31
|
+
version: 150001,
|
|
32
32
|
stmts: [
|
|
33
33
|
<PgQuery::RawStmt:
|
|
34
34
|
stmt: <PgQuery::Node:
|
|
@@ -41,10 +41,11 @@ PgQuery.parse("SELECT 1")
|
|
|
41
41
|
indirection: [],
|
|
42
42
|
val: <PgQuery::Node:
|
|
43
43
|
a_const: <PgQuery::A_Const:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
isnull: false,
|
|
45
|
+
location: 7,
|
|
46
|
+
ival: <PgQuery::Integer:
|
|
47
|
+
ival: 1
|
|
48
|
+
>
|
|
48
49
|
>
|
|
49
50
|
>,
|
|
50
51
|
location: 7
|
|
@@ -53,6 +54,7 @@ PgQuery.parse("SELECT 1")
|
|
|
53
54
|
],
|
|
54
55
|
from_clause: [],
|
|
55
56
|
group_clause: [],
|
|
57
|
+
group_distinct: false,
|
|
56
58
|
window_clause: [],
|
|
57
59
|
values_lists: [],
|
|
58
60
|
sort_clause: [],
|
|
@@ -67,11 +69,18 @@ PgQuery.parse("SELECT 1")
|
|
|
67
69
|
>
|
|
68
70
|
]
|
|
69
71
|
>,
|
|
70
|
-
@warnings=[]
|
|
72
|
+
@warnings=[],
|
|
73
|
+
@tables=nil,
|
|
74
|
+
@aliases=nil,
|
|
75
|
+
@cte_names=nil,
|
|
76
|
+
@functions=nil
|
|
77
|
+
>
|
|
71
78
|
```
|
|
72
79
|
|
|
73
80
|
### Modifying a parsed query and turning it into SQL again
|
|
74
81
|
|
|
82
|
+
This is a simple example for `deparse`, for more complex modification, use `walk!`.
|
|
83
|
+
|
|
75
84
|
```ruby
|
|
76
85
|
parsed_query = PgQuery.parse("SELECT * FROM users")
|
|
77
86
|
|
|
@@ -90,20 +99,12 @@ parsed_query.deparse
|
|
|
90
99
|
PgQuery.normalize("SELECT 1 FROM x WHERE y = 'foo'")
|
|
91
100
|
|
|
92
101
|
=> "SELECT $1 FROM x WHERE y = $2"
|
|
93
|
-
|
|
94
|
-
# Parsing a normalized query (pre-Postgres 10 style)
|
|
95
|
-
PgQuery.parse("SELECT ? FROM x WHERE y = ?")
|
|
96
|
-
|
|
97
|
-
=> #<PgQuery::ParserResult:0x00007fb69a97a5d8
|
|
98
|
-
@query="SELECT ? FROM x WHERE y = ?",
|
|
99
|
-
@tree=<PgQuery::ParseResult: ...>,
|
|
100
|
-
@warnings=[]>
|
|
101
102
|
```
|
|
102
103
|
|
|
103
104
|
### Extracting tables from a query
|
|
104
105
|
|
|
105
106
|
```ruby
|
|
106
|
-
PgQuery.parse("SELECT
|
|
107
|
+
PgQuery.parse("SELECT $1 FROM x JOIN y USING (id) WHERE z = $2").tables
|
|
107
108
|
|
|
108
109
|
=> ["x", "y"]
|
|
109
110
|
```
|
|
@@ -111,7 +112,7 @@ PgQuery.parse("SELECT ? FROM x JOIN y USING (id) WHERE z = ?").tables
|
|
|
111
112
|
### Extracting columns from a query
|
|
112
113
|
|
|
113
114
|
```ruby
|
|
114
|
-
PgQuery.parse("SELECT
|
|
115
|
+
PgQuery.parse("SELECT $1 FROM x WHERE x.y = $2 AND z = $3").filter_columns
|
|
115
116
|
|
|
116
117
|
=> [["x", "y"], [nil, "z"]]
|
|
117
118
|
```
|
|
@@ -128,7 +129,7 @@ PgQuery.parse("SELECT 2; --- comment").fingerprint
|
|
|
128
129
|
=> "50fde20626009aba"
|
|
129
130
|
|
|
130
131
|
# Faster fingerprint method that is implemented inside the native C library
|
|
131
|
-
PgQuery.fingerprint("SELECT
|
|
132
|
+
PgQuery.fingerprint("SELECT $1")
|
|
132
133
|
|
|
133
134
|
=> "50fde20626009aba"
|
|
134
135
|
```
|
|
@@ -138,27 +139,52 @@ PgQuery.fingerprint("SELECT ?")
|
|
|
138
139
|
```ruby
|
|
139
140
|
PgQuery.scan('SELECT 1 --comment')
|
|
140
141
|
|
|
141
|
-
=> [<PgQuery::ScanResult: version:
|
|
142
|
+
=> [<PgQuery::ScanResult: version: 150001, tokens: [
|
|
142
143
|
<PgQuery::ScanToken: start: 0, end: 6, token: :SELECT, keyword_kind: :RESERVED_KEYWORD>,
|
|
143
144
|
<PgQuery::ScanToken: start: 7, end: 8, token: :ICONST, keyword_kind: :NO_KEYWORD>,
|
|
144
145
|
<PgQuery::ScanToken: start: 9, end: 18, token: :SQL_COMMENT, keyword_kind: :NO_KEYWORD>]>,
|
|
145
146
|
[]]
|
|
146
147
|
```
|
|
147
148
|
|
|
148
|
-
|
|
149
|
+
### Walking the parse tree
|
|
150
|
+
|
|
151
|
+
For generalized use, PgQuery provides `walk!` as a means to recursively work with the parsed query.
|
|
152
|
+
|
|
153
|
+
This can be used to create a bespoke pretty printer:
|
|
154
|
+
|
|
155
|
+
```ruby
|
|
156
|
+
parsed_query = PgQuery.parse "SELECT * FROM tbl"
|
|
157
|
+
parsed_query.walk! { |node, k, v, location| puts k }
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
More usefully, this can be used to rewrite a query. For example:
|
|
161
|
+
|
|
162
|
+
```ruby
|
|
163
|
+
parsed_query.walk! do |node, k, v, location| puts k
|
|
164
|
+
next unless k.eql?(:range_var) || k.eql?(:relation)
|
|
165
|
+
next if v.relname.nil?
|
|
166
|
+
v.relname = "X_" + v.relname
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
parsed_query.deparse
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
There are some caveats, and limitations, in this example.
|
|
173
|
+
|
|
174
|
+
First, some of the tree nodes are frozen. You can replace them, but you cannot modify in place.
|
|
149
175
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
to support parsing normalized queries containing `?` replacement characters.
|
|
176
|
+
Second, table rewriting is a bit more nuanced than this example. While this will rewrite the table names, it will
|
|
177
|
+
not correctly handle all CTEs, or rewrite columns with explicit table names.
|
|
153
178
|
|
|
154
179
|
## Supported Ruby Versions
|
|
155
180
|
|
|
156
181
|
Currently tested and officially supported Ruby versions:
|
|
157
182
|
|
|
158
|
-
* CRuby 2.5
|
|
159
183
|
* CRuby 2.6
|
|
160
184
|
* CRuby 2.7
|
|
161
185
|
* CRuby 3.0
|
|
186
|
+
* CRuby 3.1
|
|
187
|
+
* CRuby 3.2
|
|
162
188
|
|
|
163
189
|
Not supported:
|
|
164
190
|
|
|
@@ -182,7 +208,7 @@ Once that is done, follow the following steps:
|
|
|
182
208
|
|
|
183
209
|
## Resources
|
|
184
210
|
|
|
185
|
-
See [libpg_query](https://github.com/pganalyze/libpg_query/blob/
|
|
211
|
+
See [libpg_query](https://github.com/pganalyze/libpg_query/blob/15-latest/README.md#resources) for pg_query in other languages, as well as products/tools built on pg_query.
|
|
186
212
|
|
|
187
213
|
## Original Author
|
|
188
214
|
|
|
@@ -196,8 +222,10 @@ See [libpg_query](https://github.com/pganalyze/libpg_query/blob/13-latest/README
|
|
|
196
222
|
|
|
197
223
|
## License
|
|
198
224
|
|
|
199
|
-
|
|
200
|
-
|
|
225
|
+
PostgreSQL server source code, used under the [PostgreSQL license](https://www.postgresql.org/about/licence/).<br>
|
|
226
|
+
Portions Copyright (c) 1996-2023, The PostgreSQL Global Development Group<br>
|
|
227
|
+
Portions Copyright (c) 1994, The Regents of the University of California
|
|
201
228
|
|
|
202
|
-
|
|
203
|
-
Copyright (c)
|
|
229
|
+
All other parts are licensed under the 3-clause BSD license, see LICENSE file for details.<br>
|
|
230
|
+
Copyright (c) 2015, Lukas Fittl <lukas@fittl.com><br>
|
|
231
|
+
Copyright (c) 2016-2023, Duboce Labs, Inc. (pganalyze) <team@pganalyze.com>
|
data/Rakefile
CHANGED
|
@@ -5,8 +5,8 @@ require 'rspec/core/rake_task'
|
|
|
5
5
|
require 'rubocop/rake_task'
|
|
6
6
|
require 'open-uri'
|
|
7
7
|
|
|
8
|
-
LIB_PG_QUERY_TAG = '
|
|
9
|
-
LIB_PG_QUERY_SHA256SUM = '
|
|
8
|
+
LIB_PG_QUERY_TAG = '15-4.2.1'.freeze
|
|
9
|
+
LIB_PG_QUERY_SHA256SUM = '5828124517d8fd3091336fad6897e16ab49ec0b0b188f5859b3b928fc91608c2'.freeze
|
|
10
10
|
|
|
11
11
|
Rake::ExtensionTask.new 'pg_query' do |ext|
|
|
12
12
|
ext.lib_dir = 'lib/pg_query'
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* amapi.h
|
|
4
4
|
* API for Postgres index access methods.
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2015-
|
|
6
|
+
* Copyright (c) 2015-2022, PostgreSQL Global Development Group
|
|
7
7
|
*
|
|
8
8
|
* src/include/access/amapi.h
|
|
9
9
|
*
|
|
@@ -54,6 +54,42 @@ typedef enum IndexAMProperty
|
|
|
54
54
|
AMPROP_CAN_INCLUDE
|
|
55
55
|
} IndexAMProperty;
|
|
56
56
|
|
|
57
|
+
/*
|
|
58
|
+
* We use lists of this struct type to keep track of both operators and
|
|
59
|
+
* support functions while building or adding to an opclass or opfamily.
|
|
60
|
+
* amadjustmembers functions receive lists of these structs, and are allowed
|
|
61
|
+
* to alter their "ref" fields.
|
|
62
|
+
*
|
|
63
|
+
* The "ref" fields define how the pg_amop or pg_amproc entry should depend
|
|
64
|
+
* on the associated objects (that is, which dependency type to use, and
|
|
65
|
+
* which opclass or opfamily it should depend on).
|
|
66
|
+
*
|
|
67
|
+
* If ref_is_hard is true, the entry will have a NORMAL dependency on the
|
|
68
|
+
* operator or support func, and an INTERNAL dependency on the opclass or
|
|
69
|
+
* opfamily. This forces the opclass or opfamily to be dropped if the
|
|
70
|
+
* operator or support func is dropped, and requires the CASCADE option
|
|
71
|
+
* to do so. Nor will ALTER OPERATOR FAMILY DROP be allowed. This is
|
|
72
|
+
* the right behavior for objects that are essential to an opclass.
|
|
73
|
+
*
|
|
74
|
+
* If ref_is_hard is false, the entry will have an AUTO dependency on the
|
|
75
|
+
* operator or support func, and also an AUTO dependency on the opclass or
|
|
76
|
+
* opfamily. This allows ALTER OPERATOR FAMILY DROP, and causes that to
|
|
77
|
+
* happen automatically if the operator or support func is dropped. This
|
|
78
|
+
* is the right behavior for inessential ("loose") objects.
|
|
79
|
+
*/
|
|
80
|
+
typedef struct OpFamilyMember
|
|
81
|
+
{
|
|
82
|
+
bool is_func; /* is this an operator, or support func? */
|
|
83
|
+
Oid object; /* operator or support func's OID */
|
|
84
|
+
int number; /* strategy or support func number */
|
|
85
|
+
Oid lefttype; /* lefttype */
|
|
86
|
+
Oid righttype; /* righttype */
|
|
87
|
+
Oid sortfamily; /* ordering operator's sort opfamily, or 0 */
|
|
88
|
+
bool ref_is_hard; /* hard or soft dependency? */
|
|
89
|
+
bool ref_is_family; /* is dependency on opclass or opfamily? */
|
|
90
|
+
Oid refobjid; /* OID of opclass or opfamily */
|
|
91
|
+
} OpFamilyMember;
|
|
92
|
+
|
|
57
93
|
|
|
58
94
|
/*
|
|
59
95
|
* Callback function signatures --- see indexam.sgml for more info.
|
|
@@ -74,6 +110,7 @@ typedef bool (*aminsert_function) (Relation indexRelation,
|
|
|
74
110
|
ItemPointer heap_tid,
|
|
75
111
|
Relation heapRelation,
|
|
76
112
|
IndexUniqueCheck checkUnique,
|
|
113
|
+
bool indexUnchanged,
|
|
77
114
|
struct IndexInfo *indexInfo);
|
|
78
115
|
|
|
79
116
|
/* bulk delete */
|
|
@@ -114,6 +151,12 @@ typedef char *(*ambuildphasename_function) (int64 phasenum);
|
|
|
114
151
|
/* validate definition of an opclass for this AM */
|
|
115
152
|
typedef bool (*amvalidate_function) (Oid opclassoid);
|
|
116
153
|
|
|
154
|
+
/* validate operators and support functions to be added to an opclass/family */
|
|
155
|
+
typedef void (*amadjustmembers_function) (Oid opfamilyoid,
|
|
156
|
+
Oid opclassoid,
|
|
157
|
+
List *operators,
|
|
158
|
+
List *functions);
|
|
159
|
+
|
|
117
160
|
/* prepare for index scan */
|
|
118
161
|
typedef IndexScanDesc (*ambeginscan_function) (Relation indexRelation,
|
|
119
162
|
int nkeys,
|
|
@@ -224,6 +267,7 @@ typedef struct IndexAmRoutine
|
|
|
224
267
|
amproperty_function amproperty; /* can be NULL */
|
|
225
268
|
ambuildphasename_function ambuildphasename; /* can be NULL */
|
|
226
269
|
amvalidate_function amvalidate;
|
|
270
|
+
amadjustmembers_function amadjustmembers; /* can be NULL */
|
|
227
271
|
ambeginscan_function ambeginscan;
|
|
228
272
|
amrescan_function amrescan;
|
|
229
273
|
amgettuple_function amgettuple; /* can be NULL */
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Definitions for PostgreSQL attribute mappings
|
|
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/access/attmap.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES attribute number definitions.
|
|
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/access/attnum.h
|
|
@@ -36,7 +36,7 @@ typedef int16 AttrNumber;
|
|
|
36
36
|
|
|
37
37
|
/*
|
|
38
38
|
* AttrNumberIsForUserDefinedAttr
|
|
39
|
-
* True iff the attribute number corresponds to
|
|
39
|
+
* True iff the attribute number corresponds to a user defined attribute.
|
|
40
40
|
*/
|
|
41
41
|
#define AttrNumberIsForUserDefinedAttr(attributeNumber) \
|
|
42
42
|
((bool) ((attributeNumber) > 0))
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* PostgreSQL transaction-commit-log 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/access/clog.h
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#define CLOG_H
|
|
13
13
|
|
|
14
14
|
#include "access/xlogreader.h"
|
|
15
|
+
#include "storage/sync.h"
|
|
15
16
|
#include "lib/stringinfo.h"
|
|
16
17
|
|
|
17
18
|
/*
|
|
@@ -45,11 +46,12 @@ extern void CLOGShmemInit(void);
|
|
|
45
46
|
extern void BootStrapCLOG(void);
|
|
46
47
|
extern void StartupCLOG(void);
|
|
47
48
|
extern void TrimCLOG(void);
|
|
48
|
-
extern void ShutdownCLOG(void);
|
|
49
49
|
extern void CheckPointCLOG(void);
|
|
50
50
|
extern void ExtendCLOG(TransactionId newestXact);
|
|
51
51
|
extern void TruncateCLOG(TransactionId oldestXact, Oid oldestxid_datoid);
|
|
52
52
|
|
|
53
|
+
extern int clogsyncfiletag(const FileTag *ftag, char *path);
|
|
54
|
+
|
|
53
55
|
/* XLOG stuff */
|
|
54
56
|
#define CLOG_ZEROPAGE 0x00
|
|
55
57
|
#define CLOG_TRUNCATE 0x10
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* PostgreSQL commit timestamp 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/access/commit_ts.h
|
|
@@ -14,17 +14,14 @@
|
|
|
14
14
|
#include "access/xlog.h"
|
|
15
15
|
#include "datatype/timestamp.h"
|
|
16
16
|
#include "replication/origin.h"
|
|
17
|
-
#include "
|
|
17
|
+
#include "storage/sync.h"
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
extern PGDLLIMPORT bool track_commit_timestamp;
|
|
21
21
|
|
|
22
|
-
extern bool check_track_commit_timestamp(bool *newval, void **extra,
|
|
23
|
-
GucSource source);
|
|
24
|
-
|
|
25
22
|
extern void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids,
|
|
26
23
|
TransactionId *subxids, TimestampTz timestamp,
|
|
27
|
-
RepOriginId nodeid
|
|
24
|
+
RepOriginId nodeid);
|
|
28
25
|
extern bool TransactionIdGetCommitTsData(TransactionId xid,
|
|
29
26
|
TimestampTz *ts, RepOriginId *nodeid);
|
|
30
27
|
extern TransactionId GetLatestCommitTsData(TimestampTz *ts,
|
|
@@ -37,7 +34,6 @@ extern void BootStrapCommitTs(void);
|
|
|
37
34
|
extern void StartupCommitTs(void);
|
|
38
35
|
extern void CommitTsParameterChange(bool newvalue, bool oldvalue);
|
|
39
36
|
extern void CompleteCommitTsInitialization(void);
|
|
40
|
-
extern void ShutdownCommitTs(void);
|
|
41
37
|
extern void CheckPointCommitTs(void);
|
|
42
38
|
extern void ExtendCommitTs(TransactionId newestXact);
|
|
43
39
|
extern void TruncateCommitTs(TransactionId oldestXact);
|
|
@@ -45,10 +41,11 @@ extern void SetCommitTsLimit(TransactionId oldestXact,
|
|
|
45
41
|
TransactionId newestXact);
|
|
46
42
|
extern void AdvanceOldestCommitTsXid(TransactionId oldestXact);
|
|
47
43
|
|
|
44
|
+
extern int committssyncfiletag(const FileTag *ftag, char *path);
|
|
45
|
+
|
|
48
46
|
/* XLOG stuff */
|
|
49
47
|
#define COMMIT_TS_ZEROPAGE 0x00
|
|
50
48
|
#define COMMIT_TS_TRUNCATE 0x10
|
|
51
|
-
#define COMMIT_TS_SETTS 0x20
|
|
52
49
|
|
|
53
50
|
typedef struct xl_commit_ts_set
|
|
54
51
|
{
|
|
@@ -56,7 +53,7 @@ typedef struct xl_commit_ts_set
|
|
|
56
53
|
RepOriginId nodeid;
|
|
57
54
|
TransactionId mainxid;
|
|
58
55
|
/* subxact Xids follow */
|
|
59
|
-
}
|
|
56
|
+
} xl_commit_ts_set;
|
|
60
57
|
|
|
61
58
|
#define SizeOfCommitTsSet (offsetof(xl_commit_ts_set, mainxid) + \
|
|
62
59
|
sizeof(TransactionId))
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* detoast.h
|
|
4
4
|
* Access to compressed and external varlena values.
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2000-
|
|
6
|
+
* Copyright (c) 2000-2022, PostgreSQL Global Development Group
|
|
7
7
|
*
|
|
8
8
|
* src/include/access/detoast.h
|
|
9
9
|
*
|
|
@@ -12,16 +12,6 @@
|
|
|
12
12
|
#ifndef DETOAST_H
|
|
13
13
|
#define DETOAST_H
|
|
14
14
|
|
|
15
|
-
/*
|
|
16
|
-
* Testing whether an externally-stored value is compressed now requires
|
|
17
|
-
* comparing extsize (the actual length of the external data) to rawsize
|
|
18
|
-
* (the original uncompressed datum's size). The latter includes VARHDRSZ
|
|
19
|
-
* overhead, the former doesn't. We never use compression unless it actually
|
|
20
|
-
* saves space, so we expect either equality or less-than.
|
|
21
|
-
*/
|
|
22
|
-
#define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
|
|
23
|
-
((toast_pointer).va_extsize < (toast_pointer).va_rawsize - VARHDRSZ)
|
|
24
|
-
|
|
25
15
|
/*
|
|
26
16
|
* Macro to fetch the possibly-unaligned contents of an EXTERNAL datum
|
|
27
17
|
* into a local "struct varatt_external" toast pointer. This should be
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES generalized index access method definitions.
|
|
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/access/genam.h
|
|
@@ -38,8 +38,8 @@ typedef struct IndexBuildResult
|
|
|
38
38
|
*
|
|
39
39
|
* num_heap_tuples is accurate only when estimated_count is false;
|
|
40
40
|
* otherwise it's just an estimate (currently, the estimate is the
|
|
41
|
-
* prior value of the relation's pg_class.reltuples field
|
|
42
|
-
* always just be an estimate during ambulkdelete.
|
|
41
|
+
* prior value of the relation's pg_class.reltuples field, so it could
|
|
42
|
+
* even be -1). It will always just be an estimate during ambulkdelete.
|
|
43
43
|
*/
|
|
44
44
|
typedef struct IndexVacuumInfo
|
|
45
45
|
{
|
|
@@ -63,20 +63,22 @@ typedef struct IndexVacuumInfo
|
|
|
63
63
|
* of which this is just the first field; this provides a way for ambulkdelete
|
|
64
64
|
* to communicate additional private data to amvacuumcleanup.
|
|
65
65
|
*
|
|
66
|
-
* Note:
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
66
|
+
* Note: pages_newly_deleted is the number of pages in the index that were
|
|
67
|
+
* deleted by the current vacuum operation. pages_deleted and pages_free
|
|
68
|
+
* refer to free space within the index file.
|
|
69
|
+
*
|
|
70
|
+
* Note: Some index AMs may compute num_index_tuples by reference to
|
|
71
|
+
* num_heap_tuples, in which case they should copy the estimated_count field
|
|
72
|
+
* from IndexVacuumInfo.
|
|
71
73
|
*/
|
|
72
74
|
typedef struct IndexBulkDeleteResult
|
|
73
75
|
{
|
|
74
76
|
BlockNumber num_pages; /* pages remaining in index */
|
|
75
|
-
BlockNumber pages_removed; /* # removed during vacuum operation */
|
|
76
77
|
bool estimated_count; /* num_index_tuples is an estimate */
|
|
77
78
|
double num_index_tuples; /* tuples remaining */
|
|
78
79
|
double tuples_removed; /* # removed during vacuum operation */
|
|
79
|
-
BlockNumber
|
|
80
|
+
BlockNumber pages_newly_deleted; /* # pages marked deleted by us */
|
|
81
|
+
BlockNumber pages_deleted; /* # pages marked deleted (could be by us) */
|
|
80
82
|
BlockNumber pages_free; /* # pages available for reuse */
|
|
81
83
|
} IndexBulkDeleteResult;
|
|
82
84
|
|
|
@@ -143,6 +145,7 @@ extern bool index_insert(Relation indexRelation,
|
|
|
143
145
|
ItemPointer heap_t_ctid,
|
|
144
146
|
Relation heapRelation,
|
|
145
147
|
IndexUniqueCheck checkUnique,
|
|
148
|
+
bool indexUnchanged,
|
|
146
149
|
struct IndexInfo *indexInfo);
|
|
147
150
|
|
|
148
151
|
extern IndexScanDesc index_beginscan(Relation heapRelation,
|
|
@@ -174,11 +177,11 @@ extern bool index_getnext_slot(IndexScanDesc scan, ScanDirection direction,
|
|
|
174
177
|
extern int64 index_getbitmap(IndexScanDesc scan, TIDBitmap *bitmap);
|
|
175
178
|
|
|
176
179
|
extern IndexBulkDeleteResult *index_bulk_delete(IndexVacuumInfo *info,
|
|
177
|
-
IndexBulkDeleteResult *
|
|
180
|
+
IndexBulkDeleteResult *istat,
|
|
178
181
|
IndexBulkDeleteCallback callback,
|
|
179
182
|
void *callback_state);
|
|
180
183
|
extern IndexBulkDeleteResult *index_vacuum_cleanup(IndexVacuumInfo *info,
|
|
181
|
-
IndexBulkDeleteResult *
|
|
184
|
+
IndexBulkDeleteResult *istat);
|
|
182
185
|
extern bool index_can_return(Relation indexRelation, int attno);
|
|
183
186
|
extern RegProcedure index_getprocid(Relation irel, AttrNumber attnum,
|
|
184
187
|
uint16 procnum);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* gin.h
|
|
3
3
|
* Public header file for Generalized Inverted Index access method.
|
|
4
4
|
*
|
|
5
|
-
* Copyright (c) 2006-
|
|
5
|
+
* Copyright (c) 2006-2022, PostgreSQL Global Development Group
|
|
6
6
|
*
|
|
7
7
|
* src/include/access/gin.h
|
|
8
8
|
*--------------------------------------------------------------------------
|
|
@@ -68,7 +68,7 @@ typedef char GinTernaryValue;
|
|
|
68
68
|
|
|
69
69
|
/* GUC parameters */
|
|
70
70
|
extern PGDLLIMPORT int GinFuzzySearchLimit;
|
|
71
|
-
extern int
|
|
71
|
+
extern PGDLLIMPORT int gin_pending_list_limit;
|
|
72
72
|
|
|
73
73
|
/* ginutil.c */
|
|
74
74
|
extern void ginGetStats(Relation index, GinStatsData *stats);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* POSTGRES heap tuple definitions.
|
|
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/access/htup.h
|