You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jo...@apache.org on 2023/08/31 17:23:39 UTC

[superset] branch master updated: fix: add format for timestamp in crdb to correctly use times values (#24711)

This is an automated email from the ASF dual-hosted git repository.

johnbodley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 321d968504 fix: add format for timestamp in crdb to correctly use times values (#24711)
321d968504 is described below

commit 321d968504e8320070b1663fdbfc1f927014f788
Author: Ethan M Lewis <et...@gmail.com>
AuthorDate: Thu Aug 31 10:23:32 2023 -0700

    fix: add format for timestamp in crdb to correctly use times values (#24711)
    
    Co-authored-by: John Bodley <45...@users.noreply.github.com>
---
 superset/db_engine_specs/cockroachdb.py            | 17 +++++++++++++-
 .../unit_tests/db_engine_specs/test_crdb.py        | 27 ++++++++++++++++++----
 2 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/superset/db_engine_specs/cockroachdb.py b/superset/db_engine_specs/cockroachdb.py
index 8c83bd793d..4486c569dd 100644
--- a/superset/db_engine_specs/cockroachdb.py
+++ b/superset/db_engine_specs/cockroachdb.py
@@ -14,10 +14,25 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+from datetime import datetime
+from typing import Any, Optional
+
+from sqlalchemy import types
+
 from superset.db_engine_specs.postgres import PostgresEngineSpec
 
 
 class CockroachDbEngineSpec(PostgresEngineSpec):
     engine = "cockroachdb"
     engine_name = "CockroachDB"
-    default_driver = ""
+
+    @classmethod
+    def convert_dttm(
+        cls, target_type: str, dttm: datetime, db_extra: Optional[dict[str, Any]] = None
+    ) -> Optional[str]:
+        sqla_type = cls.get_sqla_column_type(target_type)
+        if isinstance(sqla_type, types.Date):
+            return f"'{dttm.date().isoformat()}'"
+        if isinstance(sqla_type, (types.String, types.DateTime)):
+            return f"""'{dttm.isoformat(sep=" ", timespec="seconds")}'"""
+        return None
diff --git a/superset/db_engine_specs/cockroachdb.py b/tests/unit_tests/db_engine_specs/test_crdb.py
similarity index 52%
copy from superset/db_engine_specs/cockroachdb.py
copy to tests/unit_tests/db_engine_specs/test_crdb.py
index 8c83bd793d..e2067d3c9d 100644
--- a/superset/db_engine_specs/cockroachdb.py
+++ b/tests/unit_tests/db_engine_specs/test_crdb.py
@@ -14,10 +14,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-from superset.db_engine_specs.postgres import PostgresEngineSpec
+# pylint: disable=unused-argument, import-outside-toplevel, protected-access
+from datetime import datetime
+from typing import Optional
 
+import pytest
 
-class CockroachDbEngineSpec(PostgresEngineSpec):
-    engine = "cockroachdb"
-    engine_name = "CockroachDB"
-    default_driver = ""
+from tests.unit_tests.db_engine_specs.utils import assert_convert_dttm
+from tests.unit_tests.fixtures.common import dttm
+
+
+@pytest.mark.parametrize(
+    "target_type,expected_result",
+    [
+        ("Date", "'2019-01-02'"),
+        ("TimeStamp", "'2019-01-02 03:04:05'"),
+        ("UnknownType", None),
+    ],
+)
+def test_convert_dttm(
+    target_type: str, expected_result: Optional[str], dttm: datetime
+) -> None:
+    from superset.db_engine_specs.cockroachdb import CockroachDbEngineSpec as spec
+
+    assert_convert_dttm(spec, target_type, expected_result, dttm)