chdb icon indicating copy to clipboard operation
chdb copied to clipboard

Already existing database called "default" but virgin chdb

Open LPauzies opened this issue 5 months ago • 1 comments

I'm using :

  • CHDB 2.0.4

I'm trying to execute this python :


from pathlib import Path
import pytest
from typing import Generator, List, Optional

from chdb import dbapi
from chdb.dbapi.cursors import Cursor

def chdb_dbapi(dump_paths: List[Path], path: Optional[Path] = None) -> Generator[Cursor, None, None]:
    """
    Create a clickhouse dbapi cursor in memory using chdb.
    Note that this method can take multiple paths depending on what is planned to be tested.

    Args:
        dump_paths (List[Path]): The list of path for the dumps to load at each fixture

    Yields:
        Generator[Cursor, None, None]: The cursor
    """
    string_path = str(path) if path else None
    if path and path.exists():  # A path is given and a session exists
        with dbapi.connect(path=string_path) as cursor:
            yield cursor
    else:  # Fallback
        with dbapi.connect(path=string_path) as cursor:
            for dump_path in dump_paths:
                sql_content = dump_path.read_text()
                cursor.execute(sql_content)
            yield cursor

@pytest.fixture(scope="session")
def alembic_dump_path() -> Path:
    path = Path.cwd() / "../../dumps/clickhouse_alembic_dump.sql"
    return path.resolve()

@pytest.fixture(scope="session")
def clickhouse_chdb_dbapi(alembic_dump_path: Path) -> Generator[Cursor, None, None]:
    yield from chdb_dbapi([alembic_dump_path])

def test_clickhouse_session_dbapi(clickhouse_chdb_dbapi):
    clickhouse_chdb_dbapi.execute("SHOW tables IN default;")
    result = list(clickhouse_chdb_dbapi.fetchall()[0])
    # This should never change
    assert "alembic_version" in result

Here is the content of "../../dumps/clickhouse_alembic_dump.sql" :

CREATE DATABASE default;

CREATE TABLE default.alembic_version
(
    `version_num` String,
    `dt` DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY tuple()
SETTINGS index_granularity = 8192;

When executing my test, it comes with this error :

ERROR tests/unittest/test_chdb_dbapi.py::test_clickhouse_session_dbapi - chdb.dbapi.err.InterfaceError: query err: Code: 82. DB::Exception: Database default already exists. (DATABASE_ALREADY_EXISTS)

When I try to check the structure of the "default" database before loading my .sql file :

def chdb_dbapi(dump_paths: List[Path], path: Optional[Path] = None) -> Generator[Cursor, None, None]:
    """
    Create a clickhouse dbapi cursor in memory using chdb.
    Note that this method can take multiple paths depending on what is planned to be tested.

    Args:
        dump_paths (List[Path]): The list of path for the dumps to load at each fixture

    Yields:
        Generator[Cursor, None, None]: The cursor
    """
    string_path = str(path) if path else None
    if path and path.exists():  # A path is given and a session exists
        with dbapi.connect(path=string_path) as cursor:
            yield cursor
    else:  # Fallback
        with dbapi.connect(path=string_path) as cursor:
            for dump_path in dump_paths:
                cursor.execute("select database, name from system.tables;")
                for database, name in cursor.fetchall():
                    print(f"{database}.{name}")
                sql_content = dump_path.read_text()
                cursor.execute(sql_content)
            yield cursor

It gives me this, without a single "default" database existing :

INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
INFORMATION_SCHEMA.SCHEMATA
INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.VIEWS
INFORMATION_SCHEMA.columns
INFORMATION_SCHEMA.key_column_usage
INFORMATION_SCHEMA.referential_constraints
INFORMATION_SCHEMA.schemata
INFORMATION_SCHEMA.statistics
INFORMATION_SCHEMA.tables
INFORMATION_SCHEMA.views
information_schema.COLUMNS
information_schema.KEY_COLUMN_USAGE
information_schema.REFERENTIAL_CONSTRAINTS
information_schema.SCHEMATA
information_schema.STATISTICS
information_schema.TABLES
information_schema.VIEWS
information_schema.columns
information_schema.key_column_usage
information_schema.referential_constraints
information_schema.schemata
information_schema.statistics
information_schema.tables
information_schema.views
system.aggregate_function_combinators
system.asynchronous_inserts
system.asynchronous_loader
system.backups
system.build_options
system.certificates
system.clusters
system.collations
system.columns
system.contributors
system.current_roles
system.dashboards
system.data_skipping_indices
system.data_type_families
system.database_engines
system.databases
system.detached_parts
system.dictionaries
system.disks
system.distributed_ddl_queue
system.distribution_queue
system.dns_cache
system.dropped_tables
system.dropped_tables_parts
system.enabled_roles
system.errors
system.events
system.filesystem_cache
system.filesystem_cache_settings
system.formats
system.functions
system.generateSeries
system.generate_series
system.grants
system.graphite_retentions
system.jemalloc_bins
system.kafka_consumers
system.keywords
system.licenses
system.macros
system.merge_tree_settings
system.merges
system.metrics
system.models
system.moves
system.mutations
system.mysql_binlogs
system.named_collections
system.numbers
system.numbers_mt
system.one
system.part_moves_between_shards
system.parts
system.parts_columns
system.privileges
system.processes
system.projection_parts
system.projection_parts_columns
system.query_cache
system.quota_limits
system.quota_usage
system.quotas
system.quotas_usage
system.remote_data_paths
system.replicas
system.replicated_fetches
system.replicated_merge_tree_settings
system.replication_queue
system.rocksdb
system.role_grants
system.roles
system.row_policies
system.s3queue
system.scheduler
system.schema_inference_cache
system.server_settings
system.settings
system.settings_changes
system.settings_profile_elements
system.settings_profiles
system.stack_trace
system.storage_policies
system.symbols
system.table_engines
system.table_functions
system.tables
system.time_zones
system.user_directories
system.user_processes
system.users
system.view_refreshes
system.warnings
system.zeros
system.zeros_mt

NB: This code worked in chdb 1.4.1, and when upgrading it, it explodes. Is it a regression ? Is it a bug ?

LPauzies avatar Sep 18 '24 10:09 LPauzies