feat:copy sql

This commit is contained in:
SwallowGG
2024-03-07 10:30:28 +08:00
parent 9fdc97a2d1
commit e4dae07b54
9 changed files with 146 additions and 12 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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
*

View File

@ -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) ;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -0,0 +1,5 @@
package ai.chat2db.spi.enums;
public enum DmlType {
INSERT, UPDATE, DELETE, SELECT
}

View File

@ -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();
}