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])
|
[next.jdbc.result-set :as rs])
|
||||||
(:import (java.sql Connection
|
(:import (java.sql Connection
|
||||||
DatabaseMetaData
|
DatabaseMetaData
|
||||||
|
ParameterMetaData
|
||||||
ResultSet ResultSetMetaData
|
ResultSet ResultSetMetaData
|
||||||
Statement)))
|
Statement)))
|
||||||
|
|
||||||
|
|
@ -27,6 +28,7 @@
|
||||||
:scale (fn [^ResultSetMetaData o i] (.getScale o i))
|
:scale (fn [^ResultSetMetaData o i] (.getScale o i))
|
||||||
:schema (fn [^ResultSetMetaData o i] (.getSchemaName o i))
|
:schema (fn [^ResultSetMetaData o i] (.getSchemaName o i))
|
||||||
:table (fn [^ResultSetMetaData o i] (.getTableName o i))
|
:table (fn [^ResultSetMetaData o i] (.getTableName o i))
|
||||||
|
:type (fn [^ResultSetMetaData o i] (.getColumnTypeName o i))
|
||||||
;; the is* fields:
|
;; the is* fields:
|
||||||
:nullability (fn [^ResultSetMetaData o i]
|
:nullability (fn [^ResultSetMetaData o i]
|
||||||
(condp = (.isNullable o i)
|
(condp = (.isNullable o i)
|
||||||
|
|
@ -42,6 +44,25 @@
|
||||||
:signed (fn [^ResultSetMetaData o i] (.isSigned o i))
|
:signed (fn [^ResultSetMetaData o i] (.isSigned o i))
|
||||||
:writable (fn [^ResultSetMetaData o i] (.isWritable 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]
|
(defn- safe-bean [o]
|
||||||
(try
|
(try
|
||||||
;; ensure we return a basic hash map:
|
;; ensure we return a basic hash map:
|
||||||
|
|
@ -60,6 +81,13 @@
|
||||||
column-meta)
|
column-meta)
|
||||||
(range 1 (inc (.getColumnCount this)))))
|
(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
|
(extend-protocol core-p/Datafiable
|
||||||
Connection
|
Connection
|
||||||
(datafy [this] (safe-bean this))
|
(datafy [this] (safe-bean this))
|
||||||
|
|
@ -98,6 +126,8 @@
|
||||||
v))}))
|
v))}))
|
||||||
ResultSetMetaData
|
ResultSetMetaData
|
||||||
(datafy [this] (datafy-result-set-meta-data this))
|
(datafy [this] (datafy-result-set-meta-data this))
|
||||||
|
ParameterMetaData
|
||||||
|
(datafy [this] (datafy-parameter-meta-data this))
|
||||||
ResultSet
|
ResultSet
|
||||||
(datafy [this]
|
(datafy [this]
|
||||||
;; SQLite has a combination ResultSet/Metadata object...
|
;; SQLite has a combination ResultSet/Metadata object...
|
||||||
|
|
@ -108,4 +138,5 @@
|
||||||
(cond-> (safe-bean this)
|
(cond-> (safe-bean this)
|
||||||
c (assoc :rows (rs/datafiable-result-set this c {}))))))
|
c (assoc :rows (rs/datafiable-result-set this c {}))))))
|
||||||
Statement
|
Statement
|
||||||
|
;; danger: .getMoreResults() is a mutating function!
|
||||||
(datafy [this] (safe-bean this)))
|
(datafy [this] (safe-bean this)))
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,7 @@
|
||||||
[next.jdbc.result-set :as rs]
|
[next.jdbc.result-set :as rs]
|
||||||
[next.jdbc.specs :as specs]
|
[next.jdbc.specs :as specs]
|
||||||
[next.jdbc.test-fixtures :refer [with-test-db db ds
|
[next.jdbc.test-fixtures :refer [with-test-db db ds
|
||||||
derby? mysql? postgres? sqlite?]])
|
derby? mysql? postgres? sqlite?]]))
|
||||||
(:import (java.sql DatabaseMetaData)))
|
|
||||||
|
|
||||||
(set! *warn-on-reflection* true)
|
(set! *warn-on-reflection* true)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue