From 0805efd27bda08501deda44db5b875436fe9a69e Mon Sep 17 00:00:00 2001 From: Michiel Borkent Date: Fri, 1 May 2020 20:37:31 +0200 Subject: [PATCH] [#407] datascript feature --- deps.edn | 3 ++- doc/build.md | 5 +++-- feature-datascript/babashka/impl/datascript.clj | 12 ++++++++++++ project.clj | 3 +++ sci | 2 +- script/uberjar | 7 +++++++ script/uberjar.bat | 6 ++++++ src/babashka/impl/features.clj | 1 + src/babashka/main.clj | 6 +++++- 9 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 feature-datascript/babashka/impl/datascript.clj diff --git a/deps.edn b/deps.edn index 1db70e0f..a3362f73 100644 --- a/deps.edn +++ b/deps.edn @@ -14,7 +14,8 @@ com.cognitect/transit-clj {:mvn/version "1.0.324"} seancorfield/next.jdbc {:mvn/version "1.0.424"} org.postgresql/postgresql {:mvn/version "42.2.12"} - org.hsqldb/hsqldb {:mvn/version "2.4.0"}} + org.hsqldb/hsqldb {:mvn/version "2.4.0"} + datascript {:mvn/version "0.18.11"}} :aliases {:main {:main-opts ["-m" "babashka.main"]} :profile diff --git a/doc/build.md b/doc/build.md index eb9a04a5..97174f91 100644 --- a/doc/build.md +++ b/doc/build.md @@ -75,8 +75,9 @@ Babashka supports the following feature flags: | `BABASHKA_FEATURE_XML` | Includes the [clojure.data.xml](https://github.com/clojure/data.xml) library | `true` | | `BABASHKA_FEATURE_YAML` | Includes the [clj-yaml](https://github.com/clj-commons/clj-yaml) library | `true` | | `BABASHKA_FEATURE_JDBC` | Includes the [next.jdbc](https://github.com/seancorfield/next-jdbc) library | `false` | -| `BABASHKA_FEATURE_POSTGRESQL` | Includes the [PostgresSQL](https://jdbc.postgresql.org/) JDBC driver | `false` -| `BABASHKA_FEATURE_HSQLDB` | Includes the [HSQLDB](http://www.hsqldb.org/) JDBC driver | `false` +| `BABASHKA_FEATURE_POSTGRESQL` | Includes the [PostgresSQL](https://jdbc.postgresql.org/) JDBC driver | `false` | +| `BABASHKA_FEATURE_HSQLDB` | Includes the [HSQLDB](http://www.hsqldb.org/) JDBC driver | `false` | +| `BABASHKA_FEATURE_DATASCRIPT` | Includes [datascript](https://github.com/tonsky/datascript) | `false` | To disable all of the above features, you can set `BABASHKA_LEAN` to `true`. diff --git a/feature-datascript/babashka/impl/datascript.clj b/feature-datascript/babashka/impl/datascript.clj new file mode 100644 index 00000000..e7369be3 --- /dev/null +++ b/feature-datascript/babashka/impl/datascript.clj @@ -0,0 +1,12 @@ +(ns babashka.impl.datascript + {:no-doc true} + (:require [datascript.core :as d] + [sci.impl.namespaces :refer [copy-var]] + [sci.impl.vars :as vars])) + +(def datascript-ns (vars/->SciNamespace 'datascript.core nil)) + +(def datascript-namespace + {'create-conn (copy-var d/create-conn datascript-ns) + 'transact! (copy-var d/transact! datascript-ns) + 'q (copy-var d/q datascript-ns)}) diff --git a/project.clj b/project.clj index 728da5ed..60558c17 100644 --- a/project.clj +++ b/project.clj @@ -33,6 +33,8 @@ :dependencies [[org.clojure/data.csv "1.0.0"]]} :feature/transit {:source-paths ["feature-transit"] :dependencies [[com.cognitect/transit-clj "1.0.324"]]} + :feature/datascript {:source-paths ["feature-datascript"] + :dependencies [[datascript "0.18.11"]]} :test [:feature/xml :feature/yaml :feature/postgresql @@ -40,6 +42,7 @@ :feature/core-async :feature/csv :feature/transit + :feature/datascript {:dependencies [[clj-commons/conch "0.9.2"] [com.clojure-goes-fast/clj-async-profiler "0.4.1"]]}] :uberjar {:global-vars {*assert* false} diff --git a/sci b/sci index 87f6160d..67fd9bc9 160000 --- a/sci +++ b/sci @@ -1 +1 @@ -Subproject commit 87f6160dd84d569a93967b644761bb374d0204c3 +Subproject commit 67fd9bc9cbde315c78e5178d450094d2255b3414 diff --git a/script/uberjar b/script/uberjar index 13fd82b1..e5ba2870 100755 --- a/script/uberjar +++ b/script/uberjar @@ -74,6 +74,13 @@ else BABASHKA_LEIN_PROFILES+=",-feature/transit" fi +if [ "$BABASHKA_FEATURE_DATASCRIPT" = "true" ] +then + BABASHKA_LEIN_PROFILES+=",+feature/datascript" +else + BABASHKA_LEIN_PROFILES+=",-feature/datascript" +fi + if [ -z "$BABASHKA_JAR" ]; then lein with-profiles "$BABASHKA_LEIN_PROFILES,+reflection,-uberjar" do run lein with-profiles "$BABASHKA_LEIN_PROFILES" do clean, uberjar diff --git a/script/uberjar.bat b/script/uberjar.bat index 1582ea5f..24122053 100755 --- a/script/uberjar.bat +++ b/script/uberjar.bat @@ -58,6 +58,12 @@ if not "%BABASHKA_FEATURE_TRANSIT%"=="false" ( set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/transit ) +if "%BABASHKA_FEATURE_DATASCRIPT%"=="true" ( + set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,+feature/datascript +) else ( + set BABASHKA_LEIN_PROFILES=%BABASHKA_LEIN_PROFILES%,-feature/datascript +) + call lein with-profiles %BABASHKA_LEIN_PROFILES% bb "(+ 1 2 3)" call lein with-profiles %BABASHKA_LEIN_PROFILES%,+reflection,-uberjar do run diff --git a/src/babashka/impl/features.clj b/src/babashka/impl/features.clj index 167defe3..6f48bff8 100644 --- a/src/babashka/impl/features.clj +++ b/src/babashka/impl/features.clj @@ -14,3 +14,4 @@ (def jdbc? (= "true" (System/getenv "BABASHKA_FEATURE_JDBC"))) (def postgresql? (= "true" (System/getenv "BABASHKA_FEATURE_POSTGRESQL"))) (def hsqldb? (= "true" (System/getenv "BABASHKA_FEATURE_HSQLDB"))) +(def datascript? (= "true" (System/getenv "BABASHKA_FEATURE_DATASCRIPT"))) diff --git a/src/babashka/main.clj b/src/babashka/main.clj index 8e4f8ad1..948e879a 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -70,6 +70,9 @@ (when features/transit? (require '[babashka.impl.transit])) +(when features/datascript? + (require '[babashka.impl.datascript])) + (sci/alter-var-root sci/in (constantly *in*)) (sci/alter-var-root sci/out (constantly *out*)) (sci/alter-var-root sci/err (constantly *err*)) @@ -354,7 +357,8 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that features/core-async? (assoc 'clojure.core.async @(resolve 'babashka.impl.async/async-namespace) 'clojure.core.async.impl.protocols @(resolve 'babashka.impl.async/async-protocols-namespace)) features/csv? (assoc 'clojure.data.csv @(resolve 'babashka.impl.csv/csv-namespace)) - features/transit? (assoc 'cognitect.transit @(resolve 'babashka.impl.transit/transit-namespace)))) + features/transit? (assoc 'cognitect.transit @(resolve 'babashka.impl.transit/transit-namespace)) + features/datascript? (assoc 'datascript.core @(resolve 'babashka.impl.datascript/datascript-namespace)))) (def bindings {'java.lang.System/exit exit ;; override exit, so we have more control