package com.zkqy.datamodeling.mapper;

import com.zkqy.datamodeling.domain.TableInfo;
import com.zkqy.datamodeling.domain.vo.TableInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface TableInfoMapper {

    /**
     * 执行创建表sql语句
     */
    void executeCreateTableSql(String createTableSql);

    //---------------------------------mysql------------------------------------------

    /**
     * 使用数据库
     */
    void useDataBase(String dataBaseName);


    /**
     * 创建mysql数据表
     *
     * @param tableName    表明
     * @param tableComment 表注释
     * @param filedList    表字段信息
     */
    void createMysqlTable(@Param("tableName") String tableName, @Param("tableComment") String tableComment, @Param("filedList") List<String> filedList);

    /**
     * 创建mysql数据库
     *
     * @param dataBaseName 创建的数据源名称
     * @return
     */
    int createMysqlDataBase(String dataBaseName);

    /**
     * 查询mysql数据库是否存在
     */
    int mysqlDataBaseExist(String dataBaseName);

    /**
     * 查询数据库表是否存在
     */
    int mysqlTableExist(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);

    /**
     * 查询数据库中的表信息
     */
    List<TableInfoVO> tableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);

    /**
     * 查询表中有没有数据
     */
    int selectDataCount(String tableName);

    /**
     * 删除表
     */
    void dropMysqlTable(String tableName);

    /**
     * 修改mysql数据表
     */
    void updateMysqlTable(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName, @Param("tableComment") String tableComment, @Param("filedList") List<String> filedList);

    /**
     * 获取表结构
     */
    List<TableInfo> mysqlTableFieldInfo(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);

    /**
     * 备份表sql
     */
    Map<String,String> backupTableSql(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);

    //---------------------------------sqlServer------------------------------------------

    /**
     * 切换数据源
     */
//    void useSqlserverDatabase(String databaseName);

    /**
     * 查询数据库表是否存在
     */
    int sqlServerTableExist(String tableName);

    /**
     * 创建sqlserver数据库
     *
     * @param dataBaseName 创建的数据库名称
     * @return
     */
    int createSqlServerDataBase(String dataBaseName);

    /**
     * 创建sqlserver 数据表
     *
     * @param tableName       表明
     * @param filedList       表字段
     * @param descriptionList 表字段描述
     * @param tableComment    表描述
     */
    void createSqlServerTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList, @Param("descriptionList") List<String> descriptionList, @Param("tableComment") String tableComment);

    /**
     * 判断数据库是否存在
     */
    int existOrNot(@Param("dataBaseName") String dataBaseName);

    /**
     * 获取当前库中所有表信息
     */
    List<TableInfoVO> sqlServerTableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);

    /**
     * 查询表中是否有数据
     */
    int selectSqlServerDataCount(String tableName);

    /**
     * 删除当前库中表
     */
    void dropSqlserverTable(String tableName);

    /**
     * 修改sqlserver数据表
     */
    void updateSqlserverTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList, @Param("descriptionList") List<String> descriptionList, @Param("tableComment") String tableComment);

    /**
     * 查询表结构
     */
    List<TableInfo> sqlserverTableFieldInfo(@Param("tableName") String tableName);

    //---------------------------------DM------------------------------------------

    /**
     * 查询数据库表是否存在
     */
    int dmTableExist(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);

    /**
     * 查询数据库是否存在
     */
    int dmDataBaseExist(String databaseName);

    /**
     * 创建达梦数据库
     *
     * @param databaseName 创建数据库名称
     */
    int createDmDataBase(String databaseName);

    /**
     * 创建数据表
     */
    void createDmTable(@Param("databaseName") String databaseName, @Param("tableName") String tableName, @Param("filedList") List<String> filedList);

    /**
     * 添加表字段注释
     */
    void addTableDescription(String description);

    /**
     * 添加表描述
     */
    void addDmTableComment(@Param("databaseName") String databaseName, @Param("tableName") String tableName, @Param("tableComment") String tableComment);

    /**
     * 库中所有表信息
     */
    List<TableInfoVO> dmTableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);

    /**
     * 查询表行数
     */
    int selectDmDataCount(String tableName);

    /**
     * 删除数据表
     */
    void dropDmTable(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);

    /**
     * 查询数据库中表数量
     */
    int queryDmTableCount(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);

    /**
     * 查询表结构
     */
    List<TableInfo> dmTableFieldInfo(@Param("dataBaseName") String dataBaseName, @Param("tableName") String tableName);


    //---------------------------------oracle------------------------------------------

    /**
     * 创建新用户
     */
    void createOracleUser(@Param("username") String username, @Param("password") String password);

    /**
     * 授予全部权限
     */
    void assignAuthority(String username);

    /**
     * 判断当前用户下表是否存在
     */
    int oracleTableExist(String tableName);

    /**
     * 创建oracle数据表
     */
    void createOracleTable(@Param("tableName") String tableName, @Param("filedList") List<String> filedList);

//    void createOracleTable(@Param("username") String username,@Param("tableName") String tableName,@Param("filedList") List<String> filedList);


    /**
     * 添加注释
     */
    void addOracleTableDescription(String description);

    /**
     * 获取当前库中所有表信息
     */
    List<TableInfoVO> oracleTableInfoList(@Param("databaseName") String databaseName, @Param("map") Map<String, Object> map);


}
