arcadedb
is a CHICKEN Scheme egg module providing a driver or REPL
for the ArcadeDB database.
ArcadeDB is an open-source multi-model NoSQL database providing the models:
- Key-Value,
- Document,
- Graph,
- Time Series,
- Vector,
while supporting a range of data query languages, such as:
as well as providing a JSON / REST-like / HTTP API.
The native query language of ArcadeDB is a dialect of SQL, closely related to OrientDB's OSQL, which supports the SQL command categories:
- DDL - Data Definition Language, via
CREATE
,DROP
,ALTER
,TRUNCATE
ofTYPE
s - DQL - Data Query Language, via
SELECT
,TRAVERSE
,MATCH
- DML - Data Manipulation Language, via
INSERT
,UPDATE
,DROP
,EXPLAIN
,PROFILE
for the remaining categories holds:
- DCL - Data Control Language, does not apply due to only server level users
- TCL - Transaction Control Language, via HTTP REST endpoints
The arcadedb
module implements a driver and console for ArcadeDB in
CHICKEN Scheme with the functionality:
- Server Connection
- Server Information
- Server Databases
- Database Management
- Database Connection
- Database Interaction
- Database Macros
Naturally, arcadedb
requires a (running) remote or local ArcadeDB server:
which in turn requires a Java distribution in version 17, i.e. OpenJDK (headless).
A local server setup is described below.
Furthermore, the arcadedb
module requires wget
for the HTTP requests:
during runtime, and imports the uri-common
egg to url-encode strings,
as well as the medea
egg to decode JSON:
A local ArcadeDB server can be set up via install or container.
- Download package: ArcadeDB package
- Extract package:
tar -xf arcadedb-latest.tar.gz
- Start server:
bin/server.sh -Darcadedb.server.rootPassword=mypassword &
- Exit server:
kill `cat bin/arcade.pid`
- Install Docker or Podman (just replace
docker
withpodman
below) - Download container:
docker pull arcadedata/arcadedb
- Start container:
docker run --rm -d -p 2480:2480 -e JAVA_OPTS="-Darcadedb.server.rootPassword=mypassword --name arcadedb0 arcadedata/arcadedb
- Stop container:
docker stop arcadedb0
(a-help)
Returns void, prints help about using the arcadedb
module.
(a-server user pass host . port)
Returns alist with single entry if connection to server using strings
user
, pass
, host
, and optionally number port
, succeded;
returns #f
if a server error occurs or no response is received.
(a-ready?)
Returns boolean answering if server is ready.
(a-version)
Returns string version number of the server;
returns #f
if a server error occurs or no response is received.
(a-list)
Returns list of symbols holding available databases of the server;
returns #f
if a server error occurs or no response is received.
(a-exist? db)
Returns boolean answering if database symbol db
exists on the server.
(a-new db)
Returns boolean that is true if creating new database symbol db
succeded;
returns #f
if a server error occurs or no response is received.
This command can only be executed by the root or admin user.
(a-delete db)
Returns boolean that is true if deleting database symbol db
succeded;
returns #f
if a server error occurs or no response is received.
This command can only be executed by the root or admin user.
(a-use db)
Returns boolean that is true if database symbol db
is connected;
returns #f
if a server error occurs or no response is received.
(a-using)
Returns symbol naming current database;
returns #f
if no database is connected.
(a-query lang query)
Returns list holding the result of string query
in language symbol lang
on current database;
returns #f
if a server error occurs or no response is received.
Valid lang
symbols are: sql
, sqlscript
, cypher
, gremlin
, graphql
, mongo
.
(a-command lang cmd)
Returns list holding the result of string cmd
in language symbol lang
on current database;
returns #f
if a server error occurs or no response is received.
Valid lang
symbols are: sql
, sqlscript
, cypher
, gremlin
, graphql
, mongo
.
(a-config)
Returns alist of type descriptions for current database infos;
returns #f
if a server error occurs or no response is received.
(a-schema)
Returns alist of type descriptions for current database schema;
returns #f
if a server error occurs or no response is received.
This function emulates the SQL DESCRIBE
statement.
(a-script path)
Returns list holding the result of the last statement of SQL script in string path
executed on current database;
returns #f
if a server error occurs or no response is received.
A SQL script file has to have the file extension .sql
.
(a-upload path type)
Returns boolean that is true if uploading JSON file at string path
into current database as symbol type
succeded;
returns #f
if a server error occurs or no response is received.
A JSON script file has to have the file extension .json
.
(a-ingest url)
Returns boolean that is true if importing from string url
into current database succeded;
returns #f
if a server error occurs or no response is received.
This function can be a minimalistic ETL (Extract-Transform-Load) tool: If one needs to import data from another database with a HTTP API and the query can be encoded (as for ArcadeDB) in the URL, the extraction and transformation is performed in the remote query, while the loading corresponds to the import of the query result. The supported formats are OrientDB, Neo4J, GraphML, GraphSON, XML, CSV, JSON, RDF.
(a-jaccard type x y)
Returns flonum being the Jaccard similarity index,
given a symbol type
and two symbol arguments x
and y
.
(a-backup)
Returns boolean that is true if backing-up current database succeded.
(a-stats)
Returns list-of-alists reporting statistics on current database;
returns #f
if a server error occurs or no response is received.
(a-health)
Returns list-of-alists reporting health of current database;
returns #f
if a server error occurs or no response is received.
(a-repair)
Returns boolean that is true if automatic repair succeeded.
(a-metadata id key value)
Returns boolean that is true if adding custom attribute
with symbol key
and string value
to type or property symbol id
succeeded.
(a-comment)
(a-comment msg)
Returns string current database comment of current database, if msg
is not passed;
returns #t
if setting string msg
as comment for current database succeded;
returns #f
if no comment is set, a server error occurs or no response is received.
This function emulates the SQL COMMENT ON DATABASE
statement,
by creating a type sys
and upserting or reading the first comment
property.
0.1
Initial Release (2022-11-15)0.2
Minor Update (2022-11-16)0.3
Major Update (2022-12-09)0.4
Minor Update (2023-01-16)0.5
Major Update (2023-03-01)0.6
Major Update (2023-05-05)0.7
Minor Update (2023-09-29)
Copyright (c) 2022 Christian Himpe under zlib-acknowledgement license.