Datafy parameter metadata
This commit is contained in:
parent
4be2b7130b
commit
ab588070e6
2 changed files with 32 additions and 2 deletions
|
|
@ -12,6 +12,7 @@
|
|||
[next.jdbc.result-set :as rs])
|
||||
(:import (java.sql Connection
|
||||
DatabaseMetaData
|
||||
ParameterMetaData
|
||||
ResultSet ResultSetMetaData
|
||||
Statement)))
|
||||
|
||||
|
|
@ -27,6 +28,7 @@
|
|||
:scale (fn [^ResultSetMetaData o i] (.getScale o i))
|
||||
:schema (fn [^ResultSetMetaData o i] (.getSchemaName o i))
|
||||
:table (fn [^ResultSetMetaData o i] (.getTableName o i))
|
||||
:type (fn [^ResultSetMetaData o i] (.getColumnTypeName o i))
|
||||
;; the is* fields:
|
||||
:nullability (fn [^ResultSetMetaData o i]
|
||||
(condp = (.isNullable o i)
|
||||
|
|
@ -42,6 +44,25 @@
|
|||
:signed (fn [^ResultSetMetaData o i] (.isSigned o i))
|
||||
:writable (fn [^ResultSetMetaData o i] (.isWritable o i))})
|
||||
|
||||
(def ^:private parameter-meta
|
||||
{:class (fn [^ParameterMetaData o i] (.getParameterClassName o i))
|
||||
:mode (fn [^ParameterMetaData o i]
|
||||
(condp = (.getParameterMode o i)
|
||||
ParameterMetaData/parameterModeIn :in
|
||||
ParameterMetaData/parameterModeInOut :in-out
|
||||
ParameterMetaData/parameterModeOut :out
|
||||
:unknown))
|
||||
:precision (fn [^ParameterMetaData o i] (.getPrecision o i))
|
||||
:scale (fn [^ParameterMetaData o i] (.getScale o i))
|
||||
:type (fn [^ParameterMetaData o i] (.getParameterTypeName o i))
|
||||
;; the is* fields:
|
||||
:nullability (fn [^ParameterMetaData o i]
|
||||
(condp = (.isNullable o i)
|
||||
ParameterMetaData/parameterNoNulls :not-null
|
||||
ParameterMetaData/parameterNullable :null
|
||||
:unknown))
|
||||
:signed (fn [^ParameterMetaData o i] (.isSigned o i))})
|
||||
|
||||
(defn- safe-bean [o]
|
||||
(try
|
||||
;; ensure we return a basic hash map:
|
||||
|
|
@ -60,6 +81,13 @@
|
|||
column-meta)
|
||||
(range 1 (inc (.getColumnCount this)))))
|
||||
|
||||
(defn- datafy-parameter-meta-data
|
||||
[^ParameterMetaData this]
|
||||
(mapv #(reduce-kv (fn [m k f] (assoc m k (f this %)))
|
||||
{}
|
||||
parameter-meta)
|
||||
(range 1 (inc (.getParameterCount this)))))
|
||||
|
||||
(extend-protocol core-p/Datafiable
|
||||
Connection
|
||||
(datafy [this] (safe-bean this))
|
||||
|
|
@ -98,6 +126,8 @@
|
|||
v))}))
|
||||
ResultSetMetaData
|
||||
(datafy [this] (datafy-result-set-meta-data this))
|
||||
ParameterMetaData
|
||||
(datafy [this] (datafy-parameter-meta-data this))
|
||||
ResultSet
|
||||
(datafy [this]
|
||||
;; SQLite has a combination ResultSet/Metadata object...
|
||||
|
|
@ -108,4 +138,5 @@
|
|||
(cond-> (safe-bean this)
|
||||
c (assoc :rows (rs/datafiable-result-set this c {}))))))
|
||||
Statement
|
||||
;; danger: .getMoreResults() is a mutating function!
|
||||
(datafy [this] (safe-bean this)))
|
||||
|
|
|
|||
|
|
@ -10,8 +10,7 @@
|
|||
[next.jdbc.result-set :as rs]
|
||||
[next.jdbc.specs :as specs]
|
||||
[next.jdbc.test-fixtures :refer [with-test-db db ds
|
||||
derby? mysql? postgres? sqlite?]])
|
||||
(:import (java.sql DatabaseMetaData)))
|
||||
derby? mysql? postgres? sqlite?]]))
|
||||
|
||||
(set! *warn-on-reflection* true)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue