mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-30 19:22:58 +08:00
feat:copy sql
This commit is contained in:
@ -0,0 +1,15 @@
|
||||
package ai.chat2db.server.domain.api.param;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DmlSqlCopyParam extends TableQueryParam{
|
||||
|
||||
private String type;
|
||||
}
|
@ -129,4 +129,12 @@ public interface TableService {
|
||||
* @return
|
||||
*/
|
||||
DataResult<Boolean> checkTableVector(TableVectorParam param);
|
||||
|
||||
|
||||
/**
|
||||
* Get dml template sql
|
||||
* @param param table query param
|
||||
* @return sql
|
||||
*/
|
||||
DataResult<String> copyDmlSql(DmlSqlCopyParam param);
|
||||
}
|
||||
|
@ -69,7 +69,6 @@ public class TableServiceImpl implements TableService {
|
||||
private TableConverter tableConverter;
|
||||
|
||||
|
||||
|
||||
private TableCacheVersionMapper getVersionMapper() {
|
||||
return Dbutils.getMapper(TableCacheVersionMapper.class);
|
||||
}
|
||||
@ -251,7 +250,7 @@ public class TableServiceImpl implements TableService {
|
||||
keyIndex.setSchemaName(newTable.getSchemaName());
|
||||
keyIndex.setDatabaseName(newTable.getDatabaseName());
|
||||
keyIndex.setEditStatus(status);
|
||||
if(!EditStatus.ADD.name().equals(status)){
|
||||
if (!EditStatus.ADD.name().equals(status)) {
|
||||
keyIndex.setOldName(keyIndex.getName());
|
||||
}
|
||||
indexes.add(keyIndex);
|
||||
@ -321,7 +320,7 @@ public class TableServiceImpl implements TableService {
|
||||
long total = 0;
|
||||
long version = 0L;
|
||||
if (param.isRefresh() || versionDO == null) {
|
||||
total = addCache(param,versionDO);
|
||||
total = addCache(param, versionDO);
|
||||
} else {
|
||||
if ("2".equals(versionDO.getStatus())) {
|
||||
version = versionDO.getVersion() - 1;
|
||||
@ -350,7 +349,7 @@ public class TableServiceImpl implements TableService {
|
||||
return PageResult.of(tables, total, param);
|
||||
}
|
||||
|
||||
private long addCache(TablePageQueryParam param,TableCacheVersionDO versionDO){
|
||||
private long addCache(TablePageQueryParam param, TableCacheVersionDO versionDO) {
|
||||
LambdaQueryWrapper<TableCacheVersionDO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
String key = getTableKey(param.getDataSourceId(), param.getDatabaseName(), param.getSchemaName());
|
||||
queryWrapper.eq(TableCacheVersionDO::getKey, key);
|
||||
@ -388,7 +387,7 @@ public class TableServiceImpl implements TableService {
|
||||
queryWrapper.eq(TableCacheVersionDO::getKey, key);
|
||||
TableCacheVersionDO versionDO = getVersionMapper().selectOne(queryWrapper);
|
||||
if (versionDO == null) {
|
||||
addCache(param,versionDO);
|
||||
addCache(param, versionDO);
|
||||
versionDO = getVersionMapper().selectOne(queryWrapper);
|
||||
}
|
||||
long version = "2".equals(versionDO.getStatus()) ? versionDO.getVersion() - 1 : versionDO.getVersion();
|
||||
@ -598,4 +597,13 @@ public class TableServiceImpl implements TableService {
|
||||
}
|
||||
return DataResult.of(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataResult<String> copyDmlSql(DmlSqlCopyParam param) {
|
||||
List<TableColumn> columns = queryColumns(param);
|
||||
SqlBuilder sqlBuilder = Chat2DBContext.getSqlBuilder();
|
||||
Table table = Table.builder().name(param.getTableName()).columnList(columns).build();
|
||||
String sql = sqlBuilder.getTableDmlSql(table, param.getType());
|
||||
return DataResult.of(sql);
|
||||
}
|
||||
}
|
||||
|
@ -112,6 +112,12 @@ public class TableController extends EmbeddingController {
|
||||
return ListResult.of(tableVOS);
|
||||
}
|
||||
|
||||
@GetMapping("/copy_dml_sql")
|
||||
public DataResult<String> copyDmlSql(@Valid DmlSqlCopyRequest request) {
|
||||
DmlSqlCopyParam queryParam = rdbWebConverter.dmlRequest2param(request);
|
||||
return tableService.copyDmlSql(queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query the table index under the current DB
|
||||
*
|
||||
|
@ -254,4 +254,6 @@ public abstract class RdbWebConverter {
|
||||
public abstract EsTableSchemaRequest req2req(TableBriefQueryRequest request);
|
||||
|
||||
public abstract TablePageQueryParam schemaReq2page(EsTableSchemaRequest request);
|
||||
|
||||
public abstract DmlSqlCopyParam dmlRequest2param(DmlSqlCopyRequest request) ;
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package ai.chat2db.server.web.api.controller.rdb.request;
|
||||
|
||||
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DmlSqlCopyRequest extends DataSourceBaseRequest {
|
||||
|
||||
@NotNull
|
||||
private String tableName;
|
||||
|
||||
private String type;
|
||||
}
|
@ -81,4 +81,11 @@ public interface SqlBuilder {
|
||||
*/
|
||||
String generateSqlBasedOnResults(String tableName, List<Header> headerList, List<ResultOperation> operations);
|
||||
|
||||
/**
|
||||
* DML SQL
|
||||
* @param table
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
String getTableDmlSql(Table table,String type);
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
package ai.chat2db.spi.enums;
|
||||
|
||||
public enum DmlType {
|
||||
INSERT, UPDATE, DELETE, SELECT
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package ai.chat2db.spi.jdbc;
|
||||
|
||||
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||
import ai.chat2db.spi.MetaData;
|
||||
import ai.chat2db.spi.SqlBuilder;
|
||||
import ai.chat2db.spi.enums.DmlType;
|
||||
import ai.chat2db.spi.model.*;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.util.SqlUtils;
|
||||
@ -101,13 +101,13 @@ public class DefaultSqlBuilder implements SqlBuilder {
|
||||
List<String> odlRow = operation.getOldDataList();
|
||||
String sql = "";
|
||||
if ("UPDATE".equalsIgnoreCase(operation.getType())) {
|
||||
sql = getUpdateSql(tableName,headerList, row, odlRow, metaSchema, keyColumns, false);
|
||||
sql = getUpdateSql(tableName, headerList, row, odlRow, metaSchema, keyColumns, false);
|
||||
} else if ("CREATE".equalsIgnoreCase(operation.getType())) {
|
||||
sql = getInsertSql(tableName,headerList, row, metaSchema);
|
||||
sql = getInsertSql(tableName, headerList, row, metaSchema);
|
||||
} else if ("DELETE".equalsIgnoreCase(operation.getType())) {
|
||||
sql = getDeleteSql(tableName,headerList, odlRow, metaSchema, keyColumns);
|
||||
sql = getDeleteSql(tableName, headerList, odlRow, metaSchema, keyColumns);
|
||||
} else if ("UPDATE_COPY".equalsIgnoreCase(operation.getType())) {
|
||||
sql = getUpdateSql(tableName,headerList, row, row, metaSchema, keyColumns, true);
|
||||
sql = getUpdateSql(tableName, headerList, row, row, metaSchema, keyColumns, true);
|
||||
}
|
||||
|
||||
stringBuilder.append(sql + ";\n");
|
||||
@ -115,6 +115,76 @@ public class DefaultSqlBuilder implements SqlBuilder {
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTableDmlSql(Table table, String type) {
|
||||
if (table == null || CollectionUtils.isEmpty(table.getColumnList()) || StringUtils.isBlank(type)) {
|
||||
return "";
|
||||
}
|
||||
if(DmlType.INSERT.name().equalsIgnoreCase(type)) {
|
||||
return getInsertSql(table.getName(), table.getColumnList());
|
||||
} else if(DmlType.UPDATE.name().equalsIgnoreCase(type)) {
|
||||
return getUpdateSql(table.getName(), table.getColumnList());
|
||||
} else if(DmlType.DELETE.name().equalsIgnoreCase(type)) {
|
||||
return getDeleteSql(table.getName(), table.getColumnList());
|
||||
}else if(DmlType.SELECT.name().equalsIgnoreCase(type)) {
|
||||
return getSelectSql(table.getName(), table.getColumnList());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private String getSelectSql(String name, List<TableColumn> columnList) {
|
||||
StringBuilder script = new StringBuilder();
|
||||
script.append("SELECT ");
|
||||
for (TableColumn column : columnList) {
|
||||
script.append(column.getName())
|
||||
.append(",");
|
||||
}
|
||||
script.deleteCharAt(script.length() - 1);
|
||||
script.append(" FROM where").append(name);
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
private String getDeleteSql(String name, List<TableColumn> columnList) {
|
||||
StringBuilder script = new StringBuilder();
|
||||
script.append("DELETE FROM ").append(name)
|
||||
.append(" where ");
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
private String getUpdateSql(String name, List<TableColumn> columnList) {
|
||||
StringBuilder script = new StringBuilder();
|
||||
script.append("UPDATE ").append(name)
|
||||
.append(" set ");
|
||||
for (TableColumn column : columnList) {
|
||||
script.append(column.getName())
|
||||
.append(" = ")
|
||||
.append(" ")
|
||||
.append(",");
|
||||
}
|
||||
script.deleteCharAt(script.length() - 1);
|
||||
script.append(" where ");
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
private String getInsertSql(String name, List<TableColumn> columnList) {
|
||||
StringBuilder script = new StringBuilder();
|
||||
script.append("INSERT INTO ").append(name)
|
||||
.append(" (");
|
||||
for (TableColumn column : columnList) {
|
||||
script.append(column.getName())
|
||||
.append(",");
|
||||
}
|
||||
script.deleteCharAt(script.length() - 1);
|
||||
script.append(") VALUES (");
|
||||
for (TableColumn column : columnList) {
|
||||
script.append(" ")
|
||||
.append(",");
|
||||
}
|
||||
script.deleteCharAt(script.length() - 1);
|
||||
script.append(")");
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
private List<String> getPrimaryColumns(List<Header> headerList) {
|
||||
if (CollectionUtils.isEmpty(headerList)) {
|
||||
return Lists.newArrayList();
|
||||
@ -132,7 +202,6 @@ public class DefaultSqlBuilder implements SqlBuilder {
|
||||
List<String> keyColumns) {
|
||||
StringBuilder script = new StringBuilder();
|
||||
script.append("DELETE FROM ").append(tableName).append("");
|
||||
|
||||
script.append(buildWhere(headerList, row, metaSchema, keyColumns));
|
||||
return script.toString();
|
||||
}
|
||||
@ -178,7 +247,7 @@ public class DefaultSqlBuilder implements SqlBuilder {
|
||||
return script.toString();
|
||||
}
|
||||
|
||||
private String getInsertSql(String tableName, List<Header> headerList, List<String> row, MetaData metaSchema) {
|
||||
private String getInsertSql(String tableName, List<Header> headerList, List<String> row, MetaData metaSchema) {
|
||||
if (CollectionUtils.isEmpty(row) || ObjectUtils.allNull(row.toArray())) {
|
||||
return "";
|
||||
}
|
||||
|
Reference in New Issue
Block a user