Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fern-flower-lab/sqlg-clj
The SQL Graph with Tinkerpop3 and Clojure
https://github.com/fern-flower-lab/sqlg-clj
clj clojure clojure-library database dataprocessing graph gremlin h2 hsql maria mssql mysql postgresql rdbms-to-graph sql tinkerpop tinkerpop-graphs tinkerpop3
Last synced: about 1 month ago
JSON representation
The SQL Graph with Tinkerpop3 and Clojure
- Host: GitHub
- URL: https://github.com/fern-flower-lab/sqlg-clj
- Owner: fern-flower-lab
- License: mit
- Created: 2022-05-21T15:09:54.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-08-21T14:24:24.000Z (about 1 year ago)
- Last Synced: 2024-05-01T11:31:15.579Z (7 months ago)
- Topics: clj, clojure, clojure-library, database, dataprocessing, graph, gremlin, h2, hsql, maria, mssql, mysql, postgresql, rdbms-to-graph, sql, tinkerpop, tinkerpop-graphs, tinkerpop3
- Language: Clojure
- Homepage:
- Size: 32.2 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.adoc
- License: LICENSE
Awesome Lists containing this project
README
= The SQL Graph in Clojure
Utilizes Tinkerpop3 graph over SQL database using `sqlg`.
image:https://img.shields.io/github/license/fern-flower-lab/sqlg-clj?style=for-the-badge[GitHub]
image:https://img.shields.io/clojars/v/ai.z7/sqlg-clj.svg?style=for-the-badge[]
image:https://img.shields.io/github/v/tag/fern-flower-lab/sqlg-clj?style=for-the-badge[GitHub tag (latest by date)]
image:https://img.shields.io/github/last-commit/fern-flower-lab/sqlg-clj?style=for-the-badge[GitHub last commit]
image:https://img.shields.io/github/v/release/fern-flower-lab/sqlg-clj?style=for-the-badge[GitHub release (latest by date)]WARNING: Origin's library uses J17 for releases (at least for 3.0.x versions), so independently on this Clojure library build you will be forced to use that version too.
== Supported DBs
. PostgreSQL
. MySQL
. MariaDB
. HSQLDB
. H2
. MSSQLCAUTION: The low-level driver is well tested only with PostgreSQL + C3P0. You are warned.
== Config
Basic config is represented by `sample.properties`
[source,properties]
----
sample.graph.db.type = postgresql
sample.graph.db.host = localhost
sample.graph.db.port = 5432
sample.graph.db.name = sample
sample.graph.db.user = username
sample.graph.db.pass = password
----In order to get it prepared use
[source,clojure]
----
user=> (require '[sqlg-clj.config :as c])
user=> (def config (-> "sample" c/load-config :sample :graph :db c/db-config))
----Same result may be done using EDN config, i.e. directly from your app:
[source,clojure]
----
user=> (def config (c/db-config {:port 5432 :pass "password" :user "username" :type "postgresql" :host "localhost" :name "sample"}))
----When the config is ready it may be easily read back
[source,clojure]
----
user=>(c/config->clj config)
{"jdbc.url" "jdbc:postgresql://localhost:5432/sample", "jdbc.username" "username", "jdbc.password" "password"}
----=== Starting
Open SqlgGraph directly
[source,clojure]
----
(def G (c/graph config))
----or indirectly
[source,clojure]
----
(def G (c/open-graph config))
----The last method opens a new TinkerGraph with default configuration or open a new Graph instance with the specified configuration.
The configuration may be a path to a file or a Map of configuration options.
When gets prepared BaseConfiguration or Configuration object as an argument - returns SqlgGraph.=== Using
[source,clojure]
----
user=> (require '[sqlg-clj.core :refer :all])
user=> (-> ^Graph G traversal V (has-label "label"))
#object[org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal 0x3fffba3f "[GraphStep(vertex,[]), HasStep([~label.eq(label)])]"]
----=== Transactions
In order to store or to unroll the changes were made by some iteration between calls, use
[source,clojure]
----
user=> (require '[sqlg-clj.util :as u])
user=> (u/commit! G)
;; or
user=> (u/rollback! G)
----respectively.
=== Examples
==== create, find, process
[source,clojure]
----
user=> (require '[sqlg-clj.util :as u])
user=> (require '[sqlg-clj.data :as d])
user=> (require '[sqlg-clj.core :refer :all])user=> (-> G (d/add-V :test {:aa 11 :bb 22}))
#object[org.umlg.sqlg.structure.SqlgVertex 0x2e5e87e9 "v[public.test:::14]"]
user=> (-> G (d/add-V :test {:aa 33 :cc 44}))
#object[org.umlg.sqlg.structure.SqlgVertex 0x6ec0ead1 "v[public.test:::15]"]
user=> (u/commit! G)
niluser=> (def vxs (-> G traversal V (has-label :test) (has :aa) u/into-vec!))
#'user/vxsuser=> (map #(value % :aa) vxs)
(11 33)
user=> (map #(value % :bb) vxs)
(22 nil)
user=> (map #(value % :cc) vxs)
(nil 44)
----=== More info
Please, read original documentation https://tinkerpop.apache.org/docs/current/reference[here] and http://sqlg.org[here]
== License
©2022-2023 Fern Flower Lab
Distributed under the MIT License.