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
|
@@ -150,33 +150,93 @@ _outOidList(PgQuery__OidList* out, const List *node)
|
|
|
150
150
|
// TODO: Add Bitmapset
|
|
151
151
|
|
|
152
152
|
static void
|
|
153
|
-
_outInteger(PgQuery__Integer* out, const
|
|
153
|
+
_outInteger(PgQuery__Integer* out, const Integer *node)
|
|
154
154
|
{
|
|
155
|
-
out->ival = node->
|
|
155
|
+
out->ival = node->ival;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
static void
|
|
159
|
-
_outFloat(PgQuery__Float* out, const
|
|
159
|
+
_outFloat(PgQuery__Float* out, const Float *node)
|
|
160
160
|
{
|
|
161
|
-
out->
|
|
161
|
+
out->fval = node->fval;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
static void
|
|
165
|
-
|
|
165
|
+
_outBoolean(PgQuery__Boolean* out, const Boolean *node)
|
|
166
166
|
{
|
|
167
|
-
out->
|
|
167
|
+
out->boolval = node->boolval;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
static void
|
|
171
|
-
|
|
171
|
+
_outString(PgQuery__String* out, const String *node)
|
|
172
172
|
{
|
|
173
|
-
out->
|
|
173
|
+
out->sval = node->sval;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
static void
|
|
177
|
-
|
|
177
|
+
_outBitString(PgQuery__BitString* out, const BitString *node)
|
|
178
178
|
{
|
|
179
|
-
|
|
179
|
+
out->bsval = node->bsval;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
static void
|
|
183
|
+
_outAConst(PgQuery__AConst* out, const A_Const *node)
|
|
184
|
+
{
|
|
185
|
+
out->isnull = node->isnull;
|
|
186
|
+
out->location = node->location;
|
|
187
|
+
|
|
188
|
+
if (!node->isnull) {
|
|
189
|
+
switch (nodeTag(&node->val.node)) {
|
|
190
|
+
case T_Integer: {
|
|
191
|
+
PgQuery__Integer *value = palloc(sizeof(PgQuery__Integer));
|
|
192
|
+
pg_query__integer__init(value);
|
|
193
|
+
value->ival = node->val.ival.ival;
|
|
194
|
+
|
|
195
|
+
out->val_case = PG_QUERY__A__CONST__VAL_IVAL;
|
|
196
|
+
out->ival = value;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
case T_Float: {
|
|
200
|
+
PgQuery__Float *value = palloc(sizeof(PgQuery__Float));
|
|
201
|
+
pg_query__float__init(value);
|
|
202
|
+
value->fval = pstrdup(node->val.fval.fval);
|
|
203
|
+
|
|
204
|
+
out->val_case = PG_QUERY__A__CONST__VAL_FVAL;
|
|
205
|
+
out->fval = value;
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case T_Boolean: {
|
|
209
|
+
PgQuery__Boolean *value = palloc(sizeof(PgQuery__Boolean));
|
|
210
|
+
pg_query__boolean__init(value);
|
|
211
|
+
value->boolval = node->val.boolval.boolval;
|
|
212
|
+
|
|
213
|
+
out->val_case = PG_QUERY__A__CONST__VAL_BOOLVAL;
|
|
214
|
+
out->boolval = value;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case T_String: {
|
|
218
|
+
PgQuery__String *value = palloc(sizeof(PgQuery__String));
|
|
219
|
+
pg_query__string__init(value);
|
|
220
|
+
value->sval = pstrdup(node->val.sval.sval);
|
|
221
|
+
|
|
222
|
+
out->val_case = PG_QUERY__A__CONST__VAL_SVAL;
|
|
223
|
+
out->sval = value;
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case T_BitString: {
|
|
227
|
+
PgQuery__BitString *value = palloc(sizeof(PgQuery__BitString));
|
|
228
|
+
pg_query__bit_string__init(value);
|
|
229
|
+
value->bsval = pstrdup(node->val.bsval.bsval);
|
|
230
|
+
|
|
231
|
+
out->val_case = PG_QUERY__A__CONST__VAL_BSVAL;
|
|
232
|
+
out->bsval = value;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
default:
|
|
236
|
+
// Unreachable
|
|
237
|
+
Assert(false);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
180
240
|
}
|
|
181
241
|
|
|
182
242
|
#include "pg_query_enum_defs.c"
|
|
@@ -18,7 +18,7 @@ typedef struct {
|
|
|
18
18
|
PgQueryError* error;
|
|
19
19
|
} PgQueryInternalPlpgsqlFuncAndError;
|
|
20
20
|
|
|
21
|
-
static PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(
|
|
21
|
+
static PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(Node* stmt);
|
|
22
22
|
|
|
23
23
|
static void add_dummy_return(PLpgSQL_function *function)
|
|
24
24
|
{
|
|
@@ -73,6 +73,36 @@ static void plpgsql_compile_error_callback(void *arg)
|
|
|
73
73
|
plpgsql_error_funcname, plpgsql_latest_lineno());
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
static PLpgSQL_function *compile_do_stmt(DoStmt* stmt)
|
|
77
|
+
{
|
|
78
|
+
char *proc_source = NULL;
|
|
79
|
+
const ListCell *lc;
|
|
80
|
+
char *language = "plpgsql";
|
|
81
|
+
|
|
82
|
+
assert(IsA(stmt, DoStmt));
|
|
83
|
+
|
|
84
|
+
foreach(lc, stmt->args)
|
|
85
|
+
{
|
|
86
|
+
DefElem* elem = (DefElem*) lfirst(lc);
|
|
87
|
+
|
|
88
|
+
if (strcmp(elem->defname, "as") == 0) {
|
|
89
|
+
|
|
90
|
+
assert(IsA(elem->arg, String));
|
|
91
|
+
proc_source = strVal(elem->arg);
|
|
92
|
+
} else if (strcmp(elem->defname, "language") == 0) {
|
|
93
|
+
language = strVal(elem->arg);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
assert(proc_source != NULL);
|
|
98
|
+
|
|
99
|
+
if(strcmp(language, "plpgsql") != 0) {
|
|
100
|
+
return (PLpgSQL_function *) palloc0(sizeof(PLpgSQL_function));
|
|
101
|
+
}
|
|
102
|
+
return plpgsql_compile_inline(proc_source);
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
76
106
|
static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
|
|
77
107
|
{
|
|
78
108
|
char *func_name;
|
|
@@ -87,6 +117,7 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
|
|
|
87
117
|
const ListCell *lc, *lc2, *lc3;
|
|
88
118
|
bool is_trigger = false;
|
|
89
119
|
bool is_setof = false;
|
|
120
|
+
char *language = "plpgsql";
|
|
90
121
|
|
|
91
122
|
assert(IsA(stmt, CreateFunctionStmt));
|
|
92
123
|
|
|
@@ -105,10 +136,16 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
|
|
|
105
136
|
{
|
|
106
137
|
proc_source = strVal(lfirst(lc2));
|
|
107
138
|
}
|
|
139
|
+
} else if (strcmp(elem->defname, "language") == 0) {
|
|
140
|
+
language = strVal(elem->arg);
|
|
108
141
|
}
|
|
109
142
|
}
|
|
110
143
|
|
|
111
|
-
assert(proc_source);
|
|
144
|
+
assert(proc_source != NULL);
|
|
145
|
+
|
|
146
|
+
if(strcmp(language, "plpgsql") != 0) {
|
|
147
|
+
return (PLpgSQL_function *) palloc0(sizeof(PLpgSQL_function));
|
|
148
|
+
}
|
|
112
149
|
|
|
113
150
|
if (stmt->returnType != NULL) {
|
|
114
151
|
foreach(lc3, stmt->returnType->names)
|
|
@@ -179,6 +216,26 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
|
|
|
179
216
|
plpgsql_DumpExecTree = false;
|
|
180
217
|
plpgsql_start_datums();
|
|
181
218
|
|
|
219
|
+
/* Setup parameter names */
|
|
220
|
+
foreach(lc, stmt->parameters)
|
|
221
|
+
{
|
|
222
|
+
FunctionParameter *param = lfirst_node(FunctionParameter, lc);
|
|
223
|
+
if (param->name != NULL)
|
|
224
|
+
{
|
|
225
|
+
char buf[32];
|
|
226
|
+
PLpgSQL_type *argdtype;
|
|
227
|
+
PLpgSQL_variable *argvariable;
|
|
228
|
+
PLpgSQL_nsitem_type argitemtype;
|
|
229
|
+
snprintf(buf, sizeof(buf), "$%d", foreach_current_index(lc) + 1);
|
|
230
|
+
argdtype = plpgsql_build_datatype(UNKNOWNOID, -1, InvalidOid, NULL);
|
|
231
|
+
argvariable = plpgsql_build_variable(param->name ? param->name : buf, 0, argdtype, false);
|
|
232
|
+
argitemtype = argvariable->dtype == PLPGSQL_DTYPE_VAR ? PLPGSQL_NSTYPE_VAR : PLPGSQL_NSTYPE_REC;
|
|
233
|
+
plpgsql_ns_additem(argitemtype, argvariable->dno, buf);
|
|
234
|
+
if (param->name != NULL)
|
|
235
|
+
plpgsql_ns_additem(argitemtype, argvariable->dno, param->name);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
182
239
|
/* Set up as though in a function returning VOID */
|
|
183
240
|
function->fn_rettype = VOIDOID;
|
|
184
241
|
function->fn_retset = is_setof;
|
|
@@ -253,7 +310,7 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
|
|
|
253
310
|
return function;
|
|
254
311
|
}
|
|
255
312
|
|
|
256
|
-
PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(
|
|
313
|
+
PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(Node* stmt)
|
|
257
314
|
{
|
|
258
315
|
PgQueryInternalPlpgsqlFuncAndError result = {0};
|
|
259
316
|
MemoryContext cctx = CurrentMemoryContext;
|
|
@@ -286,7 +343,13 @@ PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt
|
|
|
286
343
|
|
|
287
344
|
PG_TRY();
|
|
288
345
|
{
|
|
289
|
-
|
|
346
|
+
if (IsA(stmt, CreateFunctionStmt)) {
|
|
347
|
+
result.func = compile_create_function_stmt((CreateFunctionStmt *) stmt);
|
|
348
|
+
} else if (IsA(stmt, DoStmt)){
|
|
349
|
+
result.func = compile_do_stmt((DoStmt *) stmt);
|
|
350
|
+
} else {
|
|
351
|
+
elog(ERROR, "Unexpected node type for PL/pgSQL parsing: %d", nodeTag(stmt));
|
|
352
|
+
}
|
|
290
353
|
|
|
291
354
|
#ifndef DEBUG
|
|
292
355
|
// Save stderr for result
|
|
@@ -334,36 +397,36 @@ PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt
|
|
|
334
397
|
return result;
|
|
335
398
|
}
|
|
336
399
|
|
|
337
|
-
typedef struct
|
|
400
|
+
typedef struct plStmts
|
|
338
401
|
{
|
|
339
|
-
|
|
402
|
+
Node **stmts;
|
|
340
403
|
int stmts_buf_size;
|
|
341
404
|
int stmts_count;
|
|
342
|
-
}
|
|
405
|
+
} plStmts;
|
|
343
406
|
|
|
344
|
-
static bool
|
|
407
|
+
static bool stmts_walker(Node *node, plStmts *state)
|
|
345
408
|
{
|
|
346
409
|
bool result;
|
|
347
410
|
MemoryContext ccxt = CurrentMemoryContext;
|
|
348
411
|
|
|
349
412
|
if (node == NULL) return false;
|
|
350
413
|
|
|
351
|
-
if (IsA(node, CreateFunctionStmt))
|
|
414
|
+
if (IsA(node, CreateFunctionStmt) || IsA(node, DoStmt))
|
|
352
415
|
{
|
|
353
416
|
if (state->stmts_count >= state->stmts_buf_size)
|
|
354
417
|
{
|
|
355
418
|
state->stmts_buf_size *= 2;
|
|
356
|
-
state->stmts = (
|
|
419
|
+
state->stmts = (Node**) repalloc(state->stmts, state->stmts_buf_size * sizeof(Node*));
|
|
357
420
|
}
|
|
358
|
-
state->stmts[state->stmts_count] = (
|
|
421
|
+
state->stmts[state->stmts_count] = (Node *) node;
|
|
359
422
|
state->stmts_count++;
|
|
360
423
|
} else if (IsA(node, RawStmt)) {
|
|
361
|
-
return
|
|
424
|
+
return stmts_walker((Node *) ((RawStmt *) node)->stmt, state);
|
|
362
425
|
}
|
|
363
426
|
|
|
364
427
|
PG_TRY();
|
|
365
428
|
{
|
|
366
|
-
result = raw_expression_tree_walker(node,
|
|
429
|
+
result = raw_expression_tree_walker(node, stmts_walker, (void*) state);
|
|
367
430
|
}
|
|
368
431
|
PG_CATCH();
|
|
369
432
|
{
|
|
@@ -381,7 +444,7 @@ PgQueryPlpgsqlParseResult pg_query_parse_plpgsql(const char* input)
|
|
|
381
444
|
MemoryContext ctx = NULL;
|
|
382
445
|
PgQueryPlpgsqlParseResult result = {0};
|
|
383
446
|
PgQueryInternalParsetreeAndError parse_result;
|
|
384
|
-
|
|
447
|
+
plStmts statements;
|
|
385
448
|
size_t i;
|
|
386
449
|
|
|
387
450
|
ctx = pg_query_enter_memory_context();
|
|
@@ -394,10 +457,10 @@ PgQueryPlpgsqlParseResult pg_query_parse_plpgsql(const char* input)
|
|
|
394
457
|
}
|
|
395
458
|
|
|
396
459
|
statements.stmts_buf_size = 100;
|
|
397
|
-
statements.stmts = (
|
|
460
|
+
statements.stmts = (Node**) palloc(statements.stmts_buf_size * sizeof(Node*));
|
|
398
461
|
statements.stmts_count = 0;
|
|
399
462
|
|
|
400
|
-
|
|
463
|
+
stmts_walker((Node*) parse_result.tree, &statements);
|
|
401
464
|
|
|
402
465
|
if (statements.stmts_count == 0) {
|
|
403
466
|
result.plpgsql_funcs = strdup("[]");
|
|
@@ -74,6 +74,12 @@
|
|
|
74
74
|
|
|
75
75
|
static Node * _readNode(PgQuery__Node *msg);
|
|
76
76
|
|
|
77
|
+
static String *
|
|
78
|
+
_readString(PgQuery__String* msg)
|
|
79
|
+
{
|
|
80
|
+
return makeString(pstrdup(msg->sval));
|
|
81
|
+
}
|
|
82
|
+
|
|
77
83
|
#include "pg_query_enum_defs.c"
|
|
78
84
|
#include "pg_query_readfuncs_defs.c"
|
|
79
85
|
|
|
@@ -96,17 +102,45 @@ static Node * _readNode(PgQuery__Node *msg)
|
|
|
96
102
|
case PG_QUERY__NODE__NODE_INTEGER:
|
|
97
103
|
return (Node *) makeInteger(msg->integer->ival);
|
|
98
104
|
case PG_QUERY__NODE__NODE_FLOAT:
|
|
99
|
-
return (Node *) makeFloat(pstrdup(msg->float_->
|
|
105
|
+
return (Node *) makeFloat(pstrdup(msg->float_->fval));
|
|
106
|
+
case PG_QUERY__NODE__NODE_BOOLEAN:
|
|
107
|
+
return (Node *) makeBoolean(msg->boolean->boolval);
|
|
100
108
|
case PG_QUERY__NODE__NODE_STRING:
|
|
101
|
-
return (Node *) makeString(pstrdup(msg->string->
|
|
109
|
+
return (Node *) makeString(pstrdup(msg->string->sval));
|
|
102
110
|
case PG_QUERY__NODE__NODE_BIT_STRING:
|
|
103
|
-
return (Node *) makeBitString(pstrdup(msg->bit_string->
|
|
104
|
-
case
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
return (Node *) makeBitString(pstrdup(msg->bit_string->bsval));
|
|
112
|
+
case PG_QUERY__NODE__NODE_A_CONST: {
|
|
113
|
+
A_Const *ac = makeNode(A_Const);
|
|
114
|
+
ac->location = msg->a_const->location;
|
|
115
|
+
|
|
116
|
+
if (msg->a_const->isnull) {
|
|
117
|
+
ac->isnull = true;
|
|
118
|
+
} else {
|
|
119
|
+
switch (msg->a_const->val_case) {
|
|
120
|
+
case PG_QUERY__A__CONST__VAL_IVAL:
|
|
121
|
+
ac->val.ival = *makeInteger(msg->a_const->ival->ival);
|
|
122
|
+
break;
|
|
123
|
+
case PG_QUERY__A__CONST__VAL_FVAL:
|
|
124
|
+
ac->val.fval = *makeFloat(pstrdup(msg->a_const->fval->fval));
|
|
125
|
+
break;
|
|
126
|
+
case PG_QUERY__A__CONST__VAL_BOOLVAL:
|
|
127
|
+
ac->val.boolval = *makeBoolean(msg->a_const->boolval->boolval);
|
|
128
|
+
break;
|
|
129
|
+
case PG_QUERY__A__CONST__VAL_SVAL:
|
|
130
|
+
ac->val.sval = *makeString(pstrdup(msg->a_const->sval->sval));
|
|
131
|
+
break;
|
|
132
|
+
case PG_QUERY__A__CONST__VAL_BSVAL:
|
|
133
|
+
ac->val.bsval = *makeBitString(pstrdup(msg->a_const->bsval->bsval));
|
|
134
|
+
break;
|
|
135
|
+
case PG_QUERY__A__CONST__VAL__NOT_SET:
|
|
136
|
+
case _PG_QUERY__A__CONST__VAL__CASE_IS_INT_SIZE:
|
|
137
|
+
Assert(false);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
109
140
|
}
|
|
141
|
+
|
|
142
|
+
return (Node *) ac;
|
|
143
|
+
}
|
|
110
144
|
case PG_QUERY__NODE__NODE_LIST:
|
|
111
145
|
return (Node *) _readList(msg->list);
|
|
112
146
|
case PG_QUERY__NODE__NODE__NOT_SET:
|
|
@@ -14,7 +14,7 @@ VALUE pg_query_ruby_fingerprint(VALUE self, VALUE input);
|
|
|
14
14
|
VALUE pg_query_ruby_scan(VALUE self, VALUE input);
|
|
15
15
|
VALUE pg_query_ruby_hash_xxh3_64(VALUE self, VALUE input, VALUE seed);
|
|
16
16
|
|
|
17
|
-
void Init_pg_query(void)
|
|
17
|
+
__attribute__((visibility ("default"))) void Init_pg_query(void)
|
|
18
18
|
{
|
|
19
19
|
VALUE cPgQuery;
|
|
20
20
|
|
|
@@ -101,8 +101,9 @@ PgQueryScanResult pg_query_scan(const char* input)
|
|
|
101
101
|
output_tokens[i]->token = tok;
|
|
102
102
|
|
|
103
103
|
switch (tok) {
|
|
104
|
-
#define PG_KEYWORD(a,b,c) case b: output_tokens[i]->keyword_kind = c + 1; break;
|
|
104
|
+
#define PG_KEYWORD(a,b,c,d) case b: output_tokens[i]->keyword_kind = c + 1; break;
|
|
105
105
|
#include "parser/kwlist.h"
|
|
106
|
+
#undef PG_KEYWORD
|
|
106
107
|
default: output_tokens[i]->keyword_kind = 0;
|
|
107
108
|
}
|
|
108
109
|
}
|
|
@@ -59,8 +59,9 @@ PgQuerySplitResult pg_query_split_with_scanner(const char* input)
|
|
|
59
59
|
{
|
|
60
60
|
int tok = core_yylex(&yylval, &yylloc, yyscanner);
|
|
61
61
|
switch (tok) {
|
|
62
|
-
#define PG_KEYWORD(a,b,c) case b: is_keyword = true; break;
|
|
62
|
+
#define PG_KEYWORD(a,b,c,d) case b: is_keyword = true; break;
|
|
63
63
|
#include "parser/kwlist.h"
|
|
64
|
+
#undef PG_KEYWORD
|
|
64
65
|
default: is_keyword = false;
|
|
65
66
|
}
|
|
66
67
|
if (is_keyword)
|
|
@@ -88,7 +89,7 @@ PgQuerySplitResult pg_query_split_with_scanner(const char* input)
|
|
|
88
89
|
{
|
|
89
90
|
int tok = core_yylex(&yylval, &yylloc, yyscanner);
|
|
90
91
|
switch (tok) {
|
|
91
|
-
#define PG_KEYWORD(a,b,c) case b: is_keyword = true; break;
|
|
92
|
+
#define PG_KEYWORD(a,b,c,d) case b: is_keyword = true; break;
|
|
92
93
|
#include "parser/kwlist.h"
|
|
93
94
|
default: is_keyword = false;
|
|
94
95
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* and implementing search-path-controlled searches.
|
|
17
17
|
*
|
|
18
18
|
*
|
|
19
|
-
* Portions Copyright (c) 1996-
|
|
19
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
20
20
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
21
21
|
*
|
|
22
22
|
* IDENTIFICATION
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
#include "utils/inval.h"
|
|
63
63
|
#include "utils/lsyscache.h"
|
|
64
64
|
#include "utils/memutils.h"
|
|
65
|
+
#include "utils/snapmgr.h"
|
|
65
66
|
#include "utils/syscache.h"
|
|
66
67
|
#include "utils/varlena.h"
|
|
67
68
|
|
|
@@ -213,6 +214,7 @@ static void RemoveTempRelations(Oid tempNamespaceId);
|
|
|
213
214
|
static void RemoveTempRelationsCallback(int code, Datum arg);
|
|
214
215
|
static void NamespaceCallback(Datum arg, int cacheid, uint32 hashvalue);
|
|
215
216
|
static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
217
|
+
bool include_out_arguments, int pronargs,
|
|
216
218
|
int **argnumbers);
|
|
217
219
|
|
|
218
220
|
|
|
@@ -355,6 +357,12 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
355
357
|
* of additional args (which can be retrieved from the function's
|
|
356
358
|
* proargdefaults entry).
|
|
357
359
|
*
|
|
360
|
+
* If include_out_arguments is true, then OUT-mode arguments are considered to
|
|
361
|
+
* be included in the argument list. Their types are included in the returned
|
|
362
|
+
* arrays, and argnumbers are indexes in proallargtypes not proargtypes.
|
|
363
|
+
* We also set nominalnargs to be the length of proallargtypes not proargtypes.
|
|
364
|
+
* Otherwise OUT-mode arguments are ignored.
|
|
365
|
+
*
|
|
358
366
|
* It is not possible for nvargs and ndargs to both be nonzero in the same
|
|
359
367
|
* list entry, since default insertion allows matches to functions with more
|
|
360
368
|
* than nargs arguments while the variadic transformation requires the same
|
|
@@ -365,7 +373,8 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
365
373
|
* first any positional arguments, then the named arguments, then defaulted
|
|
366
374
|
* arguments (if needed and allowed by expand_defaults). The argnumbers[]
|
|
367
375
|
* array can be used to map this back to the catalog information.
|
|
368
|
-
* argnumbers[k] is set to the proargtypes index of the
|
|
376
|
+
* argnumbers[k] is set to the proargtypes or proallargtypes index of the
|
|
377
|
+
* k'th call argument.
|
|
369
378
|
*
|
|
370
379
|
* We search a single namespace if the function name is qualified, else
|
|
371
380
|
* all namespaces in the search path. In the multiple-namespace case,
|
|
@@ -389,7 +398,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
389
398
|
* such an entry it should react as though the call were ambiguous.
|
|
390
399
|
*
|
|
391
400
|
* If missing_ok is true, an empty list (NULL) is returned if the name was
|
|
392
|
-
* schema-
|
|
401
|
+
* schema-qualified with a schema that does not exist. Likewise if no
|
|
393
402
|
* candidate is found for other reasons.
|
|
394
403
|
*/
|
|
395
404
|
|
|
@@ -403,6 +412,10 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
403
412
|
* the function, in positions after the last positional argument, and there
|
|
404
413
|
* are defaults for all unsupplied arguments.
|
|
405
414
|
*
|
|
415
|
+
* If include_out_arguments is true, we are treating OUT arguments as
|
|
416
|
+
* included in the argument list. pronargs is the number of arguments
|
|
417
|
+
* we're considering (the length of either proargtypes or proallargtypes).
|
|
418
|
+
*
|
|
406
419
|
* The number of positional arguments is nargs - list_length(argnames).
|
|
407
420
|
* Note caller has already done basic checks on argument count.
|
|
408
421
|
*
|
|
@@ -427,8 +440,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
427
440
|
* Given a possibly-qualified operator name and exact input datatypes,
|
|
428
441
|
* look up the operator. Returns InvalidOid if not found.
|
|
429
442
|
*
|
|
430
|
-
* Pass oprleft = InvalidOid for a prefix op
|
|
431
|
-
* a postfix op.
|
|
443
|
+
* Pass oprleft = InvalidOid for a prefix op.
|
|
432
444
|
*
|
|
433
445
|
* If the operator name is not schema-qualified, it is sought in the current
|
|
434
446
|
* namespace search path. If the name is schema-qualified and the given
|
|
@@ -450,8 +462,8 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
450
462
|
* namespace case, we arrange for entries in earlier namespaces to mask
|
|
451
463
|
* identical entries in later namespaces.
|
|
452
464
|
*
|
|
453
|
-
* The returned items always have two args[] entries ---
|
|
454
|
-
*
|
|
465
|
+
* The returned items always have two args[] entries --- the first will be
|
|
466
|
+
* InvalidOid for a prefix oprkind. nargs is always 2, too.
|
|
455
467
|
*/
|
|
456
468
|
#define SPACE_PER_OP MAXALIGN(offsetof(struct _FuncCandidateList, args) + \
|
|
457
469
|
2 * sizeof(Oid))
|
|
@@ -676,7 +688,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
676
688
|
|
|
677
689
|
/*
|
|
678
690
|
* QualifiedNameGetCreationNamespace
|
|
679
|
-
* Given a possibly-qualified name for an object (in List-of-
|
|
691
|
+
* Given a possibly-qualified name for an object (in List-of-Strings
|
|
680
692
|
* format), determine what namespace the object should be created in.
|
|
681
693
|
* Also extract and return the object name (last component of list).
|
|
682
694
|
*
|
|
@@ -709,7 +721,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
|
|
|
709
721
|
* This is used primarily to form error messages, and so we do not quote
|
|
710
722
|
* the list elements, for the sake of legibility.
|
|
711
723
|
*
|
|
712
|
-
* In most scenarios the list elements should always be
|
|
724
|
+
* In most scenarios the list elements should always be String values,
|
|
713
725
|
* but we also allow A_Star for the convenience of ColumnRef processing.
|
|
714
726
|
*/
|
|
715
727
|
char *
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* pg_proc.c
|
|
10
10
|
* routines to support manipulation of the pg_proc relation
|
|
11
11
|
*
|
|
12
|
-
* Portions Copyright (c) 1996-
|
|
12
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
13
13
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
14
14
|
*
|
|
15
15
|
*
|
|
@@ -38,8 +38,11 @@
|
|
|
38
38
|
#include "mb/pg_wchar.h"
|
|
39
39
|
#include "miscadmin.h"
|
|
40
40
|
#include "nodes/nodeFuncs.h"
|
|
41
|
+
#include "parser/analyze.h"
|
|
41
42
|
#include "parser/parse_coerce.h"
|
|
42
43
|
#include "parser/parse_type.h"
|
|
44
|
+
#include "pgstat.h"
|
|
45
|
+
#include "rewrite/rewriteHandler.h"
|
|
43
46
|
#include "tcop/pquery.h"
|
|
44
47
|
#include "tcop/tcopprot.h"
|
|
45
48
|
#include "utils/acl.h"
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* Support routines for various kinds of object creation.
|
|
11
11
|
*
|
|
12
12
|
*
|
|
13
|
-
* Portions Copyright (c) 1996-
|
|
13
|
+
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
|
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
15
15
|
*
|
|
16
16
|
*
|
|
@@ -92,6 +92,11 @@ defGetInt32(DefElem *def)
|
|
|
92
92
|
*/
|
|
93
93
|
|
|
94
94
|
|
|
95
|
+
/*
|
|
96
|
+
* Extract an OID value from a DefElem.
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
|
|
95
100
|
/*
|
|
96
101
|
* Extract a possibly-qualified name (as a List of Strings) from a DefElem.
|
|
97
102
|
*/
|
|
@@ -115,3 +120,8 @@ defGetInt32(DefElem *def)
|
|
|
115
120
|
* Extract a list of string values (otherwise uninterpreted) from a DefElem.
|
|
116
121
|
*/
|
|
117
122
|
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* Raise an error about a conflicting DefElem.
|
|
126
|
+
*/
|
|
127
|
+
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* bms_is_empty() in preference to testing for NULL.)
|
|
24
24
|
*
|
|
25
25
|
*
|
|
26
|
-
* Copyright (c) 2003-
|
|
26
|
+
* Copyright (c) 2003-2022, PostgreSQL Global Development Group
|
|
27
27
|
*
|
|
28
28
|
* IDENTIFICATION
|
|
29
29
|
* src/backend/nodes/bitmapset.c
|
|
@@ -233,6 +233,8 @@ bms_free(Bitmapset *a)
|
|
|
233
233
|
|
|
234
234
|
/*
|
|
235
235
|
* bms_nonempty_difference - do sets have a nonempty difference?
|
|
236
|
+
*
|
|
237
|
+
* i.e., are any members set in 'a' that are not also set in 'b'.
|
|
236
238
|
*/
|
|
237
239
|
|
|
238
240
|
|