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
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* and GetExtensibleNodeMethods to get information about a previously
|
|
19
19
|
* registered type of extensible node.
|
|
20
20
|
*
|
|
21
|
-
* Portions Copyright (c) 1996-
|
|
21
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
22
22
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
23
23
|
*
|
|
24
24
|
* IDENTIFICATION
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*--------------------------------------------------------------------
|
|
2
2
|
* Symbols referenced in this file:
|
|
3
|
-
* -
|
|
3
|
+
* - list_make1_impl
|
|
4
4
|
* - new_list
|
|
5
|
+
* - check_list_invariants
|
|
6
|
+
* - lappend
|
|
5
7
|
* - new_tail_cell
|
|
6
8
|
* - enlarge_list
|
|
7
|
-
* - check_list_invariants
|
|
8
|
-
* - list_make1_impl
|
|
9
9
|
* - list_make2_impl
|
|
10
10
|
* - list_concat
|
|
11
11
|
* - list_copy
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* See comments in pg_list.h.
|
|
32
32
|
*
|
|
33
33
|
*
|
|
34
|
-
* Portions Copyright (c) 1996-
|
|
34
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
35
35
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
36
36
|
*
|
|
37
37
|
*
|
|
@@ -302,6 +302,8 @@ list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2,
|
|
|
302
302
|
return list;
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
+
|
|
306
|
+
|
|
305
307
|
/*
|
|
306
308
|
* Make room for a new head cell in the given (non-NIL) list.
|
|
307
309
|
*
|
|
@@ -352,7 +354,7 @@ lappend(List *list, void *datum)
|
|
|
352
354
|
else
|
|
353
355
|
new_tail_cell(list);
|
|
354
356
|
|
|
355
|
-
|
|
357
|
+
llast(list) = datum;
|
|
356
358
|
check_list_invariants(list);
|
|
357
359
|
return list;
|
|
358
360
|
}
|
|
@@ -379,6 +381,9 @@ lappend(List *list, void *datum)
|
|
|
379
381
|
/*
|
|
380
382
|
* Insert the given datum at position 'pos' (measured from 0) in the list.
|
|
381
383
|
* 'pos' must be valid, ie, 0 <= pos <= list's length.
|
|
384
|
+
*
|
|
385
|
+
* Note that this takes time proportional to the distance to the end of the
|
|
386
|
+
* list, since the following entries must be moved.
|
|
382
387
|
*/
|
|
383
388
|
|
|
384
389
|
|
|
@@ -393,6 +398,9 @@ lappend(List *list, void *datum)
|
|
|
393
398
|
* value, rather than continuing to use the pointer passed as the
|
|
394
399
|
* second argument.
|
|
395
400
|
*
|
|
401
|
+
* Note that this takes time proportional to the length of the list,
|
|
402
|
+
* since the existing entries must be moved.
|
|
403
|
+
*
|
|
396
404
|
* Caution: before Postgres 8.0, the original List was unmodified and
|
|
397
405
|
* could be considered to retain its separate identity. This is no longer
|
|
398
406
|
* the case.
|
|
@@ -407,7 +415,7 @@ lcons(void *datum, List *list)
|
|
|
407
415
|
else
|
|
408
416
|
new_head_cell(list);
|
|
409
417
|
|
|
410
|
-
|
|
418
|
+
linitial(list) = datum;
|
|
411
419
|
check_list_invariants(list);
|
|
412
420
|
return list;
|
|
413
421
|
}
|
|
@@ -432,6 +440,10 @@ lcons(void *datum, List *list)
|
|
|
432
440
|
* Callers should be sure to use the return value as the new pointer to the
|
|
433
441
|
* concatenated list: the 'list1' input pointer may or may not be the same
|
|
434
442
|
* as the returned pointer.
|
|
443
|
+
*
|
|
444
|
+
* Note that this takes at least time proportional to the length of list2.
|
|
445
|
+
* It'd typically be the case that we have to enlarge list1's storage,
|
|
446
|
+
* probably adding time proportional to the length of list1.
|
|
435
447
|
*/
|
|
436
448
|
List *
|
|
437
449
|
list_concat(List *list1, const List *list2)
|
|
@@ -508,6 +520,8 @@ list_truncate(List *list, int new_size)
|
|
|
508
520
|
* Return true iff 'datum' is a member of the list. Equality is
|
|
509
521
|
* determined via equal(), so callers should ensure that they pass a
|
|
510
522
|
* Node as 'datum'.
|
|
523
|
+
*
|
|
524
|
+
* This does a simple linear search --- avoid using it on long lists.
|
|
511
525
|
*/
|
|
512
526
|
|
|
513
527
|
|
|
@@ -531,6 +545,9 @@ list_truncate(List *list, int new_size)
|
|
|
531
545
|
* Delete the n'th cell (counting from 0) in list.
|
|
532
546
|
*
|
|
533
547
|
* The List is pfree'd if this was the last member.
|
|
548
|
+
*
|
|
549
|
+
* Note that this takes time proportional to the distance to the end of the
|
|
550
|
+
* list, since the following entries must be moved.
|
|
534
551
|
*/
|
|
535
552
|
List *
|
|
536
553
|
list_delete_nth_cell(List *list, int n)
|
|
@@ -602,6 +619,9 @@ list_delete_nth_cell(List *list, int n)
|
|
|
602
619
|
*
|
|
603
620
|
* The List is pfree'd if this was the last member. However, we do not
|
|
604
621
|
* touch any data the cell might've been pointing to.
|
|
622
|
+
*
|
|
623
|
+
* Note that this takes time proportional to the distance to the end of the
|
|
624
|
+
* list, since the following entries must be moved.
|
|
605
625
|
*/
|
|
606
626
|
List *
|
|
607
627
|
list_delete_cell(List *list, ListCell *cell)
|
|
@@ -612,6 +632,8 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
612
632
|
/*
|
|
613
633
|
* Delete the first cell in list that matches datum, if any.
|
|
614
634
|
* Equality is determined via equal().
|
|
635
|
+
*
|
|
636
|
+
* This does a simple linear search --- avoid using it on long lists.
|
|
615
637
|
*/
|
|
616
638
|
|
|
617
639
|
|
|
@@ -631,17 +653,36 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
631
653
|
* where the intent is to alter the list rather than just traverse it.
|
|
632
654
|
* Beware that the list is modified, whereas the Lisp-y coding leaves
|
|
633
655
|
* the original list head intact in case there's another pointer to it.
|
|
656
|
+
*
|
|
657
|
+
* Note that this takes time proportional to the length of the list,
|
|
658
|
+
* since the remaining entries must be moved. Consider reversing the
|
|
659
|
+
* list order so that you can use list_delete_last() instead. However,
|
|
660
|
+
* if that causes you to replace lappend() with lcons(), you haven't
|
|
661
|
+
* improved matters. (In short, you can make an efficient stack from
|
|
662
|
+
* a List, but not an efficient FIFO queue.)
|
|
634
663
|
*/
|
|
635
664
|
|
|
636
665
|
|
|
637
666
|
/*
|
|
638
667
|
* Delete the last element of the list.
|
|
639
|
-
*
|
|
640
|
-
* This is the opposite of list_delete_first(), but is noticeably cheaper
|
|
641
|
-
* with a long list, since no data need be moved.
|
|
642
668
|
*/
|
|
643
669
|
|
|
644
670
|
|
|
671
|
+
/*
|
|
672
|
+
* Delete the first N cells of the list.
|
|
673
|
+
*
|
|
674
|
+
* The List is pfree'd if the request causes all cells to be deleted.
|
|
675
|
+
*
|
|
676
|
+
* Note that this takes time proportional to the distance to the end of the
|
|
677
|
+
* list, since the following entries must be moved.
|
|
678
|
+
*/
|
|
679
|
+
#ifndef DEBUG_LIST_MEMORY_USAGE
|
|
680
|
+
#else
|
|
681
|
+
#ifdef CLOBBER_FREED_MEMORY
|
|
682
|
+
#else
|
|
683
|
+
#endif
|
|
684
|
+
#endif
|
|
685
|
+
|
|
645
686
|
/*
|
|
646
687
|
* Generate the union of two lists. This is calculated by copying
|
|
647
688
|
* list1 via list_copy(), then adding to it all the members of list2
|
|
@@ -659,8 +700,10 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
659
700
|
* you probably want to use list_concat_unique() instead to avoid wasting
|
|
660
701
|
* the storage of the old x list.
|
|
661
702
|
*
|
|
662
|
-
*
|
|
663
|
-
*
|
|
703
|
+
* Note that this takes time proportional to the product of the list
|
|
704
|
+
* lengths, so beware of using it on long lists. (We could probably
|
|
705
|
+
* improve that, but really you should be using some other data structure
|
|
706
|
+
* if this'd be a performance bottleneck.)
|
|
664
707
|
*/
|
|
665
708
|
|
|
666
709
|
|
|
@@ -692,6 +735,11 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
692
735
|
* This variant works on lists of pointers, and determines list
|
|
693
736
|
* membership via equal(). Note that the list1 member will be pointed
|
|
694
737
|
* to in the result.
|
|
738
|
+
*
|
|
739
|
+
* Note that this takes time proportional to the product of the list
|
|
740
|
+
* lengths, so beware of using it on long lists. (We could probably
|
|
741
|
+
* improve that, but really you should be using some other data structure
|
|
742
|
+
* if this'd be a performance bottleneck.)
|
|
695
743
|
*/
|
|
696
744
|
|
|
697
745
|
|
|
@@ -708,6 +756,11 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
708
756
|
*
|
|
709
757
|
* This variant works on lists of pointers, and determines list
|
|
710
758
|
* membership via equal()
|
|
759
|
+
*
|
|
760
|
+
* Note that this takes time proportional to the product of the list
|
|
761
|
+
* lengths, so beware of using it on long lists. (We could probably
|
|
762
|
+
* improve that, but really you should be using some other data structure
|
|
763
|
+
* if this'd be a performance bottleneck.)
|
|
711
764
|
*/
|
|
712
765
|
|
|
713
766
|
|
|
@@ -732,6 +785,8 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
732
785
|
*
|
|
733
786
|
* Whether an element is already a member of the list is determined
|
|
734
787
|
* via equal().
|
|
788
|
+
*
|
|
789
|
+
* This does a simple linear search --- avoid using it on long lists.
|
|
735
790
|
*/
|
|
736
791
|
|
|
737
792
|
|
|
@@ -761,6 +816,11 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
761
816
|
* modified in-place rather than being copied. However, callers of this
|
|
762
817
|
* function may have strict ordering expectations -- i.e. that the relative
|
|
763
818
|
* order of those list2 elements that are not duplicates is preserved.
|
|
819
|
+
*
|
|
820
|
+
* Note that this takes time proportional to the product of the list
|
|
821
|
+
* lengths, so beware of using it on long lists. (We could probably
|
|
822
|
+
* improve that, but really you should be using some other data structure
|
|
823
|
+
* if this'd be a performance bottleneck.)
|
|
764
824
|
*/
|
|
765
825
|
|
|
766
826
|
|
|
@@ -785,6 +845,8 @@ list_delete_cell(List *list, ListCell *cell)
|
|
|
785
845
|
*
|
|
786
846
|
* It is caller's responsibility to have sorted the list to bring duplicates
|
|
787
847
|
* together, perhaps via list_sort(list, list_oid_cmp).
|
|
848
|
+
*
|
|
849
|
+
* Note that this takes time proportional to the length of the list.
|
|
788
850
|
*/
|
|
789
851
|
|
|
790
852
|
|
|
@@ -852,6 +914,12 @@ list_copy(const List *oldlist)
|
|
|
852
914
|
return newlist;
|
|
853
915
|
}
|
|
854
916
|
|
|
917
|
+
/*
|
|
918
|
+
* Return a shallow copy of the specified list containing only the first 'len'
|
|
919
|
+
* elements. If oldlist is shorter than 'len' then we copy the entire list.
|
|
920
|
+
*/
|
|
921
|
+
|
|
922
|
+
|
|
855
923
|
/*
|
|
856
924
|
* Return a shallow copy of the specified list, without the first N elements.
|
|
857
925
|
*/
|
|
@@ -913,6 +981,13 @@ list_copy_deep(const List *oldlist)
|
|
|
913
981
|
*
|
|
914
982
|
* Like qsort(), this provides no guarantees about sort stability
|
|
915
983
|
* for equal keys.
|
|
984
|
+
*
|
|
985
|
+
* This is based on qsort(), so it likewise has O(N log N) runtime.
|
|
986
|
+
*/
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
/*
|
|
990
|
+
* list_sort comparator for sorting a list into ascending int order.
|
|
916
991
|
*/
|
|
917
992
|
|
|
918
993
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* - makeDefElem
|
|
4
4
|
* - makeTypeNameFromNameList
|
|
5
5
|
* - makeDefElemExtended
|
|
6
|
+
* - makeRangeVar
|
|
6
7
|
* - makeVacuumRelation
|
|
7
8
|
* - makeAlias
|
|
8
9
|
* - makeSimpleA_Expr
|
|
@@ -10,7 +11,6 @@
|
|
|
10
11
|
* - makeTypeName
|
|
11
12
|
* - makeFuncCall
|
|
12
13
|
* - makeA_Expr
|
|
13
|
-
* - makeRangeVar
|
|
14
14
|
* - makeBoolExpr
|
|
15
15
|
*--------------------------------------------------------------------
|
|
16
16
|
*/
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* creator functions for various nodes. The functions here are for the
|
|
22
22
|
* most frequently created nodes.
|
|
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
|
*
|
|
@@ -309,7 +309,7 @@ makeDefElemExtended(char *nameSpace, char *name, Node *arg,
|
|
|
309
309
|
* supply. Any non-default parameters have to be inserted by the caller.
|
|
310
310
|
*/
|
|
311
311
|
FuncCall *
|
|
312
|
-
makeFuncCall(List *name, List *args, int location)
|
|
312
|
+
makeFuncCall(List *name, List *args, CoercionForm funcformat, int location)
|
|
313
313
|
{
|
|
314
314
|
FuncCall *n = makeNode(FuncCall);
|
|
315
315
|
|
|
@@ -317,11 +317,12 @@ makeFuncCall(List *name, List *args, int location)
|
|
|
317
317
|
n->args = args;
|
|
318
318
|
n->agg_order = NIL;
|
|
319
319
|
n->agg_filter = NULL;
|
|
320
|
+
n->over = NULL;
|
|
320
321
|
n->agg_within_group = false;
|
|
321
322
|
n->agg_star = false;
|
|
322
323
|
n->agg_distinct = false;
|
|
323
324
|
n->func_variadic = false;
|
|
324
|
-
n->
|
|
325
|
+
n->funcformat = funcformat;
|
|
325
326
|
n->location = location;
|
|
326
327
|
return n;
|
|
327
328
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* nodeFuncs.c
|
|
12
12
|
* Various general-purpose manipulations of Node trees
|
|
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
|
*
|
|
@@ -523,6 +523,12 @@ exprLocation(const Node *expr)
|
|
|
523
523
|
case T_OnConflictClause:
|
|
524
524
|
loc = ((const OnConflictClause *) expr)->location;
|
|
525
525
|
break;
|
|
526
|
+
case T_CTESearchClause:
|
|
527
|
+
loc = ((const CTESearchClause *) expr)->location;
|
|
528
|
+
break;
|
|
529
|
+
case T_CTECycleClause:
|
|
530
|
+
loc = ((const CTECycleClause *) expr)->location;
|
|
531
|
+
break;
|
|
526
532
|
case T_CommonTableExpr:
|
|
527
533
|
loc = ((const CommonTableExpr *) expr)->location;
|
|
528
534
|
break;
|
|
@@ -812,10 +818,6 @@ leftmostLoc(int loc1, int loc2)
|
|
|
812
818
|
#define FLATCOPY(newnode, node, nodetype) \
|
|
813
819
|
( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
|
|
814
820
|
memcpy((newnode), (node), sizeof(nodetype)) )
|
|
815
|
-
#define CHECKFLATCOPY(newnode, node, nodetype) \
|
|
816
|
-
( AssertMacro(IsA((node), nodetype)), \
|
|
817
|
-
(newnode) = (nodetype *) palloc(sizeof(nodetype)), \
|
|
818
|
-
memcpy((newnode), (node), sizeof(nodetype)) )
|
|
819
821
|
#define MUTATE(newfield, oldfield, fieldtype) \
|
|
820
822
|
( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) )
|
|
821
823
|
|
|
@@ -835,9 +837,9 @@ leftmostLoc(int loc1, int loc2)
|
|
|
835
837
|
* which is the bitwise OR of flag values to suppress mutating of
|
|
836
838
|
* indicated items. (More flag bits may be added as needed.)
|
|
837
839
|
*
|
|
838
|
-
* Normally the Query node itself is copied, but some callers want
|
|
839
|
-
* modified in-place; they must pass QTW_DONT_COPY_QUERY in flags.
|
|
840
|
-
* modified substructure is safely copied in any case.
|
|
840
|
+
* Normally the top-level Query node itself is copied, but some callers want
|
|
841
|
+
* it to be modified in-place; they must pass QTW_DONT_COPY_QUERY in flags.
|
|
842
|
+
* All modified substructure is safely copied in any case.
|
|
841
843
|
*/
|
|
842
844
|
|
|
843
845
|
|
|
@@ -880,9 +882,9 @@ leftmostLoc(int loc1, int loc2)
|
|
|
880
882
|
* boundaries: we descend to everything that's possibly interesting.
|
|
881
883
|
*
|
|
882
884
|
* Currently, the node type coverage here extends only to DML statements
|
|
883
|
-
* (SELECT/INSERT/UPDATE/DELETE) and nodes that can appear in them,
|
|
884
|
-
* this is used mainly during analysis of CTEs, and only DML
|
|
885
|
-
* appear in CTEs.
|
|
885
|
+
* (SELECT/INSERT/UPDATE/DELETE/MERGE) and nodes that can appear in them,
|
|
886
|
+
* because this is used mainly during analysis of CTEs, and only DML
|
|
887
|
+
* statements can appear in CTEs.
|
|
886
888
|
*/
|
|
887
889
|
bool
|
|
888
890
|
raw_expression_tree_walker(Node *node,
|
|
@@ -908,9 +910,9 @@ raw_expression_tree_walker(Node *node,
|
|
|
908
910
|
case T_SQLValueFunction:
|
|
909
911
|
case T_Integer:
|
|
910
912
|
case T_Float:
|
|
913
|
+
case T_Boolean:
|
|
911
914
|
case T_String:
|
|
912
915
|
case T_BitString:
|
|
913
|
-
case T_Null:
|
|
914
916
|
case T_ParamRef:
|
|
915
917
|
case T_A_Const:
|
|
916
918
|
case T_A_Star:
|
|
@@ -1062,6 +1064,34 @@ raw_expression_tree_walker(Node *node,
|
|
|
1062
1064
|
return true;
|
|
1063
1065
|
}
|
|
1064
1066
|
break;
|
|
1067
|
+
case T_MergeStmt:
|
|
1068
|
+
{
|
|
1069
|
+
MergeStmt *stmt = (MergeStmt *) node;
|
|
1070
|
+
|
|
1071
|
+
if (walker(stmt->relation, context))
|
|
1072
|
+
return true;
|
|
1073
|
+
if (walker(stmt->sourceRelation, context))
|
|
1074
|
+
return true;
|
|
1075
|
+
if (walker(stmt->joinCondition, context))
|
|
1076
|
+
return true;
|
|
1077
|
+
if (walker(stmt->mergeWhenClauses, context))
|
|
1078
|
+
return true;
|
|
1079
|
+
if (walker(stmt->withClause, context))
|
|
1080
|
+
return true;
|
|
1081
|
+
}
|
|
1082
|
+
break;
|
|
1083
|
+
case T_MergeWhenClause:
|
|
1084
|
+
{
|
|
1085
|
+
MergeWhenClause *mergeWhenClause = (MergeWhenClause *) node;
|
|
1086
|
+
|
|
1087
|
+
if (walker(mergeWhenClause->condition, context))
|
|
1088
|
+
return true;
|
|
1089
|
+
if (walker(mergeWhenClause->targetList, context))
|
|
1090
|
+
return true;
|
|
1091
|
+
if (walker(mergeWhenClause->values, context))
|
|
1092
|
+
return true;
|
|
1093
|
+
}
|
|
1094
|
+
break;
|
|
1065
1095
|
case T_SelectStmt:
|
|
1066
1096
|
{
|
|
1067
1097
|
SelectStmt *stmt = (SelectStmt *) node;
|
|
@@ -1100,6 +1130,16 @@ raw_expression_tree_walker(Node *node,
|
|
|
1100
1130
|
return true;
|
|
1101
1131
|
}
|
|
1102
1132
|
break;
|
|
1133
|
+
case T_PLAssignStmt:
|
|
1134
|
+
{
|
|
1135
|
+
PLAssignStmt *stmt = (PLAssignStmt *) node;
|
|
1136
|
+
|
|
1137
|
+
if (walker(stmt->indirection, context))
|
|
1138
|
+
return true;
|
|
1139
|
+
if (walker(stmt->val, context))
|
|
1140
|
+
return true;
|
|
1141
|
+
}
|
|
1142
|
+
break;
|
|
1103
1143
|
case T_A_Expr:
|
|
1104
1144
|
{
|
|
1105
1145
|
A_Expr *expr = (A_Expr *) node;
|
|
@@ -1279,6 +1319,8 @@ raw_expression_tree_walker(Node *node,
|
|
|
1279
1319
|
|
|
1280
1320
|
if (walker(coldef->typeName, context))
|
|
1281
1321
|
return true;
|
|
1322
|
+
if (walker(coldef->compression, context))
|
|
1323
|
+
return true;
|
|
1282
1324
|
if (walker(coldef->raw_default, context))
|
|
1283
1325
|
return true;
|
|
1284
1326
|
if (walker(coldef->collClause, context))
|
|
@@ -1334,6 +1376,7 @@ raw_expression_tree_walker(Node *node,
|
|
|
1334
1376
|
}
|
|
1335
1377
|
break;
|
|
1336
1378
|
case T_CommonTableExpr:
|
|
1379
|
+
/* search_clause and cycle_clause are not interesting here */
|
|
1337
1380
|
return walker(((CommonTableExpr *) node)->ctequery, context);
|
|
1338
1381
|
default:
|
|
1339
1382
|
elog(ERROR, "unrecognized node type: %d",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*--------------------------------------------------------------------
|
|
2
2
|
* Symbols referenced in this file:
|
|
3
3
|
* - makeString
|
|
4
|
+
* - makeBoolean
|
|
4
5
|
* - makeInteger
|
|
5
6
|
* - makeFloat
|
|
6
7
|
* - makeBitString
|
|
@@ -10,10 +11,10 @@
|
|
|
10
11
|
/*-------------------------------------------------------------------------
|
|
11
12
|
*
|
|
12
13
|
* value.c
|
|
13
|
-
* implementation of
|
|
14
|
+
* implementation of value nodes
|
|
14
15
|
*
|
|
15
16
|
*
|
|
16
|
-
* Copyright (c) 2003-
|
|
17
|
+
* Copyright (c) 2003-2022, PostgreSQL Global Development Group
|
|
17
18
|
*
|
|
18
19
|
*
|
|
19
20
|
* IDENTIFICATION
|
|
@@ -23,18 +24,17 @@
|
|
|
23
24
|
*/
|
|
24
25
|
#include "postgres.h"
|
|
25
26
|
|
|
26
|
-
#include "nodes/
|
|
27
|
+
#include "nodes/value.h"
|
|
27
28
|
|
|
28
29
|
/*
|
|
29
30
|
* makeInteger
|
|
30
31
|
*/
|
|
31
|
-
|
|
32
|
+
Integer *
|
|
32
33
|
makeInteger(int i)
|
|
33
34
|
{
|
|
34
|
-
|
|
35
|
+
Integer *v = makeNode(Integer);
|
|
35
36
|
|
|
36
|
-
v->
|
|
37
|
-
v->val.ival = i;
|
|
37
|
+
v->ival = i;
|
|
38
38
|
return v;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -43,13 +43,24 @@ makeInteger(int i)
|
|
|
43
43
|
*
|
|
44
44
|
* Caller is responsible for passing a palloc'd string.
|
|
45
45
|
*/
|
|
46
|
-
|
|
46
|
+
Float *
|
|
47
47
|
makeFloat(char *numericStr)
|
|
48
48
|
{
|
|
49
|
-
|
|
49
|
+
Float *v = makeNode(Float);
|
|
50
50
|
|
|
51
|
-
v->
|
|
52
|
-
v
|
|
51
|
+
v->fval = numericStr;
|
|
52
|
+
return v;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* makeBoolean
|
|
57
|
+
*/
|
|
58
|
+
Boolean *
|
|
59
|
+
makeBoolean(bool val)
|
|
60
|
+
{
|
|
61
|
+
Boolean *v = makeNode(Boolean);
|
|
62
|
+
|
|
63
|
+
v->boolval = val;
|
|
53
64
|
return v;
|
|
54
65
|
}
|
|
55
66
|
|
|
@@ -58,13 +69,12 @@ makeFloat(char *numericStr)
|
|
|
58
69
|
*
|
|
59
70
|
* Caller is responsible for passing a palloc'd string.
|
|
60
71
|
*/
|
|
61
|
-
|
|
72
|
+
String *
|
|
62
73
|
makeString(char *str)
|
|
63
74
|
{
|
|
64
|
-
|
|
75
|
+
String *v = makeNode(String);
|
|
65
76
|
|
|
66
|
-
v->
|
|
67
|
-
v->val.str = str;
|
|
77
|
+
v->sval = str;
|
|
68
78
|
return v;
|
|
69
79
|
}
|
|
70
80
|
|
|
@@ -73,12 +83,11 @@ makeString(char *str)
|
|
|
73
83
|
*
|
|
74
84
|
* Caller is responsible for passing a palloc'd string.
|
|
75
85
|
*/
|
|
76
|
-
|
|
86
|
+
BitString *
|
|
77
87
|
makeBitString(char *str)
|
|
78
88
|
{
|
|
79
|
-
|
|
89
|
+
BitString *v = makeNode(BitString);
|
|
80
90
|
|
|
81
|
-
v->
|
|
82
|
-
v->val.str = str;
|
|
91
|
+
v->bsval = str;
|
|
83
92
|
return v;
|
|
84
93
|
}
|