mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-08-06 01:36:46 +08:00
Support for custom drivers
This commit is contained in:
@ -30,9 +30,18 @@
|
||||
<groupId>ai.chat2db</groupId>
|
||||
<artifactId>chat2db-server-tools-common</artifactId>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>ai.chat2db</groupId>-->
|
||||
<!-- <artifactId>chat2db-server-domain-support</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>ai.chat2db</groupId>
|
||||
<artifactId>chat2db-server-domain-support</artifactId>
|
||||
<artifactId>chat2db-spi</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ai.chat2db</groupId>
|
||||
<artifactId>chat2b-mysql</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -148,12 +148,12 @@ public abstract class DataSourceConverter {
|
||||
|
||||
@Mapping(target = "password", expression = "java(decryptString(dataSourceDO))")
|
||||
@Mapping(target = "ssh",
|
||||
expression = "java(com.alibaba.fastjson2.JSON.parseObject(dataSourceDO.getSsh(),ai.chat2db.server"
|
||||
+ ".domain.support.model.SSHInfo.class))")
|
||||
expression = "java(com.alibaba.fastjson2.JSON.parseObject(dataSourceDO.getSsh(),ai.chat2db.spi"
|
||||
+ ".model.SSHInfo.class))")
|
||||
@Mapping(target = "ssl",
|
||||
expression =
|
||||
"java(com.alibaba.fastjson2.JSON.parseObject(dataSourceDO.getSsl(),ai.chat2db.server.domain"
|
||||
+ ".support.model.SSLInfo"
|
||||
"java(com.alibaba.fastjson2.JSON.parseObject(dataSourceDO.getSsl(),ai.chat2db.spi"
|
||||
+ ".model.SSLInfo"
|
||||
+ ".class))")
|
||||
@Mapping(target = "extendInfo",
|
||||
expression = "java(com.alibaba.fastjson2.JSON.parseArray(dataSourceDO.getExtendInfo(),KeyValue.class))")
|
||||
|
@ -3,7 +3,8 @@ package ai.chat2db.server.domain.core.impl;
|
||||
import ai.chat2db.server.domain.api.param.ConsoleConnectParam;
|
||||
import ai.chat2db.server.domain.api.service.ConsoleService;
|
||||
import ai.chat2db.server.domain.api.param.ConsoleCloseParam;
|
||||
import ai.chat2db.server.domain.support.sql.SQLExecutor;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.sql.SQLExecutor;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -17,7 +18,7 @@ import org.springframework.stereotype.Service;
|
||||
public class ConsoleServiceImpl implements ConsoleService {
|
||||
@Override
|
||||
public ActionResult createConsole(ConsoleConnectParam param) {
|
||||
SQLExecutor.getInstance().connectDatabase(param.getDatabaseName());
|
||||
Chat2DBContext.getDBManage().connectDatabase(param.getDatabaseName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
|
@ -16,19 +16,19 @@ import ai.chat2db.server.domain.api.service.DataSourceService;
|
||||
import ai.chat2db.server.domain.core.converter.DataSourceConverter;
|
||||
import ai.chat2db.server.domain.repository.entity.DataSourceDO;
|
||||
import ai.chat2db.server.domain.repository.mapper.DataSourceMapper;
|
||||
import ai.chat2db.server.domain.support.enums.DbTypeEnum;
|
||||
import ai.chat2db.server.domain.support.model.DataSourceConnect;
|
||||
import ai.chat2db.server.domain.support.model.Database;
|
||||
import ai.chat2db.server.domain.support.model.KeyValue;
|
||||
import ai.chat2db.server.domain.support.sql.DbhubContext;
|
||||
import ai.chat2db.server.domain.support.sql.SQLExecutor;
|
||||
import ai.chat2db.server.domain.support.util.JdbcUtils;
|
||||
import ai.chat2db.spi.config.DriverConfig;
|
||||
import ai.chat2db.spi.model.DataSourceConnect;
|
||||
import ai.chat2db.spi.model.Database;
|
||||
import ai.chat2db.spi.model.KeyValue;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.sql.SQLExecutor;
|
||||
import ai.chat2db.spi.util.JdbcUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -117,10 +117,15 @@ public class DataSourceServiceImpl implements DataSourceService {
|
||||
public ActionResult preConnect(DataSourcePreConnectParam param) {
|
||||
DataSourceTestParam testParam
|
||||
= dataSourceConverter.param2param(param);
|
||||
|
||||
DriverConfig driverConfig = new DriverConfig();
|
||||
driverConfig.setJdbcDriver(param.getDriver());
|
||||
driverConfig.setJdbcDriverClass(param.getDriver());//todo
|
||||
|
||||
DataSourceConnect dataSourceConnect = JdbcUtils.testConnect(testParam.getUrl(), testParam.getHost(),
|
||||
testParam.getPort(),
|
||||
testParam.getUsername(), testParam.getPassword(), DbTypeEnum.getByName(testParam.getDbType()),
|
||||
param.getJdbc(), param.getSsh(), KeyValue.toMap(param.getExtendInfo()));
|
||||
testParam.getUsername(), testParam.getPassword(),testParam.getDbType(),
|
||||
driverConfig, param.getSsh(), KeyValue.toMap(param.getExtendInfo()));
|
||||
if (BooleanUtils.isNotTrue(dataSourceConnect.getSuccess())) {
|
||||
return ActionResult.fail(dataSourceConnect.getMessage(), dataSourceConnect.getDescription());
|
||||
}
|
||||
@ -131,7 +136,7 @@ public class DataSourceServiceImpl implements DataSourceService {
|
||||
public ListResult<Database> connect(Long id) {
|
||||
DatabaseQueryAllParam queryAllParam = new DatabaseQueryAllParam();
|
||||
queryAllParam.setDataSourceId(id);
|
||||
List<String> databases = DbhubContext.getMetaSchema().databases();
|
||||
List<String> databases = Chat2DBContext.getMetaData().databases();
|
||||
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Database.builder().name(name).build()));
|
||||
}
|
||||
|
||||
|
@ -5,15 +5,15 @@ import java.util.List;
|
||||
import ai.chat2db.server.domain.api.param.DatabaseOperationParam;
|
||||
import ai.chat2db.server.domain.api.param.SchemaOperationParam;
|
||||
import ai.chat2db.server.domain.api.service.DatabaseService;
|
||||
import ai.chat2db.server.domain.support.model.Database;
|
||||
import ai.chat2db.server.domain.support.model.Schema;
|
||||
import ai.chat2db.spi.model.Database;
|
||||
import ai.chat2db.spi.model.Schema;
|
||||
import ai.chat2db.server.domain.api.param.DatabaseQueryAllParam;
|
||||
import ai.chat2db.server.domain.api.param.SchemaQueryParam;
|
||||
import ai.chat2db.server.domain.support.sql.DbhubContext;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
@ -26,49 +26,49 @@ public class DatabaseServiceImpl implements DatabaseService {
|
||||
|
||||
@Override
|
||||
public ListResult<Database> queryAll(DatabaseQueryAllParam param) {
|
||||
List<String> databases = DbhubContext.getMetaSchema().databases();
|
||||
List<String> databases = Chat2DBContext.getMetaData().databases();
|
||||
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Database.builder().name(name).build()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListResult<Schema> querySchema(SchemaQueryParam param) {
|
||||
List<String> databases = DbhubContext.getMetaSchema().schemas(param.getDataBaseName());
|
||||
List<String> databases = Chat2DBContext.getMetaData().schemas(param.getDataBaseName());
|
||||
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Schema.builder().name(name).build()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult deleteDatabase(DatabaseOperationParam param) {
|
||||
DbhubContext.getMetaSchema().dropDatabase(param.getDatabaseName());
|
||||
Chat2DBContext.getDBManage().dropDatabase(param.getDatabaseName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult createDatabase(DatabaseOperationParam param) {
|
||||
DbhubContext.getMetaSchema().createDatabase(param.getDatabaseName());
|
||||
Chat2DBContext.getDBManage().createDatabase(param.getDatabaseName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult modifyDatabase(DatabaseOperationParam param) {
|
||||
DbhubContext.getMetaSchema().modifyDatabase(param.getDatabaseName(),param.getNewDatabaseName());
|
||||
Chat2DBContext.getDBManage().modifyDatabase(param.getDatabaseName(),param.getNewDatabaseName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult deleteSchema(SchemaOperationParam param) {
|
||||
DbhubContext.getMetaSchema().dropSchema(param.getDatabaseName(),param.getSchemaName());
|
||||
Chat2DBContext.getDBManage().dropSchema(param.getDatabaseName(),param.getSchemaName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult createSchema(SchemaOperationParam param) {
|
||||
DbhubContext.getMetaSchema().createSchema(param.getDatabaseName(),param.getSchemaName());
|
||||
Chat2DBContext.getDBManage().createSchema(param.getDatabaseName(),param.getSchemaName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult modifySchema(SchemaOperationParam param) {
|
||||
DbhubContext.getMetaSchema().modifySchema(param.getDatabaseName(),param.getSchemaName(),
|
||||
Chat2DBContext.getDBManage().modifySchema(param.getDatabaseName(),param.getSchemaName(),
|
||||
param.getNewSchemaName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
@ -4,17 +4,17 @@ import ai.chat2db.server.domain.api.param.DlCountParam;
|
||||
import ai.chat2db.server.domain.api.param.DlExecuteParam;
|
||||
import ai.chat2db.server.domain.api.param.SqlAnalyseParam;
|
||||
import ai.chat2db.server.domain.api.service.DlTemplateService;
|
||||
import ai.chat2db.server.domain.support.enums.SqlTypeEnum;
|
||||
import ai.chat2db.server.domain.support.model.ExecuteResult;
|
||||
import ai.chat2db.server.domain.support.sql.DbhubContext;
|
||||
import ai.chat2db.server.domain.support.sql.SQLExecutor;
|
||||
import ai.chat2db.server.domain.support.util.JdbcUtils;
|
||||
import ai.chat2db.server.tools.base.constant.EasyToolsConstant;
|
||||
import ai.chat2db.server.tools.base.excption.BusinessException;
|
||||
import ai.chat2db.server.tools.base.excption.DatasourceErrorEnum;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
|
||||
import ai.chat2db.spi.enums.SqlTypeEnum;
|
||||
import ai.chat2db.spi.model.ExecuteResult;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.sql.SQLExecutor;
|
||||
import ai.chat2db.spi.util.JdbcUtils;
|
||||
import com.alibaba.druid.DbType;
|
||||
import com.alibaba.druid.sql.PagerUtils;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
@ -52,7 +52,7 @@ public class DlTemplateServiceImpl implements DlTemplateService {
|
||||
sqlAnalyseParam.setDataSourceId(param.getDataSourceId());
|
||||
sqlAnalyseParam.setSql(param.getSql());
|
||||
DbType dbType =
|
||||
JdbcUtils.parse2DruidDbType(DbhubContext.getConnectInfo().getDbType());
|
||||
JdbcUtils.parse2DruidDbType(Chat2DBContext.getConnectInfo().getDbType());
|
||||
List<String> sqlList = SQLParserUtils.splitAndRemoveComment(param.getSql(), dbType);
|
||||
if (CollectionUtils.isEmpty(sqlList)) {
|
||||
throw new BusinessException(DatasourceErrorEnum.SQL_ANALYSIS_ERROR);
|
||||
@ -112,7 +112,7 @@ public class DlTemplateServiceImpl implements DlTemplateService {
|
||||
return DataResult.of(0L);
|
||||
}
|
||||
DbType dbType =
|
||||
JdbcUtils.parse2DruidDbType(DbhubContext.getConnectInfo().getDbType());
|
||||
JdbcUtils.parse2DruidDbType(Chat2DBContext.getConnectInfo().getDbType());
|
||||
String sql = param.getSql();
|
||||
// 解析sql分页
|
||||
SQLStatement sqlStatement = SQLUtils.parseSingleStatement(sql, dbType);
|
||||
|
@ -3,25 +3,25 @@ package ai.chat2db.server.domain.core.impl;
|
||||
import java.util.List;
|
||||
|
||||
import ai.chat2db.server.domain.api.service.TableService;
|
||||
import ai.chat2db.server.domain.support.dialect.MetaSchema;
|
||||
import ai.chat2db.server.domain.support.enums.DbTypeEnum;
|
||||
import ai.chat2db.server.domain.support.model.Sql;
|
||||
import ai.chat2db.server.domain.support.model.Table;
|
||||
import ai.chat2db.server.domain.support.model.TableColumn;
|
||||
import ai.chat2db.server.domain.support.model.TableIndex;
|
||||
import ai.chat2db.spi.DBManage;
|
||||
import ai.chat2db.spi.MetaData;
|
||||
import ai.chat2db.spi.model.Sql;
|
||||
import ai.chat2db.spi.model.Table;
|
||||
import ai.chat2db.spi.model.TableColumn;
|
||||
import ai.chat2db.spi.model.TableIndex;
|
||||
import ai.chat2db.server.domain.api.param.DropParam;
|
||||
import ai.chat2db.server.domain.api.param.ShowCreateTableParam;
|
||||
import ai.chat2db.server.domain.api.param.TablePageQueryParam;
|
||||
import ai.chat2db.server.domain.api.param.TableQueryParam;
|
||||
import ai.chat2db.server.domain.api.param.TableSelector;
|
||||
import ai.chat2db.server.domain.support.sql.DbhubContext;
|
||||
import ai.chat2db.server.domain.support.util.SqlUtils;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
|
||||
import ai.chat2db.server.tools.common.util.EasyEnumUtils;
|
||||
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.util.SqlUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -35,40 +35,40 @@ public class TableServiceImpl implements TableService {
|
||||
|
||||
@Override
|
||||
public DataResult<String> showCreateTable(ShowCreateTableParam param) {
|
||||
MetaSchema metaSchema = DbhubContext.getConnectInfo().getDbType().metaSchema();
|
||||
MetaData metaSchema = Chat2DBContext.getMetaData();
|
||||
String ddl = metaSchema.tableDDL(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
|
||||
return DataResult.of(ddl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult drop(DropParam param) {
|
||||
MetaSchema metaSchema = DbhubContext.getConnectInfo().getDbType().metaSchema();
|
||||
DBManage metaSchema = Chat2DBContext.getDBManage();
|
||||
metaSchema.dropTable(param.getDatabaseName(), param.getTableSchema(), param.getTableName());
|
||||
return ActionResult.isSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult<String> createTableExample(String dbType) {
|
||||
DbTypeEnum dbTypeEnum = EasyEnumUtils.getEnum(DbTypeEnum.class, dbType);
|
||||
return DataResult.of(dbTypeEnum.example().getCreateTable());
|
||||
String sql = Chat2DBContext.getDBConfig().getSimpleCreateTable();
|
||||
return DataResult.of(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult<String> alterTableExample(String dbType) {
|
||||
DbTypeEnum dbTypeEnum = EasyEnumUtils.getEnum(DbTypeEnum.class, dbType);
|
||||
return DataResult.of(dbTypeEnum.example().getAlterTable());
|
||||
String sql = Chat2DBContext.getDBConfig().getSimpleAlterTable();
|
||||
return DataResult.of(sql);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult<Table> query(TableQueryParam param, TableSelector selector) {
|
||||
MetaSchema metaSchema = DbhubContext.getConnectInfo().getDbType().metaSchema();
|
||||
MetaData metaSchema = Chat2DBContext.getMetaData();
|
||||
List<Table> tables = metaSchema.tables(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
|
||||
if (!CollectionUtils.isEmpty(tables)) {
|
||||
Table table = tables.get(0);
|
||||
table.setIndexList(
|
||||
metaSchema.indexes(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
|
||||
metaSchema.indexes(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
|
||||
table.setColumnList(
|
||||
metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
|
||||
metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
|
||||
return DataResult.of(table);
|
||||
}
|
||||
return DataResult.of(null);
|
||||
@ -81,7 +81,7 @@ public class TableServiceImpl implements TableService {
|
||||
|
||||
@Override
|
||||
public PageResult<Table> pageQuery(TablePageQueryParam param, TableSelector selector) {
|
||||
MetaSchema metaSchema = DbhubContext.getMetaSchema();
|
||||
MetaData metaSchema = Chat2DBContext.getMetaData();
|
||||
List<Table> list = metaSchema.tables(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return PageResult.of(list, 0L, param);
|
||||
@ -91,13 +91,13 @@ public class TableServiceImpl implements TableService {
|
||||
|
||||
@Override
|
||||
public List<TableColumn> queryColumns(TableQueryParam param) {
|
||||
MetaSchema metaSchema = DbhubContext.getMetaSchema();
|
||||
return metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName(),null);
|
||||
MetaData metaSchema = Chat2DBContext.getMetaData();
|
||||
return metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TableIndex> queryIndexes(TableQueryParam param) {
|
||||
MetaSchema metaSchema = DbhubContext.getMetaSchema();
|
||||
MetaData metaSchema = Chat2DBContext.getMetaData();
|
||||
return metaSchema.indexes(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user