doc
This commit is contained in:
parent
50c32d521c
commit
c78d873264
10 changed files with 8 additions and 207 deletions
|
|
@ -30,11 +30,8 @@ _below_ in Polish and Russian. In Romanian it means _bridge_
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
Eductional examples of pods can be found [here](../examples/pods):
|
Beyond the already available pods mentioned above, eductional examples of pods
|
||||||
|
can be found [here](../examples/pods):
|
||||||
- [pod-babashka-hsqldb](../examples/pods/pod-babashka-hsqldb): a pod that allows
|
|
||||||
you to create and fire queries at a [HSQLDB](http://www.hsqldb.org/)
|
|
||||||
database. Implemented in Clojure.
|
|
||||||
|
|
||||||
- [pod-lispyclouds-sqlite](../examples/pods/pod-lispyclouds-sqlite): a pod that
|
- [pod-lispyclouds-sqlite](../examples/pods/pod-lispyclouds-sqlite): a pod that
|
||||||
allows you to create and fire queries at a [sqlite](https://www.sqlite.org/)
|
allows you to create and fire queries at a [sqlite](https://www.sqlite.org/)
|
||||||
|
|
|
||||||
|
|
@ -16,11 +16,14 @@
|
||||||
|
|
||||||
(ns hsqldb-unused-vars
|
(ns hsqldb-unused-vars
|
||||||
(:require
|
(:require
|
||||||
|
[babashka.pods :as pods]
|
||||||
[clojure.edn :as edn]
|
[clojure.edn :as edn]
|
||||||
[clojure.java.shell :refer [sh]]
|
[clojure.java.shell :refer [sh]]
|
||||||
[clojure.pprint :refer [print-table]]
|
[clojure.pprint :refer [print-table]]))
|
||||||
[next.jdbc :as jdbc]
|
|
||||||
[next.jdbc.sql :as sql]))
|
(pods/load-pod "pod-babashka-hsqldb")
|
||||||
|
(require '[pod.babashka.hsqldb :as jdbc]
|
||||||
|
'[pod.babashka.hsqldb.sql :as sql])
|
||||||
|
|
||||||
(def db "jdbc:hsqldb:mem:testdb;sql.syntax_mys=true")
|
(def db "jdbc:hsqldb:mem:testdb;sql.syntax_mys=true")
|
||||||
|
|
||||||
|
|
|
||||||
20
examples/pods/pod-babashka-hsqldb/.gitignore
vendored
20
examples/pods/pod-babashka-hsqldb/.gitignore
vendored
|
|
@ -1,20 +0,0 @@
|
||||||
/target
|
|
||||||
/classes
|
|
||||||
/checkouts
|
|
||||||
profiles.clj
|
|
||||||
pom.xml
|
|
||||||
pom.xml.asc
|
|
||||||
*.jar
|
|
||||||
*.class
|
|
||||||
/.lein-*
|
|
||||||
/.nrepl-port
|
|
||||||
.hgignore
|
|
||||||
.hg/
|
|
||||||
/bb
|
|
||||||
.clj-kondo/.cache
|
|
||||||
!java/src/babashka/impl/LockFix.class
|
|
||||||
!test-resources/babashka/src_for_classpath_test/foo.jar
|
|
||||||
!test-resources/pom.xml
|
|
||||||
.cpcache
|
|
||||||
!reflection.json
|
|
||||||
hsqldb-babashka-plugin
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
# pod-babashka-hsqldb
|
|
||||||
|
|
||||||
## Compile
|
|
||||||
|
|
||||||
Run `./compile`
|
|
||||||
|
|
||||||
## Run
|
|
||||||
|
|
||||||
``` clojure
|
|
||||||
(babashka.pods/load-pod "./pod-babashka-hsqldb")
|
|
||||||
(pod.babashka.hsqldb/execute! "jdbc:hsqldb:mem:testdb;sql.syntax_mys=true" ["create table foo ( foo int );"])'
|
|
||||||
;;=> [#:next.jdbc{:update-count 0}]
|
|
||||||
```
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -xeo pipefail
|
|
||||||
|
|
||||||
if [ -z "$GRAALVM_HOME" ]; then
|
|
||||||
echo "Please set GRAALVM_HOME"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
"$GRAALVM_HOME/bin/gu" install native-image || true
|
|
||||||
export PATH=$GRAALVM_HOME/bin:$PATH
|
|
||||||
|
|
||||||
JAR=target/pod-babashka-hsqldb-0.0.1-SNAPSHOT-standalone.jar
|
|
||||||
|
|
||||||
lein do clean, uberjar
|
|
||||||
|
|
||||||
$GRAALVM_HOME/bin/native-image \
|
|
||||||
-jar $JAR \
|
|
||||||
-H:Name=pod-babashka-hsqldb \
|
|
||||||
-H:+ReportExceptionStackTraces \
|
|
||||||
-J-Dclojure.spec.skip-macros=true \
|
|
||||||
-J-Dclojure.compiler.direct-linking=true \
|
|
||||||
"-H:IncludeResources=SCI_VERSION" \
|
|
||||||
-H:ReflectionConfigurationFiles=reflection.json \
|
|
||||||
--initialize-at-run-time=java.lang.Math\$RandomNumberGeneratorHolder \
|
|
||||||
--initialize-at-build-time \
|
|
||||||
-H:Log=registerResource: \
|
|
||||||
--verbose \
|
|
||||||
--no-fallback \
|
|
||||||
--no-server \
|
|
||||||
--report-unsupported-elements-at-runtime \
|
|
||||||
"-H:IncludeResources=org/hsqldb/.*\.properties" "-H:IncludeResources=org/hsqldb/.*\.sql" \
|
|
||||||
"-J-Xmx4500m"
|
|
||||||
Binary file not shown.
|
|
@ -1,22 +0,0 @@
|
||||||
(defproject org.babashka/pod-babashka-hsqldb "0.0.1-SNAPSHOT"
|
|
||||||
:description "babashka"
|
|
||||||
:url "https://github.com/borkdude/babashka"
|
|
||||||
:scm {:name "git"
|
|
||||||
:url "https://github.com/borkdude/babashka"}
|
|
||||||
:license {:name "Eclipse Public License 1.0"
|
|
||||||
:url "http://opensource.org/licenses/eclipse-1.0.php"}
|
|
||||||
:source-paths ["src"]
|
|
||||||
:resource-paths ["resources"]
|
|
||||||
:dependencies [[org.clojure/clojure "1.10.2-alpha1"]
|
|
||||||
[org.hsqldb/hsqldb "2.4.0"]
|
|
||||||
[seancorfield/next.jdbc "1.0.424"]
|
|
||||||
[nrepl/bencode "1.1.0"]]
|
|
||||||
:profiles {:uberjar {:global-vars {*assert* false}
|
|
||||||
:jvm-opts ["-Dclojure.compiler.direct-linking=true"
|
|
||||||
"-Dclojure.spec.skip-macros=true"]
|
|
||||||
:aot :all
|
|
||||||
:main pod.babashka.hsqldb}}
|
|
||||||
:deploy-repositories [["clojars" {:url "https://clojars.org/repo"
|
|
||||||
:username :env/clojars_user
|
|
||||||
:password :env/clojars_pass
|
|
||||||
:sign-releases false}]])
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
[ {
|
|
||||||
"name" : "org.hsqldb.jdbcDriver"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"methods" : [{"name":"<init>", "parameterTypes":[ "org.hsqldb.Database"]} ],
|
|
||||||
"name" : "org.hsqldb.dbinfo.DatabaseInformationFull"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"methods" : [ {
|
|
||||||
"name" : "getBundle",
|
|
||||||
"parameterTypes" : [ "java.lang.String", "java.util.Locale", "java.lang.ClassLoader" ]
|
|
||||||
} ],
|
|
||||||
"name" : "java.util.ResourceBundle"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
(ns pod.babashka.hsqldb
|
|
||||||
(:refer-clojure :exclude [read read-string])
|
|
||||||
(:require [bencode.core :as bencode]
|
|
||||||
[clojure.edn :as edn]
|
|
||||||
[next.jdbc :as jdbc])
|
|
||||||
(:import [java.io PushbackInputStream])
|
|
||||||
(:gen-class))
|
|
||||||
|
|
||||||
(def stdin (PushbackInputStream. System/in))
|
|
||||||
|
|
||||||
(def lookup
|
|
||||||
{'pod.babashka.hsqldb/execute! jdbc/execute!})
|
|
||||||
|
|
||||||
(defn write [v]
|
|
||||||
(bencode/write-bencode System/out v)
|
|
||||||
(.flush System/out))
|
|
||||||
|
|
||||||
(defn read-string [^"[B" v]
|
|
||||||
(String. v))
|
|
||||||
|
|
||||||
(defn read []
|
|
||||||
(bencode/read-bencode stdin))
|
|
||||||
|
|
||||||
(defn -main [& _args]
|
|
||||||
(loop []
|
|
||||||
(let [message (try (read)
|
|
||||||
(catch java.io.EOFException _
|
|
||||||
::EOF))]
|
|
||||||
(when-not (identical? ::EOF message)
|
|
||||||
(let [op (get message "op")
|
|
||||||
op (read-string op)
|
|
||||||
op (keyword op)]
|
|
||||||
(case op
|
|
||||||
:describe (do (write {"format" "edn"
|
|
||||||
"namespaces" [{"name" "pod.babashka.hsqldb"
|
|
||||||
"vars" [{"name" "execute!"}]}]
|
|
||||||
"ops" {"shutdown" {}}})
|
|
||||||
(recur))
|
|
||||||
:invoke (let [var (-> (get message "var")
|
|
||||||
read-string
|
|
||||||
symbol)
|
|
||||||
id (-> (get message "id")
|
|
||||||
read-string)
|
|
||||||
args (get message "args")
|
|
||||||
args (read-string args)
|
|
||||||
args (edn/read-string args)]
|
|
||||||
(write {"value" (pr-str (apply (lookup var) args))
|
|
||||||
"id" id
|
|
||||||
"status" ["done"]})
|
|
||||||
(recur))
|
|
||||||
:shutdown (System/exit 0)))))))
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
(ns test
|
|
||||||
(:refer-clojure :exclude [read])
|
|
||||||
(:require [bencode.core :as bencode]
|
|
||||||
[clojure.edn :as edn])
|
|
||||||
#_(:import java.lang.ProcessBuilder$Redirect))
|
|
||||||
|
|
||||||
(defn write [stream v]
|
|
||||||
(bencode/write-bencode stream v)
|
|
||||||
(.flush stream))
|
|
||||||
|
|
||||||
(defn read [stream]
|
|
||||||
(bencode/read-bencode stream))
|
|
||||||
|
|
||||||
(defn bytes->string [^"[B" bytes]
|
|
||||||
(String. bytes))
|
|
||||||
|
|
||||||
(defn query [stream q]
|
|
||||||
(write stream {"op" "invoke"
|
|
||||||
"id" "1"
|
|
||||||
"var" "pod.babashka.hsqldb/execute!"
|
|
||||||
"args" (pr-str ["jdbc:hsqldb:mem:testdb;sql.syntax_mys=true" q])}))
|
|
||||||
|
|
||||||
(let [pb (ProcessBuilder. #_["lein" "run" "-m" "pod.babashka.hsqldb"]
|
|
||||||
["./pod-babashka-hsqldb"])
|
|
||||||
_ (.redirectErrorStream pb true)
|
|
||||||
;; _ (.redirectOutput pb ProcessBuilder$Redirect/INHERIT)
|
|
||||||
p (.start pb)
|
|
||||||
stdin (.getOutputStream p)
|
|
||||||
stdout (.getInputStream p)
|
|
||||||
stdout (java.io.PushbackInputStream. stdout)]
|
|
||||||
(write stdin {"op" "describe"})
|
|
||||||
(let [reply (read stdout)]
|
|
||||||
(println "format:" (String. (get reply "format")))) ;;=> edn
|
|
||||||
|
|
||||||
(query stdin ["create table foo ( foo int );"])
|
|
||||||
(let [reply (read stdout)]
|
|
||||||
(println "reply:" (edn/read-string (String. (get reply "value"))))) ;;=> [{:next.jdbc/update-count 0}]
|
|
||||||
|
|
||||||
(query stdin ["insert into foo values ( 1, 2, 3);"])
|
|
||||||
(let [reply (read stdout)]
|
|
||||||
(println "reply:" (edn/read-string (String. (get reply "value"))))) ;;=> [{:next.jdbc/update-count 3}]
|
|
||||||
|
|
||||||
(query stdin ["select * from foo;"])
|
|
||||||
(let [reply (read stdout)]
|
|
||||||
(println "reply:" (edn/read-string (String. (get reply "value")))))) ;=> [{:FOO/FOO 1} {:FOO/FOO 2} {:FOO/FOO 3}]
|
|
||||||
Loading…
Reference in a new issue