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
@@ -10,7 +10,7 @@
|
|
10
10
|
* pl_handler.c - Handler for the PL/pgSQL
|
11
11
|
* procedural language
|
12
12
|
*
|
13
|
-
* Portions Copyright (c) 1996-
|
13
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
14
14
|
* Portions Copyright (c) 1994, Regents of the University of California
|
15
15
|
*
|
16
16
|
*
|
@@ -12,7 +12,7 @@
|
|
12
12
|
* pl_reserved_kwlist_d.h
|
13
13
|
* List of keywords represented as a ScanKeywordList.
|
14
14
|
*
|
15
|
-
* Portions Copyright (c) 1996-
|
15
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
16
16
|
* Portions Copyright (c) 1994, Regents of the University of California
|
17
17
|
*
|
18
18
|
* NOTES
|
@@ -26,6 +26,7 @@
|
|
26
26
|
* - plpgsql_peek
|
27
27
|
* - plpgsql_token_is_unreserved_keyword
|
28
28
|
* - plpgsql_append_source_text
|
29
|
+
* - plpgsql_token_length
|
29
30
|
* - plpgsql_peek2
|
30
31
|
* - plpgsql_scanner_finish
|
31
32
|
* - plpgsql_latest_lineno
|
@@ -38,7 +39,7 @@
|
|
38
39
|
* lexical scanning for PL/pgSQL
|
39
40
|
*
|
40
41
|
*
|
41
|
-
* Portions Copyright (c) 1996-
|
42
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
42
43
|
* Portions Copyright (c) 1994, Regents of the University of California
|
43
44
|
*
|
44
45
|
*
|
@@ -230,6 +231,8 @@ plpgsql_yylex(void)
|
|
230
231
|
tok1 = T_DATUM;
|
231
232
|
else
|
232
233
|
tok1 = T_CWORD;
|
234
|
+
/* Adjust token length to include A.B.C */
|
235
|
+
aux1.leng = aux5.lloc - aux1.lloc + aux5.leng;
|
233
236
|
}
|
234
237
|
else
|
235
238
|
{
|
@@ -243,6 +246,8 @@ plpgsql_yylex(void)
|
|
243
246
|
tok1 = T_DATUM;
|
244
247
|
else
|
245
248
|
tok1 = T_CWORD;
|
249
|
+
/* Adjust token length to include A.B */
|
250
|
+
aux1.leng = aux3.lloc - aux1.lloc + aux3.leng;
|
246
251
|
}
|
247
252
|
}
|
248
253
|
else
|
@@ -256,6 +261,8 @@ plpgsql_yylex(void)
|
|
256
261
|
tok1 = T_DATUM;
|
257
262
|
else
|
258
263
|
tok1 = T_CWORD;
|
264
|
+
/* Adjust token length to include A.B */
|
265
|
+
aux1.leng = aux3.lloc - aux1.lloc + aux3.leng;
|
259
266
|
}
|
260
267
|
}
|
261
268
|
else
|
@@ -344,6 +351,17 @@ plpgsql_yylex(void)
|
|
344
351
|
return tok1;
|
345
352
|
}
|
346
353
|
|
354
|
+
/*
|
355
|
+
* Return the length of the token last returned by plpgsql_yylex().
|
356
|
+
*
|
357
|
+
* In the case of compound tokens, the length includes all the parts.
|
358
|
+
*/
|
359
|
+
int
|
360
|
+
plpgsql_token_length(void)
|
361
|
+
{
|
362
|
+
return plpgsql_yyleng;
|
363
|
+
}
|
364
|
+
|
347
365
|
/*
|
348
366
|
* Internal yylex function. This wraps the core lexer and adds one feature:
|
349
367
|
* a token pushback stack. We also make a couple of trivial single-token
|
@@ -12,7 +12,7 @@
|
|
12
12
|
* pl_unreserved_kwlist_d.h
|
13
13
|
* List of keywords represented as a ScanKeywordList.
|
14
14
|
*
|
15
|
-
* Portions Copyright (c) 1996-
|
15
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
16
16
|
* Portions Copyright (c) 1994, Regents of the University of California
|
17
17
|
*
|
18
18
|
* NOTES
|
@@ -15,7 +15,7 @@
|
|
15
15
|
* pg_bitutils.c
|
16
16
|
* Miscellaneous functions for bit-wise operations.
|
17
17
|
*
|
18
|
-
* Copyright (c) 2019-
|
18
|
+
* Copyright (c) 2019-2024, PostgreSQL Global Development Group
|
19
19
|
*
|
20
20
|
* IDENTIFICATION
|
21
21
|
* src/port/pg_bitutils.c
|
@@ -115,18 +115,26 @@ const uint8 pg_number_of_ones[256] = {
|
|
115
115
|
4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
|
116
116
|
};
|
117
117
|
|
118
|
-
static int
|
119
|
-
static int
|
118
|
+
static inline int pg_popcount32_slow(uint32 word);
|
119
|
+
static inline int pg_popcount64_slow(uint64 word);
|
120
|
+
static uint64 pg_popcount_slow(const char *buf, int bytes);
|
121
|
+
static uint64 pg_popcount_masked_slow(const char *buf, int bytes, bits8 mask);
|
120
122
|
|
121
123
|
#ifdef TRY_POPCNT_FAST
|
122
124
|
static bool pg_popcount_available(void);
|
123
125
|
static int pg_popcount32_choose(uint32 word);
|
124
126
|
static int pg_popcount64_choose(uint64 word);
|
125
|
-
static
|
126
|
-
static
|
127
|
+
static uint64 pg_popcount_choose(const char *buf, int bytes);
|
128
|
+
static uint64 pg_popcount_masked_choose(const char *buf, int bytes, bits8 mask);
|
129
|
+
static inline int pg_popcount32_fast(uint32 word);
|
130
|
+
static inline int pg_popcount64_fast(uint64 word);
|
131
|
+
static uint64 pg_popcount_fast(const char *buf, int bytes);
|
132
|
+
static uint64 pg_popcount_masked_fast(const char *buf, int bytes, bits8 mask);
|
127
133
|
|
128
134
|
int (*pg_popcount32) (uint32 word) = pg_popcount32_choose;
|
129
135
|
int (*pg_popcount64) (uint64 word) = pg_popcount64_choose;
|
136
|
+
uint64 (*pg_popcount_optimized) (const char *buf, int bytes) = pg_popcount_choose;
|
137
|
+
uint64 (*pg_popcount_masked_optimized) (const char *buf, int bytes, bits8 mask) = pg_popcount_masked_choose;
|
130
138
|
#endif /* TRY_POPCNT_FAST */
|
131
139
|
|
132
140
|
#ifdef TRY_POPCNT_FAST
|
@@ -156,45 +164,66 @@ pg_popcount_available(void)
|
|
156
164
|
* the function pointers so that subsequent calls are routed directly to
|
157
165
|
* the chosen implementation.
|
158
166
|
*/
|
159
|
-
static
|
160
|
-
|
167
|
+
static inline void
|
168
|
+
choose_popcount_functions(void)
|
161
169
|
{
|
162
170
|
if (pg_popcount_available())
|
163
171
|
{
|
164
172
|
pg_popcount32 = pg_popcount32_fast;
|
165
173
|
pg_popcount64 = pg_popcount64_fast;
|
174
|
+
pg_popcount_optimized = pg_popcount_fast;
|
175
|
+
pg_popcount_masked_optimized = pg_popcount_masked_fast;
|
166
176
|
}
|
167
177
|
else
|
168
178
|
{
|
169
179
|
pg_popcount32 = pg_popcount32_slow;
|
170
180
|
pg_popcount64 = pg_popcount64_slow;
|
181
|
+
pg_popcount_optimized = pg_popcount_slow;
|
182
|
+
pg_popcount_masked_optimized = pg_popcount_masked_slow;
|
171
183
|
}
|
172
184
|
|
185
|
+
#ifdef USE_AVX512_POPCNT_WITH_RUNTIME_CHECK
|
186
|
+
if (pg_popcount_avx512_available())
|
187
|
+
{
|
188
|
+
pg_popcount_optimized = pg_popcount_avx512;
|
189
|
+
pg_popcount_masked_optimized = pg_popcount_masked_avx512;
|
190
|
+
}
|
191
|
+
#endif
|
192
|
+
}
|
193
|
+
|
194
|
+
static int
|
195
|
+
pg_popcount32_choose(uint32 word)
|
196
|
+
{
|
197
|
+
choose_popcount_functions();
|
173
198
|
return pg_popcount32(word);
|
174
199
|
}
|
175
200
|
|
176
201
|
static int
|
177
202
|
pg_popcount64_choose(uint64 word)
|
178
203
|
{
|
179
|
-
|
180
|
-
{
|
181
|
-
pg_popcount32 = pg_popcount32_fast;
|
182
|
-
pg_popcount64 = pg_popcount64_fast;
|
183
|
-
}
|
184
|
-
else
|
185
|
-
{
|
186
|
-
pg_popcount32 = pg_popcount32_slow;
|
187
|
-
pg_popcount64 = pg_popcount64_slow;
|
188
|
-
}
|
189
|
-
|
204
|
+
choose_popcount_functions();
|
190
205
|
return pg_popcount64(word);
|
191
206
|
}
|
192
207
|
|
208
|
+
static uint64
|
209
|
+
pg_popcount_choose(const char *buf, int bytes)
|
210
|
+
{
|
211
|
+
choose_popcount_functions();
|
212
|
+
return pg_popcount_optimized(buf, bytes);
|
213
|
+
}
|
214
|
+
|
215
|
+
static uint64
|
216
|
+
pg_popcount_masked_choose(const char *buf, int bytes, bits8 mask)
|
217
|
+
{
|
218
|
+
choose_popcount_functions();
|
219
|
+
return pg_popcount_masked(buf, bytes, mask);
|
220
|
+
}
|
221
|
+
|
193
222
|
/*
|
194
223
|
* pg_popcount32_fast
|
195
224
|
* Return the number of 1 bits set in word
|
196
225
|
*/
|
197
|
-
static int
|
226
|
+
static inline int
|
198
227
|
pg_popcount32_fast(uint32 word)
|
199
228
|
{
|
200
229
|
#ifdef _MSC_VER
|
@@ -211,7 +240,7 @@ __asm__ __volatile__(" popcntl %1,%0\n":"=q"(res):"rm"(word):"cc");
|
|
211
240
|
* pg_popcount64_fast
|
212
241
|
* Return the number of 1 bits set in word
|
213
242
|
*/
|
214
|
-
static int
|
243
|
+
static inline int
|
215
244
|
pg_popcount64_fast(uint64 word)
|
216
245
|
{
|
217
246
|
#ifdef _MSC_VER
|
@@ -224,6 +253,102 @@ __asm__ __volatile__(" popcntq %1,%0\n":"=q"(res):"rm"(word):"cc");
|
|
224
253
|
#endif
|
225
254
|
}
|
226
255
|
|
256
|
+
/*
|
257
|
+
* pg_popcount_fast
|
258
|
+
* Returns the number of 1-bits in buf
|
259
|
+
*/
|
260
|
+
static uint64
|
261
|
+
pg_popcount_fast(const char *buf, int bytes)
|
262
|
+
{
|
263
|
+
uint64 popcnt = 0;
|
264
|
+
|
265
|
+
#if SIZEOF_VOID_P >= 8
|
266
|
+
/* Process in 64-bit chunks if the buffer is aligned. */
|
267
|
+
if (buf == (const char *) TYPEALIGN(8, buf))
|
268
|
+
{
|
269
|
+
const uint64 *words = (const uint64 *) buf;
|
270
|
+
|
271
|
+
while (bytes >= 8)
|
272
|
+
{
|
273
|
+
popcnt += pg_popcount64_fast(*words++);
|
274
|
+
bytes -= 8;
|
275
|
+
}
|
276
|
+
|
277
|
+
buf = (const char *) words;
|
278
|
+
}
|
279
|
+
#else
|
280
|
+
/* Process in 32-bit chunks if the buffer is aligned. */
|
281
|
+
if (buf == (const char *) TYPEALIGN(4, buf))
|
282
|
+
{
|
283
|
+
const uint32 *words = (const uint32 *) buf;
|
284
|
+
|
285
|
+
while (bytes >= 4)
|
286
|
+
{
|
287
|
+
popcnt += pg_popcount32_fast(*words++);
|
288
|
+
bytes -= 4;
|
289
|
+
}
|
290
|
+
|
291
|
+
buf = (const char *) words;
|
292
|
+
}
|
293
|
+
#endif
|
294
|
+
|
295
|
+
/* Process any remaining bytes */
|
296
|
+
while (bytes--)
|
297
|
+
popcnt += pg_number_of_ones[(unsigned char) *buf++];
|
298
|
+
|
299
|
+
return popcnt;
|
300
|
+
}
|
301
|
+
|
302
|
+
/*
|
303
|
+
* pg_popcount_masked_fast
|
304
|
+
* Returns the number of 1-bits in buf after applying the mask to each byte
|
305
|
+
*/
|
306
|
+
static uint64
|
307
|
+
pg_popcount_masked_fast(const char *buf, int bytes, bits8 mask)
|
308
|
+
{
|
309
|
+
uint64 popcnt = 0;
|
310
|
+
|
311
|
+
#if SIZEOF_VOID_P >= 8
|
312
|
+
/* Process in 64-bit chunks if the buffer is aligned */
|
313
|
+
uint64 maskv = ~UINT64CONST(0) / 0xFF * mask;
|
314
|
+
|
315
|
+
if (buf == (const char *) TYPEALIGN(8, buf))
|
316
|
+
{
|
317
|
+
const uint64 *words = (const uint64 *) buf;
|
318
|
+
|
319
|
+
while (bytes >= 8)
|
320
|
+
{
|
321
|
+
popcnt += pg_popcount64_fast(*words++ & maskv);
|
322
|
+
bytes -= 8;
|
323
|
+
}
|
324
|
+
|
325
|
+
buf = (const char *) words;
|
326
|
+
}
|
327
|
+
#else
|
328
|
+
/* Process in 32-bit chunks if the buffer is aligned. */
|
329
|
+
uint32 maskv = ~((uint32) 0) / 0xFF * mask;
|
330
|
+
|
331
|
+
if (buf == (const char *) TYPEALIGN(4, buf))
|
332
|
+
{
|
333
|
+
const uint32 *words = (const uint32 *) buf;
|
334
|
+
|
335
|
+
while (bytes >= 4)
|
336
|
+
{
|
337
|
+
popcnt += pg_popcount32_fast(*words++ & maskv);
|
338
|
+
bytes -= 4;
|
339
|
+
}
|
340
|
+
|
341
|
+
buf = (const char *) words;
|
342
|
+
}
|
343
|
+
#endif
|
344
|
+
|
345
|
+
/* Process any remaining bytes */
|
346
|
+
while (bytes--)
|
347
|
+
popcnt += pg_number_of_ones[(unsigned char) *buf++ & mask];
|
348
|
+
|
349
|
+
return popcnt;
|
350
|
+
}
|
351
|
+
|
227
352
|
#endif /* TRY_POPCNT_FAST */
|
228
353
|
|
229
354
|
|
@@ -231,7 +356,7 @@ __asm__ __volatile__(" popcntq %1,%0\n":"=q"(res):"rm"(word):"cc");
|
|
231
356
|
* pg_popcount32_slow
|
232
357
|
* Return the number of 1 bits set in word
|
233
358
|
*/
|
234
|
-
static int
|
359
|
+
static inline int
|
235
360
|
pg_popcount32_slow(uint32 word)
|
236
361
|
{
|
237
362
|
#ifdef HAVE__BUILTIN_POPCOUNT
|
@@ -253,7 +378,7 @@ pg_popcount32_slow(uint32 word)
|
|
253
378
|
* pg_popcount64_slow
|
254
379
|
* Return the number of 1 bits set in word
|
255
380
|
*/
|
256
|
-
static int
|
381
|
+
static inline int
|
257
382
|
pg_popcount64_slow(uint64 word)
|
258
383
|
{
|
259
384
|
#ifdef HAVE__BUILTIN_POPCOUNT
|
@@ -277,6 +402,22 @@ pg_popcount64_slow(uint64 word)
|
|
277
402
|
#endif /* HAVE__BUILTIN_POPCOUNT */
|
278
403
|
}
|
279
404
|
|
405
|
+
/*
|
406
|
+
* pg_popcount_slow
|
407
|
+
* Returns the number of 1-bits in buf
|
408
|
+
*/
|
409
|
+
#if SIZEOF_VOID_P >= 8
|
410
|
+
#else
|
411
|
+
#endif
|
412
|
+
|
413
|
+
/*
|
414
|
+
* pg_popcount_masked_slow
|
415
|
+
* Returns the number of 1-bits in buf after applying the mask to each byte
|
416
|
+
*/
|
417
|
+
#if SIZEOF_VOID_P >= 8
|
418
|
+
#else
|
419
|
+
#endif
|
420
|
+
|
280
421
|
#ifndef TRY_POPCNT_FAST
|
281
422
|
|
282
423
|
/*
|
@@ -298,12 +439,16 @@ pg_popcount64(uint64 word)
|
|
298
439
|
return pg_popcount64_slow(word);
|
299
440
|
}
|
300
441
|
|
301
|
-
#endif /* !TRY_POPCNT_FAST */
|
302
|
-
|
303
442
|
/*
|
304
|
-
*
|
443
|
+
* pg_popcount_optimized
|
305
444
|
* Returns the number of 1-bits in buf
|
306
445
|
*/
|
307
|
-
|
308
|
-
|
309
|
-
|
446
|
+
|
447
|
+
|
448
|
+
/*
|
449
|
+
* pg_popcount_masked_optimized
|
450
|
+
* Returns the number of 1-bits in buf after applying the mask to each byte
|
451
|
+
*/
|
452
|
+
|
453
|
+
|
454
|
+
#endif /* !TRY_POPCNT_FAST */
|
@@ -2,6 +2,7 @@
|
|
2
2
|
* Symbols referenced in this file:
|
3
3
|
* - pg_strcasecmp
|
4
4
|
* - pg_toupper
|
5
|
+
* - pg_strncasecmp
|
5
6
|
*--------------------------------------------------------------------
|
6
7
|
*/
|
7
8
|
|
@@ -25,7 +26,7 @@
|
|
25
26
|
* C library thinks the locale is.
|
26
27
|
*
|
27
28
|
*
|
28
|
-
* Portions Copyright (c) 1996-
|
29
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
29
30
|
*
|
30
31
|
* src/port/pgstrcasecmp.c
|
31
32
|
*
|
@@ -72,7 +73,34 @@ pg_strcasecmp(const char *s1, const char *s2)
|
|
72
73
|
* Case-independent comparison of two not-necessarily-null-terminated strings.
|
73
74
|
* At most n bytes will be examined from each string.
|
74
75
|
*/
|
76
|
+
int
|
77
|
+
pg_strncasecmp(const char *s1, const char *s2, size_t n)
|
78
|
+
{
|
79
|
+
while (n-- > 0)
|
80
|
+
{
|
81
|
+
unsigned char ch1 = (unsigned char) *s1++;
|
82
|
+
unsigned char ch2 = (unsigned char) *s2++;
|
75
83
|
|
84
|
+
if (ch1 != ch2)
|
85
|
+
{
|
86
|
+
if (ch1 >= 'A' && ch1 <= 'Z')
|
87
|
+
ch1 += 'a' - 'A';
|
88
|
+
else if (IS_HIGHBIT_SET(ch1) && isupper(ch1))
|
89
|
+
ch1 = tolower(ch1);
|
90
|
+
|
91
|
+
if (ch2 >= 'A' && ch2 <= 'Z')
|
92
|
+
ch2 += 'a' - 'A';
|
93
|
+
else if (IS_HIGHBIT_SET(ch2) && isupper(ch2))
|
94
|
+
ch2 = tolower(ch2);
|
95
|
+
|
96
|
+
if (ch1 != ch2)
|
97
|
+
return (int) ch1 - (int) ch2;
|
98
|
+
}
|
99
|
+
if (ch1 == 0)
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
return 0;
|
103
|
+
}
|
76
104
|
|
77
105
|
/*
|
78
106
|
* Fold a character to upper case.
|
@@ -3,7 +3,7 @@
|
|
3
3
|
* - pg_vsnprintf
|
4
4
|
* - dopr
|
5
5
|
* - pg_snprintf
|
6
|
-
* -
|
6
|
+
* - pg_strchrnul
|
7
7
|
* - dostr
|
8
8
|
* - flushbuffer
|
9
9
|
* - find_arguments
|
@@ -30,7 +30,7 @@
|
|
30
30
|
* Copyright (c) 1983, 1995, 1996 Eric P. Allman
|
31
31
|
* Copyright (c) 1988, 1993
|
32
32
|
* The Regents of the University of California. All rights reserved.
|
33
|
-
* Portions Copyright (c) 1996-
|
33
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
34
34
|
*
|
35
35
|
* Redistribution and use in source and binary forms, with or without
|
36
36
|
* modification, are permitted provided that the following conditions
|
@@ -362,13 +362,22 @@ static void leading_pad(int zpad, int signvalue, int *padlen,
|
|
362
362
|
static void trailing_pad(int padlen, PrintfTarget *target);
|
363
363
|
|
364
364
|
/*
|
365
|
-
* If strchrnul exists (it's a glibc-ism
|
366
|
-
*
|
365
|
+
* If strchrnul exists (it's a glibc-ism, but since adopted by some other
|
366
|
+
* platforms), it's a good bit faster than the equivalent manual loop.
|
367
|
+
* Use it if possible, and if it doesn't exist, use this replacement.
|
367
368
|
*
|
368
369
|
* Note: glibc declares this as returning "char *", but that would require
|
369
370
|
* casting away const internally, so we don't follow that detail.
|
371
|
+
*
|
372
|
+
* Note: macOS has this too as of Sequoia 15.4, but it's hidden behind
|
373
|
+
* a deployment-target check that causes compile errors if the deployment
|
374
|
+
* target isn't high enough. So !HAVE_DECL_STRCHRNUL may mean "yes it's
|
375
|
+
* declared, but it doesn't compile". To avoid failing in that scenario,
|
376
|
+
* use a macro to avoid matching <string.h>'s name.
|
370
377
|
*/
|
371
|
-
#
|
378
|
+
#if !HAVE_DECL_STRCHRNUL
|
379
|
+
|
380
|
+
#define strchrnul pg_strchrnul
|
372
381
|
|
373
382
|
static inline const char *
|
374
383
|
strchrnul(const char *s, int c)
|
@@ -378,19 +387,7 @@ strchrnul(const char *s, int c)
|
|
378
387
|
return s;
|
379
388
|
}
|
380
389
|
|
381
|
-
#
|
382
|
-
|
383
|
-
/*
|
384
|
-
* glibc's <string.h> declares strchrnul only if _GNU_SOURCE is defined.
|
385
|
-
* While we typically use that on glibc platforms, configure will set
|
386
|
-
* HAVE_STRCHRNUL whether it's used or not. Fill in the missing declaration
|
387
|
-
* so that this file will compile cleanly with or without _GNU_SOURCE.
|
388
|
-
*/
|
389
|
-
#ifndef _GNU_SOURCE
|
390
|
-
extern char *strchrnul(const char *s, int c);
|
391
|
-
#endif
|
392
|
-
|
393
|
-
#endif /* HAVE_STRCHRNUL */
|
390
|
+
#endif /* !HAVE_DECL_STRCHRNUL */
|
394
391
|
|
395
392
|
|
396
393
|
/*
|
@@ -11,7 +11,7 @@
|
|
11
11
|
* strerror.c
|
12
12
|
* Replacements for standard strerror() and strerror_r() functions
|
13
13
|
*
|
14
|
-
* Portions Copyright (c) 1996-
|
14
|
+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
16
16
|
*
|
17
17
|
*
|
@@ -216,10 +216,8 @@ get_errno_symbol(int errnum)
|
|
216
216
|
return "ENOTCONN";
|
217
217
|
case ENOTDIR:
|
218
218
|
return "ENOTDIR";
|
219
|
-
#if defined(ENOTEMPTY) && (ENOTEMPTY != EEXIST) /* same code on AIX */
|
220
219
|
case ENOTEMPTY:
|
221
220
|
return "ENOTEMPTY";
|
222
|
-
#endif
|
223
221
|
case ENOTSOCK:
|
224
222
|
return "ENOTSOCK";
|
225
223
|
#ifdef ENOTSUP
|
data/lib/pg_query/fingerprint.rb
CHANGED
@@ -61,7 +61,7 @@ module PgQuery
|
|
61
61
|
|
62
62
|
def ignored_node_type?(node)
|
63
63
|
[A_Const, Alias, ParamRef, SetToDefault, IntList, OidList].include?(node.class) ||
|
64
|
-
node.is_a?(TypeCast) &&
|
64
|
+
(node.is_a?(TypeCast) && %i[a_const param_ref].include?(node.arg.node))
|
65
65
|
end
|
66
66
|
|
67
67
|
def node_protobuf_field_name_to_json_name(node_class, field)
|
@@ -112,12 +112,10 @@ module PgQuery
|
|
112
112
|
fingerprint_value(val.gsub(/\d{2,}/, ''), hash, postgres_node_name, postgres_field_name, true)
|
113
113
|
next
|
114
114
|
end
|
115
|
-
when 'stmt_len'
|
116
|
-
next if node.is_a?(RawStmt)
|
117
|
-
when 'stmt_location'
|
115
|
+
when 'stmt_len', 'stmt_location'
|
118
116
|
next if node.is_a?(RawStmt)
|
119
117
|
when 'kind'
|
120
|
-
if node.is_a?(A_Expr) &&
|
118
|
+
if node.is_a?(A_Expr) && %i[AEXPR_OP_ANY AEXPR_IN].include?(val)
|
121
119
|
fingerprint_value(:AEXPR_OP, hash, postgres_node_name, postgres_field_name, true)
|
122
120
|
next
|
123
121
|
end
|
data/lib/pg_query/param_refs.rb
CHANGED
@@ -3,11 +3,11 @@ module PgQuery
|
|
3
3
|
def param_refs # rubocop:disable Metrics/CyclomaticComplexity
|
4
4
|
results = []
|
5
5
|
|
6
|
-
|
6
|
+
treewalker_with_location! @tree do |_, _, node, location|
|
7
7
|
case node
|
8
8
|
when PgQuery::ParamRef
|
9
9
|
# Ignore param refs inside type casts, as these are already handled
|
10
|
-
next if location[-3
|
10
|
+
next if location[-3..] == %i[type_cast arg param_ref]
|
11
11
|
|
12
12
|
results << { 'location' => node.location,
|
13
13
|
'length' => param_ref_length(node) }
|
data/lib/pg_query/parse.rb
CHANGED
@@ -24,9 +24,7 @@ module PgQuery
|
|
24
24
|
end
|
25
25
|
|
26
26
|
class ParserResult
|
27
|
-
attr_reader :query
|
28
|
-
attr_reader :tree
|
29
|
-
attr_reader :warnings
|
27
|
+
attr_reader :query, :tree, :warnings
|
30
28
|
|
31
29
|
def initialize(query, tree, warnings = [])
|
32
30
|
@query = query
|
@@ -176,7 +174,7 @@ module PgQuery
|
|
176
174
|
# The following statement types are DDL (changing table structure)
|
177
175
|
when :alter_table_stmt
|
178
176
|
case statement.alter_table_stmt.objtype
|
179
|
-
when :OBJECT_INDEX # Index
|
177
|
+
when :OBJECT_INDEX # Index
|
180
178
|
# ignore `ALTER INDEX index_name`
|
181
179
|
else
|
182
180
|
from_clause_items << { item: PgQuery::Node.new(range_var: statement.alter_table_stmt.relation), type: :ddl }
|
@@ -230,11 +228,11 @@ module PgQuery
|
|
230
228
|
when :grant_stmt
|
231
229
|
objects = statement.grant_stmt.objects
|
232
230
|
case statement.grant_stmt.objtype
|
233
|
-
when :OBJECT_COLUMN # Column
|
231
|
+
when :OBJECT_COLUMN # Column
|
234
232
|
# FIXME
|
235
233
|
when :OBJECT_TABLE # Table
|
236
234
|
from_clause_items += objects.map { |o| { item: o, type: :ddl } }
|
237
|
-
when :OBJECT_SEQUENCE # Sequence
|
235
|
+
when :OBJECT_SEQUENCE # Sequence
|
238
236
|
# FIXME
|
239
237
|
end
|
240
238
|
when :lock_stmt
|
@@ -339,7 +337,7 @@ module PgQuery
|
|
339
337
|
@cte_names.uniq!
|
340
338
|
end
|
341
339
|
|
342
|
-
def statements_and_cte_names_for_with_clause(with_clause)
|
340
|
+
def statements_and_cte_names_for_with_clause(with_clause)
|
343
341
|
statements = []
|
344
342
|
cte_names = []
|
345
343
|
|