45 lines
1.6 KiB
Clojure
45 lines
1.6 KiB
Clojure
(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}]
|