From bd97a26d00a1e16a308c4b26bc5afd6a97423dec Mon Sep 17 00:00:00 2001 From: Aggelos Biboudis Date: Mon, 31 Aug 2020 17:28:34 +0200 Subject: [PATCH 1/2] Handle date/time null values --- project.clj | 2 +- src/metabase/driver/teradata.clj | 29 ++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/project.clj b/project.clj index 955b69f..9ea4ded 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject metabase/teradata-driver "1.0.1-metabase-v0.36.0-teradata-jdbc-16.20" +(defproject metabase/teradata-driver "1.0.2-metabase-v0.36.0-teradata-jdbc-16.20" :min-lein-version "2.5.0" :profiles diff --git a/src/metabase/driver/teradata.clj b/src/metabase/driver/teradata.clj index 16fe13a..5c9b6e5 100644 --- a/src/metabase/driver/teradata.clj +++ b/src/metabase/driver/teradata.clj @@ -234,27 +234,42 @@ (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIMESTAMP] [_ rs _ i] (fn [] - (.toLocalDateTime (.getTimestamp rs i)))) - + (let [dateVal (.getTimestamp rs i)] + (if (nil? dateVal) + nil + (.toLocalDateTime dateVal))))) + (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIMESTAMP_WITH_TIMEZONE] [_ rs _ i] (fn [] - (OffsetDateTime/parse (.getString rs i)))) + (let [dateVal (.getString rs i)] + (if (nil? dateVal) + nil + (OffsetDateTime/parse dateVal))))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/DATE] [_ rs _ i] (fn [] - (.toLocalDate (.getDate rs i)))) + (let [dateVal (.getDate rs i)] + (if (nil? dateVal) + nil + (.toLocalDate dateVal))))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIME] [_ rs _ i] (fn [] - (.toLocalTime (.getTime rs i)))) - + (let [dateVal (.getTime rs i)] + (if (nil? dateVal) + nil + (.toLocalTime dateVal))))) + (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIME_WITH_TIMEZONE] [_ rs _ i] (fn [] - (OffsetTime/parse (.getTime rs i)))) + (let [dateVal (.getTime rs i)] + (if (nil? dateVal) + nil + (OffsetTime/parse dateVal))))) ;; TODO: use metabase.driver.sql-jdbc.execute.legacy-impl instead of re-implementing everything here (defmethod sql-jdbc.execute/set-parameter [:teradata OffsetDateTime] From 42f1ea00d980bab8c2d4aba1c222aff132c4c9d5 Mon Sep 17 00:00:00 2001 From: Thomas Rawyler Date: Thu, 28 Apr 2022 15:21:54 +0200 Subject: [PATCH 2/2] using when-let --- src/metabase/driver/teradata.clj | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/metabase/driver/teradata.clj b/src/metabase/driver/teradata.clj index d0cda23..cef9c80 100644 --- a/src/metabase/driver/teradata.clj +++ b/src/metabase/driver/teradata.clj @@ -235,42 +235,32 @@ (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIMESTAMP] [_ rs _ i] (fn [] - (let [dateVal (.getTimestamp rs i)] - (if (nil? dateVal) - nil - (.toLocalDateTime dateVal))))) + (when-let [value (.getTimestamp rs i)] + (.toLocalDateTime value)))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIMESTAMP_WITH_TIMEZONE] [_ rs _ i] (fn [] - (let [dateVal (.getString rs i)] - (if (nil? dateVal) - nil - (OffsetDateTime/parse dateVal))))) + (when-let [value (.getString rs i)] + (OffsetDateTime/parse value)))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/DATE] [_ rs _ i] (fn [] - (let [dateVal (.getDate rs i)] - (if (nil? dateVal) - nil - (.toLocalDate dateVal))))) + (when-let [value (.getDate rs i)] + (.toLocalDate value)))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIME] [_ rs _ i] (fn [] - (let [dateVal (.getTime rs i)] - (if (nil? dateVal) - nil - (.toLocalTime dateVal))))) + (when-let [value (.getTime rs i)] + (.toLocalTime value)))) (defmethod sql-jdbc.execute/read-column-thunk [:teradata Types/TIME_WITH_TIMEZONE] [_ rs _ i] (fn [] - (let [dateVal (.getTime rs i)] - (if (nil? dateVal) - nil - (OffsetTime/parse dateVal))))) + (when-let [value (.getTime rs i)] + (OffsetTime/parse value)))) ;; TODO: use metabase.driver.sql-jdbc.execute.legacy-impl instead of re-implementing everything here (defmethod sql-jdbc.execute/set-parameter [:teradata OffsetDateTime]