test_graph v0.1.0 TestGraph.LPG.Cypher.Client

Module providing a simple library for querying LPG models in a Neo4j instance via Cypher.

Link to this section Summary

Functions

Deletes all nodes and relationships in database

Dumps all nodes and relationships in database

Dumps all nodes and relationships in database

Opens up a Bolt database connection with the app config

Queries database for one node

Queries database for one node and relationships

Queries database for node by id

Queries database for one node ID

Queries database for limit number of node IDs. If no limit is given then all node IDs are retuned

Queries database for limit number of nodes. If no limit is given then all nodes are retuned

Queries database for limit number of nodes and relationships. If no limit is given then all nodes and relationships are retuned

Queries database for one path

Queries database for limit number of paths. If no limit is given then all paths are retuned

Queries database for one relationship

Queries database for relationship by id

Queries database for one relationship ID

Queries database for limit number of relationship IDs. If no limit is given then all relationship IDs are retuned

Queries database for limit number of relationships. If no limit is given then all relationships are retuned

Deletes all nodes and relationships in database

Queries Bolt connection with Cypher query

The same as rquery/1 but raises a runtime error if it fails

Counts nodes, relationships and paths in database

Link to this section Functions

Deletes all nodes and relationships in database.

Examples

iex> Cypher_Client.clear()
%{stats: %{"nodes-deleted" => 171, "relationships-deleted" => 253}, type: "w"}
Link to this function

cypher_query(query_file)

Link to this function

dump(graph_file)

Dumps all nodes and relationships in database.

Examples

iex(3)> Cypher_Client.dump("nobelprizes.cypher")
[
  %{
    "batchSize" => 20000,
    "batches" => 4,
    "cleanupStatements" => nil,
    "cypherStatements" => nil,
    "file" => ".../test_graph/priv/lpg/graphs/nobelprizes.cypher",
    "format" => "cypher",
    "nodeStatements" => nil,
    "nodes" => 21027,
    "properties" => 49184,
    "relationshipStatements" => nil,
    "relationships" => 43267,
    "rows" => 64294,
    "schemaStatements" => nil,
    "source" => "database: nodes(21027), rels(43267)",
    "time" => 949
  }
]
Link to this function

dump(query_file, graph_file)

Dumps all nodes and relationships in database.

Examples

iex(3)> cypher_dump("match (n) return n limit 3", "limit3.cypher")
[
  %{
    "batchSize" => 20000,
    "batches" => 1,
    "cleanupStatements" => nil,
    "cypherStatements" => nil,
    "file" => ".../test_graph/priv/lpg/graphs/limit3.cypher",
    "format" => "cypher",
    "nodeStatements" => nil,
    "nodes" => 3,
    "properties" => 3,
    "relationshipStatements" => nil,
    "relationships" => 0,
    "rows" => 3,
    "schemaStatements" => nil,
    "source" => "statement: nodes(3), rels(0)",
    "time" => 1
  }
]

Opens up a Bolt database connection with the app config.

Examples

iex> Cypher_Client.init()
[
  socket: Bolt.Sips.Socket,
  port: 7687,
  hostname: 'localhost',
  retry_linear_backoff: [delay: 150, factor: 2, tries: 3],
  with_etls: false,
  ssl: false,
  timeout: 15000,
  max_overflow: 2,
  pool_size: 5,
  url: "bolt://localhost:7687",
  basic_auth: [username: "neo4j", password: "neo4jtest"]
]

Queries database for one node.

Link to this function

node1_and_relationships()

Queries database for one node and relationships.

Queries database for node by id.

Examples

iex> Cypher_Client.node_by_id(311)
[
  %{
    "n" => %Bolt.Sips.Types.Node{
      id: 311,
      labels: ["Book"],
      properties: %{}
    }
  },
]

Queries database for one node ID.

Link to this function

node_ids(limit \\ nil)

Queries database for limit number of node IDs. If no limit is given then all node IDs are retuned.

Examples

iex> Cypher_Client.node_ids()
[
  %{"id(n)" => 1804},
  %{"id(n)" => 1805},
  %{"id(n)" => 1806},
  %{"id(n)" => 1807},
  %{"id(n)" => 6277}
]
Link to this function

nodes(limit \\ nil)

Queries database for limit number of nodes. If no limit is given then all nodes are retuned.

Examples

iex> Cypher_Client.nodes(2)
[
  %{
    "n" => %Bolt.Sips.Types.Node{
      id: 311,
      labels: ["Book"],
      properties: %{}
    }
  },
  %{
    "n" => %Bolt.Sips.Types.Node{
      id: 312,
      labels: ["Book"],
      properties: %{}
    }
  }
]
Link to this function

