From d0d9424ea9a2645b8f895443500b17b647f6fa0f Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Thu, 11 Feb 2021 10:58:21 -0800 Subject: [PATCH 01/16] Add custom timestamp type for literal casting for presto timestamps --- superset/db_engine_specs/presto.py | 9 +++++++-- superset/models/sql_types/presto_sql_types.py | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index 071fd885f8d6a..f6352dcd55d77 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -48,6 +48,7 @@ Map, Row, TinyInteger, + TimeStamp ) from superset.result_set import destringify from superset.sql_parse import ParsedQuery @@ -911,10 +912,14 @@ def where_latest_partition( # pylint: disable=too-many-arguments if values is None: return None - column_names = {column.get("name") for column in columns or []} + column_names = {column.get("name") : column.get('type') for column in columns or []} for col_name, value in zip(col_names, values): if col_name in column_names: - query = query.where(Column(col_name) == value) + col_type = column_names.get(col_name) + if col_type == 'TIMESTAMP': + query = query.where(Column(col_name, TimeStamp()) == value) + else: + query = query.where(Column(col_name) == value) return query @classmethod diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index a314639ca6907..748cf0448c988 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -16,7 +16,8 @@ # under the License. from typing import Any, Dict, List, Optional, Type -from sqlalchemy.sql.sqltypes import Integer +from sqlalchemy import types +from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP from sqlalchemy.sql.type_api import TypeEngine from sqlalchemy.sql.visitors import Visitable @@ -91,3 +92,17 @@ def python_type(self) -> Optional[Type[Any]]: @classmethod def _compiler_dispatch(cls, _visitor: Visitable, **_kw: Any) -> str: return "ROW" + +class TimeStamp(types.TypeDecorator): + """ + A type to extend functionality of timestamp data type.dsad + """ + + impl = TIMESTAMP + + def process_literal_param(self, value, dialect): + """ + Used for in-line rendering of TIMESTAMP data type + as Presto does not support automatic casting. + """ + return "TIMESTAMP '%s'" % value \ No newline at end of file From 30dc769600c93d29b585a77fef99208905959256 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Thu, 11 Feb 2021 11:02:49 -0800 Subject: [PATCH 02/16] Remove typo in comment --- docker/pythonpath_dev/superset_config.py | 15 +++ superset-frontend/package-lock.json | 112 +++++++++--------- superset/models/sql_types/presto_sql_types.py | 2 +- 3 files changed, 72 insertions(+), 57 deletions(-) diff --git a/docker/pythonpath_dev/superset_config.py b/docker/pythonpath_dev/superset_config.py index 7d8f454c344f6..10f6afa9276b8 100644 --- a/docker/pythonpath_dev/superset_config.py +++ b/docker/pythonpath_dev/superset_config.py @@ -92,3 +92,18 @@ class CeleryConfig(object): ) except ImportError: logger.info("Using default Docker config...") + + +def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source): + if str(uri).startswith("presto"): + engine_params = { + "protocol" : "https", + "requests_kwargs" : { + "verify" : "/app/docker/dev_certs/ca/cacerts.pem", + "cert" : ["/app/docker/dev_certs/client/certificates/client.pem","/app/docker/dev_certs/client/keys/client-key.pem"] + } + } + + params.update({ "connect_args" : engine_params }) + logger.debug("Data source connection parameters: %s", params) + return uri, params \ No newline at end of file diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index a4687662b3179..e99c41e792955 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -20515,28 +20515,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "resolved": "", + "resolved": false, "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": "", + "resolved": false, "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, @@ -20547,14 +20547,14 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "", + "resolved": false, "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, @@ -20565,35 +20565,35 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": "", + "resolved": false, "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "", + "resolved": false, "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "4.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, @@ -20603,35 +20603,35 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": "", + "resolved": false, "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": "", + "resolved": false, "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs.realpath": { "version": "1.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": "", + "resolved": false, "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, @@ -20648,7 +20648,7 @@ }, "glob": { "version": "7.1.3", - "resolved": "", + "resolved": false, "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, @@ -20663,14 +20663,14 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": "", + "resolved": false, "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "optional": true, @@ -20680,7 +20680,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": "", + "resolved": false, "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, @@ -20690,7 +20690,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "", + "resolved": false, "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, @@ -20701,14 +20701,14 @@ }, "inherits": { "version": "2.0.3", - "resolved": "", + "resolved": false, "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, @@ -20718,14 +20718,14 @@ }, "isarray": { "version": "1.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": "", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, @@ -20742,14 +20742,14 @@ }, "ms": { "version": "2.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true }, "needle": { "version": "2.3.0", - "resolved": "", + "resolved": false, "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, @@ -20761,7 +20761,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": "", + "resolved": false, "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, @@ -20780,7 +20780,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, @@ -20791,14 +20791,14 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": "", + "resolved": false, "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": "", + "resolved": false, "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, @@ -20809,7 +20809,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "", + "resolved": false, "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, @@ -20822,21 +20822,21 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "resolved": "", + "resolved": false, "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": "", + "resolved": false, "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, @@ -20846,21 +20846,21 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": "", + "resolved": false, "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, @@ -20871,21 +20871,21 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "resolved": "", + "resolved": false, "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.8", - "resolved": "", + "resolved": false, "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, @@ -20898,7 +20898,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "", + "resolved": false, "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, @@ -20914,7 +20914,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": "", + "resolved": false, "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, @@ -20924,49 +20924,49 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "", + "resolved": false, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "resolved": "", + "resolved": false, "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": "", + "resolved": false, "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.7.0", - "resolved": "", + "resolved": false, "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "resolved": "", + "resolved": false, "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, @@ -20978,7 +20978,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "", + "resolved": false, "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, @@ -20988,7 +20988,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, @@ -20998,21 +20998,21 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": "", + "resolved": false, "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": "", + "resolved": false, "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, @@ -21022,7 +21022,7 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "", + "resolved": false, "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 748cf0448c988..fef8b014ce883 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -95,7 +95,7 @@ def _compiler_dispatch(cls, _visitor: Visitable, **_kw: Any) -> str: class TimeStamp(types.TypeDecorator): """ - A type to extend functionality of timestamp data type.dsad + A type to extend functionality of timestamp data type. """ impl = TIMESTAMP From 72237b3799c2c39047c28e775dca40b0aecf69a0 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Thu, 11 Feb 2021 11:28:06 -0800 Subject: [PATCH 03/16] Use process_bind_params as in sqla docs --- superset/models/sql_types/presto_sql_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index fef8b014ce883..8cafa3ce8c233 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -100,7 +100,7 @@ class TimeStamp(types.TypeDecorator): impl = TIMESTAMP - def process_literal_param(self, value, dialect): + def process_bind_param(self, value, dialect): """ Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. From 8b41dbaae3759a8fcf42ea660538346b89e8f8aa Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Thu, 11 Feb 2021 11:30:43 -0800 Subject: [PATCH 04/16] Uncommit local superset config --- docker/pythonpath_dev/superset_config.py | 15 --- superset-frontend/package-lock.json | 112 +++++++++++------------ 2 files changed, 56 insertions(+), 71 deletions(-) diff --git a/docker/pythonpath_dev/superset_config.py b/docker/pythonpath_dev/superset_config.py index 10f6afa9276b8..7d8f454c344f6 100644 --- a/docker/pythonpath_dev/superset_config.py +++ b/docker/pythonpath_dev/superset_config.py @@ -92,18 +92,3 @@ class CeleryConfig(object): ) except ImportError: logger.info("Using default Docker config...") - - -def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source): - if str(uri).startswith("presto"): - engine_params = { - "protocol" : "https", - "requests_kwargs" : { - "verify" : "/app/docker/dev_certs/ca/cacerts.pem", - "cert" : ["/app/docker/dev_certs/client/certificates/client.pem","/app/docker/dev_certs/client/keys/client-key.pem"] - } - } - - params.update({ "connect_args" : engine_params }) - logger.debug("Data source connection parameters: %s", params) - return uri, params \ No newline at end of file diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index e99c41e792955..a4687662b3179 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -20515,28 +20515,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": false, + "resolved": "", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "resolved": false, + "resolved": "", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": false, + "resolved": "", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, @@ -20547,14 +20547,14 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "resolved": false, + "resolved": "", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, @@ -20565,35 +20565,35 @@ }, "code-point-at": { "version": "1.1.0", - "resolved": false, + "resolved": "", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "resolved": false, + "resolved": "", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "4.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, @@ -20603,35 +20603,35 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": false, + "resolved": "", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": false, + "resolved": "", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs.realpath": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": false, + "resolved": "", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, @@ -20648,7 +20648,7 @@ }, "glob": { "version": "7.1.3", - "resolved": false, + "resolved": "", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, @@ -20663,14 +20663,14 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": false, + "resolved": "", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "optional": true, @@ -20680,7 +20680,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": false, + "resolved": "", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, @@ -20690,7 +20690,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": false, + "resolved": "", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, @@ -20701,14 +20701,14 @@ }, "inherits": { "version": "2.0.3", - "resolved": false, + "resolved": "", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, @@ -20718,14 +20718,14 @@ }, "isarray": { "version": "1.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": false, + "resolved": "", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, @@ -20742,14 +20742,14 @@ }, "ms": { "version": "2.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true }, "needle": { "version": "2.3.0", - "resolved": false, + "resolved": "", "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, @@ -20761,7 +20761,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": false, + "resolved": "", "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, @@ -20780,7 +20780,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, @@ -20791,14 +20791,14 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": false, + "resolved": "", "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": false, + "resolved": "", "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, @@ -20809,7 +20809,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": false, + "resolved": "", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, @@ -20822,21 +20822,21 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "resolved": false, + "resolved": "", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": false, + "resolved": "", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, @@ -20846,21 +20846,21 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": false, + "resolved": "", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, @@ -20871,21 +20871,21 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "resolved": false, + "resolved": "", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.8", - "resolved": false, + "resolved": "", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, @@ -20898,7 +20898,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": false, + "resolved": "", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, @@ -20914,7 +20914,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": false, + "resolved": "", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, @@ -20924,49 +20924,49 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": false, + "resolved": "", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "resolved": false, + "resolved": "", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": false, + "resolved": "", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.7.0", - "resolved": false, + "resolved": "", "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "resolved": false, + "resolved": "", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, @@ -20978,7 +20978,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": false, + "resolved": "", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, @@ -20988,7 +20988,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, @@ -20998,21 +20998,21 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": false, + "resolved": "", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": false, + "resolved": "", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, @@ -21022,7 +21022,7 @@ }, "wrappy": { "version": "1.0.2", - "resolved": false, + "resolved": "", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true From 593b8216a3de8217f67dec3eadec8e00f58e6c53 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Thu, 11 Feb 2021 16:13:02 -0800 Subject: [PATCH 05/16] Add DATE literal casting --- superset/db_engine_specs/presto.py | 5 ++++- superset/models/sql_types/presto_sql_types.py | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index f6352dcd55d77..98c6b979f4dd5 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -48,7 +48,8 @@ Map, Row, TinyInteger, - TimeStamp + TimeStamp, + Date ) from superset.result_set import destringify from superset.sql_parse import ParsedQuery @@ -918,6 +919,8 @@ def where_latest_partition( # pylint: disable=too-many-arguments col_type = column_names.get(col_name) if col_type == 'TIMESTAMP': query = query.where(Column(col_name, TimeStamp()) == value) + elif col_type == 'DATE': + query = query.where(Column(col_name, Date()) == value) else: query = query.where(Column(col_name) == value) return query diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 8cafa3ce8c233..7dbd28704d243 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -17,7 +17,7 @@ from typing import Any, Dict, List, Optional, Type from sqlalchemy import types -from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP +from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP, DATE from sqlalchemy.sql.type_api import TypeEngine from sqlalchemy.sql.visitors import Visitable @@ -105,4 +105,19 @@ def process_bind_param(self, value, dialect): Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. """ - return "TIMESTAMP '%s'" % value \ No newline at end of file + return "TIMESTAMP '%s'" % value + +class Date(types.TypeDecorator): + """ + A type to extend functionality of date data type. + """ + + impl = DATE + + def process_bind_param(self, value, dialect): + """ + Used for in-line rendering of DATE data type + as Presto does not support automatic casting. + """ + return "DATE '%s'" % value + \ No newline at end of file From 91fc8465604861d588ee250b5cc33227a930708c Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Fri, 12 Feb 2021 10:32:31 -0800 Subject: [PATCH 06/16] Fix lint errors and change var name --- superset/db_engine_specs/presto.py | 9 ++++++--- superset/models/sql_types/presto_sql_types.py | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index 98c6b979f4dd5..4230438e4c008 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -913,10 +913,13 @@ def where_latest_partition( # pylint: disable=too-many-arguments if values is None: return None - column_names = {column.get("name") : column.get('type') for column in columns or []} + column_type_by_name = { + column.get("name") : column.get('type') for column in columns or [] + } + for col_name, value in zip(col_names, values): - if col_name in column_names: - col_type = column_names.get(col_name) + if col_name in column_type_by_name: + col_type = column_type_by_name.get(col_name) if col_type == 'TIMESTAMP': query = query.where(Column(col_name, TimeStamp()) == value) elif col_type == 'DATE': diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 7dbd28704d243..279803fd76e0e 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -100,7 +100,8 @@ class TimeStamp(types.TypeDecorator): impl = TIMESTAMP - def process_bind_param(self, value, dialect): + @classmethod + def process_bind_param(cls, value, dialect): """ Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. @@ -114,7 +115,8 @@ class Date(types.TypeDecorator): impl = DATE - def process_bind_param(self, value, dialect): + @classmethod + def process_bind_param(cls, value, dialect): """ Used for in-line rendering of DATE data type as Presto does not support automatic casting. From 626a723df60afac4666fde8e75c63ea28d051429 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Fri, 12 Feb 2021 12:39:23 -0800 Subject: [PATCH 07/16] Get rid of col_type and whitespace --- superset/db_engine_specs/presto.py | 7 +++---- superset/models/sql_types/presto_sql_types.py | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index 4230438e4c008..db7f1e472f595 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -913,16 +913,15 @@ def where_latest_partition( # pylint: disable=too-many-arguments if values is None: return None - column_type_by_name = { + column_type_by_name = { column.get("name") : column.get('type') for column in columns or [] } for col_name, value in zip(col_names, values): if col_name in column_type_by_name: - col_type = column_type_by_name.get(col_name) - if col_type == 'TIMESTAMP': + if column_type_by_name.get(col_name) == 'TIMESTAMP': query = query.where(Column(col_name, TimeStamp()) == value) - elif col_type == 'DATE': + elif column_type_by_name.get(col_name) == 'DATE': query = query.where(Column(col_name, Date()) == value) else: query = query.where(Column(col_name) == value) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 279803fd76e0e..57efa465b9fba 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -16,7 +16,7 @@ # under the License. from typing import Any, Dict, List, Optional, Type -from sqlalchemy import types +from sqlalchemy.types import TypeDecorator from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP, DATE from sqlalchemy.sql.type_api import TypeEngine from sqlalchemy.sql.visitors import Visitable @@ -93,7 +93,7 @@ def python_type(self) -> Optional[Type[Any]]: def _compiler_dispatch(cls, _visitor: Visitable, **_kw: Any) -> str: return "ROW" -class TimeStamp(types.TypeDecorator): +class TimeStamp(TypeDecorator): """ A type to extend functionality of timestamp data type. """ @@ -108,7 +108,7 @@ def process_bind_param(cls, value, dialect): """ return "TIMESTAMP '%s'" % value -class Date(types.TypeDecorator): +class Date(TypeDecorator): """ A type to extend functionality of date data type. """ From a7f09402992a55130ec66c43272be1bf16046887 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 17:48:42 -0800 Subject: [PATCH 08/16] Fix linting --- superset/models/sql_types/presto_sql_types.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 57efa465b9fba..0e13d3543ea5f 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -14,6 +14,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. + +# pylint: disable=abstract-method from typing import Any, Dict, List, Optional, Type from sqlalchemy.types import TypeDecorator @@ -101,7 +103,7 @@ class TimeStamp(TypeDecorator): impl = TIMESTAMP @classmethod - def process_bind_param(cls, value, dialect): + def process_bind_param(cls, value, dialect) -> str: """ Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. @@ -116,7 +118,7 @@ class Date(TypeDecorator): impl = DATE @classmethod - def process_bind_param(cls, value, dialect): + def process_bind_param(cls, value, dialect) -> str: """ Used for in-line rendering of DATE data type as Presto does not support automatic casting. From c20635491d3175e30d1b9c1571f492a86af64a4a Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 18:00:44 -0800 Subject: [PATCH 09/16] Fix arg type --- superset/models/sql_types/presto_sql_types.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 0e13d3543ea5f..3d402850cdea4 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -22,6 +22,7 @@ from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP, DATE from sqlalchemy.sql.type_api import TypeEngine from sqlalchemy.sql.visitors import Visitable +from sqlalchemy.engine.interfaces import Dialect # _compiler_dispatch is defined to help with type compilation @@ -103,7 +104,7 @@ class TimeStamp(TypeDecorator): impl = TIMESTAMP @classmethod - def process_bind_param(cls, value, dialect) -> str: + def process_bind_param(cls, value: str, dialect: Dialect) -> str: """ Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. @@ -118,7 +119,7 @@ class Date(TypeDecorator): impl = DATE @classmethod - def process_bind_param(cls, value, dialect) -> str: + def process_bind_param(cls, value: str, dialect: Dialect) -> str: """ Used for in-line rendering of DATE data type as Presto does not support automatic casting. From 2feb2190d374d205421e01626f3a456b1d9530ba Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 18:16:16 -0800 Subject: [PATCH 10/16] Fix isort lint error --- superset/models/sql_types/presto_sql_types.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 3d402850cdea4..47abf051ff63d 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -18,11 +18,11 @@ # pylint: disable=abstract-method from typing import Any, Dict, List, Optional, Type -from sqlalchemy.types import TypeDecorator -from sqlalchemy.sql.sqltypes import Integer, TIMESTAMP, DATE +from sqlalchemy.engine.interfaces import Dialect +from sqlalchemy.sql.sqltypes import DATE, Integer, TIMESTAMP from sqlalchemy.sql.type_api import TypeEngine from sqlalchemy.sql.visitors import Visitable -from sqlalchemy.engine.interfaces import Dialect +from sqlalchemy.types import TypeDecorator # _compiler_dispatch is defined to help with type compilation From 862478ec7d0c3f743a643fa7f0bc36edbbca65a9 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 18:25:58 -0800 Subject: [PATCH 11/16] ran black and isort locally.. --- superset/db_engine_specs/presto.py | 10 +++++----- superset/models/sql_types/presto_sql_types.py | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index db7f1e472f595..cd586e1895521 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -44,12 +44,12 @@ from superset.models.sql_lab import Query from superset.models.sql_types.presto_sql_types import ( Array, + Date, Interval, Map, Row, - TinyInteger, TimeStamp, - Date + TinyInteger, ) from superset.result_set import destringify from superset.sql_parse import ParsedQuery @@ -914,14 +914,14 @@ def where_latest_partition( # pylint: disable=too-many-arguments return None column_type_by_name = { - column.get("name") : column.get('type') for column in columns or [] + column.get("name"): column.get("type") for column in columns or [] } for col_name, value in zip(col_names, values): if col_name in column_type_by_name: - if column_type_by_name.get(col_name) == 'TIMESTAMP': + if column_type_by_name.get(col_name) == "TIMESTAMP": query = query.where(Column(col_name, TimeStamp()) == value) - elif column_type_by_name.get(col_name) == 'DATE': + elif column_type_by_name.get(col_name) == "DATE": query = query.where(Column(col_name, Date()) == value) else: query = query.where(Column(col_name) == value) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 47abf051ff63d..94326f38bb5e7 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -96,6 +96,7 @@ def python_type(self) -> Optional[Type[Any]]: def _compiler_dispatch(cls, _visitor: Visitable, **_kw: Any) -> str: return "ROW" + class TimeStamp(TypeDecorator): """ A type to extend functionality of timestamp data type. @@ -111,6 +112,7 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: """ return "TIMESTAMP '%s'" % value + class Date(TypeDecorator): """ A type to extend functionality of date data type. @@ -125,4 +127,3 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: as Presto does not support automatic casting. """ return "DATE '%s'" % value - \ No newline at end of file From 7d1e10483ee5a692f0e00ab4907b330f3b0db29c Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 19:19:57 -0800 Subject: [PATCH 12/16] accidentally removed EOF --- superset/models/sql_types/presto_sql_types.py | 1 + 1 file changed, 1 insertion(+) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 94326f38bb5e7..0a05d79323a76 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -127,3 +127,4 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: as Presto does not support automatic casting. """ return "DATE '%s'" % value + From 6c69f954d6f829ac2c73c1b53c660d33409be2e9 Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Tue, 16 Feb 2021 19:30:25 -0800 Subject: [PATCH 13/16] Dont need eof --- superset/models/sql_types/presto_sql_types.py | 1 - 1 file changed, 1 deletion(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 0a05d79323a76..94326f38bb5e7 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -127,4 +127,3 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: as Presto does not support automatic casting. """ return "DATE '%s'" % value - From 1a0614f63f7bab5ddcf3536230a1695ad7771d7d Mon Sep 17 00:00:00 2001 From: Kenny Kwan Date: Wed, 24 Feb 2021 17:32:46 -0800 Subject: [PATCH 14/16] Use newer string formatting style from comments Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com> --- superset/models/sql_types/presto_sql_types.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/superset/models/sql_types/presto_sql_types.py b/superset/models/sql_types/presto_sql_types.py index 94326f38bb5e7..5f36266ccaa4f 100644 --- a/superset/models/sql_types/presto_sql_types.py +++ b/superset/models/sql_types/presto_sql_types.py @@ -110,7 +110,7 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: Used for in-line rendering of TIMESTAMP data type as Presto does not support automatic casting. """ - return "TIMESTAMP '%s'" % value + return f"TIMESTAMP '{value}'" class Date(TypeDecorator): @@ -126,4 +126,4 @@ def process_bind_param(cls, value: str, dialect: Dialect) -> str: Used for in-line rendering of DATE data type as Presto does not support automatic casting. """ - return "DATE '%s'" % value + return f"DATE '{value}'" From 5dee4c7e471abca91735efa40a3bbe01160fad65 Mon Sep 17 00:00:00 2001 From: John Bodley <4567245+john-bodley@users.noreply.github.com> Date: Thu, 21 Apr 2022 05:39:23 +1200 Subject: [PATCH 15/16] Trigger notification --- superset/db_engine_specs/presto.py | 1 + 1 file changed, 1 insertion(+) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index cd586e1895521..86c5be56b171d 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -14,6 +14,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. + import dataclasses import logging import re From a06038b4933f987e5e39b535fa311b179f0c86de Mon Sep 17 00:00:00 2001 From: John Bodley <4567245+john-bodley@users.noreply.github.com> Date: Thu, 21 Apr 2022 05:39:41 +1200 Subject: [PATCH 16/16] Trigger notification --- superset/db_engine_specs/presto.py | 1 - 1 file changed, 1 deletion(-) diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py index 86c5be56b171d..cd586e1895521 100644 --- a/superset/db_engine_specs/presto.py +++ b/superset/db_engine_specs/presto.py @@ -14,7 +14,6 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. - import dataclasses import logging import re