range_test_schema.sql

application/octet-stream

Filename: range_test_schema.sql
Type: application/octet-stream
Part: 2
Message: Testing of various opclasses for ranges
--
-- 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
--