我正在尝试编写一个简单的应用程序,它读取数据库并生成一组函数来访问它;到现在为止还挺好。现在,我遇到的是我的数据库中的一些列被定义为MySQL枚举类型(例如ENUM('red','green','violet')
),我想验证我发送到数据库的东西,而不是从驱动程序在给出不可接受的值时,所以我想知道是否有办法从clojure中检索枚举的可能值。
我正在使用[clojure.java.jdbc "0.3.0-alpha5"]
和[mysql/mysql-connector-java "5.1.25"]
。为了获取我目前使用java.sql.DatabaseMetaData
的表格的元数据,但尝试.getPseudoColumns
每次只给我nil
。
答案 0 :(得分:1)
事实证明,使用库没有直接的方法来做到这一点。我自己的解决方案是:
(defn- parse-enum
"Parses an enum string and returns it's components"
[enum-str]
; "enum('temp','active','canceled','deleted')"
(map (comp keyword #(.replace % "'" ""))
(-> enum-str
(.replaceFirst "^[^\\(]+\\(([^\\)]+)\\)$" "$1")
(.split "'?,'?"))))
(defn get-enum-value
"Returns the values for an enum in a table.column"
[table column]
(jdbc/with-connection db
(jdbc/with-query-results rs
[(str "show columns from " table " where field = ?") column]
((comp set parse-enum :type first) rs))))