blob: 1d4613ee3aa39aebbbea376237b9471e62a9c097 [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=ag_catalog;
SELECT create_graph('graph');
NOTICE: graph "graph" has been created
create_graph
--------------
(1 row)
-- Should error out
SELECT * FROM cypher('graph', $$ RETURN soundex("hello") $$) AS (n agtype);
ERROR: function soundex does not exist
LINE 1: SELECT * FROM cypher('graph', $$ RETURN soundex("hello") $$)...
^
HINT: If the function is from an external extension, make sure the extension is installed and the function is in the search path.
-- Create the extension in the public schema
CREATE EXTENSION fuzzystrmatch SCHEMA public;
-- Should error out
SELECT * FROM cypher('graph', $$ RETURN soundex("hello") $$) AS (n agtype);
ERROR: function soundex does not exist
LINE 1: SELECT * FROM cypher('graph', $$ RETURN soundex("hello") $$)...
^
HINT: If the function is from an external extension, make sure the extension is installed and the function is in the search path.
-- Should work
SET search_path=ag_catalog, public;
SELECT * FROM cypher('graph', $$ CREATE (:Person {name: "Jane"}),
(:Person {name: "John"}),
(:Person {name: "Jone"}),
(:Person {name: "Jack"}),
(:Person {name: "Jax"}),
(:Person {name: "Jake"}),
(:Person {name: "Julie"}),
(:Person {name: "Julius"}),
(:Person {name: "Jill"}),
(:Person {name: "Jillie"}),
(:Person {name: "Julian"})
$$) AS (n agtype);
n
---
(0 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return soundex(p.name) $$) AS (n agtype);
n
--------
"J500"
"J500"
"J500"
"J200"
"J200"
"J200"
"J400"
"J420"
"J400"
"J400"
"J450"
(11 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return levenshtein(p.name, "John") $$) AS (n agtype);
n
---
3
0
2
3
3
3
4
5
3
5
4
(11 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return difference(p.name, "John") $$) AS (n agtype);
n
---
4
4
4
3
3
3
3
2
3
3
2
(11 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return metaphone(p.name, 4) $$) AS (n agtype);
n
-------
"JN"
"JN"
"JN"
"JK"
"JKS"
"JK"
"JL"
"JLS"
"JL"
"JL"
"JLN"
(11 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return dmetaphone(p.name) $$) AS (n agtype);
n
-------
"JN"
"JN"
"JN"
"JK"
"JKS"
"JK"
"JL"
"JLS"
"JL"
"JL"
"JLN"
(11 rows)
-- Difference is basically similarity using soundex, https://www.postgresql.org/docs/current/fuzzystrmatch.html
SELECT * FROM cypher('graph', $$ MATCH (p) return p ORDER BY difference(p.name, "Jon") DESC LIMIT 3$$) AS (n agtype);
n
------------------------------------------------------------------------------------
{"id": 844424930131970, "label": "Person", "properties": {"name": "John"}}::vertex
{"id": 844424930131971, "label": "Person", "properties": {"name": "Jone"}}::vertex
{"id": 844424930131969, "label": "Person", "properties": {"name": "Jane"}}::vertex
(3 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return p ORDER BY difference(p.name, "Jak") DESC LIMIT 3$$) AS (n agtype);
n
------------------------------------------------------------------------------------
{"id": 844424930131972, "label": "Person", "properties": {"name": "Jack"}}::vertex
{"id": 844424930131973, "label": "Person", "properties": {"name": "Jax"}}::vertex
{"id": 844424930131974, "label": "Person", "properties": {"name": "Jake"}}::vertex
(3 rows)
SELECT * FROM cypher('graph', $$ MATCH (p) return p ORDER BY difference(p.name, "Jil") DESC LIMIT 3$$) AS (n agtype);
n
--------------------------------------------------------------------------------------
{"id": 844424930131975, "label": "Person", "properties": {"name": "Julie"}}::vertex
{"id": 844424930131977, "label": "Person", "properties": {"name": "Jill"}}::vertex
{"id": 844424930131978, "label": "Person", "properties": {"name": "Jillie"}}::vertex
(3 rows)
-- Clean up
SELECT drop_graph('graph', true);
NOTICE: drop cascades to 3 other objects
DETAIL: drop cascades to table graph._ag_label_vertex
drop cascades to table graph._ag_label_edge
drop cascades to table graph."Person"
NOTICE: graph "graph" has been dropped
drop_graph
------------
(1 row)
DROP EXTENSION fuzzystrmatch CASCADE;