pg_query 2.2.1 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -1
- data/README.md +29 -33
- data/Rakefile +2 -2
- data/ext/pg_query/include/access/amapi.h +45 -1
- data/ext/pg_query/include/access/attmap.h +1 -1
- data/ext/pg_query/include/access/attnum.h +2 -2
- data/ext/pg_query/include/access/clog.h +4 -2
- data/ext/pg_query/include/access/commit_ts.h +6 -9
- data/ext/pg_query/include/access/detoast.h +1 -11
- data/ext/pg_query/include/access/genam.h +15 -12
- data/ext/pg_query/include/access/gin.h +2 -2
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +75 -87
- data/ext/pg_query/include/access/itup.h +7 -1
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +17 -2
- data/ext/pg_query/include/access/rmgr.h +30 -3
- data/ext/pg_query/include/access/rmgrlist.h +23 -23
- data/ext/pg_query/include/access/sdir.h +1 -1
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +4 -2
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +2 -1
- data/ext/pg_query/include/access/tableam.h +272 -20
- data/ext/pg_query/include/access/toast_compression.h +73 -0
- data/ext/pg_query/include/access/transam.h +123 -13
- data/ext/pg_query/include/access/tupconvert.h +1 -1
- data/ext/pg_query/include/access/tupdesc.h +1 -1
- data/ext/pg_query/include/access/tupmacs.h +3 -3
- data/ext/pg_query/include/access/twophase.h +3 -1
- data/ext/pg_query/include/access/xact.h +73 -19
- data/ext/pg_query/include/access/xlog.h +60 -155
- data/ext/pg_query/include/access/xlog_internal.h +40 -13
- data/ext/pg_query/include/access/xlogdefs.h +8 -16
- data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/access/xlogreader.h +145 -39
- data/ext/pg_query/include/access/xlogrecord.h +18 -9
- data/ext/pg_query/include/access/xlogrecovery.h +157 -0
- data/ext/pg_query/include/c.h +101 -44
- data/ext/pg_query/include/catalog/catalog.h +3 -1
- data/ext/pg_query/include/catalog/catversion.h +2 -2
- data/ext/pg_query/include/catalog/dependency.h +8 -16
- data/ext/pg_query/include/catalog/genbki.h +83 -5
- data/ext/pg_query/include/catalog/index.h +18 -3
- data/ext/pg_query/include/catalog/indexing.h +12 -324
- data/ext/pg_query/include/catalog/namespace.h +4 -2
- data/ext/pg_query/include/catalog/objectaccess.h +70 -2
- data/ext/pg_query/include/catalog/objectaddress.h +11 -6
- data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_am.h +4 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
- data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
- data/ext/pg_query/include/catalog/pg_authid.h +7 -2
- data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
- data/ext/pg_query/include/catalog/pg_class.h +44 -14
- data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
- data/ext/pg_query/include/catalog/pg_collation.h +33 -8
- data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
- data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/catalog/pg_control.h +3 -5
- data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
- data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_depend.h +11 -7
- data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_index.h +17 -7
- data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
- data/ext/pg_query/include/catalog/pg_language.h +10 -5
- data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
- data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
- data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_operator.h +18 -15
- data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_proc.h +20 -11
- data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
- data/ext/pg_query/include/catalog/pg_publication.h +50 -7
- data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
- data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/catalog/pg_transform.h +8 -5
- data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
- data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_type.h +55 -24
- data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
- data/ext/pg_query/include/catalog/storage.h +5 -3
- data/ext/pg_query/include/commands/async.h +3 -4
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +11 -24
- data/ext/pg_query/include/commands/event_trigger.h +2 -2
- data/ext/pg_query/include/commands/explain.h +1 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +2 -2
- data/ext/pg_query/include/commands/trigger.h +18 -16
- data/ext/pg_query/include/commands/user.h +2 -2
- data/ext/pg_query/include/commands/vacuum.h +88 -41
- data/ext/pg_query/include/commands/variable.h +1 -1
- data/ext/pg_query/include/common/file_perm.h +4 -4
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/ip.h +1 -7
- data/ext/pg_query/include/common/keywords.h +2 -6
- data/ext/pg_query/include/common/kwlookup.h +1 -1
- data/ext/pg_query/include/common/pg_prng.h +60 -0
- data/ext/pg_query/include/common/relpath.h +2 -2
- data/ext/pg_query/include/common/string.h +24 -1
- data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/datatype/timestamp.h +40 -1
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +65 -22
- data/ext/pg_query/include/executor/functions.h +17 -3
- data/ext/pg_query/include/executor/instrument.h +33 -16
- data/ext/pg_query/include/executor/spi.h +41 -3
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +1 -1
- data/ext/pg_query/include/fmgr.h +13 -7
- data/ext/pg_query/include/funcapi.h +16 -4
- data/ext/pg_query/include/getaddrinfo.h +1 -1
- data/ext/pg_query/include/jit/jit.h +11 -11
- data/ext/pg_query/include/kwlist_d.h +517 -494
- data/ext/pg_query/include/lib/dshash.h +112 -0
- data/ext/pg_query/include/lib/ilist.h +20 -1
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +140 -15
- data/ext/pg_query/include/lib/sort_template.h +432 -0
- data/ext/pg_query/include/lib/stringinfo.h +1 -1
- data/ext/pg_query/include/libpq/auth.h +6 -4
- data/ext/pg_query/include/libpq/crypt.h +5 -4
- data/ext/pg_query/include/libpq/hba.h +43 -4
- data/ext/pg_query/include/libpq/libpq-be.h +23 -6
- data/ext/pg_query/include/libpq/libpq.h +30 -20
- data/ext/pg_query/include/libpq/pqcomm.h +17 -31
- data/ext/pg_query/include/libpq/pqformat.h +1 -1
- data/ext/pg_query/include/libpq/pqsignal.h +4 -4
- data/ext/pg_query/include/mb/pg_wchar.h +105 -23
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +47 -41
- data/ext/pg_query/include/nodes/bitmapset.h +1 -1
- data/ext/pg_query/include/nodes/execnodes.h +270 -78
- data/ext/pg_query/include/nodes/extensible.h +4 -2
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +7 -6
- data/ext/pg_query/include/nodes/memnodes.h +5 -3
- data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
- data/ext/pg_query/include/nodes/nodes.h +30 -11
- data/ext/pg_query/include/nodes/params.h +1 -1
- data/ext/pg_query/include/nodes/parsenodes.h +322 -90
- data/ext/pg_query/include/nodes/pathnodes.h +243 -66
- data/ext/pg_query/include/nodes/pg_list.h +75 -69
- data/ext/pg_query/include/nodes/plannodes.h +111 -28
- data/ext/pg_query/include/nodes/primnodes.h +99 -47
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +58 -39
- data/ext/pg_query/include/optimizer/cost.h +9 -2
- data/ext/pg_query/include/optimizer/geqo.h +9 -7
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +25 -17
- data/ext/pg_query/include/optimizer/paths.h +6 -6
- data/ext/pg_query/include/optimizer/planmain.h +15 -14
- data/ext/pg_query/include/parser/analyze.h +19 -5
- data/ext/pg_query/include/parser/gram.h +947 -913
- data/ext/pg_query/include/parser/gramparse.h +1 -1
- data/ext/pg_query/include/parser/kwlist.h +463 -453
- data/ext/pg_query/include/parser/parse_agg.h +2 -7
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +2 -3
- data/ext/pg_query/include/parser/parse_func.h +2 -1
- data/ext/pg_query/include/parser/parse_node.h +21 -9
- data/ext/pg_query/include/parser/parse_oper.h +1 -3
- data/ext/pg_query/include/parser/parse_relation.h +5 -4
- data/ext/pg_query/include/parser/parse_type.h +1 -1
- data/ext/pg_query/include/parser/parser.h +31 -4
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +1 -1
- data/ext/pg_query/include/parser/scansup.h +2 -5
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +83 -41
- data/ext/pg_query/include/pg_config_manual.h +74 -21
- data/ext/pg_query/include/pg_getopt.h +6 -6
- data/ext/pg_query/include/pg_query.h +5 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +449 -1238
- data/ext/pg_query/include/pgtime.h +14 -4
- data/ext/pg_query/include/pl_gram.h +126 -128
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/include/plerrcodes.h +9 -1
- data/ext/pg_query/include/plpgsql.h +52 -54
- data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
- data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
- data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
- data/ext/pg_query/include/port/atomics/fallback.h +1 -1
- data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +1 -1
- data/ext/pg_query/include/port/pg_bitutils.h +40 -10
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port.h +71 -46
- data/ext/pg_query/include/portability/instr_time.h +1 -1
- data/ext/pg_query/include/postgres.h +60 -16
- data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
- data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
- data/ext/pg_query/include/postmaster/bgworker.h +2 -1
- data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
- data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +42 -8
- data/ext/pg_query/include/postmaster/postmaster.h +18 -17
- data/ext/pg_query/include/postmaster/startup.h +39 -0
- data/ext/pg_query/include/postmaster/syslogger.h +15 -10
- data/ext/pg_query/include/postmaster/walwriter.h +3 -3
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
- data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
- data/ext/pg_query/include/regex/regex.h +18 -16
- data/ext/pg_query/include/replication/logicallauncher.h +3 -5
- data/ext/pg_query/include/replication/logicalproto.h +161 -17
- data/ext/pg_query/include/replication/logicalworker.h +1 -1
- data/ext/pg_query/include/replication/origin.h +7 -7
- data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
- data/ext/pg_query/include/replication/slot.h +22 -11
- data/ext/pg_query/include/replication/syncrep.h +5 -5
- data/ext/pg_query/include/replication/walreceiver.h +145 -13
- data/ext/pg_query/include/replication/walsender.h +8 -8
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
- data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/storage/backendid.h +3 -3
- data/ext/pg_query/include/storage/block.h +4 -10
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +19 -14
- data/ext/pg_query/include/storage/bufpage.h +6 -8
- data/ext/pg_query/include/storage/condition_variable.h +13 -2
- data/ext/pg_query/include/storage/dsm.h +4 -1
- data/ext/pg_query/include/storage/dsm_impl.h +3 -2
- data/ext/pg_query/include/storage/fd.h +33 -3
- data/ext/pg_query/include/storage/fileset.h +40 -0
- data/ext/pg_query/include/storage/ipc.h +4 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +3 -1
- data/ext/pg_query/include/storage/large_object.h +2 -2
- data/ext/pg_query/include/storage/latch.h +9 -13
- data/ext/pg_query/include/storage/lmgr.h +2 -1
- data/ext/pg_query/include/storage/lock.h +11 -8
- data/ext/pg_query/include/storage/lockdefs.h +2 -2
- data/ext/pg_query/include/storage/lwlock.h +5 -32
- data/ext/pg_query/include/storage/lwlocknames.h +0 -1
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +9 -7
- data/ext/pg_query/include/storage/pmsignal.h +15 -4
- data/ext/pg_query/include/storage/predicate.h +4 -4
- data/ext/pg_query/include/storage/proc.h +173 -59
- data/ext/pg_query/include/storage/procarray.h +98 -0
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -7
- data/ext/pg_query/include/storage/relfilenode.h +1 -1
- data/ext/pg_query/include/storage/s_lock.h +60 -21
- data/ext/pg_query/include/storage/sharedfileset.h +3 -11
- data/ext/pg_query/include/storage/shm_mq.h +5 -4
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -1
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +1 -1
- data/ext/pg_query/include/storage/smgr.h +10 -8
- data/ext/pg_query/include/storage/spin.h +2 -2
- data/ext/pg_query/include/storage/standby.h +13 -6
- data/ext/pg_query/include/storage/standbydefs.h +2 -2
- data/ext/pg_query/include/storage/sync.h +7 -3
- data/ext/pg_query/include/tcop/cmdtag.h +1 -1
- data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -1
- data/ext/pg_query/include/tcop/fastpath.h +1 -2
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +19 -11
- data/ext/pg_query/include/tcop/utility.h +7 -3
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
- data/ext/pg_query/include/utils/acl.h +24 -3
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +7 -2
- data/ext/pg_query/include/utils/backend_progress.h +44 -0
- data/ext/pg_query/include/utils/backend_status.h +321 -0
- data/ext/pg_query/include/utils/builtins.h +10 -11
- data/ext/pg_query/include/utils/bytea.h +3 -2
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +1 -1
- data/ext/pg_query/include/utils/datetime.h +8 -7
- data/ext/pg_query/include/utils/datum.h +9 -1
- data/ext/pg_query/include/utils/dsa.h +1 -1
- data/ext/pg_query/include/utils/dynahash.h +4 -3
- data/ext/pg_query/include/utils/elog.h +52 -21
- data/ext/pg_query/include/utils/errcodes.h +2 -0
- data/ext/pg_query/include/utils/expandeddatum.h +1 -1
- data/ext/pg_query/include/utils/expandedrecord.h +1 -1
- data/ext/pg_query/include/utils/float.h +7 -7
- data/ext/pg_query/include/utils/fmgroids.h +1300 -696
- data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
- data/ext/pg_query/include/utils/fmgrtab.h +6 -5
- data/ext/pg_query/include/utils/guc.h +69 -43
- data/ext/pg_query/include/utils/guc_tables.h +23 -19
- data/ext/pg_query/include/utils/hsearch.h +15 -11
- data/ext/pg_query/include/utils/inval.h +4 -1
- data/ext/pg_query/include/utils/lsyscache.h +11 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +8 -3
- data/ext/pg_query/include/utils/numeric.h +19 -5
- data/ext/pg_query/include/utils/palloc.h +25 -3
- data/ext/pg_query/include/utils/partcache.h +1 -1
- data/ext/pg_query/include/utils/pg_locale.h +17 -9
- data/ext/pg_query/include/utils/pg_lsn.h +1 -1
- data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +6 -5
- data/ext/pg_query/include/utils/portal.h +10 -12
- data/ext/pg_query/include/utils/ps_status.h +1 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/queryjumble.h +88 -0
- data/ext/pg_query/include/utils/regproc.h +14 -3
- data/ext/pg_query/include/utils/rel.h +71 -19
- data/ext/pg_query/include/utils/relcache.h +8 -5
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/rls.h +2 -2
- data/ext/pg_query/include/utils/ruleutils.h +4 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +34 -14
- data/ext/pg_query/include/utils/snapshot.h +14 -1
- data/ext/pg_query/include/utils/sortsupport.h +117 -2
- data/ext/pg_query/include/utils/syscache.h +6 -1
- data/ext/pg_query/include/utils/timeout.h +11 -4
- data/ext/pg_query/include/utils/timestamp.h +6 -5
- data/ext/pg_query/include/utils/tuplesort.h +25 -11
- data/ext/pg_query/include/utils/tuplestore.h +2 -2
- data/ext/pg_query/include/utils/typcache.h +24 -17
- data/ext/pg_query/include/utils/tzparser.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +5 -3
- data/ext/pg_query/include/utils/wait_event.h +289 -0
- data/ext/pg_query/include/utils/xml.h +4 -4
- data/ext/pg_query/pg_query.pb-c.c +4302 -2304
- data/ext/pg_query/pg_query_deparse.c +1106 -373
- data/ext/pg_query/pg_query_fingerprint.c +30 -10
- data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
- data/ext/pg_query/pg_query_parse.c +1 -1
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
- data/ext/pg_query/pg_query_scan.c +2 -1
- data/ext/pg_query/pg_query_split.c +3 -2
- data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
- data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
- data/ext/pg_query/src_backend_nodes_list.c +74 -11
- data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
- data/ext/pg_query/src_backend_parser_parser.c +26 -7
- data/ext/pg_query/src_backend_parser_scan.c +172 -209
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
- data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
- data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
- data/ext/pg_query/src_common_encnames.c +1 -1
- data/ext/pg_query/src_common_hashfn.c +3 -3
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +517 -494
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_pg_prng.c +152 -0
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_string.c +7 -1
- data/ext/pg_query/src_common_stringinfo.c +1 -1
- data/ext/pg_query/src_common_wchar.c +701 -109
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
- data/ext/pg_query/src_port_pg_bitutils.c +41 -31
- data/ext/pg_query/src_port_pgsleep.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +37 -13
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/filter_columns.rb +1 -1
- data/lib/pg_query/fingerprint.rb +5 -1
- data/lib/pg_query/node.rb +2 -2
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +18 -8
- data/lib/pg_query/pg_query_pb.rb +1108 -942
- data/lib/pg_query/truncate.rb +1 -1
- data/lib/pg_query/version.rb +1 -1
- metadata +28 -18
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
- data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_random.c +0 -31
@@ -1,313 +0,0 @@
|
|
1
|
-
/*--------------------------------------------------------------------
|
2
|
-
* Symbols referenced in this file:
|
3
|
-
* - operator_precedence_warning
|
4
|
-
*--------------------------------------------------------------------
|
5
|
-
*/
|
6
|
-
|
7
|
-
/*-------------------------------------------------------------------------
|
8
|
-
*
|
9
|
-
* parse_expr.c
|
10
|
-
* handle expressions in parser
|
11
|
-
*
|
12
|
-
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
13
|
-
* Portions Copyright (c) 1994, Regents of the University of California
|
14
|
-
*
|
15
|
-
*
|
16
|
-
* IDENTIFICATION
|
17
|
-
* src/backend/parser/parse_expr.c
|
18
|
-
*
|
19
|
-
*-------------------------------------------------------------------------
|
20
|
-
*/
|
21
|
-
|
22
|
-
#include "postgres.h"
|
23
|
-
|
24
|
-
#include "catalog/pg_type.h"
|
25
|
-
#include "commands/dbcommands.h"
|
26
|
-
#include "miscadmin.h"
|
27
|
-
#include "nodes/makefuncs.h"
|
28
|
-
#include "nodes/nodeFuncs.h"
|
29
|
-
#include "optimizer/optimizer.h"
|
30
|
-
#include "parser/analyze.h"
|
31
|
-
#include "parser/parse_agg.h"
|
32
|
-
#include "parser/parse_clause.h"
|
33
|
-
#include "parser/parse_coerce.h"
|
34
|
-
#include "parser/parse_collate.h"
|
35
|
-
#include "parser/parse_expr.h"
|
36
|
-
#include "parser/parse_func.h"
|
37
|
-
#include "parser/parse_oper.h"
|
38
|
-
#include "parser/parse_relation.h"
|
39
|
-
#include "parser/parse_target.h"
|
40
|
-
#include "parser/parse_type.h"
|
41
|
-
#include "utils/builtins.h"
|
42
|
-
#include "utils/date.h"
|
43
|
-
#include "utils/lsyscache.h"
|
44
|
-
#include "utils/timestamp.h"
|
45
|
-
#include "utils/xml.h"
|
46
|
-
|
47
|
-
/* GUC parameters */
|
48
|
-
__thread bool operator_precedence_warning = false;
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
/*
|
53
|
-
* Node-type groups for operator precedence warnings
|
54
|
-
* We use zero for everything not otherwise classified
|
55
|
-
*/
|
56
|
-
#define PREC_GROUP_POSTFIX_IS 1 /* postfix IS tests (NullTest, etc) */
|
57
|
-
#define PREC_GROUP_INFIX_IS 2 /* infix IS (IS DISTINCT FROM, etc) */
|
58
|
-
#define PREC_GROUP_LESS 3 /* < > */
|
59
|
-
#define PREC_GROUP_EQUAL 4 /* = */
|
60
|
-
#define PREC_GROUP_LESS_EQUAL 5 /* <= >= <> */
|
61
|
-
#define PREC_GROUP_LIKE 6 /* LIKE ILIKE SIMILAR */
|
62
|
-
#define PREC_GROUP_BETWEEN 7 /* BETWEEN */
|
63
|
-
#define PREC_GROUP_IN 8 /* IN */
|
64
|
-
#define PREC_GROUP_NOT_LIKE 9 /* NOT LIKE/ILIKE/SIMILAR */
|
65
|
-
#define PREC_GROUP_NOT_BETWEEN 10 /* NOT BETWEEN */
|
66
|
-
#define PREC_GROUP_NOT_IN 11 /* NOT IN */
|
67
|
-
#define PREC_GROUP_POSTFIX_OP 12 /* generic postfix operators */
|
68
|
-
#define PREC_GROUP_INFIX_OP 13 /* generic infix operators */
|
69
|
-
#define PREC_GROUP_PREFIX_OP 14 /* generic prefix operators */
|
70
|
-
|
71
|
-
/*
|
72
|
-
* Map precedence groupings to old precedence ordering
|
73
|
-
*
|
74
|
-
* Old precedence order:
|
75
|
-
* 1. NOT
|
76
|
-
* 2. =
|
77
|
-
* 3. < >
|
78
|
-
* 4. LIKE ILIKE SIMILAR
|
79
|
-
* 5. BETWEEN
|
80
|
-
* 6. IN
|
81
|
-
* 7. generic postfix Op
|
82
|
-
* 8. generic Op, including <= => <>
|
83
|
-
* 9. generic prefix Op
|
84
|
-
* 10. IS tests (NullTest, BooleanTest, etc)
|
85
|
-
*
|
86
|
-
* NOT BETWEEN etc map to BETWEEN etc when considered as being on the left,
|
87
|
-
* but to NOT when considered as being on the right, because of the buggy
|
88
|
-
* precedence handling of those productions in the old grammar.
|
89
|
-
*/
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
static Node *transformExprRecurse(ParseState *pstate, Node *expr);
|
94
|
-
static Node *transformParamRef(ParseState *pstate, ParamRef *pref);
|
95
|
-
static Node *transformAExprOp(ParseState *pstate, A_Expr *a);
|
96
|
-
static Node *transformAExprOpAny(ParseState *pstate, A_Expr *a);
|
97
|
-
static Node *transformAExprOpAll(ParseState *pstate, A_Expr *a);
|
98
|
-
static Node *transformAExprDistinct(ParseState *pstate, A_Expr *a);
|
99
|
-
static Node *transformAExprNullIf(ParseState *pstate, A_Expr *a);
|
100
|
-
static Node *transformAExprOf(ParseState *pstate, A_Expr *a);
|
101
|
-
static Node *transformAExprIn(ParseState *pstate, A_Expr *a);
|
102
|
-
static Node *transformAExprBetween(ParseState *pstate, A_Expr *a);
|
103
|
-
static Node *transformBoolExpr(ParseState *pstate, BoolExpr *a);
|
104
|
-
static Node *transformFuncCall(ParseState *pstate, FuncCall *fn);
|
105
|
-
static Node *transformMultiAssignRef(ParseState *pstate, MultiAssignRef *maref);
|
106
|
-
static Node *transformCaseExpr(ParseState *pstate, CaseExpr *c);
|
107
|
-
static Node *transformSubLink(ParseState *pstate, SubLink *sublink);
|
108
|
-
static Node *transformArrayExpr(ParseState *pstate, A_ArrayExpr *a,
|
109
|
-
Oid array_type, Oid element_type, int32 typmod);
|
110
|
-
static Node *transformRowExpr(ParseState *pstate, RowExpr *r, bool allowDefault);
|
111
|
-
static Node *transformCoalesceExpr(ParseState *pstate, CoalesceExpr *c);
|
112
|
-
static Node *transformMinMaxExpr(ParseState *pstate, MinMaxExpr *m);
|
113
|
-
static Node *transformSQLValueFunction(ParseState *pstate,
|
114
|
-
SQLValueFunction *svf);
|
115
|
-
static Node *transformXmlExpr(ParseState *pstate, XmlExpr *x);
|
116
|
-
static Node *transformXmlSerialize(ParseState *pstate, XmlSerialize *xs);
|
117
|
-
static Node *transformBooleanTest(ParseState *pstate, BooleanTest *b);
|
118
|
-
static Node *transformCurrentOfExpr(ParseState *pstate, CurrentOfExpr *cexpr);
|
119
|
-
static Node *transformColumnRef(ParseState *pstate, ColumnRef *cref);
|
120
|
-
static Node *transformWholeRowRef(ParseState *pstate,
|
121
|
-
ParseNamespaceItem *nsitem,
|
122
|
-
int sublevels_up, int location);
|
123
|
-
static Node *transformIndirection(ParseState *pstate, A_Indirection *ind);
|
124
|
-
static Node *transformTypeCast(ParseState *pstate, TypeCast *tc);
|
125
|
-
static Node *transformCollateClause(ParseState *pstate, CollateClause *c);
|
126
|
-
static Node *make_row_comparison_op(ParseState *pstate, List *opname,
|
127
|
-
List *largs, List *rargs, int location);
|
128
|
-
static Node *make_row_distinct_op(ParseState *pstate, List *opname,
|
129
|
-
RowExpr *lrow, RowExpr *rrow, int location);
|
130
|
-
static Expr *make_distinct_op(ParseState *pstate, List *opname,
|
131
|
-
Node *ltree, Node *rtree, int location);
|
132
|
-
static Node *make_nulltest_from_distinct(ParseState *pstate,
|
133
|
-
A_Expr *distincta, Node *arg);
|
134
|
-
static int operator_precedence_group(Node *node, const char **nodename);
|
135
|
-
static void emit_precedence_warnings(ParseState *pstate,
|
136
|
-
int opgroup, const char *opname,
|
137
|
-
Node *lchild, Node *rchild,
|
138
|
-
int location);
|
139
|
-
|
140
|
-
|
141
|
-
/*
|
142
|
-
* transformExpr -
|
143
|
-
* Analyze and transform expressions. Type checking and type casting is
|
144
|
-
* done here. This processing converts the raw grammar output into
|
145
|
-
* expression trees with fully determined semantics.
|
146
|
-
*/
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
/*
|
152
|
-
* helper routine for delivering "column does not exist" error message
|
153
|
-
*
|
154
|
-
* (Usually we don't have to work this hard, but the general case of field
|
155
|
-
* selection from an arbitrary node needs it.)
|
156
|
-
*/
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
/*
|
162
|
-
* Transform a ColumnRef.
|
163
|
-
*
|
164
|
-
* If you find yourself changing this code, see also ExpandColumnRefStar.
|
165
|
-
*/
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
/* Test whether an a_expr is a plain NULL constant or not */
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
/*
|
184
|
-
* Checking an expression for match to a list of type names. Will result
|
185
|
-
* in a boolean constant node.
|
186
|
-
*/
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
/*
|
204
|
-
* transformArrayExpr
|
205
|
-
*
|
206
|
-
* If the caller specifies the target type, the resulting array will
|
207
|
-
* be of exactly that type. Otherwise we try to infer a common type
|
208
|
-
* for the elements using select_common_type().
|
209
|
-
*/
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
/*
|
229
|
-
* Construct a whole-row reference to represent the notation "relation.*".
|
230
|
-
*/
|
231
|
-
|
232
|
-
|
233
|
-
/*
|
234
|
-
* Handle an explicit CAST construct.
|
235
|
-
*
|
236
|
-
* Transform the argument, look up the type name, and apply any necessary
|
237
|
-
* coercion function(s).
|
238
|
-
*/
|
239
|
-
|
240
|
-
|
241
|
-
/*
|
242
|
-
* Handle an explicit COLLATE clause.
|
243
|
-
*
|
244
|
-
* Transform the argument, and look up the collation name.
|
245
|
-
*/
|
246
|
-
|
247
|
-
|
248
|
-
/*
|
249
|
-
* Transform a "row compare-op row" construct
|
250
|
-
*
|
251
|
-
* The inputs are lists of already-transformed expressions.
|
252
|
-
* As with coerce_type, pstate may be NULL if no special unknown-Param
|
253
|
-
* processing is wanted.
|
254
|
-
*
|
255
|
-
* The output may be a single OpExpr, an AND or OR combination of OpExprs,
|
256
|
-
* or a RowCompareExpr. In all cases it is guaranteed to return boolean.
|
257
|
-
* The AND, OR, and RowCompareExpr cases further imply things about the
|
258
|
-
* behavior of the operators (ie, they behave as =, <>, or < <= > >=).
|
259
|
-
*/
|
260
|
-
|
261
|
-
|
262
|
-
/*
|
263
|
-
* Transform a "row IS DISTINCT FROM row" construct
|
264
|
-
*
|
265
|
-
* The input RowExprs are already transformed
|
266
|
-
*/
|
267
|
-
|
268
|
-
|
269
|
-
/*
|
270
|
-
* make the node for an IS DISTINCT FROM operator
|
271
|
-
*/
|
272
|
-
|
273
|
-
|
274
|
-
/*
|
275
|
-
* Produce a NullTest node from an IS [NOT] DISTINCT FROM NULL construct
|
276
|
-
*
|
277
|
-
* "arg" is the untransformed other argument
|
278
|
-
*/
|
279
|
-
|
280
|
-
|
281
|
-
/*
|
282
|
-
* Identify node's group for operator precedence warnings
|
283
|
-
*
|
284
|
-
* For items in nonzero groups, also return a suitable node name into *nodename
|
285
|
-
*
|
286
|
-
* Note: group zero is used for nodes that are higher or lower precedence
|
287
|
-
* than everything that changed precedence; we need never issue warnings
|
288
|
-
* related to such nodes.
|
289
|
-
*/
|
290
|
-
|
291
|
-
|
292
|
-
/*
|
293
|
-
* helper routine for delivering 9.4-to-9.5 operator precedence warnings
|
294
|
-
*
|
295
|
-
* opgroup/opname/location represent some parent node
|
296
|
-
* lchild, rchild are its left and right children (either could be NULL)
|
297
|
-
*
|
298
|
-
* This should be called before transforming the child nodes, since if a
|
299
|
-
* precedence-driven parsing change has occurred in a query that used to work,
|
300
|
-
* it's quite possible that we'll get a semantic failure while analyzing the
|
301
|
-
* child expression. We want to produce the warning before that happens.
|
302
|
-
* In any case, operator_precedence_group() expects untransformed input.
|
303
|
-
*/
|
304
|
-
|
305
|
-
|
306
|
-
/*
|
307
|
-
* Produce a string identifying an expression by kind.
|
308
|
-
*
|
309
|
-
* Note: when practical, use a simple SQL keyword for the result. If that
|
310
|
-
* doesn't work well, check call sites to see whether custom error message
|
311
|
-
* strings are required.
|
312
|
-
*/
|
313
|
-
|
@@ -1,127 +0,0 @@
|
|
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
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
/*--------------------------------------------------------------------
|
2
|
-
* Symbols referenced in this file:
|
3
|
-
* - random
|
4
|
-
*--------------------------------------------------------------------
|
5
|
-
*/
|
6
|
-
|
7
|
-
/*-------------------------------------------------------------------------
|
8
|
-
*
|
9
|
-
* random.c
|
10
|
-
* random() wrapper
|
11
|
-
*
|
12
|
-
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
13
|
-
* Portions Copyright (c) 1994, Regents of the University of California
|
14
|
-
*
|
15
|
-
*
|
16
|
-
* IDENTIFICATION
|
17
|
-
* src/port/random.c
|
18
|
-
*
|
19
|
-
*-------------------------------------------------------------------------
|
20
|
-
*/
|
21
|
-
|
22
|
-
#include "c.h"
|
23
|
-
|
24
|
-
#include <math.h>
|
25
|
-
|
26
|
-
|
27
|
-
long
|
28
|
-
random(void)
|
29
|
-
{
|
30
|
-
return pg_lrand48();
|
31
|
-
}
|