Title: | A Simple Graph Database |
Version: | 2021.03.10 |
Description: | This is a graph database in 'SQLite'. It is inspired by Denis Papathanasiou's Python simple-graph project on 'GitHub'. |
License: | MIT + file LICENSE |
URL: | https://github.com/mikeasilva/simplegraphdb |
BugReports: | https://github.com/mikeasilva/simplegraphdb/issues |
Encoding: | UTF-8 |
LazyData: | true |
RoxygenNote: | 7.1.1 |
Imports: | DBI, RSQLite, rjson, utils |
Suggests: | testthat (≥ 3.0.0) |
Config/testthat/edition: | 3 |
NeedsCompilation: | no |
Packaged: | 2021-03-11 02:47:18 UTC; Michael |
Author: | Michael Silva |
Maintainer: | Michael Silva <mike.a.silva@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2021-03-12 10:30:02 UTC |
Generates the SQL to add a node to the database
Description
Generates the SQL to add a node to the database
Usage
add_node(data, identifier = NA)
Arguments
data |
Data to be added to the node in a list format |
identifier |
The identifier for the node |
Value
A SQL statement to add a node to a database
Examples
## Not run:
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
# Add nodes with data
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
## End(Not run)
An atomic transaction wrapper function
Description
An atomic transaction wrapper function
Usage
atomic(db_file, sql_statement)
Arguments
db_file |
The name of the SQLite database |
sql_statement |
The SQL statement to execute |
Value
Either the query results or NA for executed SQL statements
Add an edge to the database
Description
Add an edge to the database
Usage
connect_nodes(source_id, target_id, properties = list())
Arguments
source_id |
Source node's id |
target_id |
Target node's id |
properties |
Edge properties (optional) |
Value
A SQL statement to insert an edge into the database
Examples
## Not run:
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
# Add in some edges to the graph
atomic(apple, connect_nodes(2, 1, list("action" = "founded")))
atomic(apple, connect_nodes(3, 1, list("action" = "founded")))
atomic(apple, connect_nodes(4, 1, list("action" = "founded")))
atomic(apple, connect_nodes(5, 1, list(
"action" = "invested",
"equity" = 80000,
"debt" = 170000)))
atomic(apple, connect_nodes(1, 4, list(
"action" = "divested",
"amount" = 800,
"date" = "April 12, 1976")))
atomic(apple, connect_nodes(2, 3))
## End(Not run)
Generates the SQL to find the inbound neighbors for a node in the database
Description
Generates the SQL to find the inbound neighbors for a node in the database
Usage
find_inbound_neighbors(identifier)
Arguments
identifier |
The identifier for the node |
Value
A SQL statement to find the inbound neighbors
Generates the SQL to find the neighbors for a node in the database
Description
Generates the SQL to find the neighbors for a node in the database
Usage
find_neighbors(identifier)
Arguments
identifier |
The identifier for the node |
Value
A SQL statement to find the neighbors
Generates the SQL to find a node from the database
Description
Generates the SQL to find a node from the database
Usage
find_node(identifier)
Arguments
identifier |
The identifier for the node |
Value
A SQL statement to find a node
Generate SQL to find nodes matching a criteria
Description
Generate SQL to find nodes matching a criteria
Usage
find_nodes(data, where_fn = "search_where", search_fn = "search_equals")
Arguments
data |
A list of data that are the search criteria |
where_fn |
The function to use in the SQL WHERE clause. Valid values are: search_where (default) or search_like |
search_fn |
The function to use in the search. Valid values are: search_equals (default), search_starts_with, or search_contains |
Value
A SQL statement to find nodes matching a criteria
Generates the SQL to find the outbound neighbors for a node in the database
Description
Generates the SQL to find the outbound neighbors for a node in the database
Usage
find_outbound_neighbors(identifier)
Arguments
identifier |
The identifier for the node |
Value
A SQL statement to find outbound neighbors
Generates the SQL to find the connections for a node in the database
Description
Generates the SQL to find the connections for a node in the database
Usage
get_connections(source_id, target_id)
Arguments
source_id |
The identifier for the source node |
target_id |
The identifier for the target node |
Value
A SQL statement to find the edge connecting two nodes
Initialize a new graph database
Description
Initialize a new graph database
Usage
initialize(db_file, schema_file = "./tests/schema.sql")
Arguments
db_file |
The name of the SQLite database |
schema_file |
The SQL schema file (optional) |
Value
No return value. It creates the database.
Examples
## Not run:
library(simplegraphdb)
initialize("network.sqlite")
## End(Not run)
Generates the SQL to remove a node from the database
Description
Generates the SQL to remove a node from the database
Usage
remove_node(identifier)
Arguments
identifier |
The identifier for the node |
Value
A SQL statement to delete a node
Examples
## Not run:
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
atomic(apple, connect_nodes(2, 1, list("action" = "founded")))
atomic(apple, connect_nodes(3, 1, list("action" = "founded")))
atomic(apple, connect_nodes(4, 1, list("action" = "founded")))
atomic(apple, connect_nodes(5, 1, list(
"action" = "invested",
"equity" = 80000,
"debt" = 170000)))
atomic(apple, connect_nodes(1, 4, list(
"action" = "divested",
"amount" = 800,
"date" = "April 12, 1976")))
atomic(apple, connect_nodes(2, 3))
atomic(apple, upsert_node(2, list("nickname" = "Woz"), apple))
# Remove node 1 from the data
atomic(apple, remove_node(1))
## End(Not run)
Sets the id attribute in JSON data
Description
Sets the id attribute in JSON data
Usage
set_id(identifier = NA, data)
Arguments
identifier |
The id |
data |
The JSON data |
Value
JSON ecoded data
Finds the path as you traverse the graph
Description
Finds the path as you traverse the graph
Usage
traverse(db_file, src, tgt = NA, neighbors_fn = "find_neighbors")
Arguments
db_file |
The name of the SQLite database |
src |
The id of the source node |
tgt |
The id of the target node (optional) |
neighbors_fn |
The neighbor function to employ. Valid options are find_neighbors, find_inbound_neighbors or find_outbound_neighbors (optional) |
Value
A JSON object containing the id of the nodes in the path
Examples
## Not run:
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
atomic(apple, connect_nodes(2, 1, list("action" = "founded")))
atomic(apple, connect_nodes(3, 1, list("action" = "founded")))
atomic(apple, connect_nodes(4, 1, list("action" = "founded")))
atomic(apple, connect_nodes(5, 1, list(
"action" = "invested",
"equity" = 80000,
"debt" = 170000)))
atomic(apple, connect_nodes(1, 4, list(
"action" = "divested",
"amount" = 800,
"date" = "April 12, 1976")))
atomic(apple, connect_nodes(2, 3))
atomic(apple, upsert_node(2, list("nickname" = "Woz"), apple))
# Traverse the data
traverse(apple, 4, 5)
# Get the inbound neighbors
traverse(apple, 5, "find_inbound_neighbors")
# Get the outbound neighbors
traverse(apple, 5, "find_outbound_neighbors")
## End(Not run)
Generates the SQL to upsert a node in the database
Description
Generates the SQL to upsert a node in the database
Usage
upsert_node(identifier, data, db_file)
Arguments
identifier |
The identifier for the node |
data |
Data to be added to the node in a list format |
db_file |
The name of the 'SQLite' database |
Value
A SQL statement to upsert a node
Examples
## Not run:
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
atomic(apple, connect_nodes(2, 1, list("action" = "founded")))
atomic(apple, connect_nodes(3, 1, list("action" = "founded")))
atomic(apple, connect_nodes(4, 1, list("action" = "founded")))
atomic(apple, connect_nodes(5, 1, list(
"action" = "invested",
"equity" = 80000,
"debt" = 170000)))
atomic(apple, connect_nodes(1, 4, list(
"action" = "divested",
"amount" = 800,
"date" = "April 12, 1976")))
atomic(apple, connect_nodes(2, 3))
#Upsert some data
atomic(apple, upsert_node(2, list("nickname" = "Woz"), apple))
## End(Not run)
Generates dot files for visualization of the graph
Description
Generates dot files for visualization of the graph
Usage
visualize(
db_file,
dot_file = "file.dot",
path = c(),
exclude_node_keys = c(),
hide_node_key = FALSE,
node_kv = " ",
exclude_edge_keys = c(),
hide_edge_key = FALSE,
edge_kv = " "
)
Arguments
db_file |
The name of the SQLite database |
dot_file |
The name of the file |
path |
The path to include in the visualization |
exclude_node_keys |
The node keys to exclude from the visualization |
hide_node_key |
Boolean if the node key is hidden |
node_kv |
The node key values |
exclude_edge_keys |
The key of edges to exclude |
hide_edge_key |
Boolean if the edge key is hidden |
edge_kv |
The edge key values |
Value
No return value. It creates a file.
Examples
## Not run:
library(simplegraphdb)
library(simplegraphdb)
apple <- "apple_test.sqlite"
initialize(apple)
atomic(apple, add_node(list(
"name" = "Apple Computer Company",
"type" = c("company", "start-up"),
"founded" = "April 1, 1976"), 1))
atomic(apple, add_node(list(
"name" = "Steve Wozniak",
"type" = c("person", "engineer", "founder")), 2))
atomic(apple, add_node(list(
"name" = "Steve Jobs",
"type" = c("person", "designer", "founder")), 3))
atomic(apple, add_node(list(
"name" = "Ronald Wayne",
"type" = c("person", "administrator", "founder")), 4))
atomic(apple, add_node(list(
"name" = "Mike Markkula",
"type" = c("person", "investor")), 5))
atomic(apple, connect_nodes(2, 1, list("action" = "founded")))
atomic(apple, connect_nodes(3, 1, list("action" = "founded")))
atomic(apple, connect_nodes(4, 1, list("action" = "founded")))
atomic(apple, connect_nodes(5, 1, list(
"action" = "invested",
"equity" = 80000,
"debt" = 170000)))
atomic(apple, connect_nodes(1, 4, list(
"action" = "divested",
"amount" = 800,
"date" = "April 12, 1976")))
atomic(apple, connect_nodes(2, 3))
atomic(apple, upsert_node(2, list("nickname" = "Woz"), apple))
# Visualize the data
visualize(apple, dot_file = "apple.dot", path = c(4, 1, 5))
## End(Not run)