我正在检查YeSQL是否对我的Clojure项目有帮助,但是我找不到使用连接池的YeSQL的任何示例。

这是否意味着YeSQL为每个语句创建一个新连接?

我还找到了一个有关如何使用clojure.java.jdbc/with-db-transaction使用事务的示例,但是我觉得它已经过时了(我还没有尝试过)。

这是否意味着YeSQL依赖clojure.java.jdbc进行提交/回滚控制?在这种情况下,我不应该只使用clojure.java.jdbc,因为YeSQL并没有提供太多的功能(除了命名查询和外部化它们之外)?

提前致谢

最佳答案

YeSQL不处理连接或连接池。您需要从外部进行处理,并为查询功能提供一个连接实例。

README的YeSQL示例中可以看到:

; Define a database connection spec. (This is standard clojure.java.jdbc.)
(def db-spec {:classname "org.postgresql.Driver"
              :subprotocol "postgresql"
              :subname "//localhost:5432/demo"
              :user "me"})

; Use it standalone. Note that the first argument is the db-spec.
(users-by-country db-spec "GB")
;=> ({:count 58})

; Use it in a clojure.java.jdbc transaction.
(require '[clojure.java.jdbc :as jdbc])
(jdbc/with-db-transaction [connection db-spec]
   {:limeys (users-by-country connection "GB")
    :yanks  (users-by-country connection "US")})

如果询问如何添加连接池处理,则可以查看Clojure Cookbook中的示例。

至于事务处理,YeSQL文档不是,但是source很容易理解:
(defn- emit-query-fn
  "Emit function to run a query.
   - If the query name ends in `!` it will call `clojure.java.jdbc/execute!`,
   - If the query name ends in `<!` it will call `clojure.java.jdbc/insert!`,
   - otherwise `clojure.java.jdbc/query` will be used."
  [{:keys [name docstring statement]}]
  (let [split-query (split-at-parameters statement)
        {:keys [query-args display-args function-args]} (split-query->args split-query)
        jdbc-fn (cond
                 (= [\< \!] (take-last 2 name)) `insert-handler
                 (= \! (last name)) `execute-handler
                 :else `jdbc/query)]
    `(def ~(fn-symbol (symbol name) docstring statement display-args)
       (fn [db# ~@function-args]
         (~jdbc-fn db#
                   (reassemble-query '~split-query
                                     ~query-args))))))

因此,它将仅生成一个函数,该函数将使用生成的查询调用clojure.java.jdbc/execute!clojure.java.jdbc/insert!。您可能需要引用这些功能的文档以获取更多详细信息。

关于clojure - 有连接池的YeSQL吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30036928/

10-10 19:34