[docs]defget_create_view_sql(engine:"sa.Engine",select:"sa.Select",view_name:str,db_type:DbTypeEnum,)->str:""" Generate SQL statement to create a view from a given select statement. :param engine: SQLAlchemy engine to compile the select statement. :param select: SQLAlchemy Select object representing the query for the view. :param view_name: Name of the view to be created. :return: SQL statement to create the view. """select_sql=select.compile(engine,compile_kwargs={"literal_binds":True},)ifdb_typeisDbTypeEnum.SQLITE:create_view_sql=f'CREATE VIEW IF NOT EXISTS "{view_name}" AS {select_sql}'elifdb_typeisDbTypeEnum.POSTGRESQL:create_view_sql=f'CREATE OR REPLACE VIEW "{view_name}" AS {select_sql}'elifdb_typeisDbTypeEnum.MYSQL:# pragma: no covercreate_view_sql=f'CREATE OR REPLACE VIEW "{view_name}" AS {select_sql}'elifdb_typeisDbTypeEnum.MSSQL:# pragma: no covercreate_view_sql=f'CREATE OR ALTER VIEW "{view_name}" AS {select_sql}'elifdb_typeisDbTypeEnum.ORACLE:# pragma: no covercreate_view_sql=f'CREATE OR REPLACE VIEW "{view_name}" AS {select_sql}'else:# pragma: no coverraiseNotImplementedError(f"Unsupported database type: {db_type}")returncreate_view_sql
[docs]defget_drop_view_sql(view_name:str,db_type:DbTypeEnum,)->str:""" Generate SQL statement to drop a view. :param view_name: Name of the view to be dropped. :param db_type: Type of the database (e.g., SQLite, PostgreSQL). :return: SQL statement to drop the view. """ifdb_typeisDbTypeEnum.SQLITE:returnf'DROP VIEW IF EXISTS "{view_name}"'elifdb_typeisDbTypeEnum.POSTGRESQL:returnf'DROP VIEW IF EXISTS "{view_name}"'elifdb_typeisDbTypeEnum.MYSQL:# pragma: no coverreturnf'DROP VIEW IF EXISTS "{view_name}"'elifdb_typeisDbTypeEnum.MSSQL:# pragma: no coverraiseNotImplementedError(f"Unsupported database type: {db_type}")elifdb_typeisDbTypeEnum.ORACLE:# pragma: no coverraiseNotImplementedError(f"Unsupported database type: {db_type}")else:# pragma: no coverraiseNotImplementedError(f"Unsupported database type: {db_type}")
defcheck_connection(engine:"sa.Engine")->dict[str,int]:sql="SELECT 1 as value;"withengine.connect()asconn:rows=conn.execute(sa.text(sql)).mappings().fetchall()returnrows[0]