diff --git a/target_snowflake/connector.py b/target_snowflake/connector.py index 60187b2..5eb69b8 100644 --- a/target_snowflake/connector.py +++ b/target_snowflake/connector.py @@ -134,7 +134,7 @@ def create_engine(self) -> Engine: Returns: A new SQLAlchemy Engine. """ - return sqlalchemy.create_engine( + engine = sqlalchemy.create_engine( self.sqlalchemy_url, connect_args={ "session_parameters": { @@ -143,6 +143,12 @@ def create_engine(self) -> Engine: }, echo=False, ) + connection = engine.connect() + db_names = [db[1] for db in connection.execute(text("SHOW DATABASES;")).fetchall()] + if self.config["database"] not in db_names: + raise Exception(f"Database '{self.config['database']}' does not exist or the user/role doesn't have access to it.") + return engine + def prepare_column( self, diff --git a/tests/test_target_snowflake.py b/tests/test_target_snowflake.py index 5c55ac0..fa37892 100644 --- a/tests/test_target_snowflake.py +++ b/tests/test_target_snowflake.py @@ -89,3 +89,14 @@ class TestTargetSnowflake(BaseSnowflakeTargetTests, StandardTargetTests): # typ class TestTargetSnowflakeBatch(BaseSnowflakeTargetTests, BatchTargetTests): # type: ignore[misc, valid-type] # noqa: E501 """Batch Target Tests.""" + +def test_invalid_database(): + INVALID_TEST_CONFIG = copy.deepcopy(SAMPLE_CONFIG) + INVALID_TEST_CONFIG["database"] = "FOO_BAR_DOESNT_EXIST" + runner = TargetTestRunner( + TargetSnowflake, + config=INVALID_TEST_CONFIG, + input_filepath="tests/target_test_streams/existing_table.singer" + ) + with pytest.raises(Exception): + runner.sync_all() \ No newline at end of file