nodes_and_relationships(limit \\ nil)

Queries database for limit number of nodes and relationships. If no limit is given then all nodes and relationships are retuned.

Examples

iex> Cypher_Client.nodes_and_relationships()
[
  %{
    "n" => %Bolt.Sips.Types.Node{
      id: 1546,
      labels: ["Book"],
      properties: %{
        "date" => "2018-03-14",
        "format" => "Paper",
        "iri" => "urn:isbn:978-1-68050-252-7",
        "title" => "Adopting Elixir"
      }
    },
    "r" => %Bolt.Sips.Types.Relationship{
      end: 1548,
      id: 1689,
      properties: %{"role" => "second author"},
      start: 1546,
      type: "AUTHORED_BY"
    }
  },
  ...
]

Queries database for one path.

Link to this function

paths(limit \\ nil)

Queries database for limit number of paths. If no limit is given then all paths are retuned.

Examples

iex> Cypher_Client.paths()
[
  %{
    "p" => %Bolt.Sips.Types.Path{
      nodes: [
        %Bolt.Sips.Types.Node{
          id: 1548,
          labels: ["Author"],
          properties: %{"iri" => "https://twitter.com/josevalim"}
        },
        %Bolt.Sips.Types.Node{
          id: 1546,
          labels: ["Book"],
          properties: %{
            "date" => "2018-03-14",
            "format" => "Paper",
            "iri" => "urn:isbn:978-1-68050-252-7",
            "title" => "Adopting Elixir"
          }
        }
      ],
      relationships: [
        %Bolt.Sips.Types.UnboundRelationship{
          end: nil,
          id: 1689,
          properties: %{"role" => "second author"},
          start: nil,
          type: "AUTHORED_BY"
        }
      ],
      sequence: [-1, 1]
    }
  },
  ...

]
Link to this function

relationship1()

Queries database for one relationship.

Link to this function

relationship_by_id(id)

Queries database for relationship by id.

Examples

iex> Cypher_Client.relationship_by_id(9265)
[
  %{
    "r" => %Bolt.Sips.Types.Relationship{
      end: 1786,
      id: 9265,
      properties: %{},
      start: 1783,
      type: "ns0__license"
    }
  }
]
Link to this function

relationship_id1()

Queries database for one relationship ID.

Link to this function

relationship_ids(limit \\ nil)

Queries database for limit number of relationship IDs. If no limit is given then all relationship IDs are retuned.

Examples

iex> Cypher_Client.relationship_ids()
[
  %{"id(n)" => 1804},
  %{"id(n)" => 1805},
  %{"id(n)" => 1806},
  %{"id(n)" => 1807},
  %{"id(n)" => 6277}
]
Link to this function

relationships(limit \\ nil)

Queries database for limit number of relationships. If no limit is given then all relationships are retuned.

Examples

iex> Cypher_Client.relationships()
[
  %{
    "r" => %Bolt.Sips.Types.Relationship{
      end: 1548,
      id: 1689,
      properties: %{"role" => "second author"},
      start: 1546,
      type: "AUTHORED_BY"
    }
  },
  ...
]

Deletes all nodes and relationships in database.

Examples

iex> Cypher_Client.reset()
%{stats: %{"nodes-deleted" => 171, "relationships-deleted" => 253}, type: "w"}
Link to this function

rquery(query \\ cypher_query())

Queries Bolt connection with Cypher query.

Examples

iex> Cypher_Client.rquery("match (n) return n limit 1")
{:ok,
 [
   %{
     "n" => %Bolt.Sips.Types.Node{
       id: 919,
       labels: ["Resource"],
       properties: %{
         "rdfs__label" => "Hello World",
         "uri" => "http://dbpedia.org/resource/Hello_World"
       }
     }
   }
 ]}
Link to this function

rquery!(query \\ cypher_query())

The same as rquery/1 but raises a runtime error if it fails.

Examples

iex> Cypher_Client.rquery!("match (n) return n limit 1")
[
  %{
    "n" => %Bolt.Sips.Types.Node{
      id: 919,
      labels: ["Resource"],
      properties: %{
        "rdfs__label" => "Hello World",
        "uri" => "http://dbpedia.org/resource/Hello_World"
      }
    }
  }
]

Counts nodes, relationships and paths in database.

Examples

iex> Cypher_Client.test()
[%{"nodes" => 171, "paths" => 506, "relationships" => 253}]