Skip to content

Commit b0c1783

Browse files
SNOW-2691336: add test coverage for other DBMS for JDBC (#3998)
1 parent 1a51219 commit b0c1783

File tree

7 files changed

+488
-1
lines changed

7 files changed

+488
-1
lines changed

tests/integ/datasource/test_jdbc.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,29 @@
2626
POSTGRES_SECRET,
2727
POSTGRES_URL,
2828
postgres_expected_data,
29+
MYSQL_SECRET,
30+
MYSQL_URL,
31+
mysql_expected_data,
32+
SQL_SERVER_SECRET,
33+
SQL_SERVER_URL,
34+
sql_sever_expected_data,
35+
)
36+
from tests.resources.test_data_source_dir.test_mysql_data import (
37+
MYSQL_TEST_EXTERNAL_ACCESS_INTEGRATION,
2938
)
3039
from tests.resources.test_data_source_dir.test_postgres_data import (
3140
POSTGRES_TEST_EXTERNAL_ACCESS_INTEGRATION,
3241
)
42+
from tests.resources.test_data_source_dir.test_sql_server_data import (
43+
SQL_SERVER_TEST_EXTERNAL_ACCESS_INTEGRATION,
44+
)
3345
from tests.utils import RUNNING_ON_JENKINS
3446

3547
SELECT_QUERY = "SELECT ID, NUMBER_COL, BINARY_FLOAT_COL, BINARY_DOUBLE_COL, VARCHAR2_COL, CHAR_COL, CLOB_COL, NCHAR_COL, NVARCHAR2_COL, NCLOB_COL, DATE_COL, TIMESTAMP_COL, TIMESTAMP_TZ_COL, TIMESTAMP_LTZ_COL, RAW_COL, GUID_COL FROM ALL_TYPE_TABLE_JDBC"
3648
EMPTY_QUERY = "SELECT * FROM ALL_TYPE_TABLE_JDBC WHERE 1=0"
3749
POSTGRES_SELECT_QUERY = "select BIGINT_COL, BIGSERIAL_COL, BIT_COL, BIT_VARYING_COL, BOOLEAN_COL, BOX_COL, BYTEA_COL, CHAR_COL, VARCHAR_COL, CIDR_COL, CIRCLE_COL, DATE_COL, DOUBLE_PRECISION_COL, INET_COL, INTEGER_COL, INTERVAL_COL, JSON_COL, JSONB_COL, LINE_COL, LSEG_COL, MACADDR_COL, MACADDR8_COL, NUMERIC_COL, PATH_COL, PG_LSN_COL, PG_SNAPSHOT_COL, POINT_COL, POLYGON_COL, REAL_COL, SMALLINT_COL, SMALLSERIAL_COL, SERIAL_COL, TEXT_COL, TIME_COL, TIMESTAMP_COL, TIMESTAMPTZ_COL, TSQUERY_COL, TSVECTOR_COL, TXID_SNAPSHOT_COL, UUID_COL, XML_COL from test_schema.ALL_TYPE_TABLE"
50+
MYSQL_SELECT_QUERY = "select * from ALL_TYPES_TABLE"
51+
SQL_SERVER_QUERY = "SELECT ID, BIGINT_COL, INT_COL, SMALLINT_COL, TINYINT_COL, BIT_COL, DECIMAL_COL, NUMERIC_COL, MONEY_COL, SMALLMONEY_COL, FLOAT_COL, REAL_COL, DATE_COL, TIME_COL, DATETIME_COL, DATETIME2_COL, SMALLDATETIME_COL, CHAR_COL, VARCHAR_COL, VARCHAR_MAX_COL, TEXT_COL, NCHAR_COL, NVARCHAR_COL, NVARCHAR_MAX_COL, NTEXT_COL, BINARY_COL, VARBINARY_COL, VARBINARY_MAX_COL, IMAGE_COL, UNIQUEIDENTIFIER_COL, TIMESTAMP_COL FROM test_db.dbo.ALL_TYPE_TABLE"
3852
TABLE_NAME = "ALL_TYPE_TABLE_JDBC"
3953

4054

@@ -62,6 +76,18 @@ def postgres_jar_path(session):
6276
return stage_name + "/postgresql-42.7.7.jar"
6377

6478

79+
@pytest.fixture(scope="module")
80+
def mysql_jar_path(session):
81+
stage_name = session.get_session_stage()
82+
return stage_name + "/mysql-connector-j-9.5.0.jar"
83+
84+
85+
@pytest.fixture(scope="module")
86+
def sql_server_jar_path(session):
87+
stage_name = session.get_session_stage()
88+
return stage_name + "/mssql-jdbc-13.2.1.jre11.jar"
89+
90+
6591
@pytest.fixture(scope="module")
6692
def postgres_udtf_configs(session, postgres_jar_path):
6793
return {
@@ -71,6 +97,27 @@ def postgres_udtf_configs(session, postgres_jar_path):
7197
}
7298

