package com.ruoyi.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.business.domain.Database;
import com.ruoyi.business.domain.vo.DatabaseVo;
import com.ruoyi.common.core.web.domain.AjaxResult;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 外部接入连接信息Service接口
 * 
 * @author ruoyi
 * @date 2024-01-10
 */
public interface IDatabaseService extends IService<Database> {

    /**
     * 查询外部接入连接信息列表
     * 
     * @param Database 外部接入连接信息
     * @return 外部接入连接信息集合
     */
    List<Database> selectDatabaseList(Database Database);

    List<Database> selectDatabaseDict(Database database);

    /**
     * 查询外部接入连接信息详情
     *
     * @param id 外部接入连接信息主键
     * @return 外部接入连接信息
     */
    Database selectDatabaseById(Long id);

    /**
     * 新增外部接入连接信息
     * 
     * @param database 外部接入连接信息
     * @return 结果
     */
    int insertDatabase(Database database);

    /**
     * 修改外部接入连接信息
     * 
     * @param database 外部接入连接信息
     * @return 结果
     */
    Boolean updateDatabase(Database database);

    /**
     * 批量删除外部接入连接信息
     * 
     * @param ids 需要删除的外部接入连接信息主键集合
     * @return 结果
     */
    int deleteDatabaseByIds(Long[] ids);

    /**
     * 删除外部接入连接信息信息
     * 
     * @param id 外部接入连接信息主键
     * @return 结果
     */
    int deleteDatabaseById(Long id);

    /**
     * 测试数据库连接
     *
     * @param DatabaseVo
     * @return
     */
    Boolean testConnection(DatabaseVo DatabaseVo) throws ClassNotFoundException, SQLException;

    /**
     * 编辑时测试数据库连接
     *
     * @param DatabaseVo
     * @return
     */
    Boolean testConnection_update(DatabaseVo DatabaseVo) throws ClassNotFoundException, SQLException ;

    /**
     * 获取数据源下的所有表、视图
     *
     * @param dataSourceId 数据源配置
     * @return 表名集合
     */
    AjaxResult getTables(String dataSourceId);

    Connection getConnection(Long id, String source) throws SQLException, ClassNotFoundException;

    /**
     * 获取表字段
     *
     * @param dbId 数据源配置id
     * @param tableName 表名
     * @return 字段集合
     */
    List<Map<String, String>> getTableFields(Long dbId, String tableName) throws SQLException, ClassNotFoundException;
}
