| 
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