blob: 18be2a82b5d1bb0331a45759aeeb17e8420d36d3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION age" to load this file. \quit
--
-- catalog tables
--
CREATE TABLE ag_graph (
name name NOT NULL,
namespace regnamespace NOT NULL
) WITH (OIDS);
-- include content of the ag_graph table into the pg_dump output
SELECT pg_catalog.pg_extension_config_dump('ag_graph', '');
CREATE UNIQUE INDEX ag_graph_oid_index ON ag_graph USING btree (oid);
CREATE UNIQUE INDEX ag_graph_name_index ON ag_graph USING btree (name);
CREATE UNIQUE INDEX ag_graph_namespace_index
ON ag_graph
USING btree (namespace);
-- 0 is an invalid label ID
CREATE DOMAIN label_id AS int NOT NULL CHECK (VALUE > 0 AND VALUE <= 65535);
CREATE DOMAIN label_kind AS "char" NOT NULL CHECK (VALUE = 'v' OR VALUE = 'e');
CREATE TABLE ag_label (
name name NOT NULL,
graph oid NOT NULL,
id label_id,
kind label_kind,
relation regclass NOT NULL,
seq_name name NOT NULL
) WITH (OIDS);
-- include content of the ag_label table into the pg_dump output
SELECT pg_catalog.pg_extension_config_dump('ag_label', '');
CREATE UNIQUE INDEX ag_label_oid_index ON ag_label USING btree (oid);
CREATE UNIQUE INDEX ag_label_name_graph_index
ON ag_label
USING btree (name, graph);
CREATE UNIQUE INDEX ag_label_graph_id_index
ON ag_label
USING btree (graph, id);
CREATE UNIQUE INDEX ag_label_relation_index ON ag_label USING btree (relation);
CREATE UNIQUE INDEX ag_label_seq_name_graph_index
ON ag_label
USING btree (seq_name, graph);
--
-- catalog lookup functions
--
CREATE FUNCTION ag_catalog._label_id(graph_name name, label_name name)
RETURNS label_id
LANGUAGE c
STABLE
PARALLEL SAFE
AS 'MODULE_PATHNAME';
--
-- utility functions
--
CREATE FUNCTION ag_catalog.create_graph(graph_name name)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.drop_graph(graph_name name, cascade boolean = false)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.create_vlabel(graph_name name, label_name name)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.create_elabel(graph_name name, label_name name)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.alter_graph(graph_name name, operation cstring,
new_value name)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.drop_label(graph_name name, label_name name,
force boolean = false)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
--
-- If `load_as_agtype` is true, property values are loaded as agtype; otherwise
-- loaded as string.
--
CREATE FUNCTION ag_catalog.load_labels_from_file(graph_name name,
label_name name,
file_path text,
id_field_exists bool default true,
load_as_agtype bool default false)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.load_edges_from_file(graph_name name,
label_name name,
file_path text,
load_as_agtype bool default false)
RETURNS void
LANGUAGE c
AS 'MODULE_PATHNAME';
--
-- graphid type
--
-- define graphid as a shell type first
CREATE TYPE graphid;
CREATE FUNCTION ag_catalog.graphid_in(cstring)
RETURNS graphid
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.graphid_out(graphid)
RETURNS cstring
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-- binary I/O functions
CREATE FUNCTION ag_catalog.graphid_send(graphid)
RETURNS bytea
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog.graphid_recv(internal)
RETURNS graphid
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE TYPE graphid (
INPUT = ag_catalog.graphid_in,
OUTPUT = ag_catalog.graphid_out,
SEND = ag_catalog.graphid_send,
RECEIVE = ag_catalog.graphid_recv,
INTERNALLENGTH = 8,
PASSEDBYVALUE,
ALIGNMENT = float8,
STORAGE = plain
);
--
-- graphid - comparison operators (=, <>, <, >, <=, >=)
--
CREATE FUNCTION ag_catalog.graphid_eq(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR = (
FUNCTION = ag_catalog.graphid_eq,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = =,
NEGATOR = <>,
RESTRICT = eqsel,
JOIN = eqjoinsel,
HASHES,
MERGES
);
CREATE FUNCTION ag_catalog.graphid_ne(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR <> (
FUNCTION = ag_catalog.graphid_ne,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = <>,
NEGATOR = =,
RESTRICT = neqsel,
JOIN = neqjoinsel
);
CREATE FUNCTION ag_catalog.graphid_lt(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR < (
FUNCTION = ag_catalog.graphid_lt,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = >,
NEGATOR = >=,
RESTRICT = scalarltsel,
JOIN = scalarltjoinsel
);
CREATE FUNCTION ag_catalog.graphid_gt(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR > (
FUNCTION = ag_catalog.graphid_gt,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = <,
NEGATOR = <=,
RESTRICT = scalargtsel,
JOIN = scalargtjoinsel
);
CREATE FUNCTION ag_catalog.graphid_le(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR <= (
FUNCTION = ag_catalog.graphid_le,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = >=,
NEGATOR = >,
RESTRICT = scalarlesel,
JOIN = scalarlejoinsel
);
CREATE FUNCTION ag_catalog.graphid_ge(graphid, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR >= (
FUNCTION = ag_catalog.graphid_ge,
LEFTARG = graphid,
RIGHTARG = graphid,
COMMUTATOR = <=,
NEGATOR = <,
RESTRICT = scalargesel,
JOIN = scalargejoinsel
);
--
-- graphid - B-tree support functions
--
-- comparison support
CREATE FUNCTION ag_catalog.graphid_btree_cmp(graphid, graphid)
RETURNS int
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-- sort support
CREATE FUNCTION ag_catalog.graphid_btree_sort(internal)
RETURNS void
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
--
-- define operator classes for graphid
--
-- B-tree strategies
-- 1: less than
-- 2: less than or equal
-- 3: equal
-- 4: greater than or equal
-- 5: greater than
--
-- B-tree support functions
-- 1: compare two keys and return an integer less than zero, zero, or greater
-- than zero, indicating whether the first key is less than, equal to, or
-- greater than the second
-- 2: return the addresses of C-callable sort support function(s) (optional)
-- 3: compare a test value to a base value plus/minus an offset, and return
-- true or false according to the comparison result (optional)
CREATE OPERATOR CLASS graphid_ops DEFAULT FOR TYPE graphid USING btree AS
OPERATOR 1 <,
OPERATOR 2 <=,
OPERATOR 3 =,
OPERATOR 4 >=,
OPERATOR 5 >,
FUNCTION 1 ag_catalog.graphid_btree_cmp (graphid, graphid),
FUNCTION 2 ag_catalog.graphid_btree_sort (internal);
--
-- graphid functions
--
CREATE FUNCTION ag_catalog._graphid(label_id int, entry_id bigint)
RETURNS graphid
LANGUAGE c
IMMUTABLE
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog._label_name(graph_oid oid, graphid)
RETURNS cstring
LANGUAGE c
IMMUTABLE
PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE FUNCTION ag_catalog._extract_label_id(graphid)
RETURNS label_id
LANGUAGE c
STABLE
PARALLEL SAFE
AS 'MODULE_PATHNAME';