range_test_schema.sql
application/octet-stream
Filename: range_test_schema.sql
Type: application/octet-stream
Part: 2
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:
--
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:
--
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
SET search_path = public, pg_catalog;
--
-- Name: floatrange; Type: TYPE; Schema: public; Owner: smagen
--
CREATE TYPE floatrange AS RANGE (
subtype = double precision,
subtype_diff = float8mi
);
ALTER TYPE public.floatrange OWNER TO smagen;
--
-- Name: generate_objects(integer, text, double precision, text, double precision); Type: FUNCTION; Schema: public; Owner: smagen
--
CREATE FUNCTION generate_objects(count integer, start_distr text, start_param double precision, size_distr text, size_param double precision) RETURNS SETOF floatrange
LANGUAGE plpgsql COST 1
AS $$
DECLARE
i integer;
range_start float8;
range_size float8;
BEGIN
FOR i IN 1..count LOOP
range_start := generate_value(start_distr, start_param);
range_size := generate_value(size_distr, size_param);
RETURN NEXT floatrange(range_start, range_start + range_size);
END LOOP;
END;
$$;
ALTER FUNCTION public.generate_objects(count integer, start_distr text, start_param double precision, size_distr text, size_param double precision) OWNER TO smagen;
--
-- Name: generate_objects_clusters(integer, integer, text, double precision, text, double precision, text, double precision); Type: FUNCTION; Schema: public; Owner: smagen
--
CREATE FUNCTION generate_objects_clusters(count integer, cluster_size integer, center_distr text, center_param double precision, offset_distr text, offset_param double precision, size_distr text, size_param double precision) RETURNS SETOF floatrange
LANGUAGE plpgsql COST 1
AS $$
DECLARE
n integer;
i integer;
cluster_center float8;
range_start float8;
range_size float8;
BEGIN
n := 0;
LOOP
cluster_center := generate_value(center_distr, center_param);
FOR i IN 1..cluster_size LOOP
range_start := cluster_center + generate_value(offset_distr, offset_param);
range_size := generate_value(size_distr, size_param);
n := n + 1;
RETURN NEXT floatrange(range_start, range_start + range_size);
IF n >= count THEN
RETURN;
END IF;
END LOOP;
END LOOP;
END;
$$;
ALTER FUNCTION public.generate_objects_clusters(count integer, cluster_size integer, center_distr text, center_param double precision, offset_distr text, offset_param double precision, size_distr text, size_param double precision) OWNER TO smagen;
--
-- Name: generate_objects_lifetime(integer, text, double precision, text, double precision, text, double precision); Type: FUNCTION; Schema: public; Owner: smagen
--
CREATE FUNCTION generate_objects_lifetime(count integer, start_distr text, start_param double precision, lifetime_distr text, lifetime_param double precision, version_distr text, version_param double precision) RETURNS SETOF floatrange
LANGUAGE plpgsql COST 1
AS $$
DECLARE
n integer;
lifetime float8;
start_time float8;
version_time float8;
BEGIN
n := 0;
LOOP
start_time := generate_value(start_distr, start_param);
lifetime := generate_value(lifetime_distr, lifetime_param);
WHILE (lifetime > 0) LOOP
version_time := generate_value(version_distr, version_param);
lifetime := lifetime - version_time;
n := n + 1;
RETURN NEXT floatrange(start_time, start_time + version_time);
IF n >= count THEN
RETURN;
END IF;
start_time := start_time + version_time;
END LOOP;
END LOOP;
END;
$$;
ALTER FUNCTION public.generate_objects_lifetime(count integer, start_distr text, start_param double precision, lifetime_distr text, lifetime_param double precision, version_distr text, version_param double precision) OWNER TO smagen;
--
-- Name: generate_value(text, double precision); Type: FUNCTION; Schema: public; Owner: smagen
--
CREATE FUNCTION generate_value(distr text, param double precision) RETURNS double precision
LANGUAGE plpgsql COST 1
AS $$
BEGIN
IF distr = 'uniform' THEN
RETURN random() * param;
ELSIF distr = 'exponential' THEN
RETURN (-param) * ln(1.0 - random());
ELSIF distr = 'gaussian' THEN
RETURN param * sin(2 * pi() * random()) * sqrt(-2.0 * ln(random()));
ELSIF distr = 'gaussian_non_negative' THEN
RETURN abs(param + param * sin(2 * pi() * random()) * sqrt(-2.0 * ln(random())));
ELSE
RAISE EXCEPTION 'Unknown distribution %s', distr;
END IF;
END;
$$;
ALTER FUNCTION public.generate_value(distr text, param double precision) OWNER TO smagen;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: indexes; Type: TABLE; Schema: public; Owner: smagen; Tablespace:
--
CREATE TABLE indexes (
id integer NOT NULL,
distribution_type text,
distr1 text,
param1 double precision,
distr2 text,
param2 double precision,
distr3 text,
param3 double precision,
opclass text,
buildtime double precision
);
ALTER TABLE public.indexes OWNER TO smagen;
--
-- Name: indexes_id_seq; Type: SEQUENCE; Schema: public; Owner: smagen
--
CREATE SEQUENCE indexes_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.indexes_id_seq OWNER TO smagen;
--
-- Name: indexes_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: smagen
--
ALTER SEQUENCE indexes_id_seq OWNED BY indexes.id;
--
-- Name: ranges; Type: TABLE; Schema: public; Owner: smagen; Tablespace:
--
CREATE TABLE ranges (
value floatrange
);
ALTER TABLE public.ranges OWNER TO smagen;
--
-- Name: test_results; Type: TABLE; Schema: public; Owner: smagen; Tablespace:
--
CREATE TABLE test_results (
index_id integer,
test_id integer,
operator text,
hits integer,
"time" double precision,
count integer
);
ALTER TABLE public.test_results OWNER TO smagen;
--
-- Name: tests; Type: TABLE; Schema: public; Owner: smagen; Tablespace:
--
CREATE TABLE tests (
id bigint,
value floatrange
);
ALTER TABLE public.tests OWNER TO smagen;
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: smagen
--
ALTER TABLE ONLY indexes ALTER COLUMN id SET DEFAULT nextval('indexes_id_seq'::regclass);
--
-- Name: indexes_pkey; Type: CONSTRAINT; Schema: public; Owner: smagen; Tablespace:
--
ALTER TABLE ONLY indexes
ADD CONSTRAINT indexes_pkey PRIMARY KEY (id);
--
-- Name: indexes_idx; Type: INDEX; Schema: public; Owner: smagen; Tablespace:
--
CREATE INDEX indexes_idx ON indexes USING btree (distribution_type, distr1, param1, distr2, param2, distr3, param3);
--
-- Name: ranges_idx; Type: INDEX; Schema: public; Owner: smagen; Tablespace:
--
CREATE INDEX ranges_idx ON ranges USING spgist (value range_ops_kd);
--
-- Name: test_results_idx; Type: INDEX; Schema: public; Owner: smagen; Tablespace:
--
CREATE INDEX test_results_idx ON test_results USING btree (test_id, index_id);
--
-- Name: test_results_idx2; Type: INDEX; Schema: public; Owner: smagen; Tablespace:
--
CREATE INDEX test_results_idx2 ON test_results USING btree (index_id, test_id);
--
-- Name: public; Type: ACL; Schema: -; Owner: smagen
--
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM smagen;
GRANT ALL ON SCHEMA public TO smagen;
GRANT ALL ON SCHEMA public TO PUBLIC;
--
-- PostgreSQL database dump complete
--