gitlab-pg_query 1.3.1 → 2.0.4
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 +217 -99
- data/README.md +92 -69
- data/Rakefile +85 -5
- data/ext/pg_query/extconf.rb +3 -40
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/amapi.h +246 -0
- data/ext/pg_query/include/access/attmap.h +52 -0
- data/ext/pg_query/include/access/attnum.h +64 -0
- data/ext/pg_query/include/access/clog.h +61 -0
- data/ext/pg_query/include/access/commit_ts.h +77 -0
- data/ext/pg_query/include/access/detoast.h +92 -0
- data/ext/pg_query/include/access/genam.h +228 -0
- data/ext/pg_query/include/access/gin.h +78 -0
- data/ext/pg_query/include/access/htup.h +89 -0
- data/ext/pg_query/include/access/htup_details.h +819 -0
- data/ext/pg_query/include/access/itup.h +161 -0
- data/ext/pg_query/include/access/parallel.h +82 -0
- data/ext/pg_query/include/access/printtup.h +35 -0
- data/ext/pg_query/include/access/relation.h +28 -0
- data/ext/pg_query/include/access/relscan.h +176 -0
- data/ext/pg_query/include/access/rmgr.h +35 -0
- data/ext/pg_query/include/access/rmgrlist.h +49 -0
- data/ext/pg_query/include/access/sdir.h +58 -0
- data/ext/pg_query/include/access/skey.h +151 -0
- data/ext/pg_query/include/access/stratnum.h +83 -0
- data/ext/pg_query/include/access/sysattr.h +29 -0
- data/ext/pg_query/include/access/table.h +27 -0
- data/ext/pg_query/include/access/tableam.h +1825 -0
- data/ext/pg_query/include/access/transam.h +265 -0
- data/ext/pg_query/include/access/tupconvert.h +51 -0
- data/ext/pg_query/include/access/tupdesc.h +154 -0
- data/ext/pg_query/include/access/tupmacs.h +247 -0
- data/ext/pg_query/include/access/twophase.h +61 -0
- data/ext/pg_query/include/access/xact.h +463 -0
- data/ext/pg_query/include/access/xlog.h +398 -0
- data/ext/pg_query/include/access/xlog_internal.h +330 -0
- data/ext/pg_query/include/access/xlogdefs.h +109 -0
- data/ext/pg_query/include/access/xloginsert.h +64 -0
- data/ext/pg_query/include/access/xlogreader.h +327 -0
- data/ext/pg_query/include/access/xlogrecord.h +227 -0
- data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
- data/ext/pg_query/include/c.h +1322 -0
- data/ext/pg_query/include/catalog/catalog.h +42 -0
- data/ext/pg_query/include/catalog/catversion.h +58 -0
- data/ext/pg_query/include/catalog/dependency.h +275 -0
- data/ext/pg_query/include/catalog/genbki.h +64 -0
- data/ext/pg_query/include/catalog/index.h +199 -0
- data/ext/pg_query/include/catalog/indexing.h +366 -0
- data/ext/pg_query/include/catalog/namespace.h +188 -0
- data/ext/pg_query/include/catalog/objectaccess.h +197 -0
- data/ext/pg_query/include/catalog/objectaddress.h +84 -0
- data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
- data/ext/pg_query/include/catalog/pg_am.h +60 -0
- data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
- data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
- data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
- data/ext/pg_query/include/catalog/pg_authid.h +58 -0
- data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
- data/ext/pg_query/include/catalog/pg_class.h +200 -0
- data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
- data/ext/pg_query/include/catalog/pg_collation.h +73 -0
- data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
- data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
- data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
- data/ext/pg_query/include/catalog/pg_control.h +250 -0
- data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
- data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_depend.h +73 -0
- data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_index.h +80 -0
- data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
- data/ext/pg_query/include/catalog/pg_language.h +67 -0
- data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
- data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
- data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
- data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
- data/ext/pg_query/include/catalog/pg_operator.h +102 -0
- data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
- data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_proc.h +211 -0
- data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
- data/ext/pg_query/include/catalog/pg_publication.h +115 -0
- data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
- data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
- data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
- data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
- data/ext/pg_query/include/catalog/pg_transform.h +45 -0
- data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
- data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
- data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
- data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
- data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
- data/ext/pg_query/include/catalog/pg_type.h +372 -0
- data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
- data/ext/pg_query/include/catalog/storage.h +48 -0
- data/ext/pg_query/include/commands/async.h +54 -0
- data/ext/pg_query/include/commands/dbcommands.h +35 -0
- data/ext/pg_query/include/commands/defrem.h +173 -0
- data/ext/pg_query/include/commands/event_trigger.h +88 -0
- data/ext/pg_query/include/commands/explain.h +127 -0
- data/ext/pg_query/include/commands/prepare.h +61 -0
- data/ext/pg_query/include/commands/tablespace.h +67 -0
- data/ext/pg_query/include/commands/trigger.h +277 -0
- data/ext/pg_query/include/commands/user.h +37 -0
- data/ext/pg_query/include/commands/vacuum.h +293 -0
- data/ext/pg_query/include/commands/variable.h +38 -0
- data/ext/pg_query/include/common/file_perm.h +56 -0
- data/ext/pg_query/include/common/hashfn.h +104 -0
- data/ext/pg_query/include/common/ip.h +37 -0
- data/ext/pg_query/include/common/keywords.h +33 -0
- data/ext/pg_query/include/common/kwlookup.h +44 -0
- data/ext/pg_query/include/common/relpath.h +90 -0
- data/ext/pg_query/include/common/string.h +19 -0
- data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
- data/ext/pg_query/include/datatype/timestamp.h +197 -0
- data/ext/pg_query/include/executor/execdesc.h +70 -0
- data/ext/pg_query/include/executor/executor.h +614 -0
- data/ext/pg_query/include/executor/functions.h +41 -0
- data/ext/pg_query/include/executor/instrument.h +101 -0
- data/ext/pg_query/include/executor/spi.h +175 -0
- data/ext/pg_query/include/executor/tablefunc.h +67 -0
- data/ext/pg_query/include/executor/tuptable.h +487 -0
- data/ext/pg_query/include/fmgr.h +775 -0
- data/ext/pg_query/include/funcapi.h +348 -0
- data/ext/pg_query/include/getaddrinfo.h +162 -0
- data/ext/pg_query/include/jit/jit.h +105 -0
- data/ext/pg_query/include/kwlist_d.h +1072 -0
- data/ext/pg_query/include/lib/ilist.h +727 -0
- data/ext/pg_query/include/lib/pairingheap.h +102 -0
- data/ext/pg_query/include/lib/simplehash.h +1059 -0
- data/ext/pg_query/include/lib/stringinfo.h +161 -0
- data/ext/pg_query/include/libpq/auth.h +29 -0
- data/ext/pg_query/include/libpq/crypt.h +46 -0
- data/ext/pg_query/include/libpq/hba.h +140 -0
- data/ext/pg_query/include/libpq/libpq-be.h +326 -0
- data/ext/pg_query/include/libpq/libpq.h +133 -0
- data/ext/pg_query/include/libpq/pqcomm.h +208 -0
- data/ext/pg_query/include/libpq/pqformat.h +210 -0
- data/ext/pg_query/include/libpq/pqsignal.h +42 -0
- data/ext/pg_query/include/mb/pg_wchar.h +672 -0
- data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
- data/ext/pg_query/include/miscadmin.h +476 -0
- data/ext/pg_query/include/nodes/bitmapset.h +122 -0
- data/ext/pg_query/include/nodes/execnodes.h +2520 -0
- data/ext/pg_query/include/nodes/extensible.h +160 -0
- data/ext/pg_query/include/nodes/lockoptions.h +61 -0
- data/ext/pg_query/include/nodes/makefuncs.h +108 -0
- data/ext/pg_query/include/nodes/memnodes.h +108 -0
- data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
- data/ext/pg_query/include/nodes/nodes.h +842 -0
- data/ext/pg_query/include/nodes/params.h +170 -0
- data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
- data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
- data/ext/pg_query/include/nodes/pg_list.h +605 -0
- data/ext/pg_query/include/nodes/plannodes.h +1251 -0
- data/ext/pg_query/include/nodes/primnodes.h +1541 -0
- data/ext/pg_query/include/nodes/print.h +34 -0
- data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
- data/ext/pg_query/include/nodes/value.h +61 -0
- data/ext/pg_query/include/optimizer/cost.h +206 -0
- data/ext/pg_query/include/optimizer/geqo.h +88 -0
- data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
- data/ext/pg_query/include/optimizer/optimizer.h +199 -0
- data/ext/pg_query/include/optimizer/paths.h +249 -0
- data/ext/pg_query/include/optimizer/planmain.h +119 -0
- data/ext/pg_query/include/parser/analyze.h +49 -0
- data/ext/pg_query/include/parser/gram.h +1067 -0
- data/ext/pg_query/include/parser/gramparse.h +75 -0
- data/ext/pg_query/include/parser/kwlist.h +477 -0
- data/ext/pg_query/include/parser/parse_agg.h +68 -0
- data/ext/pg_query/include/parser/parse_clause.h +54 -0
- data/ext/pg_query/include/parser/parse_coerce.h +97 -0
- data/ext/pg_query/include/parser/parse_collate.h +27 -0
- data/ext/pg_query/include/parser/parse_expr.h +26 -0
- data/ext/pg_query/include/parser/parse_func.h +73 -0
- data/ext/pg_query/include/parser/parse_node.h +327 -0
- data/ext/pg_query/include/parser/parse_oper.h +67 -0
- data/ext/pg_query/include/parser/parse_relation.h +123 -0
- data/ext/pg_query/include/parser/parse_target.h +46 -0
- data/ext/pg_query/include/parser/parse_type.h +60 -0
- data/ext/pg_query/include/parser/parser.h +41 -0
- data/ext/pg_query/include/parser/parsetree.h +61 -0
- data/ext/pg_query/include/parser/scanner.h +152 -0
- data/ext/pg_query/include/parser/scansup.h +30 -0
- data/ext/pg_query/include/partitioning/partdefs.h +26 -0
- data/ext/pg_query/include/pg_config.h +989 -0
- data/ext/pg_query/include/pg_config_ext.h +8 -0
- data/ext/pg_query/include/pg_config_manual.h +350 -0
- data/ext/pg_query/include/pg_config_os.h +8 -0
- data/ext/pg_query/include/pg_getopt.h +56 -0
- data/ext/pg_query/include/pg_query.h +121 -0
- data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
- data/ext/pg_query/include/pg_query_json_helper.c +61 -0
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
- data/ext/pg_query/include/pg_trace.h +17 -0
- data/ext/pg_query/include/pgstat.h +1487 -0
- data/ext/pg_query/include/pgtime.h +84 -0
- data/ext/pg_query/include/pl_gram.h +385 -0
- data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
- data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
- data/ext/pg_query/include/plerrcodes.h +990 -0
- data/ext/pg_query/include/plpgsql.h +1347 -0
- data/ext/pg_query/include/port.h +524 -0
- data/ext/pg_query/include/port/atomics.h +524 -0
- data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
- data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
- data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
- data/ext/pg_query/include/port/atomics/fallback.h +170 -0
- data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
- data/ext/pg_query/include/port/atomics/generic.h +401 -0
- data/ext/pg_query/include/port/pg_bitutils.h +226 -0
- data/ext/pg_query/include/port/pg_bswap.h +161 -0
- data/ext/pg_query/include/port/pg_crc32c.h +101 -0
- data/ext/pg_query/include/portability/instr_time.h +256 -0
- data/ext/pg_query/include/postgres.h +764 -0
- data/ext/pg_query/include/postgres_ext.h +74 -0
- data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
- data/ext/pg_query/include/postmaster/bgworker.h +161 -0
- data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
- data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
- data/ext/pg_query/include/postmaster/fork_process.h +17 -0
- data/ext/pg_query/include/postmaster/interrupt.h +32 -0
- data/ext/pg_query/include/postmaster/pgarch.h +39 -0
- data/ext/pg_query/include/postmaster/postmaster.h +77 -0
- data/ext/pg_query/include/postmaster/syslogger.h +98 -0
- data/ext/pg_query/include/postmaster/walwriter.h +21 -0
- data/ext/pg_query/include/protobuf-c.h +1106 -0
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
- data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
- data/ext/pg_query/include/regex/regex.h +184 -0
- data/ext/pg_query/include/replication/logicallauncher.h +31 -0
- data/ext/pg_query/include/replication/logicalproto.h +110 -0
- data/ext/pg_query/include/replication/logicalworker.h +19 -0
- data/ext/pg_query/include/replication/origin.h +73 -0
- data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
- data/ext/pg_query/include/replication/slot.h +219 -0
- data/ext/pg_query/include/replication/syncrep.h +115 -0
- data/ext/pg_query/include/replication/walreceiver.h +340 -0
- data/ext/pg_query/include/replication/walsender.h +74 -0
- data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
- data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
- data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
- data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
- data/ext/pg_query/include/storage/backendid.h +37 -0
- data/ext/pg_query/include/storage/block.h +121 -0
- data/ext/pg_query/include/storage/buf.h +46 -0
- data/ext/pg_query/include/storage/bufmgr.h +292 -0
- data/ext/pg_query/include/storage/bufpage.h +459 -0
- data/ext/pg_query/include/storage/condition_variable.h +62 -0
- data/ext/pg_query/include/storage/dsm.h +61 -0
- data/ext/pg_query/include/storage/dsm_impl.h +75 -0
- data/ext/pg_query/include/storage/fd.h +168 -0
- data/ext/pg_query/include/storage/ipc.h +81 -0
- data/ext/pg_query/include/storage/item.h +19 -0
- data/ext/pg_query/include/storage/itemid.h +184 -0
- data/ext/pg_query/include/storage/itemptr.h +206 -0
- data/ext/pg_query/include/storage/large_object.h +100 -0
- data/ext/pg_query/include/storage/latch.h +190 -0
- data/ext/pg_query/include/storage/lmgr.h +114 -0
- data/ext/pg_query/include/storage/lock.h +612 -0
- data/ext/pg_query/include/storage/lockdefs.h +59 -0
- data/ext/pg_query/include/storage/lwlock.h +232 -0
- data/ext/pg_query/include/storage/lwlocknames.h +51 -0
- data/ext/pg_query/include/storage/off.h +57 -0
- data/ext/pg_query/include/storage/pg_sema.h +61 -0
- data/ext/pg_query/include/storage/pg_shmem.h +90 -0
- data/ext/pg_query/include/storage/pmsignal.h +94 -0
- data/ext/pg_query/include/storage/predicate.h +87 -0
- data/ext/pg_query/include/storage/proc.h +333 -0
- data/ext/pg_query/include/storage/proclist_types.h +51 -0
- data/ext/pg_query/include/storage/procsignal.h +75 -0
- data/ext/pg_query/include/storage/relfilenode.h +99 -0
- data/ext/pg_query/include/storage/s_lock.h +1047 -0
- data/ext/pg_query/include/storage/sharedfileset.h +45 -0
- data/ext/pg_query/include/storage/shm_mq.h +85 -0
- data/ext/pg_query/include/storage/shm_toc.h +58 -0
- data/ext/pg_query/include/storage/shmem.h +81 -0
- data/ext/pg_query/include/storage/sinval.h +153 -0
- data/ext/pg_query/include/storage/sinvaladt.h +43 -0
- data/ext/pg_query/include/storage/smgr.h +109 -0
- data/ext/pg_query/include/storage/spin.h +77 -0
- data/ext/pg_query/include/storage/standby.h +91 -0
- data/ext/pg_query/include/storage/standbydefs.h +74 -0
- data/ext/pg_query/include/storage/sync.h +62 -0
- data/ext/pg_query/include/tcop/cmdtag.h +58 -0
- data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
- data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
- data/ext/pg_query/include/tcop/dest.h +149 -0
- data/ext/pg_query/include/tcop/fastpath.h +21 -0
- data/ext/pg_query/include/tcop/pquery.h +45 -0
- data/ext/pg_query/include/tcop/tcopprot.h +89 -0
- data/ext/pg_query/include/tcop/utility.h +108 -0
- data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
- data/ext/pg_query/include/utils/acl.h +312 -0
- data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
- data/ext/pg_query/include/utils/array.h +458 -0
- data/ext/pg_query/include/utils/builtins.h +127 -0
- data/ext/pg_query/include/utils/bytea.h +27 -0
- data/ext/pg_query/include/utils/catcache.h +231 -0
- data/ext/pg_query/include/utils/date.h +90 -0
- data/ext/pg_query/include/utils/datetime.h +343 -0
- data/ext/pg_query/include/utils/datum.h +68 -0
- data/ext/pg_query/include/utils/dsa.h +123 -0
- data/ext/pg_query/include/utils/dynahash.h +19 -0
- data/ext/pg_query/include/utils/elog.h +439 -0
- data/ext/pg_query/include/utils/errcodes.h +352 -0
- data/ext/pg_query/include/utils/expandeddatum.h +159 -0
- data/ext/pg_query/include/utils/expandedrecord.h +231 -0
- data/ext/pg_query/include/utils/float.h +356 -0
- data/ext/pg_query/include/utils/fmgroids.h +2657 -0
- data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
- data/ext/pg_query/include/utils/fmgrtab.h +48 -0
- data/ext/pg_query/include/utils/guc.h +443 -0
- data/ext/pg_query/include/utils/guc_tables.h +272 -0
- data/ext/pg_query/include/utils/hsearch.h +149 -0
- data/ext/pg_query/include/utils/inval.h +64 -0
- data/ext/pg_query/include/utils/lsyscache.h +197 -0
- data/ext/pg_query/include/utils/memdebug.h +82 -0
- data/ext/pg_query/include/utils/memutils.h +225 -0
- data/ext/pg_query/include/utils/numeric.h +76 -0
- data/ext/pg_query/include/utils/palloc.h +136 -0
- data/ext/pg_query/include/utils/partcache.h +102 -0
- data/ext/pg_query/include/utils/pg_locale.h +119 -0
- data/ext/pg_query/include/utils/pg_lsn.h +29 -0
- data/ext/pg_query/include/utils/pidfile.h +56 -0
- data/ext/pg_query/include/utils/plancache.h +235 -0
- data/ext/pg_query/include/utils/portal.h +241 -0
- data/ext/pg_query/include/utils/probes.h +114 -0
- data/ext/pg_query/include/utils/ps_status.h +25 -0
- data/ext/pg_query/include/utils/queryenvironment.h +74 -0
- data/ext/pg_query/include/utils/regproc.h +28 -0
- data/ext/pg_query/include/utils/rel.h +644 -0
- data/ext/pg_query/include/utils/relcache.h +151 -0
- data/ext/pg_query/include/utils/reltrigger.h +81 -0
- data/ext/pg_query/include/utils/resowner.h +86 -0
- data/ext/pg_query/include/utils/rls.h +50 -0
- data/ext/pg_query/include/utils/ruleutils.h +44 -0
- data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
- data/ext/pg_query/include/utils/snapmgr.h +158 -0
- data/ext/pg_query/include/utils/snapshot.h +206 -0
- data/ext/pg_query/include/utils/sortsupport.h +276 -0
- data/ext/pg_query/include/utils/syscache.h +219 -0
- data/ext/pg_query/include/utils/timeout.h +88 -0
- data/ext/pg_query/include/utils/timestamp.h +116 -0
- data/ext/pg_query/include/utils/tuplesort.h +277 -0
- data/ext/pg_query/include/utils/tuplestore.h +91 -0
- data/ext/pg_query/include/utils/typcache.h +202 -0
- data/ext/pg_query/include/utils/tzparser.h +39 -0
- data/ext/pg_query/include/utils/varlena.h +39 -0
- data/ext/pg_query/include/utils/xml.h +84 -0
- data/ext/pg_query/include/xxhash.h +5445 -0
- data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
- data/ext/pg_query/pg_query.c +104 -0
- data/ext/pg_query/pg_query.pb-c.c +37628 -0
- data/ext/pg_query/pg_query_deparse.c +9959 -0
- data/ext/pg_query/pg_query_fingerprint.c +295 -0
- data/ext/pg_query/pg_query_fingerprint.h +8 -0
- data/ext/pg_query/pg_query_internal.h +24 -0
- data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
- data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
- data/ext/pg_query/pg_query_normalize.c +439 -0
- data/ext/pg_query/pg_query_outfuncs.h +10 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
- data/ext/pg_query/pg_query_parse.c +148 -0
- data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
- data/ext/pg_query/pg_query_readfuncs.h +11 -0
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
- data/ext/pg_query/pg_query_ruby.c +108 -12
- data/ext/pg_query/pg_query_scan.c +173 -0
- data/ext/pg_query/pg_query_split.c +221 -0
- data/ext/pg_query/protobuf-c.c +3660 -0
- data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
- data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
- data/ext/pg_query/src_backend_commands_define.c +117 -0
- data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
- data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
- data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
- data/ext/pg_query/src_backend_nodes_list.c +922 -0
- data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
- data/ext/pg_query/src_backend_nodes_value.c +84 -0
- data/ext/pg_query/src_backend_parser_gram.c +47456 -0
- data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
- data/ext/pg_query/src_backend_parser_parser.c +497 -0
- data/ext/pg_query/src_backend_parser_scan.c +7091 -0
- data/ext/pg_query/src_backend_parser_scansup.c +160 -0
- data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
- data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
- data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
- data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
- data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
- data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
- data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
- data/ext/pg_query/src_common_encnames.c +158 -0
- data/ext/pg_query/src_common_keywords.c +39 -0
- data/ext/pg_query/src_common_kwlist_d.h +1081 -0
- data/ext/pg_query/src_common_kwlookup.c +91 -0
- data/ext/pg_query/src_common_psprintf.c +158 -0
- data/ext/pg_query/src_common_string.c +86 -0
- data/ext/pg_query/src_common_stringinfo.c +336 -0
- data/ext/pg_query/src_common_wchar.c +1651 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
- data/ext/pg_query/src_port_erand48.c +127 -0
- data/ext/pg_query/src_port_pg_bitutils.c +246 -0
- data/ext/pg_query/src_port_pgsleep.c +69 -0
- data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
- data/ext/pg_query/src_port_qsort.c +240 -0
- data/ext/pg_query/src_port_random.c +31 -0
- data/ext/pg_query/src_port_snprintf.c +1449 -0
- data/ext/pg_query/src_port_strerror.c +324 -0
- data/ext/pg_query/src_port_strnlen.c +39 -0
- data/ext/pg_query/xxhash.c +43 -0
- data/lib/pg_query.rb +7 -4
- data/lib/pg_query/constants.rb +21 -0
- data/lib/pg_query/deparse.rb +15 -1581
- data/lib/pg_query/filter_columns.rb +88 -85
- data/lib/pg_query/fingerprint.rb +122 -87
- data/lib/pg_query/json_field_names.rb +1402 -0
- data/lib/pg_query/node.rb +31 -0
- data/lib/pg_query/param_refs.rb +42 -37
- data/lib/pg_query/parse.rb +220 -203
- data/lib/pg_query/parse_error.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +3211 -0
- data/lib/pg_query/scan.rb +23 -0
- data/lib/pg_query/treewalker.rb +24 -40
- data/lib/pg_query/truncate.rb +71 -42
- data/lib/pg_query/version.rb +2 -2
- metadata +472 -11
- data/ext/pg_query/pg_query_ruby.h +0 -10
- data/lib/pg_query/deep_dup.rb +0 -16
- data/lib/pg_query/deparse/alter_table.rb +0 -42
- data/lib/pg_query/deparse/interval.rb +0 -105
- data/lib/pg_query/deparse/keywords.rb +0 -159
- data/lib/pg_query/deparse/rename.rb +0 -41
- data/lib/pg_query/legacy_parsetree.rb +0 -109
- data/lib/pg_query/node_types.rb +0 -296
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - UnreservedPLKeywords
|
|
4
|
+
* - UnreservedPLKeywords_kw_string
|
|
5
|
+
* - UnreservedPLKeywords_kw_offsets
|
|
6
|
+
* - UnreservedPLKeywords_hash_func
|
|
7
|
+
*--------------------------------------------------------------------
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/*-------------------------------------------------------------------------
|
|
11
|
+
*
|
|
12
|
+
* pl_unreserved_kwlist_d.h
|
|
13
|
+
* List of keywords represented as a ScanKeywordList.
|
|
14
|
+
*
|
|
15
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
16
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
17
|
+
*
|
|
18
|
+
* NOTES
|
|
19
|
+
* ******************************
|
|
20
|
+
* *** DO NOT EDIT THIS FILE! ***
|
|
21
|
+
* ******************************
|
|
22
|
+
*
|
|
23
|
+
* It has been GENERATED by src/tools/gen_keywordlist.pl
|
|
24
|
+
*
|
|
25
|
+
*-------------------------------------------------------------------------
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
#ifndef PL_UNRESERVED_KWLIST_D_H
|
|
29
|
+
#define PL_UNRESERVED_KWLIST_D_H
|
|
30
|
+
|
|
31
|
+
#include "common/kwlookup.h"
|
|
32
|
+
|
|
33
|
+
static const char UnreservedPLKeywords_kw_string[] =
|
|
34
|
+
"absolute\0"
|
|
35
|
+
"alias\0"
|
|
36
|
+
"and\0"
|
|
37
|
+
"array\0"
|
|
38
|
+
"assert\0"
|
|
39
|
+
"backward\0"
|
|
40
|
+
"call\0"
|
|
41
|
+
"chain\0"
|
|
42
|
+
"close\0"
|
|
43
|
+
"collate\0"
|
|
44
|
+
"column\0"
|
|
45
|
+
"column_name\0"
|
|
46
|
+
"commit\0"
|
|
47
|
+
"constant\0"
|
|
48
|
+
"constraint\0"
|
|
49
|
+
"constraint_name\0"
|
|
50
|
+
"continue\0"
|
|
51
|
+
"current\0"
|
|
52
|
+
"cursor\0"
|
|
53
|
+
"datatype\0"
|
|
54
|
+
"debug\0"
|
|
55
|
+
"default\0"
|
|
56
|
+
"detail\0"
|
|
57
|
+
"diagnostics\0"
|
|
58
|
+
"do\0"
|
|
59
|
+
"dump\0"
|
|
60
|
+
"elseif\0"
|
|
61
|
+
"elsif\0"
|
|
62
|
+
"errcode\0"
|
|
63
|
+
"error\0"
|
|
64
|
+
"exception\0"
|
|
65
|
+
"exit\0"
|
|
66
|
+
"fetch\0"
|
|
67
|
+
"first\0"
|
|
68
|
+
"forward\0"
|
|
69
|
+
"get\0"
|
|
70
|
+
"hint\0"
|
|
71
|
+
"import\0"
|
|
72
|
+
"info\0"
|
|
73
|
+
"insert\0"
|
|
74
|
+
"is\0"
|
|
75
|
+
"last\0"
|
|
76
|
+
"log\0"
|
|
77
|
+
"message\0"
|
|
78
|
+
"message_text\0"
|
|
79
|
+
"move\0"
|
|
80
|
+
"next\0"
|
|
81
|
+
"no\0"
|
|
82
|
+
"notice\0"
|
|
83
|
+
"open\0"
|
|
84
|
+
"option\0"
|
|
85
|
+
"perform\0"
|
|
86
|
+
"pg_context\0"
|
|
87
|
+
"pg_datatype_name\0"
|
|
88
|
+
"pg_exception_context\0"
|
|
89
|
+
"pg_exception_detail\0"
|
|
90
|
+
"pg_exception_hint\0"
|
|
91
|
+
"print_strict_params\0"
|
|
92
|
+
"prior\0"
|
|
93
|
+
"query\0"
|
|
94
|
+
"raise\0"
|
|
95
|
+
"relative\0"
|
|
96
|
+
"reset\0"
|
|
97
|
+
"return\0"
|
|
98
|
+
"returned_sqlstate\0"
|
|
99
|
+
"reverse\0"
|
|
100
|
+
"rollback\0"
|
|
101
|
+
"row_count\0"
|
|
102
|
+
"rowtype\0"
|
|
103
|
+
"schema\0"
|
|
104
|
+
"schema_name\0"
|
|
105
|
+
"scroll\0"
|
|
106
|
+
"set\0"
|
|
107
|
+
"slice\0"
|
|
108
|
+
"sqlstate\0"
|
|
109
|
+
"stacked\0"
|
|
110
|
+
"table\0"
|
|
111
|
+
"table_name\0"
|
|
112
|
+
"type\0"
|
|
113
|
+
"use_column\0"
|
|
114
|
+
"use_variable\0"
|
|
115
|
+
"variable_conflict\0"
|
|
116
|
+
"warning";
|
|
117
|
+
|
|
118
|
+
static const uint16 UnreservedPLKeywords_kw_offsets[] = {
|
|
119
|
+
0,
|
|
120
|
+
9,
|
|
121
|
+
15,
|
|
122
|
+
19,
|
|
123
|
+
25,
|
|
124
|
+
32,
|
|
125
|
+
41,
|
|
126
|
+
46,
|
|
127
|
+
52,
|
|
128
|
+
58,
|
|
129
|
+
66,
|
|
130
|
+
73,
|
|
131
|
+
85,
|
|
132
|
+
92,
|
|
133
|
+
101,
|
|
134
|
+
112,
|
|
135
|
+
128,
|
|
136
|
+
137,
|
|
137
|
+
145,
|
|
138
|
+
152,
|
|
139
|
+
161,
|
|
140
|
+
167,
|
|
141
|
+
175,
|
|
142
|
+
182,
|
|
143
|
+
194,
|
|
144
|
+
197,
|
|
145
|
+
202,
|
|
146
|
+
209,
|
|
147
|
+
215,
|
|
148
|
+
223,
|
|
149
|
+
229,
|
|
150
|
+
239,
|
|
151
|
+
244,
|
|
152
|
+
250,
|
|
153
|
+
256,
|
|
154
|
+
264,
|
|
155
|
+
268,
|
|
156
|
+
273,
|
|
157
|
+
280,
|
|
158
|
+
285,
|
|
159
|
+
292,
|
|
160
|
+
295,
|
|
161
|
+
300,
|
|
162
|
+
304,
|
|
163
|
+
312,
|
|
164
|
+
325,
|
|
165
|
+
330,
|
|
166
|
+
335,
|
|
167
|
+
338,
|
|
168
|
+
345,
|
|
169
|
+
350,
|
|
170
|
+
357,
|
|
171
|
+
365,
|
|
172
|
+
376,
|
|
173
|
+
393,
|
|
174
|
+
414,
|
|
175
|
+
434,
|
|
176
|
+
452,
|
|
177
|
+
472,
|
|
178
|
+
478,
|
|
179
|
+
484,
|
|
180
|
+
490,
|
|
181
|
+
499,
|
|
182
|
+
505,
|
|
183
|
+
512,
|
|
184
|
+
530,
|
|
185
|
+
538,
|
|
186
|
+
547,
|
|
187
|
+
557,
|
|
188
|
+
565,
|
|
189
|
+
572,
|
|
190
|
+
584,
|
|
191
|
+
591,
|
|
192
|
+
595,
|
|
193
|
+
601,
|
|
194
|
+
610,
|
|
195
|
+
618,
|
|
196
|
+
624,
|
|
197
|
+
635,
|
|
198
|
+
640,
|
|
199
|
+
651,
|
|
200
|
+
664,
|
|
201
|
+
682,
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
#define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 83
|
|
205
|
+
|
|
206
|
+
static int
|
|
207
|
+
UnreservedPLKeywords_hash_func(const void *key, size_t keylen)
|
|
208
|
+
{
|
|
209
|
+
static const int16 h[167] = {
|
|
210
|
+
10, 32767, 32767, 57, 32767, 62, 21, 32767,
|
|
211
|
+
54, 18, 32767, 58, 59, -54, 47, 0,
|
|
212
|
+
-22, -64, 32767, -22, 33, 44, -5, 32767,
|
|
213
|
+
32767, 43, 57, 102, 32767, -65, 7, 32767,
|
|
214
|
+
13, 32767, -28, 14, 32767, 32767, 82, 32767,
|
|
215
|
+
0, 0, 32767, 8, -43, 0, 19, 8,
|
|
216
|
+
75, -58, 32767, 32767, 0, 22, 29, 32767,
|
|
217
|
+
-50, 6, 32767, 0, 30, 32767, 32767, 29,
|
|
218
|
+
0, 104, 32767, 32767, 26, 0, 32767, 32767,
|
|
219
|
+
-9, 2, 32767, 50, 39, 38, 39, 80,
|
|
220
|
+
32767, 32767, 32767, 32767, -67, 89, 32767, -40,
|
|
221
|
+
64, 32767, 32767, 26, 10, 27, 32767, 19,
|
|
222
|
+
51, -13, 26, 32767, 32767, 32767, 84, 23,
|
|
223
|
+
0, 66, 12, -5, 32767, 32767, 0, 50,
|
|
224
|
+
141, 72, 45, 32767, 32767, 0, -22, 0,
|
|
225
|
+
32767, 32767, -34, 0, 19, -5, 32767, 32767,
|
|
226
|
+
32767, 0, 37, 13, 32767, 32767, 32767, 32767,
|
|
227
|
+
-68, -4, 32767, 32767, 78, 32767, 32767, 0,
|
|
228
|
+
85, 32767, 32767, 32767, -93, 32767, 0, 0,
|
|
229
|
+
32767, 74, 5, 32767, 32767, 71, 0, 32767,
|
|
230
|
+
32767, 0, 32767, 32767, 32767, 46, 70,
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const unsigned char *k = (const unsigned char *) key;
|
|
234
|
+
uint32 a = 0;
|
|
235
|
+
uint32 b = 1;
|
|
236
|
+
|
|
237
|
+
while (keylen--)
|
|
238
|
+
{
|
|
239
|
+
unsigned char c = *k++ | 0x20;
|
|
240
|
+
|
|
241
|
+
a = a * 31 + c;
|
|
242
|
+
b = b * 127 + c;
|
|
243
|
+
}
|
|
244
|
+
return h[a % 167] + h[b % 167];
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
static const ScanKeywordList UnreservedPLKeywords = {
|
|
248
|
+
UnreservedPLKeywords_kw_string,
|
|
249
|
+
UnreservedPLKeywords_kw_offsets,
|
|
250
|
+
UnreservedPLKeywords_hash_func,
|
|
251
|
+
UNRESERVEDPLKEYWORDS_NUM_KEYWORDS,
|
|
252
|
+
20
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
#endif /* PL_UNRESERVED_KWLIST_D_H */
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - pg_lrand48
|
|
4
|
+
* - _dorand48
|
|
5
|
+
* - _rand48_seed
|
|
6
|
+
*--------------------------------------------------------------------
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*-------------------------------------------------------------------------
|
|
10
|
+
*
|
|
11
|
+
* erand48.c
|
|
12
|
+
*
|
|
13
|
+
* This file supplies pg_erand48() and related functions, which except
|
|
14
|
+
* for the names are just like the POSIX-standard erand48() family.
|
|
15
|
+
* (We don't supply the full set though, only the ones we have found use
|
|
16
|
+
* for in Postgres. In particular, we do *not* implement lcong48(), so
|
|
17
|
+
* that there is no need for the multiplier and addend to be variable.)
|
|
18
|
+
*
|
|
19
|
+
* We used to test for an operating system version rather than
|
|
20
|
+
* unconditionally using our own, but (1) some versions of Cygwin have a
|
|
21
|
+
* buggy erand48() that always returns zero and (2) as of 2011, glibc's
|
|
22
|
+
* erand48() is strangely coded to be almost-but-not-quite thread-safe,
|
|
23
|
+
* which doesn't matter for the backend but is important for pgbench.
|
|
24
|
+
*
|
|
25
|
+
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
26
|
+
*
|
|
27
|
+
* Portions Copyright (c) 1993 Martin Birgmeier
|
|
28
|
+
* All rights reserved.
|
|
29
|
+
*
|
|
30
|
+
* You may redistribute unmodified or modified versions of this source
|
|
31
|
+
* code provided that the above copyright notice and this and the
|
|
32
|
+
* following conditions are retained.
|
|
33
|
+
*
|
|
34
|
+
* This software is provided ``as is'', and comes with no warranties
|
|
35
|
+
* of any kind. I shall in no event be liable for anything that happens
|
|
36
|
+
* to anyone/anything when using this software.
|
|
37
|
+
*
|
|
38
|
+
* IDENTIFICATION
|
|
39
|
+
* src/port/erand48.c
|
|
40
|
+
*
|
|
41
|
+
*-------------------------------------------------------------------------
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
#include "c.h"
|
|
45
|
+
|
|
46
|
+
#include <math.h>
|
|
47
|
+
|
|
48
|
+
/* These values are specified by POSIX */
|
|
49
|
+
#define RAND48_MULT UINT64CONST(0x0005deece66d)
|
|
50
|
+
#define RAND48_ADD UINT64CONST(0x000b)
|
|
51
|
+
|
|
52
|
+
/* POSIX specifies 0x330e's use in srand48, but the other bits are arbitrary */
|
|
53
|
+
#define RAND48_SEED_0 (0x330e)
|
|
54
|
+
#define RAND48_SEED_1 (0xabcd)
|
|
55
|
+
#define RAND48_SEED_2 (0x1234)
|
|
56
|
+
|
|
57
|
+
static __thread unsigned short _rand48_seed[3] = {
|
|
58
|
+
RAND48_SEED_0,
|
|
59
|
+
RAND48_SEED_1,
|
|
60
|
+
RAND48_SEED_2
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Advance the 48-bit value stored in xseed[] to the next "random" number.
|
|
67
|
+
*
|
|
68
|
+
* Also returns the value of that number --- without masking it to 48 bits.
|
|
69
|
+
* If caller uses the result, it must mask off the bits it wants.
|
|
70
|
+
*/
|
|
71
|
+
static uint64
|
|
72
|
+
_dorand48(unsigned short xseed[3])
|
|
73
|
+
{
|
|
74
|
+
/*
|
|
75
|
+
* We do the arithmetic in uint64; any type wider than 48 bits would work.
|
|
76
|
+
*/
|
|
77
|
+
uint64 in;
|
|
78
|
+
uint64 out;
|
|
79
|
+
|
|
80
|
+
in = (uint64) xseed[2] << 32 | (uint64) xseed[1] << 16 | (uint64) xseed[0];
|
|
81
|
+
|
|
82
|
+
out = in * RAND48_MULT + RAND48_ADD;
|
|
83
|
+
|
|
84
|
+
xseed[0] = out & 0xFFFF;
|
|
85
|
+
xseed[1] = (out >> 16) & 0xFFFF;
|
|
86
|
+
xseed[2] = (out >> 32) & 0xFFFF;
|
|
87
|
+
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
* Generate a random floating-point value using caller-supplied state.
|
|
94
|
+
* Values are uniformly distributed over the interval [0.0, 1.0).
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/*
|
|
99
|
+
* Generate a random non-negative integral value using internal state.
|
|
100
|
+
* Values are uniformly distributed over the interval [0, 2^31).
|
|
101
|
+
*/
|
|
102
|
+
long
|
|
103
|
+
pg_lrand48(void)
|
|
104
|
+
{
|
|
105
|
+
uint64 x = _dorand48(_rand48_seed);
|
|
106
|
+
|
|
107
|
+
return (x >> 17) & UINT64CONST(0x7FFFFFFF);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/*
|
|
111
|
+
* Generate a random signed integral value using caller-supplied state.
|
|
112
|
+
* Values are uniformly distributed over the interval [-2^31, 2^31).
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* Initialize the internal state using the given seed.
|
|
118
|
+
*
|
|
119
|
+
* Per POSIX, this uses only 32 bits from "seed" even if "long" is wider.
|
|
120
|
+
* Hence, the set of possible seed values is smaller than it could be.
|
|
121
|
+
* Better practice is to use caller-supplied state and initialize it with
|
|
122
|
+
* random bits obtained from a high-quality source of random bits.
|
|
123
|
+
*
|
|
124
|
+
* Note: POSIX specifies a function seed48() that allows all 48 bits
|
|
125
|
+
* of the internal state to be set, but we don't currently support that.
|
|
126
|
+
*/
|
|
127
|
+
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/*--------------------------------------------------------------------
|
|
2
|
+
* Symbols referenced in this file:
|
|
3
|
+
* - pg_popcount64
|
|
4
|
+
* - pg_popcount64_choose
|
|
5
|
+
* - pg_popcount32
|
|
6
|
+
* - pg_popcount32_choose
|
|
7
|
+
* - pg_popcount_available
|
|
8
|
+
* - pg_popcount32_asm
|
|
9
|
+
* - pg_popcount64_asm
|
|
10
|
+
* - pg_popcount32_slow
|
|
11
|
+
* - pg_popcount64_slow
|
|
12
|
+
*--------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/*-------------------------------------------------------------------------
|
|
16
|
+
*
|
|
17
|
+
* pg_bitutils.c
|
|
18
|
+
* Miscellaneous functions for bit-wise operations.
|
|
19
|
+
*
|
|
20
|
+
* Copyright (c) 2019-2020, PostgreSQL Global Development Group
|
|
21
|
+
*
|
|
22
|
+
* IDENTIFICATION
|
|
23
|
+
* src/port/pg_bitutils.c
|
|
24
|
+
*
|
|
25
|
+
*-------------------------------------------------------------------------
|
|
26
|
+
*/
|
|
27
|
+
#include "c.h"
|
|
28
|
+
|
|
29
|
+
#ifdef HAVE__GET_CPUID
|
|
30
|
+
#include <cpuid.h>
|
|
31
|
+
#endif
|
|
32
|
+
#ifdef HAVE__CPUID
|
|
33
|
+
#include <intrin.h>
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#include "port/pg_bitutils.h"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* Array giving the position of the left-most set bit for each possible
|
|
41
|
+
* byte value. We count the right-most position as the 0th bit, and the
|
|
42
|
+
* left-most the 7th bit. The 0th entry of the array should not be used.
|
|
43
|
+
*
|
|
44
|
+
* Note: this is not used by the functions in pg_bitutils.h when
|
|
45
|
+
* HAVE__BUILTIN_CLZ is defined, but we provide it anyway, so that
|
|
46
|
+
* extensions possibly compiled with a different compiler can use it.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* Array giving the position of the right-most set bit for each possible
|
|
52
|
+
* byte value. We count the right-most position as the 0th bit, and the
|
|
53
|
+
* left-most the 7th bit. The 0th entry of the array should not be used.
|
|
54
|
+
*
|
|
55
|
+
* Note: this is not used by the functions in pg_bitutils.h when
|
|
56
|
+
* HAVE__BUILTIN_CTZ is defined, but we provide it anyway, so that
|
|
57
|
+
* extensions possibly compiled with a different compiler can use it.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/*
|
|
62
|
+
* Array giving the number of 1-bits in each possible byte value.
|
|
63
|
+
*
|
|
64
|
+
* Note: we export this for use by functions in which explicit use
|
|
65
|
+
* of the popcount functions seems unlikely to be a win.
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* On x86_64, we can use the hardware popcount instruction, but only if
|
|
71
|
+
* we can verify that the CPU supports it via the cpuid instruction.
|
|
72
|
+
*
|
|
73
|
+
* Otherwise, we fall back to __builtin_popcount if the compiler has that,
|
|
74
|
+
* or a hand-rolled implementation if not.
|
|
75
|
+
*/
|
|
76
|
+
#ifdef HAVE_X86_64_POPCNTQ
|
|
77
|
+
#if defined(HAVE__GET_CPUID) || defined(HAVE__CPUID)
|
|
78
|
+
#define USE_POPCNT_ASM 1
|
|
79
|
+
#endif
|
|
80
|
+
#endif
|
|
81
|
+
|
|
82
|
+
static int pg_popcount32_slow(uint32 word);
|
|
83
|
+
static int pg_popcount64_slow(uint64 word);
|
|
84
|
+
|
|
85
|
+
#ifdef USE_POPCNT_ASM
|
|
86
|
+
static bool pg_popcount_available(void);
|
|
87
|
+
static int pg_popcount32_choose(uint32 word);
|
|
88
|
+
static int pg_popcount64_choose(uint64 word);
|
|
89
|
+
static int pg_popcount32_asm(uint32 word);
|
|
90
|
+
static int pg_popcount64_asm(uint64 word);
|
|
91
|
+
|
|
92
|
+
int (*pg_popcount32) (uint32 word) = pg_popcount32_choose;
|
|
93
|
+
int (*pg_popcount64) (uint64 word) = pg_popcount64_choose;
|
|
94
|
+
#else
|
|
95
|
+
int (*pg_popcount32) (uint32 word) = pg_popcount32_slow;
|
|
96
|
+
int (*pg_popcount64) (uint64 word) = pg_popcount64_slow;
|
|
97
|
+
#endif /* USE_POPCNT_ASM */
|
|
98
|
+
|
|
99
|
+
#ifdef USE_POPCNT_ASM
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
* Return true if CPUID indicates that the POPCNT instruction is available.
|
|
103
|
+
*/
|
|
104
|
+
static bool
|
|
105
|
+
pg_popcount_available(void)
|
|
106
|
+
{
|
|
107
|
+
unsigned int exx[4] = {0, 0, 0, 0};
|
|
108
|
+
|
|
109
|
+
#if defined(HAVE__GET_CPUID)
|
|
110
|
+
__get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
|
|
111
|
+
#elif defined(HAVE__CPUID)
|
|
112
|
+
__cpuid(exx, 1);
|
|
113
|
+
#else
|
|
114
|
+
#error cpuid instruction not available
|
|
115
|
+
#endif
|
|
116
|
+
|
|
117
|
+
return (exx[2] & (1 << 23)) != 0; /* POPCNT */
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
* These functions get called on the first call to pg_popcount32 etc.
|
|
122
|
+
* They detect whether we can use the asm implementations, and replace
|
|
123
|
+
* the function pointers so that subsequent calls are routed directly to
|
|
124
|
+
* the chosen implementation.
|
|
125
|
+
*/
|
|
126
|
+
static int
|
|
127
|
+
pg_popcount32_choose(uint32 word)
|
|
128
|
+
{
|
|
129
|
+
if (pg_popcount_available())
|
|
130
|
+
{
|
|
131
|
+
pg_popcount32 = pg_popcount32_asm;
|
|
132
|
+
pg_popcount64 = pg_popcount64_asm;
|
|
133
|
+
}
|
|
134
|
+
else
|
|
135
|
+
{
|
|
136
|
+
pg_popcount32 = pg_popcount32_slow;
|
|
137
|
+
pg_popcount64 = pg_popcount64_slow;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return pg_popcount32(word);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static int
|
|
144
|
+
pg_popcount64_choose(uint64 word)
|
|
145
|
+
{
|
|
146
|
+
if (pg_popcount_available())
|
|
147
|
+
{
|
|
148
|
+
pg_popcount32 = pg_popcount32_asm;
|
|
149
|
+
pg_popcount64 = pg_popcount64_asm;
|
|
150
|
+
}
|
|
151
|
+
else
|
|
152
|
+
{
|
|
153
|
+
pg_popcount32 = pg_popcount32_slow;
|
|
154
|
+
pg_popcount64 = pg_popcount64_slow;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return pg_popcount64(word);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/*
|
|
161
|
+
* pg_popcount32_asm
|
|
162
|
+
* Return the number of 1 bits set in word
|
|
163
|
+
*/
|
|
164
|
+
static int
|
|
165
|
+
pg_popcount32_asm(uint32 word)
|
|
166
|
+
{
|
|
167
|
+
uint32 res;
|
|
168
|
+
|
|
169
|
+
__asm__ __volatile__(" popcntl %1,%0\n":"=q"(res):"rm"(word):"cc");
|
|
170
|
+
return (int) res;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* pg_popcount64_asm
|
|
175
|
+
* Return the number of 1 bits set in word
|
|
176
|
+
*/
|
|
177
|
+
static int
|
|
178
|
+
pg_popcount64_asm(uint64 word)
|
|
179
|
+
{
|
|
180
|
+
uint64 res;
|
|
181
|
+
|
|
182
|
+
__asm__ __volatile__(" popcntq %1,%0\n":"=q"(res):"rm"(word):"cc");
|
|
183
|
+
return (int) res;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#endif /* USE_POPCNT_ASM */
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* pg_popcount32_slow
|
|
191
|
+
* Return the number of 1 bits set in word
|
|
192
|
+
*/
|
|
193
|
+
static int
|
|
194
|
+
pg_popcount32_slow(uint32 word)
|
|
195
|
+
{
|
|
196
|
+
#ifdef HAVE__BUILTIN_POPCOUNT
|
|
197
|
+
return __builtin_popcount(word);
|
|
198
|
+
#else /* !HAVE__BUILTIN_POPCOUNT */
|
|
199
|
+
int result = 0;
|
|
200
|
+
|
|
201
|
+
while (word != 0)
|
|
202
|
+
{
|
|
203
|
+
result += pg_number_of_ones[word & 255];
|
|
204
|
+
word >>= 8;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return result;
|
|
208
|
+
#endif /* HAVE__BUILTIN_POPCOUNT */
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/*
|
|
212
|
+
* pg_popcount64_slow
|
|
213
|
+
* Return the number of 1 bits set in word
|
|
214
|
+
*/
|
|
215
|
+
static int
|
|
216
|
+
pg_popcount64_slow(uint64 word)
|
|
217
|
+
{
|
|
218
|
+
#ifdef HAVE__BUILTIN_POPCOUNT
|
|
219
|
+
#if defined(HAVE_LONG_INT_64)
|
|
220
|
+
return __builtin_popcountl(word);
|
|
221
|
+
#elif defined(HAVE_LONG_LONG_INT_64)
|
|
222
|
+
return __builtin_popcountll(word);
|
|
223
|
+
#else
|
|
224
|
+
#error must have a working 64-bit integer datatype
|
|
225
|
+
#endif
|
|
226
|
+
#else /* !HAVE__BUILTIN_POPCOUNT */
|
|
227
|
+
int result = 0;
|
|
228
|
+
|
|
229
|
+
while (word != 0)
|
|
230
|
+
{
|
|
231
|
+
result += pg_number_of_ones[word & 255];
|
|
232
|
+
word >>= 8;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return result;
|
|
236
|
+
#endif /* HAVE__BUILTIN_POPCOUNT */
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
/*
|
|
241
|
+
* pg_popcount
|
|
242
|
+
* Returns the number of 1-bits in buf
|
|
243
|
+
*/
|
|
244
|
+
#if SIZEOF_VOID_P >= 8
|
|
245
|
+
#else
|
|
246
|
+
#endif
|