mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-09-19 23:33:34 +08:00
fix columnType error
This commit is contained in:
@ -7,6 +7,8 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import ai.chat2db.spi.SqlBuilder;
|
||||
import ai.chat2db.spi.ValueProcessor;
|
||||
import com.alibaba.druid.DbType;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.SQLUtils.FormatOption;
|
||||
@ -103,9 +105,9 @@ public class RdbDmlExportController {
|
||||
|
||||
response.setCharacterEncoding("utf-8");
|
||||
String fileName = URLEncoder.encode(
|
||||
tableName + "_" + LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER),
|
||||
StandardCharsets.UTF_8)
|
||||
.replaceAll("\\+", "%20");
|
||||
tableName + "_" + LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER),
|
||||
StandardCharsets.UTF_8)
|
||||
.replaceAll("\\+", "%20");
|
||||
|
||||
if (exportType == ExportTypeEnum.CSV) {
|
||||
doExportCsv(sql, response, fileName);
|
||||
@ -115,26 +117,27 @@ public class RdbDmlExportController {
|
||||
}
|
||||
|
||||
private void doExportCsv(String sql, HttpServletResponse response, String fileName)
|
||||
throws IOException {
|
||||
throws IOException {
|
||||
response.setContentType("text/csv");
|
||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".csv");
|
||||
|
||||
ExcelWrapper excelWrapper = new ExcelWrapper();
|
||||
try {
|
||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||
ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(response.getOutputStream())
|
||||
.charset(StandardCharsets.UTF_8)
|
||||
.excelType(ExcelTypeEnum.CSV);
|
||||
.charset(StandardCharsets.UTF_8)
|
||||
.excelType(ExcelTypeEnum.CSV);
|
||||
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
||||
excelWriterBuilder.head(
|
||||
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
||||
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
||||
excelWrapper.setExcelWriter(excelWriterBuilder.build());
|
||||
excelWrapper.setWriteSheet(EasyExcel.writerSheet(0).build());
|
||||
}, dataList -> {
|
||||
List<List<String>> writeDataList = Lists.newArrayList();
|
||||
writeDataList.add(dataList);
|
||||
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
||||
}, false);
|
||||
}, jdbcDataValue -> valueProcessor.getJdbcValue(jdbcDataValue), false);
|
||||
} finally {
|
||||
if (excelWrapper.getExcelWriter() != null) {
|
||||
excelWrapper.getExcelWriter().finish();
|
||||
@ -143,29 +146,32 @@ public class RdbDmlExportController {
|
||||
}
|
||||
|
||||
private void doExportInsert(String sql, HttpServletResponse response, String fileName, DbType dbType,
|
||||
String tableName)
|
||||
throws IOException {
|
||||
String tableName)
|
||||
throws IOException {
|
||||
response.setContentType("text/sql");
|
||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".sql");
|
||||
|
||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||
SqlBuilder sqlBuilder = Chat2DBContext.getMetaData().getSqlBuilder();
|
||||
try (PrintWriter printWriter = response.getWriter()) {
|
||||
List<String> headerColumns = Lists.newArrayList();
|
||||
InsertWrapper insertWrapper = new InsertWrapper();
|
||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
||||
headerList -> insertWrapper.setHeaderList(
|
||||
EasyCollectionUtils.toList(headerList, header -> new SQLIdentifierExpr(header.getName())))
|
||||
, dataList -> {
|
||||
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
||||
sqlInsertStatement.setDbType(dbType);
|
||||
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
||||
sqlInsertStatement.getColumns().addAll(insertWrapper.getHeaderList());
|
||||
ValuesClause valuesClause = new ValuesClause();
|
||||
for (String s : dataList) {
|
||||
valuesClause.addValue(s);
|
||||
headerList -> {
|
||||
headerList.forEach(sqlIdentifierExpr -> headerColumns.add(sqlIdentifierExpr.getName()));
|
||||
}
|
||||
sqlInsertStatement.setValues(valuesClause);
|
||||
|
||||
printWriter.println(SQLUtils.toSQLString(sqlInsertStatement, dbType, INSERT_FORMAT_OPTION) + ";");
|
||||
}, false);
|
||||
, dataList -> {
|
||||
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
||||
sqlInsertStatement.setDbType(dbType);
|
||||
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
||||
sqlInsertStatement.getColumns().addAll(insertWrapper.getHeaderList());
|
||||
ValuesClause valuesClause = new ValuesClause();
|
||||
for (String s : dataList) {
|
||||
valuesClause.addValue(s);
|
||||
}
|
||||
sqlInsertStatement.setValues(valuesClause);
|
||||
String sqls = sqlBuilder.buildSingleInsertSql(null, null, tableName, headerColumns, dataList);
|
||||
printWriter.println(sqls + ";");
|
||||
}, jdbcDataValue -> valueProcessor.getJdbcSqlValueString(jdbcDataValue), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -146,7 +146,7 @@ public class SqlDataExporter extends BaseDataExporter {
|
||||
List<String> rowData = new ArrayList<>(metaData.getColumnCount());
|
||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||
rowData.add(valueProcessor.getJdbcValueString(jdbcDataValue));
|
||||
rowData.add(valueProcessor.getJdbcSqlValueString(jdbcDataValue));
|
||||
}
|
||||
return rowData;
|
||||
}
|
||||
@ -158,7 +158,7 @@ public class SqlDataExporter extends BaseDataExporter {
|
||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||
String columnName = metaData.getColumnName(i);
|
||||
String jdbcValueString = valueProcessor.getJdbcValueString(jdbcDataValue);
|
||||
String jdbcValueString = valueProcessor.getJdbcSqlValueString(jdbcDataValue);
|
||||
if (primaryKeyMap.containsKey(columnName)) {
|
||||
primaryKeyMap.put(columnName, jdbcValueString);
|
||||
} else {
|
||||
|
@ -19,6 +19,8 @@ import ai.chat2db.server.web.api.controller.rdb.doc.conf.ExportOptions;
|
||||
import ai.chat2db.server.web.api.controller.rdb.factory.ExportServiceFactory;
|
||||
import ai.chat2db.server.web.api.controller.rdb.request.DataExportRequest;
|
||||
import ai.chat2db.server.web.api.controller.rdb.vo.TableVO;
|
||||
import ai.chat2db.spi.SqlBuilder;
|
||||
import ai.chat2db.spi.ValueProcessor;
|
||||
import ai.chat2db.spi.model.Table;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import ai.chat2db.spi.sql.ConnectInfo;
|
||||
@ -32,8 +34,6 @@ import com.alibaba.druid.DbType;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
|
||||
import com.alibaba.druid.sql.visitor.VisitorFeature;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
@ -250,6 +250,7 @@ public class TaskBizService {
|
||||
.charset(StandardCharsets.UTF_8)
|
||||
.excelType(ExcelTypeEnum.CSV);
|
||||
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
||||
excelWriterBuilder.head(
|
||||
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
||||
@ -259,7 +260,7 @@ public class TaskBizService {
|
||||
List<List<String>> writeDataList = Lists.newArrayList();
|
||||
writeDataList.add(dataList);
|
||||
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
||||
}, false);
|
||||
}, jdbcDataValue -> valueProcessor.getJdbcValue(jdbcDataValue),false);
|
||||
} finally {
|
||||
if (excelWrapper.getExcelWriter() != null) {
|
||||
excelWrapper.getExcelWriter().finish();
|
||||
@ -272,22 +273,19 @@ public class TaskBizService {
|
||||
throws IOException {
|
||||
try (PrintWriter printWriter = new PrintWriter(file, StandardCharsets.UTF_8.name())) {
|
||||
RdbDmlExportController.InsertWrapper insertWrapper = new RdbDmlExportController.InsertWrapper();
|
||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||
SqlBuilder sqlBuilder = Chat2DBContext.getSqlBuilder();
|
||||
String databaseName = Chat2DBContext.getConnectInfo().getDatabaseName();
|
||||
String schemaName = Chat2DBContext.getConnectInfo().getSchemaName();
|
||||
List<String> headerColumns = Lists.newArrayList();
|
||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
||||
headerList -> insertWrapper.setHeaderList(
|
||||
EasyCollectionUtils.toList(headerList, header -> new SQLIdentifierExpr(header.getName())))
|
||||
headerList -> {
|
||||
headerList.forEach(header -> headerColumns.add(header.getName()));
|
||||
}
|
||||
, dataList -> {
|
||||
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
||||
sqlInsertStatement.setDbType(dbType);
|
||||
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
||||
sqlInsertStatement.getColumns().addAll(insertWrapper.getHeaderList());
|
||||
SQLInsertStatement.ValuesClause valuesClause = new SQLInsertStatement.ValuesClause();
|
||||
for (String s : dataList) {
|
||||
valuesClause.addValue(s);
|
||||
}
|
||||
sqlInsertStatement.setValues(valuesClause);
|
||||
|
||||
printWriter.println(SQLUtils.toSQLString(sqlInsertStatement, dbType, INSERT_FORMAT_OPTION) + ";");
|
||||
}, false);
|
||||
String insertSql = sqlBuilder.buildSingleInsertSql(databaseName, schemaName, tableName, headerColumns, dataList);
|
||||
printWriter.println(insertSql + ";");
|
||||
}, jdbcDataValue -> valueProcessor.getJdbcSqlValueString(jdbcDataValue), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user