|
98 | 98 | (defn- jdbc-fields-metadata |
99 | 99 | "Fetch metadata about the Fields belonging to a Table or View using a SELECT * query." |
100 | 100 | [driver ^Connection conn db-name-or-nil schema table-name] |
101 | | - (let [sql (str "SELECT * FROM " (when schema (str schema ".")) table-name " WHERE 1=0")] ; Query with no rows |
102 | | - (with-open [stmt (.createStatement conn) |
103 | | - rs (.executeQuery stmt sql)] |
104 | | - (let [metadata (.getMetaData rs)] |
105 | | - (mapv (fn [i] |
106 | | - (let [column-name (.getColumnName metadata i) |
107 | | - database-type (.getColumnTypeName metadata i) |
108 | | - column-size (.getColumnDisplaySize metadata i) |
109 | | - nullable (.isNullable metadata i) |
110 | | - remarks (.getColumnLabel metadata i)] |
111 | | - {:name column-name |
112 | | - :database-type database-type |
113 | | - :column-size column-size |
114 | | - :nullable? (= nullable DatabaseMetaData/columnNullable) |
115 | | - :remarks remarks})) |
116 | | - (range 1 (inc (.getColumnCount metadata)))))))) |
| 101 | + (try |
| 102 | + (let [sql (str "SELECT * FROM " (when schema (str schema ".")) table-name " WHERE 1=0")] ; Query with no rows |
| 103 | + (with-open [stmt (.createStatement conn) |
| 104 | + rs (.executeQuery stmt sql)] |
| 105 | + (let [metadata (.getMetaData rs)] |
| 106 | + (mapv (fn [i] |
| 107 | + (let [column-name (.getColumnName metadata i) |
| 108 | + database-type (.getColumnTypeName metadata i) |
| 109 | + column-size (.getColumnDisplaySize metadata i) |
| 110 | + nullable (.isNullable metadata i) |
| 111 | + remarks (.getColumnLabel metadata i)] |
| 112 | + {:name column-name |
| 113 | + :database-type database-type |
| 114 | + :column-size column-size |
| 115 | + :nullable? (= nullable DatabaseMetaData/columnNullable) |
| 116 | + :remarks remarks})) |
| 117 | + (range 1 (inc (.getColumnCount metadata))))))) |
| 118 | + (catch java.sql.SQLException e |
| 119 | + (if (= "42S02" (.getSQLState e)) ; Check for SQLState 42S02 (object does not exist) |
| 120 | + (do |
| 121 | + (log/warn (trs "Table or view ''{0}'' in schema ''{1}'' does not exist." table-name schema)) |
| 122 | + []) ; Return an empty field set |
| 123 | + (throw e))))) ; Re-throw other exceptions |
117 | 124 |
|
118 | 125 | (defn ^:private fields-metadata |
119 | 126 | [driver ^Connection conn {schema :schema, table-name :name} ^String db-name-or-nil] |
|
359 | 366 | :dbname |
360 | 367 | :sid |
361 | 368 | :catalog))))}) |
| 369 | + |
0 commit comments