blob: 85fc4e8abfac112cb4fd0f7213f58f0ad4b8ac37 [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.
*/
LOAD 'age';
SET search_path TO ag_catalog;
--
-- create_graph(), drop_label(), and drop_graph() tests
--
SELECT create_graph('graph');
SELECT name, namespace FROM ag_graph WHERE name = 'graph';
-- create a label to test drop_label()
SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype);
-- test drop_label()
SELECT drop_label('graph', 'l');
-- create a label to test drop_graph()
SELECT * FROM cypher('graph', $$CREATE (:v)$$) AS r(a agtype);
-- DROP SCHEMA ... CASCADE should fail
DROP SCHEMA graph CASCADE;
-- DROP TABLE ... should fail
DROP TABLE graph.v;
-- should fail (cascade = false)
SELECT drop_graph('graph');
SELECT drop_graph('graph', true);
SELECT count(*) FROM ag_graph WHERE name = 'graph';
SELECT count(*) FROM pg_namespace WHERE nspname = 'graph';
-- invalid cases
SELECT create_graph(NULL);
SELECT drop_graph(NULL);
SELECT create_graph('');
--
-- alter_graph() RENAME function tests
--
-- create 2 graphs for test.
SELECT create_graph('GraphA');
SELECT create_graph('GraphB');
-- Show GraphA's construction to verify case is preserved.
SELECT name, namespace FROM ag_graph WHERE name = 'GraphA';
SELECT nspname FROM pg_namespace WHERE nspname = 'GraphA';
-- Rename GraphA to GraphX.
SELECT alter_graph('GraphA', 'RENAME', 'GraphX');
-- Show GraphX's construction to verify case is preserved.
SELECT name, namespace FROM ag_graph WHERE name = 'GraphX';
SELECT nspname FROM pg_namespace WHERE nspname = 'GraphX';
-- Verify there isn't a graph GraphA anymore.
SELECT name, namespace FROM ag_graph WHERE name = 'GraphA';
SELECT * FROM pg_namespace WHERE nspname = 'GraphA';
-- Sanity check that graphx does not exist - should return 0.
SELECT count(*) FROM ag_graph where name = 'graphx';
-- Verify case sensitivity (graphx does not exist, but GraphX does) - should fail.
SELECT alter_graph('graphx', 'RENAME', 'GRAPHX');
-- Checks for collisions (GraphB already exists) - should fail.
SELECT alter_graph('GraphX', 'RENAME', 'GraphB');
-- Remove graphs.
SELECT drop_graph('GraphX', true);
SELECT drop_graph('GraphB', true);
-- Verify that renaming a graph that does not exist fails.
SELECT alter_graph('GraphB', 'RENAME', 'GraphA');
-- Verify NULL input checks.
SELECT alter_graph(NULL, 'RENAME', 'GraphA');
SELECT alter_graph('GraphB', NULL, 'GraphA');
SELECT alter_graph('GraphB', 'RENAME', NULL);
-- Verify invalid input check for operation parameter.
SELECT alter_graph('GraphB', 'DUMMY', 'GraphA');
--
-- label id test
--
SELECT create_graph('graph');
-- label id starts from 1
SELECT * FROM cypher('graph', $$CREATE (:v1)$$) AS r(a agtype);
SELECT name, id, kind, relation FROM ag_label;
-- skip label id 2 to test the logic that gets an unused label id after cycle
SELECT nextval('graph._label_id_seq');
-- label id is now 3
SELECT * FROM cypher('graph', $$CREATE (:v3)$$) as r(a agtype);
SELECT name, id, kind, relation FROM ag_label;
-- to use 65535 as the next label id, set label id to 65534
SELECT setval('graph._label_id_seq', 65534);
-- label id is now 65535
SELECT * FROM cypher('graph', $$CREATE (:v65535)$$) as r(a agtype);
SELECT name, id, kind, relation FROM ag_label;
-- after cycle, label id is now 2
SELECT * FROM cypher('graph', $$CREATE (:v2)$$) as r(a agtype);
SELECT name, id, kind, relation FROM ag_label;
SELECT drop_graph('graph', true);
-- create labels
SELECT create_graph('graph');
SELECT create_vlabel('graph', 'n');
SELECT create_elabel('graph', 'r');
-- check if labels have been created or not
SELECT name, id, kind, relation FROM ag_label;
-- try to create duplicate labels
SELECT create_vlabel('graph', 'n');
SELECT create_elabel('graph', 'r');
-- remove the labels that have been created
SELECT drop_label('graph', 'n', false);
SELECT drop_label('graph', 'r', false);
-- check if labels have been deleted or not
SELECT name, id, kind, relation FROM ag_label;
-- try to remove labels that is not there
SELECT drop_label('graph', 'n');
SELECT drop_label('graph', 'r');
-- Trying to call the functions with label null
SELECT create_vlabel('graph', NULL);
SELECT create_elabel('graph', NULL);
-- Trying to call the functions with graph null
SELECT create_vlabel(NULL, 'n');
SELECT create_elabel(NULL, 'r');
-- Trying to call the functions with both null
SELECT create_vlabel(NULL, NULL);
SELECT create_elabel(NULL, NULL);
-- age_graph_exists()
CREATE FUNCTION raise_notice(graph_name TEXT)
RETURNS void AS $$
DECLARE
res BOOLEAN;
BEGIN
-- this tests whether graph_exists works with IF-ELSE.
SELECT graph_exists('graph1') INTO res;
IF res THEN
RAISE NOTICE 'graph exists';
ELSE
RAISE NOTICE 'graph does not exist';
END IF;
END $$ LANGUAGE plpgsql;
SELECT graph_exists('graph1');
SELECT create_graph('graph1');
SELECT graph_exists('graph1');
SELECT raise_notice('graph1');
SELECT drop_graph('graph1', true);
SELECT graph_exists('graph1');
SELECT raise_notice('graph1');
DROP FUNCTION raise_notice(TEXT);
-- dropping the graph
SELECT drop_graph('graph', true);