mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-31 11:42:41 +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);
|
||||
}
|
||||
@ -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;
|
||||
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user