This commit is contained in:
jipengfei-jpf
2023-07-17 20:51:06 +08:00
parent de6fa3cb58
commit c81985e916
41 changed files with 294 additions and 795 deletions

View File

@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
public class ConsoleServiceImpl implements ConsoleService {
@Override
public ActionResult createConsole(ConsoleConnectParam param) {
Chat2DBContext.getDBManage().connectDatabase(param.getDatabaseName());
Chat2DBContext.getDBManage().connectDatabase(Chat2DBContext.getConnection(),param.getDatabaseName());
return ActionResult.isSuccess();
}

View File

@ -16,16 +16,14 @@ 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.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.config.DriverConfig;
import ai.chat2db.spi.model.DataSourceConnect;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.KeyValue;
import ai.chat2db.spi.sql.Chat2DBContext;
import ai.chat2db.spi.sql.SQLExecutor;
import ai.chat2db.spi.util.JdbcUtils;
@ -137,7 +135,7 @@ public class DataSourceServiceImpl implements DataSourceService {
public ListResult<Database> connect(Long id) {
DatabaseQueryAllParam queryAllParam = new DatabaseQueryAllParam();
queryAllParam.setDataSourceId(id);
List<Database> databases = Chat2DBContext.getMetaData().databases();
List<Database> databases = Chat2DBContext.getMetaData().databases(Chat2DBContext.getConnection());
return ListResult.of(databases);
}

View File

@ -1,5 +1,6 @@
package ai.chat2db.server.domain.core.impl;
import java.sql.Connection;
import java.util.List;
import java.util.concurrent.CountDownLatch;
@ -18,7 +19,6 @@ import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.MetaSchema;
import ai.chat2db.spi.model.Schema;
import ai.chat2db.spi.sql.Chat2DBContext;
import ai.chat2db.spi.sql.ConnectInfo;
import cn.hutool.core.thread.ThreadUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -37,41 +37,44 @@ public class DatabaseServiceImpl implements DatabaseService {
@Override
public ListResult<Database> queryAll(DatabaseQueryAllParam param) {
return ListResult.of(Chat2DBContext.getMetaData().databases());
return ListResult.of(Chat2DBContext.getMetaData().databases(Chat2DBContext.getConnection()));
}
@Override
public ListResult<Schema> querySchema(SchemaQueryParam param) {
return ListResult.of(Chat2DBContext.getMetaData().schemas(param.getDataBaseName()));
return ListResult.of(
Chat2DBContext.getMetaData().schemas(Chat2DBContext.getConnection(), param.getDataBaseName()));
}
@Override
public DataResult<MetaSchema> queryDatabaseSchema(MetaDataQueryParam param) {
MetaSchema metaSchema = new MetaSchema();
MetaData metaData = Chat2DBContext.getMetaData();
ConnectInfo connectInfo = Chat2DBContext.getConnectInfo();
Connection connection = Chat2DBContext.getConnection();
MetaSchema ms = CacheManage.get(getDataSourceKey(param.getDataSourceId()), MetaSchema.class,
(key) -> param.isRefresh(), (key) -> {
List<Database> databases = metaData.databases();
List<Database> databases = metaData.databases(Chat2DBContext.getConnection());
if (!CollectionUtils.isEmpty(databases)) {
// CountDownLatch countDownLatch = ThreadUtil.newCountDownLatch(databases.size());
CountDownLatch countDownLatch = ThreadUtil.newCountDownLatch(databases.size());
for (Database database : databases) {
//ThreadUtil.execute(() -> {
try {
// Chat2DBContext.putContext(connectInfo);
database.setSchemas(metaData.schemas(database.getName()));
// countDownLatch.countDown();
} catch (Exception e) {
log.error("queryDatabaseSchema error", e);
} finally {
//Chat2DBContext.removeContext();
}
// });
ThreadUtil.execute(() -> {
try {
database.setSchemas(metaData.schemas(connection, database.getName()));
countDownLatch.countDown();
} catch (Exception e) {
log.error("queryDatabaseSchema error", e);
}
});
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
log.error("queryDatabaseSchema error", e);
}
metaSchema.setDatabases(databases);
} else {
List<Schema> schemas = metaData.schemas(null);
List<Schema> schemas = metaData.schemas(Chat2DBContext.getConnection(), null);
metaSchema.setSchemas(schemas);
}
return metaSchema;
@ -82,39 +85,39 @@ public class DatabaseServiceImpl implements DatabaseService {
@Override
public ActionResult deleteDatabase(DatabaseOperationParam param) {
Chat2DBContext.getDBManage().dropDatabase(param.getDatabaseName());
Chat2DBContext.getDBManage().dropDatabase(Chat2DBContext.getConnection(),param.getDatabaseName());
return ActionResult.isSuccess();
}
@Override
public ActionResult createDatabase(DatabaseOperationParam param) {
Chat2DBContext.getDBManage().createDatabase(param.getDatabaseName());
Chat2DBContext.getDBManage().createDatabase(Chat2DBContext.getConnection(),param.getDatabaseName());
return ActionResult.isSuccess();
}
@Override
public ActionResult modifyDatabase(DatabaseOperationParam param) {
Chat2DBContext.getDBManage().modifyDatabase(param.getDatabaseName(), param.getNewDatabaseName());
Chat2DBContext.getDBManage().modifyDatabase(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getNewDatabaseName());
return ActionResult.isSuccess();
}
@Override
public ActionResult deleteSchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().dropSchema(param.getDatabaseName(), param.getSchemaName());
Chat2DBContext.getDBManage().dropSchema(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName());
return ActionResult.isSuccess();
}
@Override
public ActionResult createSchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().createSchema(param.getDatabaseName(), param.getSchemaName());
Chat2DBContext.getDBManage().createSchema(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName());
return ActionResult.isSuccess();
}
@Override
public ActionResult modifySchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().modifySchema(param.getDatabaseName(), param.getSchemaName(),
Chat2DBContext.getDBManage().modifySchema(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(),
param.getNewSchemaName());
return ActionResult.isSuccess();
}
}
}

View File

@ -155,7 +155,7 @@ public class DlTemplateServiceImpl implements DlTemplateService {
private ExecuteResult execute(String sql) {
ExecuteResult executeResult;
try {
executeResult = SQLExecutor.getInstance().execute(sql);
executeResult = SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(),sql);
} catch (SQLException e) {
log.warn("执行sql:{}异常", sql, e);
executeResult = ExecuteResult.builder()

View File

@ -10,6 +10,6 @@ import org.springframework.stereotype.Service;
public class FunctionServiceImpl implements FunctionService {
@Override
public ListResult<Function> functions(String databaseName, String schemaName) {
return ListResult.of(Chat2DBContext.getMetaData().functions(databaseName, schemaName));
return ListResult.of(Chat2DBContext.getMetaData().functions(Chat2DBContext.getConnection(),databaseName, schemaName));
}
}

View File

@ -11,6 +11,6 @@ public class ProcedureServiceImpl implements ProcedureService {
@Override
public ListResult<Procedure> procedures(String databaseName, String schemaName) {
return ListResult.of(Chat2DBContext.getMetaData().procedures(databaseName, schemaName));
return ListResult.of(Chat2DBContext.getMetaData().procedures(Chat2DBContext.getConnection(),databaseName, schemaName));
}
}

View File

@ -53,14 +53,14 @@ public class TableServiceImpl implements TableService {
@Override
public DataResult<String> showCreateTable(ShowCreateTableParam param) {
MetaData metaSchema = Chat2DBContext.getMetaData();
String ddl = metaSchema.tableDDL(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
String ddl = metaSchema.tableDDL(Chat2DBContext.getConnection(), param.getDatabaseName(), param.getSchemaName(), param.getTableName());
return DataResult.of(ddl);
}
@Override
public ActionResult drop(DropParam param) {
DBManage metaSchema = Chat2DBContext.getDBManage();
metaSchema.dropTable(param.getDatabaseName(), param.getTableSchema(), param.getTableName());
metaSchema.dropTable(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getTableSchema(), param.getTableName());
return ActionResult.isSuccess();
}
@ -79,13 +79,13 @@ public class TableServiceImpl implements TableService {
@Override
public DataResult<Table> query(TableQueryParam param, TableSelector selector) {
MetaData metaSchema = Chat2DBContext.getMetaData();
List<Table> tables = metaSchema.tables(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
List<Table> tables = metaSchema.tables(Chat2DBContext.getConnection(),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(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
table.setColumnList(
metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
metaSchema.columns(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
return DataResult.of(table);
}
return DataResult.of(null);
@ -104,7 +104,7 @@ public class TableServiceImpl implements TableService {
List<Table> list = CacheManage.getList(tableKey, Table.class,
(key) -> param.isRefresh(), (key) ->
metaSchema.tables(param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
metaSchema.tables(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(), param.getTableName()));
list = pinTable(list, param);
if (CollectionUtils.isEmpty(list)) {
@ -144,13 +144,13 @@ public class TableServiceImpl implements TableService {
@Override
public List<TableColumn> queryColumns(TableQueryParam param) {
MetaData metaSchema = Chat2DBContext.getMetaData();
return metaSchema.columns(param.getDatabaseName(), param.getSchemaName(), param.getTableName(), null);
return metaSchema.columns(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(), param.getTableName(), null);
}
@Override
public List<TableIndex> queryIndexes(TableQueryParam param) {
MetaData metaSchema = Chat2DBContext.getMetaData();
return metaSchema.indexes(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
return metaSchema.indexes(Chat2DBContext.getConnection(),param.getDatabaseName(), param.getSchemaName(), param.getTableName());
}
}

View File

@ -10,6 +10,6 @@ import org.springframework.stereotype.Service;
public class TriggerServiceImpl implements TriggerService {
@Override
public ListResult<Trigger> triggers(String databaseName, String schemaName) {
return ListResult.of(Chat2DBContext.getMetaData().triggers(databaseName, schemaName));
return ListResult.of(Chat2DBContext.getMetaData().triggers(Chat2DBContext.getConnection(),databaseName, schemaName));
}
}

View File

@ -11,6 +11,6 @@ public class ViewServiceImpl implements ViewService {
@Override
public ListResult<Table> views(String databaseName, String schemaName) {
return ListResult.of(Chat2DBContext.getMetaData().views(databaseName, schemaName));
return ListResult.of(Chat2DBContext.getMetaData().views(Chat2DBContext.getConnection(),databaseName, schemaName));
}
}