Skip to content

An ArcadeDB database driver for CHICKEN Scheme (in less than 256 lines of code).

License

Notifications You must be signed in to change notification settings

gramian/chicken-arcadedb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

arcadedb (v0)

arcadedb is a CHICKEN Scheme egg module providing a driver or REPL for the ArcadeDB database.

About ArcadeDB

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.

SQL

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 of TYPEs and PROPERTYs
  • DQL - Data Query Language, via SELECT, TRAVERSE, MATCH
  • DML - Data Manipulation Language, via INSERT, UPDATE, DROP, CREATE VERTEX, CREATE EDGE, MOVE VERTEX
  • TCL - Transaction Control Language, via BEGIN, COMMIT, ROLLBACK

for the remaining category holds:

About arcadedb

The arcadedb module implements a driver and console for ArcadeDB in CHICKEN Scheme with the functionality:

Runtime Dependencies

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 medea egg to decode JSON:

Local Server Setup

A local ArcadeDB server can be set up via install or container.

Install

  1. Download package: ArcadeDB package
  2. Extract package: tar -xf arcadedb-latest.tar.gz
  3. Start server: bin/server.sh -Darcadedb.server.rootPassword=mypassword &
  4. Exit server: kill `cat bin/arcade.pid`

Container

  1. Install Docker or Podman (just replace docker with podman below)
  2. Download container: docker pull arcadedata/arcadedb
  3. Start container: docker run --rm -d -p 2480:2480 -e JAVA_OPTS="-Darcadedb.server.rootPassword=mypassword --name arcadedb0 arcadedata/arcadedb
  4. Stop container: docker stop arcadedb0

Procedures

Help Message

a-help

(a-help)

Returns void, prints help about using the arcadedb module.

Server Connection

a-server

(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-clear

(a-clear)

Returns true after clearing internal parameters server and secret.

Server Information

a-ready?

(a-ready?)

Returns boolean answering if server is ready.

a-version

(a-version)

Returns string version number of the server; returns #f if a server error occurs or no response is received.

Server Databases

a-list

(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?

(a-exist? db)

Returns boolean answering if database symbol db exists on the server.

Database Management

a-new

(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

(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.

Database Connection

a-use

(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

(a-using)

Returns symbol naming current database; returns #f if no database is connected.

Database Interaction

a-query

(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

(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.

Database Macros

a-config

(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

(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

(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

(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

(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

(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

(a-backup)

Returns boolean that is true if backing-up current database succeded.

a-stats

(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

(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

(a-repair)

Returns boolean that is true if automatic repair succeeded.

a-metadata

(a-metadata id key . value)

Returns the value of the custom attribute with symbol key of type or property symbol id, if value is not passed. Returns boolean that is true if setting custom attribute symbol key with string or number value succeded.

a-comment

(a-comment)
(a-comment . msg)

Returns string being database comment of current database, if string msg is not passed. Returns boolean that is true if setting database comment string msg succeded.

This function emulates the SQL COMMENT ON DATABASE statement, by creating a type sys and upserting or reading the first comment property.

Changelog

License

Copyright (c) 2022 Christian Himpe under zlib-acknowledgement license.