Add fix for pyodbc+mssql (#6621)

* add fix for odbc+mssql

* fix for pylint/pep8
This commit is contained in:
Chinh Nguyen
2019-01-13 09:30:05 -08:00
committed by Maxime Beauchemin
parent ae6217ba55
commit 284a0cccd3
3 changed files with 51 additions and 0 deletions

View File

@@ -19,12 +19,14 @@ import sqlalchemy as sqla
from superset import dataframe, db, jinja_context, security_manager, sql_lab
from superset.connectors.sqla.models import SqlaTable
from superset.db_engine_specs import BaseEngineSpec
from superset.db_engine_specs import MssqlEngineSpec
from superset.models import core as models
from superset.models.sql_lab import Query
from superset.utils import core as utils
from superset.utils.core import get_main_database
from superset.views.core import DatabaseView
from .base_tests import SupersetTestCase
from .fixtures.pyodbcRow import Row
class CoreTests(SupersetTestCase):
@@ -673,6 +675,36 @@ class CoreTests(SupersetTestCase):
{'data': pd.Timestamp('2017-11-18 22:06:30.061810+0100', tz=tz)},
)
def test_mssql_engine_spec_pymssql(self):
# Test for case when tuple is returned (pymssql)
data = [(1, 1, datetime.datetime(2017, 10, 19, 23, 39, 16, 660000)),
(2, 2, datetime.datetime(2018, 10, 19, 23, 39, 16, 660000))]
df = dataframe.SupersetDataFrame(
list(data),
[['col1'], ['col2'], ['col3']],
MssqlEngineSpec)
data = df.data
self.assertEqual(len(data), 2)
self.assertEqual(data[0],
{'col1': 1,
'col2': 1,
'col3': pd.Timestamp('2017-10-19 23:39:16.660000')})
def test_mssql_engine_spec_odbc(self):
# Test for case when pyodbc.Row is returned (msodbc driver)
data = [Row((1, 1, datetime.datetime(2017, 10, 19, 23, 39, 16, 660000))),
Row((2, 2, datetime.datetime(2018, 10, 19, 23, 39, 16, 660000)))]
df = dataframe.SupersetDataFrame(
list(data),
[['col1'], ['col2'], ['col3']],
MssqlEngineSpec)
data = df.data
self.assertEqual(len(data), 2)
self.assertEqual(data[0],
{'col1': 1,
'col2': 1,
'col3': pd.Timestamp('2017-10-19 23:39:16.660000')})
def test_comments_in_sqlatable_query(self):
clean_query = "SELECT '/* val 1 */' as c1, '-- val 2' as c2 FROM tbl"
commented_query = '/* comment 1 */' + clean_query + '-- comment 2'

12
tests/fixtures/pyodbcRow.py vendored Normal file
View File

@@ -0,0 +1,12 @@
# pylint: disable=C,R,W
class Row(object):
def __init__(self, values):
self.values = values
def __name__(self):
return 'Row'
def __iter__(self):
return (item for item in self.values)