我想调试我的yesql查询。因此,我正在尝试获取将要执行的SQL。
谁能给我一个例子,说明如何使yesql输出将执行的SQL?
这不是一个好例子……我将参数名称“tel”误认为是“phone”。
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);
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 ""})
最佳答案
一般而言(如评论中所述),yesql不应进行大量的SQL生成;它应该是一个完整的SQL生成。其概念是它通过您编写的查询。
话虽如此,如果您仍然想尝试查看原始查询yesql是否传递给JDBC,可以通过以下方法来达到目的:
(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))
使用yesql版本0.5.2。进行了测试。
关于clojure - 如何获得clojure yesql输出将执行的SQL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30905568/