你怎么得到clojure yesql输出它将执行的SQL?

hat*_*ata 5 clojure

我想调试我的yesql查询.所以我试图让SQL执行.任何人都可以给我一个例子,说明如何使yesql输出它将执行的SQL?

这不是一个好例子......我将参数名称'tel'误认为是'电话'.

users.sql

-- name: insert-user
-- insert a user data to users table. 
insert into
users  ( name,  age,  tel,  address,  remark)
values (:name, :age, :tel, :address, :remark);
Run Code Online (Sandbox Code Playgroud)

query.clj

(ns example.sql.query
  (:require [yesql.core :as yesql]
            [example.sql.datasource :as ds]))

(yesql/defqueries {:connection {:datasource ds/datasource}})
(yesql/insert-user {:name "joe" :age 22 :phone nil :address "xxxxxx" :remark ""})
Run Code Online (Sandbox Code Playgroud)

小智 3

一般来说(正如评论中提到的),yesql 不应该做大量的 SQL 生成;这个概念是它传递您编写的查询。

话虽如此,如果您仍然想尝试查看 yesql 传递给 JDBC 的原始查询,这里有一个可以非常接近的 hack:

(require 'yesql.generate)
(require 'yesql.statement-parser)

(defn debug-yesql-query [queryfn args]
  ;; queryfn should be a query function generated by yesql
  ;; args should be a map of query args, just as if you were
  ;;   calling the query function
  (let [sql-source (-> queryfn meta :yesql.generate/source)]
    (yesql.generate/rewrite-query-for-jdbc
     (yesql.statement-parser/tokenize sql-source)
     args))
Run Code Online (Sandbox Code Playgroud)

使用 yesql 版本 0.5.2 进行测试。