【发布时间】:2017-03-30 23:21:12
【问题描述】:
我有一个基于 Korma 的软件堆栈,可以针对 MySQL 数据库构建相当复杂的查询。我注意到,当我查询 datetime 列时,我从 Korma 查询返回的类型会根据生成的 SQL 查询的语法而改变。我已经将其追溯到 clojure.java.jdbc/query 的级别。如果查询的形式是这样的:
select modified from docs order by modified desc limit 10
然后我得到对应于每个数据库行的映射,其中:modified 是java.sql.Timestamp。但是,有时我们的查询生成器会生成更复杂的联合查询,因此我们需要对联合的最终结果应用order by ... limit ... 约束。 Korma 通过将查询括在括号中来做到这一点。即使只有一个子查询——即一个简单的带括号的选择——只要我们添加一个“外部”order by ...,:modified 的类型就会改变。
(select modified from docs order by modified desc limit 10) order by modified desc
在这种情况下,clojure.java.jdbc/query 将 :modified 值作为字符串返回。我们的一些更高级别的代码没有预料到这一点,并得到了异常。
我们使用的是 Korma 的一个分支,它使用的是旧 (0.3.7) 版本的 clojure.java.jdbc。我不知道罪魁祸首是clojure.java.jdbc 或java.jdbc 还是MySQL。任何人都看到了这个并且对如何解决它有想法?
【问题讨论】: