|
13 | 13 | from parameters import CONNECTION_PARAMETERS |
14 | 14 | from sqlalchemy import Table, Column, Integer, Numeric, String, MetaData, Sequence, ForeignKey, LargeBinary, REAL, \ |
15 | 15 | Boolean, DateTime |
16 | | -from sqlalchemy import inspect |
17 | | -from sqlalchemy import text |
18 | | -from sqlalchemy import dialects |
| 16 | +from sqlalchemy import create_engine, dialects, inspect, text |
19 | 17 | from sqlalchemy.sql import and_, or_, not_ |
20 | 18 | from sqlalchemy.sql import select |
| 19 | +from snowflake.connector import connect |
21 | 20 |
|
22 | 21 | from snowflake.sqlalchemy import ( |
23 | 22 | URL, |
@@ -1037,3 +1036,36 @@ def test_comment_sqlalchemy(db_parameters, engine_testaccount, on_travis): |
1037 | 1036 | con2.close() |
1038 | 1037 | engine2.dispose() |
1039 | 1038 |
|
| 1039 | + |
| 1040 | + |
| 1041 | +@pytest.mark.skipif( |
| 1042 | + os.getenv('TRAVIS') == 'true', |
| 1043 | + reason="Travis cannot create Schemas and Databases" |
| 1044 | +) |
| 1045 | +def test_special_schema_character(db_parameters): |
| 1046 | + """Make sure we decode special characters correctly""" |
| 1047 | + # Constants |
| 1048 | + database = "a/b/c" # "'/'.join([choice(ascii_lowercase) for _ in range(3)]) |
| 1049 | + schema = "d/e/f" # '/'.join([choice(ascii_lowercase) for _ in range(3)]) |
| 1050 | + # Setup |
| 1051 | + options = dict(**db_parameters) |
| 1052 | + conn = connect(**options) |
| 1053 | + conn.cursor().execute("CREATE OR REPLACE DATABASE \"{0}\"".format(database)) |
| 1054 | + conn.cursor().execute("CREATE OR REPLACE SCHEMA \"{0}\"".format(schema)) |
| 1055 | + conn.close() |
| 1056 | + # Test |
| 1057 | + options.update({'database': '"' + database + '"', |
| 1058 | + 'schema': '"' + schema + '"'}) |
| 1059 | + sf_conn = connect(**options) |
| 1060 | + sf_connection = [res for res in sf_conn.cursor().execute("select current_database(), " |
| 1061 | + "current_schema();")] |
| 1062 | + sa_conn = create_engine(URL(**options)).connect() |
| 1063 | + sa_connection = [res for res in sa_conn.execute("select current_database(), " |
| 1064 | + "current_schema();")] |
| 1065 | + sa_conn.close() |
| 1066 | + sf_conn.close() |
| 1067 | + # Teardown |
| 1068 | + conn = connect(**options) |
| 1069 | + conn.cursor().execute("DROP DATABASE IF EXISTS \"{0}\"".format(database)) |
| 1070 | + conn.close() |
| 1071 | + assert [(database, schema)] == sf_connection == sa_connection |
0 commit comments