def test_standalone_sqlalchemy_datasource(test_db_connection_string, sa):
    datasource = SqlAlchemyDatasource(
        "SqlAlchemy",
        connection_string=test_db_connection_string,
        echo=False,
        batch_kwargs_generators={
            "default": {
                "class_name": "TableBatchKwargsGenerator"
            }
        },
    )

    assert set(
        datasource.get_available_data_asset_names()["default"]["names"]) == {
            ("main.table_1", "table"),
            ("main.table_2", "table"),
        }
    batch_kwargs = datasource.build_batch_kwargs("default", "main.table_1")
    batch = datasource.get_batch(batch_kwargs=batch_kwargs)
    assert isinstance(batch, Batch)
    batch_data = batch.data
    assert isinstance(
        batch_data,
        great_expectations.dataset.sqlalchemy_dataset.SqlAlchemyBatchReference,
    )
    dataset = SqlAlchemyDataset(**batch.data.get_init_kwargs())
    assert len(dataset.head(10)) == 5
def test_standalone_sqlalchemy_datasource(test_db_connection_string):
    datasource = SqlAlchemyDatasource(
        'SqlAlchemy', connection_string=test_db_connection_string, echo=False)

    assert datasource.get_available_data_asset_names() == {"default": {"main.table_1", "main.table_2"}}
    dataset1 = datasource.get_batch("main.table_1")
    dataset2 = datasource.get_batch("main.table_2")
    assert isinstance(dataset1, SqlAlchemyDataset)
    assert isinstance(dataset2, SqlAlchemyDataset)
def test_query_generator_view(sqlite_view_engine):
    datasource = SqlAlchemyDatasource(
        engine=sqlite_view_engine,
        batch_kwargs_generators={"table": {"class_name": "TableBatchKwargsGenerator"}},
    )  # Build a datasource with a queries generator to introspect our database with a view
    names = set(datasource.get_available_data_asset_names()["table"]["names"])

    # We should see both the table *and* the primary view, but *not* the temp view
    assert names == {("main.test_table", "table"), ("main.test_view", "view")}
def test_query_generator_view(sqlite_view_engine):
    datasource = SqlAlchemyDatasource(
        engine=sqlite_view_engine, generators={"query": {
            "type": "queries"
        }}
    )  # Build a datasource with a queries generator to introspect our database with a view
    names = set(datasource.get_available_data_asset_names()["query"])

    # We should see both the table *and* the primary view, but *not* the temp view
    assert names == {"main.test_table", "main.test_view"}