7399

100+
@pytest.fixture(scope="module")
101+
def mysql_udtf_configs(session, mysql_jar_path):
102+
return {
103+
"external_access_integration": MYSQL_TEST_EXTERNAL_ACCESS_INTEGRATION,
104+
"secret": MYSQL_SECRET,
105+
"imports": [mysql_jar_path],
106+
}
107+
108+
109+
@pytest.fixture(scope="module")
110+
def sql_server_udtf_configs(session, sql_server_jar_path):
111+
return {
112+
"external_access_integration": SQL_SERVER_TEST_EXTERNAL_ACCESS_INTEGRATION[
113+
"external_access_integration"
114+
],
115+
"secret": SQL_SERVER_SECRET,
116+
"imports": [sql_server_jar_path],
117+
"java_version": 11,
118+
}
119+
120+
74121
@pytest.fixture(scope="module")
75122
def udtf_configs(session, jar_path):
76123
return {
@@ -89,6 +136,12 @@ def setup(session, resources_path):
89136
session.file.put(
90137
resources_path + "/test_data_source_dir/postgresql-42.7.7.jar", stage_name
91138
)
139+
session.file.put(
140+
resources_path + "/test_data_source_dir/mysql-connector-j-9.5.0.jar", stage_name
141+
)
142+
session.file.put(
143+
resources_path + "/test_data_source_dir/mssql-jdbc-13.2.1.jre11.jar", stage_name
144+
)
92145
yield
93146

94147

@@ -340,3 +393,21 @@ def test_postgres_session_init_statement(
340393
query_timeout=1,
341394
session_init_statement=session_init_statement,
342395
).collect()
396+
397+
398+
def test_connect_mysql(session, mysql_udtf_configs):
399+
df = session.read.jdbc(
400+
url=MYSQL_URL,
401+
udtf_configs=mysql_udtf_configs,
402+
query=MYSQL_SELECT_QUERY,
403+
).order_by("ID")
404+
assert df.collect() == mysql_expected_data
405+
406+
407+
def test_connect_sql_server(session, sql_server_udtf_configs):
408+
df = session.read.jdbc(
409+
url=SQL_SERVER_URL,
410+
udtf_configs=sql_server_udtf_configs,
411+
query=SQL_SERVER_QUERY,
412+
).order_by("ID")
413+
assert df.collect() == sql_sever_expected_data

tests/integ/datasource/test_mysql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
mysql_less_column_schema,
2727
mysql_unicode_schema,
2828
mysql_double_quoted_schema,
29+
MYSQL_TEST_EXTERNAL_ACCESS_INTEGRATION,
2930
)
3031
from tests.utils import RUNNING_ON_JENKINS, Utils
3132
from tests.parameters import MYSQL_CONNECTION_PARAMETERS
@@ -54,7 +55,6 @@
5455

5556
TEST_TABLE_NAME = "ALL_TYPES_TABLE"
5657
TEST_QUERY = "select * from ALL_TYPES_TABLE"
57-
MYSQL_TEST_EXTERNAL_ACCESS_INTEGRATION = "snowpark_dbapi_mysql_test_integration"
5858

5959

6060
def create_connection_mysql():
Binary file not shown.
2.48 MB
Binary file not shown.

tests/resources/test_data_source_dir/test_jdbc_data.py

Lines changed: 411 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/test_data_source_dir/test_mysql_data.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,6 @@
374374
StructField('"Notes"', StringType(MAX_STRING_SIZE), nullable=True),
375375
]
376376
)
377+
378+
379+
MYSQL_TEST_EXTERNAL_ACCESS_INTEGRATION = "snowpark_dbapi_mysql_test_integration"

tests/unit/scala/test_utils_suite.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,8 @@ def check_zip_files_and_close_stream(input_stream, expected_files):
359359
"resources/test_sas.sas7bdat",
360360
"resources/test_sas.xpt",
361361
"resources/test_data_source_dir/",
362+
"resources/test_data_source_dir/mssql-jdbc-13.2.1.jre11.jar",
363+
"resources/test_data_source_dir/mysql-connector-j-9.5.0.jar",
362364
"resources/test_data_source_dir/ojdbc17-23.9.0.25.07.jar",
363365
"resources/test_data_source_dir/postgresql-42.7.7.jar",
364366
"resources/test_data_source_dir/test_data_source_data.py",

0 commit comments

Comments
 (0)