pg_query 5.1.0 → 6.1.0
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 +30 -0
- data/README.md +1 -1
- data/Rakefile +4 -4
- data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
- data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
- data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
- data/ext/pg_query/extconf.rb +20 -6
- data/ext/pg_query/include/pg_query.h +4 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
- data/ext/pg_query/include/postgres/access/amapi.h +14 -3
- data/ext/pg_query/include/postgres/access/attmap.h +1 -1
- data/ext/pg_query/include/postgres/access/attnum.h +1 -1
- data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
- data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
- data/ext/pg_query/include/postgres/access/clog.h +2 -3
- data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
- data/ext/pg_query/include/postgres/access/detoast.h +1 -1
- data/ext/pg_query/include/postgres/access/genam.h +17 -4
- data/ext/pg_query/include/postgres/access/gin.h +1 -1
- data/ext/pg_query/include/postgres/access/htup.h +1 -1
- data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
- data/ext/pg_query/include/postgres/access/itup.h +3 -3
- data/ext/pg_query/include/postgres/access/parallel.h +1 -2
- data/ext/pg_query/include/postgres/access/printtup.h +1 -1
- data/ext/pg_query/include/postgres/access/relation.h +1 -1
- data/ext/pg_query/include/postgres/access/relscan.h +1 -1
- data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
- data/ext/pg_query/include/postgres/access/sdir.h +1 -1
- data/ext/pg_query/include/postgres/access/skey.h +1 -1
- data/ext/pg_query/include/postgres/access/slru.h +218 -0
- data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
- data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
- data/ext/pg_query/include/postgres/access/table.h +1 -1
- data/ext/pg_query/include/postgres/access/tableam.h +35 -25
- data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
- data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
- data/ext/pg_query/include/postgres/access/transam.h +50 -7
- data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
- data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
- data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
- data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
- data/ext/pg_query/include/postgres/access/twophase.h +2 -2
- data/ext/pg_query/include/postgres/access/xact.h +5 -5
- data/ext/pg_query/include/postgres/access/xlog.h +20 -12
- data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
- data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
- data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
- data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
- data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
- data/ext/pg_query/include/postgres/c.h +32 -37
- data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
- data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
- data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
- data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
- data/ext/pg_query/include/postgres/catalog/index.h +22 -18
- data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
- data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
- data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
- data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
- data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
- data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
- data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
- data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
- data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
- data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
- data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
- data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
- data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
- data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
- data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
- data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
- data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
- data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
- data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
- data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
- data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
- data/ext/pg_query/include/postgres/commands/async.h +2 -6
- data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
- data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
- data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
- data/ext/pg_query/include/postgres/commands/explain.h +19 -3
- data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
- data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
- data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
- data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
- data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
- data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
- data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
- data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
- data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
- data/ext/pg_query/include/postgres/common/int.h +79 -4
- data/ext/pg_query/include/postgres/common/keywords.h +1 -1
- data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
- data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
- data/ext/pg_query/include/postgres/common/relpath.h +4 -4
- data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
- data/ext/pg_query/include/postgres/common/sha2.h +1 -1
- data/ext/pg_query/include/postgres/common/string.h +1 -1
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
- data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
- data/ext/pg_query/include/postgres/executor/executor.h +6 -5
- data/ext/pg_query/include/postgres/executor/functions.h +2 -1
- data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
- data/ext/pg_query/include/postgres/executor/spi.h +2 -8
- data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
- data/ext/pg_query/include/postgres/fmgr.h +2 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
- data/ext/pg_query/include/postgres/funcapi.h +2 -2
- data/ext/pg_query/include/postgres/gram.h +871 -830
- data/ext/pg_query/include/postgres/gramparse.h +1 -1
- data/ext/pg_query/include/postgres/jit/jit.h +4 -3
- data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
- data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
- data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
- data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
- data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
- data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
- data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
- data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
- data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
- data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
- data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
- data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
- data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
- data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
- data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
- data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
- data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
- data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
- data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/postgres/miscadmin.h +72 -52
- data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
- data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
- data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
- data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
- data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
- data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
- data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
- data/ext/pg_query/include/postgres/nodes/params.h +1 -1
- data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
- data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
- data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
- data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
- data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
- data/ext/pg_query/include/postgres/nodes/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
- data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
- data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/postgres/nodes/value.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
- data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
- data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
- data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
- data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
- data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
- data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
- data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
- data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
- data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
- data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
- data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
- data/ext/pg_query/include/postgres/parser/parser.h +3 -3
- data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
- data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
- data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
- data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/postgres/pg_config.h +53 -45
- data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
- data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
- data/ext/pg_query/include/postgres/pg_trace.h +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +13 -11
- data/ext/pg_query/include/postgres/pgtime.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
- data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
- data/ext/pg_query/include/postgres/plpgsql.h +15 -13
- data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
- data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
- data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
- data/ext/pg_query/include/postgres/port/atomics.h +93 -6
- data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
- data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
- data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
- data/ext/pg_query/include/postgres/port/simd.h +48 -1
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
- data/ext/pg_query/include/postgres/port.h +39 -4
- data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres/postgres.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
- data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
- data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
- data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
- data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
- data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
- data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
- data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
- data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
- data/ext/pg_query/include/postgres/regex/regex.h +92 -9
- data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
- data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
- data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
- data/ext/pg_query/include/postgres/replication/origin.h +1 -1
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
- data/ext/pg_query/include/postgres/replication/slot.h +45 -5
- data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
- data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
- data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
- data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
- data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
- data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
- data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/postgres/storage/block.h +1 -1
- data/ext/pg_query/include/postgres/storage/buf.h +1 -1
- data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
- data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
- data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
- data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
- data/ext/pg_query/include/postgres/storage/fd.h +30 -13
- data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
- data/ext/pg_query/include/postgres/storage/item.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
- data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
- data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
- data/ext/pg_query/include/postgres/storage/latch.h +4 -2
- data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
- data/ext/pg_query/include/postgres/storage/lock.h +19 -19
- data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
- data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
- data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
- data/ext/pg_query/include/postgres/storage/off.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
- data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
- data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
- data/ext/pg_query/include/postgres/storage/proc.h +48 -26
- data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
- data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
- data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
- data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
- data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
- data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
- data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
- data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
- data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
- data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
- data/ext/pg_query/include/postgres/storage/spin.h +1 -1
- data/ext/pg_query/include/postgres/storage/standby.h +13 -3
- data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/postgres/storage/sync.h +4 -4
- data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
- data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
- data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
- data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
- data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
- data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
- data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
- data/ext/pg_query/include/postgres/utils/acl.h +19 -7
- data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/postgres/utils/array.h +1 -2
- data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
- data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
- data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
- data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
- data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
- data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
- data/ext/pg_query/include/postgres/utils/date.h +1 -1
- data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
- data/ext/pg_query/include/postgres/utils/datum.h +1 -1
- data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
- data/ext/pg_query/include/postgres/utils/elog.h +3 -8
- data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
- data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/postgres/utils/float.h +1 -1
- data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
- data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
- data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/postgres/utils/guc.h +20 -6
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
- data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
- data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
- data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
- data/ext/pg_query/include/postgres/utils/inval.h +1 -1
- data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
- data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
- data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
- data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
- data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
- data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
- data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
- data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
- data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
- data/ext/pg_query/include/postgres/utils/portal.h +10 -10
- data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
- data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
- data/ext/pg_query/include/postgres/utils/rel.h +14 -15
- data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
- data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
- data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
- data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
- data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
- data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
- data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
- data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
- data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
- data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
- data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
- data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
- data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
- data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
- data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
- data/ext/pg_query/include/postgres/utils/xml.h +4 -4
- data/ext/pg_query/include/postgres/varatt.h +1 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
- data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
- data/ext/pg_query/pg_query.pb-c.c +6598 -3739
- data/ext/pg_query/pg_query_normalize.c +42 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
- data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/postgres_deparse.c +601 -172
- data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
- data/ext/pg_query/src_backend_commands_define.c +2 -3
- data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +3 -7
- data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
- data/ext/pg_query/src_backend_parser_parser.c +8 -8
- data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
- data/ext/pg_query/src_backend_parser_scansup.c +2 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
- data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
- data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
- data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
- data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
- data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
- data/ext/pg_query/src_common_encnames.c +43 -44
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +511 -466
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +3 -3
- data/ext/pg_query/src_common_stringinfo.c +18 -1
- data/ext/pg_query/src_common_wchar.c +92 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_port_pg_bitutils.c +173 -28
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +15 -18
- data/ext/pg_query/src_port_strerror.c +1 -3
- data/ext/pg_query/src_port_strlcpy.c +1 -1
- data/lib/pg_query/fingerprint.rb +3 -5
- data/lib/pg_query/param_refs.rb +2 -2
- data/lib/pg_query/parse.rb +5 -7
- data/lib/pg_query/parse_error.rb +1 -0
- data/lib/pg_query/pg_query_pb.rb +27 -25
- data/lib/pg_query/scan.rb +1 -0
- data/lib/pg_query/treewalker.rb +38 -15
- data/lib/pg_query/truncate.rb +18 -20
- data/lib/pg_query/version.rb +1 -1
- metadata +31 -82
- data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
- data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
- /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
/*--------------------------------------------------------------------
|
2
2
|
* Symbols referenced in this file:
|
3
3
|
* - bms_copy
|
4
|
+
* - bms_is_valid_set
|
4
5
|
* - bms_equal
|
5
6
|
* - bms_free
|
6
7
|
* - bms_next_member
|
@@ -15,11 +16,31 @@
|
|
15
16
|
*
|
16
17
|
* A bitmap set can represent any set of nonnegative integers, although
|
17
18
|
* it is mainly intended for sets where the maximum value is not large,
|
18
|
-
* say at most a few hundred. By convention, we always represent
|
19
|
-
*
|
20
|
-
*
|
21
|
-
*
|
22
|
-
*
|
19
|
+
* say at most a few hundred. By convention, we always represent a set with
|
20
|
+
* the minimum possible number of words, i.e, there are never any trailing
|
21
|
+
* zero words. Enforcing this requires that an empty set is represented as
|
22
|
+
* NULL. Because an empty Bitmapset is represented as NULL, a non-NULL
|
23
|
+
* Bitmapset always has at least 1 Bitmapword. We can exploit this fact to
|
24
|
+
* speed up various loops over the Bitmapset's words array by using "do while"
|
25
|
+
* loops instead of "for" loops. This means the code does not waste time
|
26
|
+
* checking the loop condition before the first iteration. For Bitmapsets
|
27
|
+
* containing only a single word (likely the majority of them) this halves the
|
28
|
+
* number of loop condition checks.
|
29
|
+
*
|
30
|
+
* Callers must ensure that the set returned by functions in this file which
|
31
|
+
* adjust the members of an existing set is assigned to all pointers pointing
|
32
|
+
* to that existing set. No guarantees are made that we'll ever modify the
|
33
|
+
* existing set in-place and return it.
|
34
|
+
*
|
35
|
+
* To help find bugs caused by callers failing to record the return value of
|
36
|
+
* the function which manipulates an existing set, we support building with
|
37
|
+
* REALLOCATE_BITMAPSETS. This results in the set being reallocated each time
|
38
|
+
* the set is altered and the existing being pfreed. This is useful as if any
|
39
|
+
* references still exist to the old set, we're more likely to notice as
|
40
|
+
* any users of the old set will be accessing pfree'd memory. This option is
|
41
|
+
* only intended to be used for debugging.
|
42
|
+
*
|
43
|
+
* Copyright (c) 2003-2024, PostgreSQL Global Development Group
|
23
44
|
*
|
24
45
|
* IDENTIFICATION
|
25
46
|
* src/backend/nodes/bitmapset.c
|
@@ -61,21 +82,49 @@
|
|
61
82
|
|
62
83
|
#define HAS_MULTIPLE_ONES(x) ((bitmapword) RIGHTMOST_ONE(x) != (x))
|
63
84
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
85
|
+
#ifdef USE_ASSERT_CHECKING
|
86
|
+
/*
|
87
|
+
* bms_is_valid_set - for cassert builds to check for valid sets
|
88
|
+
*/
|
89
|
+
static bool
|
90
|
+
bms_is_valid_set(const Bitmapset *a)
|
91
|
+
{
|
92
|
+
/* NULL is the correct representation of an empty set */
|
93
|
+
if (a == NULL)
|
94
|
+
return true;
|
95
|
+
|
96
|
+
/* check the node tag is set correctly. pfree'd pointer, maybe? */
|
97
|
+
if (!IsA(a, Bitmapset))
|
98
|
+
return false;
|
99
|
+
|
100
|
+
/* trailing zero words are not allowed */
|
101
|
+
if (a->words[a->nwords - 1] == 0)
|
102
|
+
return false;
|
103
|
+
|
104
|
+
return true;
|
105
|
+
}
|
75
106
|
#endif
|
76
107
|
|
77
|
-
|
108
|
+
#ifdef REALLOCATE_BITMAPSETS
|
109
|
+
/*
|
110
|
+
* bms_copy_and_free
|
111
|
+
* Only required in REALLOCATE_BITMAPSETS builds. Provide a simple way
|
112
|
+
* to return a freshly allocated set and pfree the original.
|
113
|
+
*
|
114
|
+
* Note: callers which accept multiple sets must be careful when calling this
|
115
|
+
* function to clone one parameter as other parameters may point to the same
|
116
|
+
* set. A good option is to call this just before returning the resulting
|
117
|
+
* set.
|
118
|
+
*/
|
119
|
+
static Bitmapset *
|
120
|
+
bms_copy_and_free(Bitmapset *a)
|
121
|
+
{
|
122
|
+
Bitmapset *c = bms_copy(a);
|
78
123
|
|
124
|
+
bms_free(a);
|
125
|
+
return c;
|
126
|
+
}
|
127
|
+
#endif
|
79
128
|
|
80
129
|
/*
|
81
130
|
* bms_copy - make a palloc'd copy of a bitmapset
|
@@ -86,8 +135,11 @@ bms_copy(const Bitmapset *a)
|
|
86
135
|
Bitmapset *result;
|
87
136
|
size_t size;
|
88
137
|
|
138
|
+
Assert(bms_is_valid_set(a));
|
139
|
+
|
89
140
|
if (a == NULL)
|
90
141
|
return NULL;
|
142
|
+
|
91
143
|
size = BITMAPSET_SIZE(a->nwords);
|
92
144
|
result = (Bitmapset *) palloc(size);
|
93
145
|
memcpy(result, a, size);
|
@@ -95,20 +147,16 @@ bms_copy(const Bitmapset *a)
|
|
95
147
|
}
|
96
148
|
|
97
149
|
/*
|
98
|
-
* bms_equal - are two bitmapsets equal?
|
99
|
-
*
|
100
|
-
* This is logical not physical equality; in particular, a NULL pointer will
|
101
|
-
* be reported as equal to a palloc'd value containing no members.
|
150
|
+
* bms_equal - are two bitmapsets equal? or both NULL?
|
102
151
|
*/
|
103
152
|
bool
|
104
153
|
bms_equal(const Bitmapset *a, const Bitmapset *b)
|
105
154
|
{
|
106
|
-
const Bitmapset *shorter;
|
107
|
-
const Bitmapset *longer;
|
108
|
-
int shortlen;
|
109
|
-
int longlen;
|
110
155
|
int i;
|
111
156
|
|
157
|
+
Assert(bms_is_valid_set(a));
|
158
|
+
Assert(bms_is_valid_set(b));
|
159
|
+
|
112
160
|
/* Handle cases where either input is NULL */
|
113
161
|
if (a == NULL)
|
114
162
|
{
|
@@ -118,30 +166,19 @@ bms_equal(const Bitmapset *a, const Bitmapset *b)
|
|
118
166
|
}
|
119
167
|
else if (b == NULL)
|
120
168
|
return false;
|
121
|
-
|
122
|
-
if
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
shorter = b;
|
130
|
-
longer = a;
|
131
|
-
}
|
132
|
-
/* And process */
|
133
|
-
shortlen = shorter->nwords;
|
134
|
-
for (i = 0; i < shortlen; i++)
|
135
|
-
{
|
136
|
-
if (shorter->words[i] != longer->words[i])
|
137
|
-
return false;
|
138
|
-
}
|
139
|
-
longlen = longer->nwords;
|
140
|
-
for (; i < longlen; i++)
|
169
|
+
|
170
|
+
/* can't be equal if the word counts don't match */
|
171
|
+
if (a->nwords != b->nwords)
|
172
|
+
return false;
|
173
|
+
|
174
|
+
/* check each word matches */
|
175
|
+
i = 0;
|
176
|
+
do
|
141
177
|
{
|
142
|
-
if (
|
178
|
+
if (a->words[i] != b->words[i])
|
143
179
|
return false;
|
144
|
-
}
|
180
|
+
} while (++i < a->nwords);
|
181
|
+
|
145
182
|
return true;
|
146
183
|
}
|
147
184
|
|
@@ -174,23 +211,20 @@ bms_free(Bitmapset *a)
|
|
174
211
|
|
175
212
|
|
176
213
|
/*
|
177
|
-
*
|
178
|
-
*
|
179
|
-
*/
|
180
|
-
|
181
|
-
|
182
|
-
/*
|
183
|
-
* bms_union - set union
|
214
|
+
* bms_union - create and return a new set containing all members from both
|
215
|
+
* input sets. Both inputs are left unmodified.
|
184
216
|
*/
|
185
217
|
|
186
218
|
|
187
219
|
/*
|
188
|
-
* bms_intersect - set
|
220
|
+
* bms_intersect - create and return a new set containing members which both
|
221
|
+
* input sets have in common. Both inputs are left unmodified.
|
189
222
|
*/
|
190
223
|
|
191
224
|
|
192
225
|
/*
|
193
|
-
* bms_difference - set
|
226
|
+
* bms_difference - create and return a new set containing all the members of
|
227
|
+
* 'a' without the members of 'b'.
|
194
228
|
*/
|
195
229
|
|
196
230
|
|
@@ -266,17 +300,21 @@ bms_num_members(const Bitmapset *a)
|
|
266
300
|
int nwords;
|
267
301
|
int wordnum;
|
268
302
|
|
303
|
+
Assert(bms_is_valid_set(a));
|
304
|
+
|
269
305
|
if (a == NULL)
|
270
306
|
return 0;
|
307
|
+
|
271
308
|
nwords = a->nwords;
|
272
|
-
|
309
|
+
wordnum = 0;
|
310
|
+
do
|
273
311
|
{
|
274
312
|
bitmapword w = a->words[wordnum];
|
275
313
|
|
276
314
|
/* No need to count the bits in a zero word */
|
277
315
|
if (w != 0)
|
278
316
|
result += bmw_popcount(w);
|
279
|
-
}
|
317
|
+
} while (++wordnum < nwords);
|
280
318
|
return result;
|
281
319
|
}
|
282
320
|
|
@@ -287,46 +325,40 @@ bms_num_members(const Bitmapset *a)
|
|
287
325
|
*/
|
288
326
|
|
289
327
|
|
290
|
-
/*
|
291
|
-
* bms_is_empty_internal - is a set empty?
|
292
|
-
*
|
293
|
-
* This is now used only locally, to detect cases where a function has
|
294
|
-
* computed an empty set that we must now get rid of. Hence, we can
|
295
|
-
* assume the input isn't NULL.
|
296
|
-
*/
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
/*
|
301
|
-
* These operations all "recycle" their non-const inputs, ie, either
|
302
|
-
* return the modified input or pfree it if it can't hold the result.
|
303
|
-
*
|
304
|
-
* These should generally be used in the style
|
305
|
-
*
|
306
|
-
* foo = bms_add_member(foo, x);
|
307
|
-
*/
|
308
|
-
|
309
328
|
|
310
329
|
/*
|
311
330
|
* bms_add_member - add a specified member to set
|
312
331
|
*
|
313
|
-
*
|
332
|
+
* 'a' is recycled when possible.
|
314
333
|
*/
|
315
|
-
|
334
|
+
#ifdef REALLOCATE_BITMAPSETS
|
335
|
+
#endif
|
316
336
|
|
317
337
|
/*
|
318
338
|
* bms_del_member - remove a specified member from set
|
319
339
|
*
|
320
340
|
* No error if x is not currently a member of set
|
321
341
|
*
|
322
|
-
*
|
342
|
+
* 'a' is recycled when possible.
|
323
343
|
*/
|
324
|
-
|
344
|
+
#ifdef REALLOCATE_BITMAPSETS
|
345
|
+
#endif
|
325
346
|
|
326
347
|
/*
|
327
|
-
* bms_add_members - like bms_union, but left input is recycled
|
348
|
+
* bms_add_members - like bms_union, but left input is recycled when possible
|
328
349
|
*/
|
350
|
+
#ifdef REALLOCATE_BITMAPSETS
|
351
|
+
#endif
|
352
|
+
#ifdef REALLOCATE_BITMAPSETS
|
353
|
+
#endif
|
329
354
|
|
355
|
+
/*
|
356
|
+
* bms_replace_members
|
357
|
+
* Remove all existing members from 'a' and repopulate the set with members
|
358
|
+
* from 'b', recycling 'a', when possible.
|
359
|
+
*/
|
360
|
+
#ifdef REALLOCATE_BITMAPSETS
|
361
|
+
#endif
|
330
362
|
|
331
363
|
/*
|
332
364
|
* bms_add_range
|
@@ -336,22 +368,36 @@ bms_num_members(const Bitmapset *a)
|
|
336
368
|
* using this function will be faster when the range is large as we work at
|
337
369
|
* the bitmapword level rather than at bit level.
|
338
370
|
*/
|
339
|
-
|
371
|
+
#ifdef REALLOCATE_BITMAPSETS
|
372
|
+
#endif
|
373
|
+
#ifdef REALLOCATE_BITMAPSETS
|
374
|
+
#endif
|
340
375
|
|
341
376
|
/*
|
342
|
-
* bms_int_members - like bms_intersect, but left input is recycled
|
377
|
+
* bms_int_members - like bms_intersect, but left input is recycled when
|
378
|
+
* possible
|
343
379
|
*/
|
344
|
-
|
380
|
+
#ifdef REALLOCATE_BITMAPSETS
|
381
|
+
#endif
|
345
382
|
|
346
383
|
/*
|
347
|
-
* bms_del_members -
|
384
|
+
* bms_del_members - delete members in 'a' that are set in 'b'. 'a' is
|
385
|
+
* recycled when possible.
|
348
386
|
*/
|
349
|
-
|
387
|
+
#ifdef REALLOCATE_BITMAPSETS
|
388
|
+
#endif
|
389
|
+
#ifdef REALLOCATE_BITMAPSETS
|
390
|
+
#endif
|
350
391
|
|
351
392
|
/*
|
352
|
-
* bms_join - like bms_union, but *
|
393
|
+
* bms_join - like bms_union, but *either* input *may* be recycled
|
353
394
|
*/
|
354
|
-
|
395
|
+
#ifdef REALLOCATE_BITMAPSETS
|
396
|
+
#endif
|
397
|
+
#ifdef REALLOCATE_BITMAPSETS
|
398
|
+
#endif
|
399
|
+
#ifdef REALLOCATE_BITMAPSETS
|
400
|
+
#endif
|
355
401
|
|
356
402
|
/*
|
357
403
|
* bms_next_member - find next member of a set
|
@@ -379,6 +425,8 @@ bms_next_member(const Bitmapset *a, int prevbit)
|
|
379
425
|
int wordnum;
|
380
426
|
bitmapword mask;
|
381
427
|
|
428
|
+
Assert(bms_is_valid_set(a));
|
429
|
+
|
382
430
|
if (a == NULL)
|
383
431
|
return -2;
|
384
432
|
nwords = a->nwords;
|
@@ -435,11 +483,6 @@ bms_next_member(const Bitmapset *a, int prevbit)
|
|
435
483
|
|
436
484
|
/*
|
437
485
|
* bms_hash_value - compute a hash key for a Bitmapset
|
438
|
-
*
|
439
|
-
* Note: we must ensure that any two bitmapsets that are bms_equal() will
|
440
|
-
* hash to the same value; in practice this means that trailing all-zero
|
441
|
-
* words must not affect the result. Hence we strip those before applying
|
442
|
-
* hash_any().
|
443
486
|
*/
|
444
487
|
|
445
488
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
* Copy functions for Postgres tree nodes.
|
15
15
|
*
|
16
16
|
*
|
17
|
-
* Portions Copyright (c) 1996-
|
17
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
18
18
|
* Portions Copyright (c) 1994, Regents of the University of California
|
19
19
|
*
|
20
20
|
* IDENTIFICATION
|
@@ -19,7 +19,7 @@
|
|
19
19
|
* "x" to be considered equal() to another reference to "x" in the query.
|
20
20
|
*
|
21
21
|
*
|
22
|
-
* Portions Copyright (c) 1996-
|
22
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
23
23
|
* Portions Copyright (c) 1994, Regents of the University of California
|
24
24
|
*
|
25
25
|
* IDENTIFICATION
|
@@ -16,7 +16,7 @@
|
|
16
16
|
* and GetExtensibleNodeMethods to get information about a previously
|
17
17
|
* registered type of extensible node.
|
18
18
|
*
|
19
|
-
* Portions Copyright (c) 1996-
|
19
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
20
20
|
* Portions Copyright (c) 1994, Regents of the University of California
|
21
21
|
*
|
22
22
|
* IDENTIFICATION
|
@@ -13,7 +13,6 @@
|
|
13
13
|
* - new_head_cell
|
14
14
|
* - list_make3_impl
|
15
15
|
* - list_make4_impl
|
16
|
-
* - list_delete_cell
|
17
16
|
* - list_delete_nth_cell
|
18
17
|
* - list_free
|
19
18
|
* - list_free_private
|
@@ -31,7 +30,7 @@
|
|
31
30
|
* See comments in pg_list.h.
|
32
31
|
*
|
33
32
|
*
|
34
|
-
* Portions Copyright (c) 1996-
|
33
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
35
34
|
* Portions Copyright (c) 1994, Regents of the University of California
|
36
35
|
*
|
37
36
|
*
|
@@ -42,6 +41,7 @@
|
|
42
41
|
*/
|
43
42
|
#include "postgres.h"
|
44
43
|
|
44
|
+
#include "common/int.h"
|
45
45
|
#include "nodes/pg_list.h"
|
46
46
|
#include "port/pg_bitutils.h"
|
47
47
|
#include "utils/memdebug.h"
|
@@ -635,11 +635,7 @@ list_delete_nth_cell(List *list, int n)
|
|
635
635
|
* Note that this takes time proportional to the distance to the end of the
|
636
636
|
* list, since the following entries must be moved.
|
637
637
|
*/
|
638
|
-
|
639
|
-
list_delete_cell(List *list, ListCell *cell)
|
640
|
-
{
|
641
|
-
return list_delete_nth_cell(list, cell - list->elements);
|
642
|
-
}
|
638
|
+
|
643
639
|
|
644
640
|
/*
|
645
641
|
* Delete the first cell in list that matches datum, if any.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
/*--------------------------------------------------------------------
|
2
2
|
* Symbols referenced in this file:
|
3
3
|
* - makeDefElem
|
4
|
+
* - makeStringConst
|
4
5
|
* - makeTypeNameFromNameList
|
5
6
|
* - makeDefElemExtended
|
6
7
|
* - makeRangeVar
|
@@ -8,13 +9,14 @@
|
|
8
9
|
* - makeAlias
|
9
10
|
* - makeSimpleA_Expr
|
10
11
|
* - makeGroupingSet
|
12
|
+
* - makeJsonTablePathSpec
|
13
|
+
* - makeJsonFormat
|
11
14
|
* - makeTypeName
|
12
15
|
* - makeFuncCall
|
13
16
|
* - makeA_Expr
|
14
|
-
* - makeJsonFormat
|
15
17
|
* - makeJsonIsPredicate
|
18
|
+
* - makeJsonBehavior
|
16
19
|
* - makeJsonValueExpr
|
17
|
-
* - makeJsonEncoding
|
18
20
|
* - makeJsonKeyValue
|
19
21
|
* - makeBoolExpr
|
20
22
|
*--------------------------------------------------------------------
|
@@ -26,7 +28,7 @@
|
|
26
28
|
* creator functions for various nodes. The functions here are for the
|
27
29
|
* most frequently created nodes.
|
28
30
|
*
|
29
|
-
* Portions Copyright (c) 1996-
|
31
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
30
32
|
* Portions Copyright (c) 1994, Regents of the University of California
|
31
33
|
*
|
32
34
|
*
|
@@ -41,7 +43,6 @@
|
|
41
43
|
#include "catalog/pg_type.h"
|
42
44
|
#include "nodes/makefuncs.h"
|
43
45
|
#include "nodes/nodeFuncs.h"
|
44
|
-
#include "utils/errcodes.h"
|
45
46
|
#include "utils/lsyscache.h"
|
46
47
|
|
47
48
|
|
@@ -268,6 +269,22 @@ makeTypeNameFromNameList(List *names)
|
|
268
269
|
*/
|
269
270
|
|
270
271
|
|
272
|
+
/*
|
273
|
+
* makeStringConst -
|
274
|
+
* build a A_Const node of type T_String for given string
|
275
|
+
*/
|
276
|
+
Node *
|
277
|
+
makeStringConst(char *str, int location)
|
278
|
+
{
|
279
|
+
A_Const *n = makeNode(A_Const);
|
280
|
+
|
281
|
+
n->val.sval.type = T_String;
|
282
|
+
n->val.sval.sval = str;
|
283
|
+
n->location = location;
|
284
|
+
|
285
|
+
return (Node *) n;
|
286
|
+
}
|
287
|
+
|
271
288
|
/*
|
272
289
|
* makeDefElem -
|
273
290
|
* build a DefElem node
|
@@ -457,24 +474,19 @@ makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr,
|
|
457
474
|
}
|
458
475
|
|
459
476
|
/*
|
460
|
-
*
|
461
|
-
*
|
477
|
+
* makeJsonBehavior -
|
478
|
+
* creates a JsonBehavior node
|
462
479
|
*/
|
463
|
-
|
464
|
-
|
480
|
+
JsonBehavior *
|
481
|
+
makeJsonBehavior(JsonBehaviorType btype, Node *expr, int location)
|
465
482
|
{
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
ereport(ERROR,
|
474
|
-
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
475
|
-
errmsg("unrecognized JSON encoding: %s", name));
|
476
|
-
|
477
|
-
return JS_ENC_DEFAULT;
|
483
|
+
JsonBehavior *behavior = makeNode(JsonBehavior);
|
484
|
+
|
485
|
+
behavior->btype = btype;
|
486
|
+
behavior->expr = expr;
|
487
|
+
behavior->location = location;
|
488
|
+
|
489
|
+
return behavior;
|
478
490
|
}
|
479
491
|
|
480
492
|
/*
|
@@ -510,3 +522,30 @@ makeJsonIsPredicate(Node *expr, JsonFormat *format, JsonValueType item_type,
|
|
510
522
|
|
511
523
|
return (Node *) n;
|
512
524
|
}
|
525
|
+
|
526
|
+
/*
|
527
|
+
* makeJsonTablePathSpec -
|
528
|
+
* Make JsonTablePathSpec node from given path string and name (if any)
|
529
|
+
*/
|
530
|
+
JsonTablePathSpec *
|
531
|
+
makeJsonTablePathSpec(char *string, char *name, int string_location,
|
532
|
+
int name_location)
|
533
|
+
{
|
534
|
+
JsonTablePathSpec *pathspec = makeNode(JsonTablePathSpec);
|
535
|
+
|
536
|
+
Assert(string != NULL);
|
537
|
+
pathspec->string = makeStringConst(string, string_location);
|
538
|
+
if (name != NULL)
|
539
|
+
pathspec->name = pstrdup(name);
|
540
|
+
|
541
|
+
pathspec->name_location = name_location;
|
542
|
+
pathspec->location = string_location;
|
543
|
+
|
544
|
+
return pathspec;
|
545
|
+
}
|
546
|
+
|
547
|
+
/*
|
548
|
+
* makeJsonTablePath -
|
549
|
+
* Make JsonTablePath node for given path string and name
|
550
|
+
*/
|
551
|
+
|