mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-08-02 21:50:43 +08:00
fix columnType error
This commit is contained in:
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -67,7 +68,7 @@ public enum ClickHouseColumnTypeEnum implements ColumnBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ClickHouseColumnTypeEnum getByType(String dataType) {
|
public static ClickHouseColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType);
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ColumnType> getTypes() {
|
public static List<ColumnType> getTypes() {
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -133,7 +134,7 @@ public enum DB2ColumnTypeEnum implements ColumnBuilder {
|
|||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static DB2ColumnTypeEnum getByType(String dataType) {
|
public static DB2ColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, DB2ColumnTypeEnum> COLUMN_TYPE_MAP = Maps.newHashMap();
|
private static Map<String, DB2ColumnTypeEnum> COLUMN_TYPE_MAP = Maps.newHashMap();
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -123,11 +124,13 @@ public enum DMColumnTypeEnum implements ColumnBuilder {
|
|||||||
|
|
||||||
VARCHAR2("VARCHAR2", true, false, true, false, false, false, true, true, false, true),
|
VARCHAR2("VARCHAR2", true, false, true, false, false, false, true, true, false, true),
|
||||||
|
|
||||||
|
DATETIME("DATETIME", false, false, true, false, false, false, true, true, false, false),
|
||||||
;
|
;
|
||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static DMColumnTypeEnum getByType(String dataType) {
|
public static DMColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
String type = SqlUtils.removeDigits(dataType.toUpperCase());
|
||||||
|
return COLUMN_TYPE_MAP.get(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, DMColumnTypeEnum> COLUMN_TYPE_MAP = Maps.newHashMap();
|
private static Map<String, DMColumnTypeEnum> COLUMN_TYPE_MAP = Maps.newHashMap();
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -71,7 +72,7 @@ public enum HiveColumnTypeEnum implements ColumnBuilder {
|
|||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static HiveColumnTypeEnum getByType(String dataType) {
|
public static HiveColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ColumnType getColumnType() {
|
public ColumnType getColumnType() {
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -87,7 +88,7 @@ public enum KingBaseColumnTypeEnum implements ColumnBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static KingBaseColumnTypeEnum getByType(String dataType) {
|
public static KingBaseColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ColumnType> getTypes() {
|
public static List<ColumnType> getTypes() {
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
|
|||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static MysqlColumnTypeEnum getByType(String dataType) {
|
public static MysqlColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ColumnType getColumnType() {
|
public ColumnType getColumnType() {
|
||||||
|
@ -42,7 +42,7 @@ public class MysqlValueProcessor extends DefaultValueProcessor {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getJdbcValueString(JDBCDataValue dataValue) {
|
public String getJdbcSqlValueString(JDBCDataValue dataValue) {
|
||||||
Object value = dataValue.getObject();
|
Object value = dataValue.getObject();
|
||||||
if (Objects.isNull(value)) {
|
if (Objects.isNull(value)) {
|
||||||
// mysql -> example: [date]->0000-00-00
|
// mysql -> example: [date]->0000-00-00
|
||||||
|
@ -36,7 +36,7 @@ public class OracleValueProcessor extends DefaultValueProcessor {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getJdbcValueString(JDBCDataValue dataValue) {
|
public String getJdbcSqlValueString(JDBCDataValue dataValue) {
|
||||||
if (OracleColumnTypeEnum.LONG_RAW.getColumnType().getTypeName().equalsIgnoreCase(dataValue.getType())) {
|
if (OracleColumnTypeEnum.LONG_RAW.getColumnType().getTypeName().equalsIgnoreCase(dataValue.getType())) {
|
||||||
return convertJDBCValueStrByType(dataValue);
|
return convertJDBCValueStrByType(dataValue);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ public enum PostgreSQLColumnTypeEnum implements ColumnBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static PostgreSQLColumnTypeEnum getByType(String dataType) {
|
public static PostgreSQLColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ColumnType> getTypes() {
|
public static List<ColumnType> getTypes() {
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -27,7 +28,7 @@ public enum SqliteColumnTypeEnum implements ColumnBuilder {
|
|||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static SqliteColumnTypeEnum getByType(String dataType) {
|
public static SqliteColumnTypeEnum getByType(String dataType) {
|
||||||
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
return COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ColumnType getColumnType() {
|
public ColumnType getColumnType() {
|
||||||
|
@ -16,7 +16,6 @@ import java.sql.ResultSetMetaData;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class SqlServerDBManage extends DefaultDBManage implements DBManage {
|
public class SqlServerDBManage extends DefaultDBManage implements DBManage {
|
||||||
private String tableDDLFunction
|
private String tableDDLFunction
|
||||||
@ -108,7 +107,7 @@ public class SqlServerDBManage extends DefaultDBManage implements DBManage {
|
|||||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||||
String valueString = valueProcessor.getJdbcValueString(jdbcDataValue);
|
String valueString = valueProcessor.getJdbcSqlValueString(jdbcDataValue);
|
||||||
valueList.add(valueString);
|
valueList.add(valueString);
|
||||||
}
|
}
|
||||||
String insertSql = sqlBuilder.buildSingleInsertSql(databaseName, schemaName, tableName, columnList, valueList);
|
String insertSql = sqlBuilder.buildSingleInsertSql(databaseName, schemaName, tableName, columnList, valueList);
|
||||||
|
@ -17,6 +17,7 @@ import ai.chat2db.spi.jdbc.DefaultMetaService;
|
|||||||
import ai.chat2db.spi.model.*;
|
import ai.chat2db.spi.model.*;
|
||||||
import ai.chat2db.spi.sql.SQLExecutor;
|
import ai.chat2db.spi.sql.SQLExecutor;
|
||||||
import ai.chat2db.spi.util.SortUtils;
|
import ai.chat2db.spi.util.SortUtils;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -131,7 +132,9 @@ public class SqlServerMetaData extends DefaultMetaService implements MetaData {
|
|||||||
column.setOldName(resultSet.getString("COLUMN_NAME"));
|
column.setOldName(resultSet.getString("COLUMN_NAME"));
|
||||||
column.setName(resultSet.getString("COLUMN_NAME"));
|
column.setName(resultSet.getString("COLUMN_NAME"));
|
||||||
//column.setColumnType(resultSet.getString("COLUMN_TYPE"));
|
//column.setColumnType(resultSet.getString("COLUMN_TYPE"));
|
||||||
column.setColumnType(resultSet.getString("DATA_TYPE").toUpperCase());
|
String dataType = resultSet.getString("DATA_TYPE").toUpperCase();
|
||||||
|
column.setColumnType(SqlUtils.removeDigits(dataType));
|
||||||
|
|
||||||
//column.setDataType(resultSet.getInt("DATA_TYPE"));
|
//column.setDataType(resultSet.getInt("DATA_TYPE"));
|
||||||
column.setDefaultValue(resultSet.getString("COLUMN_DEFAULT"));
|
column.setDefaultValue(resultSet.getString("COLUMN_DEFAULT"));
|
||||||
//column.setAutoIncrement(resultSet.getString("EXTRA").contains("auto_increment"));
|
//column.setAutoIncrement(resultSet.getString("EXTRA").contains("auto_increment"));
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.spi.ColumnBuilder;
|
|||||||
import ai.chat2db.spi.enums.EditStatus;
|
import ai.chat2db.spi.enums.EditStatus;
|
||||||
import ai.chat2db.spi.model.ColumnType;
|
import ai.chat2db.spi.model.ColumnType;
|
||||||
import ai.chat2db.spi.model.TableColumn;
|
import ai.chat2db.spi.model.TableColumn;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -103,7 +104,7 @@ public enum SqlServerColumnTypeEnum implements ColumnBuilder {
|
|||||||
private ColumnType columnType;
|
private ColumnType columnType;
|
||||||
|
|
||||||
public static SqlServerColumnTypeEnum getByType(String dataType) {
|
public static SqlServerColumnTypeEnum getByType(String dataType) {
|
||||||
SqlServerColumnTypeEnum typeEnum = COLUMN_TYPE_MAP.get(dataType.toUpperCase());
|
SqlServerColumnTypeEnum typeEnum = COLUMN_TYPE_MAP.get(SqlUtils.removeDigits(dataType.toUpperCase()));
|
||||||
if (typeEnum == null) {
|
if (typeEnum == null) {
|
||||||
return OTHER;
|
return OTHER;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import ai.chat2db.spi.SqlBuilder;
|
||||||
|
import ai.chat2db.spi.ValueProcessor;
|
||||||
import com.alibaba.druid.DbType;
|
import com.alibaba.druid.DbType;
|
||||||
import com.alibaba.druid.sql.SQLUtils;
|
import com.alibaba.druid.sql.SQLUtils;
|
||||||
import com.alibaba.druid.sql.SQLUtils.FormatOption;
|
import com.alibaba.druid.sql.SQLUtils.FormatOption;
|
||||||
@ -103,9 +105,9 @@ public class RdbDmlExportController {
|
|||||||
|
|
||||||
response.setCharacterEncoding("utf-8");
|
response.setCharacterEncoding("utf-8");
|
||||||
String fileName = URLEncoder.encode(
|
String fileName = URLEncoder.encode(
|
||||||
tableName + "_" + LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER),
|
tableName + "_" + LocalDateTime.now().format(DatePattern.PURE_DATETIME_FORMATTER),
|
||||||
StandardCharsets.UTF_8)
|
StandardCharsets.UTF_8)
|
||||||
.replaceAll("\\+", "%20");
|
.replaceAll("\\+", "%20");
|
||||||
|
|
||||||
if (exportType == ExportTypeEnum.CSV) {
|
if (exportType == ExportTypeEnum.CSV) {
|
||||||
doExportCsv(sql, response, fileName);
|
doExportCsv(sql, response, fileName);
|
||||||
@ -115,26 +117,27 @@ public class RdbDmlExportController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void doExportCsv(String sql, HttpServletResponse response, String fileName)
|
private void doExportCsv(String sql, HttpServletResponse response, String fileName)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
response.setContentType("text/csv");
|
response.setContentType("text/csv");
|
||||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".csv");
|
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".csv");
|
||||||
|
|
||||||
ExcelWrapper excelWrapper = new ExcelWrapper();
|
ExcelWrapper excelWrapper = new ExcelWrapper();
|
||||||
try {
|
try {
|
||||||
|
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||||
ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(response.getOutputStream())
|
ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(response.getOutputStream())
|
||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
.excelType(ExcelTypeEnum.CSV);
|
.excelType(ExcelTypeEnum.CSV);
|
||||||
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
||||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
||||||
excelWriterBuilder.head(
|
excelWriterBuilder.head(
|
||||||
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
||||||
excelWrapper.setExcelWriter(excelWriterBuilder.build());
|
excelWrapper.setExcelWriter(excelWriterBuilder.build());
|
||||||
excelWrapper.setWriteSheet(EasyExcel.writerSheet(0).build());
|
excelWrapper.setWriteSheet(EasyExcel.writerSheet(0).build());
|
||||||
}, dataList -> {
|
}, dataList -> {
|
||||||
List<List<String>> writeDataList = Lists.newArrayList();
|
List<List<String>> writeDataList = Lists.newArrayList();
|
||||||
writeDataList.add(dataList);
|
writeDataList.add(dataList);
|
||||||
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
||||||
}, false);
|
}, jdbcDataValue -> valueProcessor.getJdbcValue(jdbcDataValue), false);
|
||||||
} finally {
|
} finally {
|
||||||
if (excelWrapper.getExcelWriter() != null) {
|
if (excelWrapper.getExcelWriter() != null) {
|
||||||
excelWrapper.getExcelWriter().finish();
|
excelWrapper.getExcelWriter().finish();
|
||||||
@ -143,29 +146,32 @@ public class RdbDmlExportController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void doExportInsert(String sql, HttpServletResponse response, String fileName, DbType dbType,
|
private void doExportInsert(String sql, HttpServletResponse response, String fileName, DbType dbType,
|
||||||
String tableName)
|
String tableName)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
response.setContentType("text/sql");
|
response.setContentType("text/sql");
|
||||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".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()) {
|
try (PrintWriter printWriter = response.getWriter()) {
|
||||||
|
List<String> headerColumns = Lists.newArrayList();
|
||||||
InsertWrapper insertWrapper = new InsertWrapper();
|
InsertWrapper insertWrapper = new InsertWrapper();
|
||||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
||||||
headerList -> insertWrapper.setHeaderList(
|
headerList -> {
|
||||||
EasyCollectionUtils.toList(headerList, header -> new SQLIdentifierExpr(header.getName())))
|
headerList.forEach(sqlIdentifierExpr -> headerColumns.add(sqlIdentifierExpr.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);
|
|
||||||
}
|
}
|
||||||
sqlInsertStatement.setValues(valuesClause);
|
, dataList -> {
|
||||||
|
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
||||||
printWriter.println(SQLUtils.toSQLString(sqlInsertStatement, dbType, INSERT_FORMAT_OPTION) + ";");
|
sqlInsertStatement.setDbType(dbType);
|
||||||
}, false);
|
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());
|
List<String> rowData = new ArrayList<>(metaData.getColumnCount());
|
||||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||||
rowData.add(valueProcessor.getJdbcValueString(jdbcDataValue));
|
rowData.add(valueProcessor.getJdbcSqlValueString(jdbcDataValue));
|
||||||
}
|
}
|
||||||
return rowData;
|
return rowData;
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ public class SqlDataExporter extends BaseDataExporter {
|
|||||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||||
String columnName = metaData.getColumnName(i);
|
String columnName = metaData.getColumnName(i);
|
||||||
String jdbcValueString = valueProcessor.getJdbcValueString(jdbcDataValue);
|
String jdbcValueString = valueProcessor.getJdbcSqlValueString(jdbcDataValue);
|
||||||
if (primaryKeyMap.containsKey(columnName)) {
|
if (primaryKeyMap.containsKey(columnName)) {
|
||||||
primaryKeyMap.put(columnName, jdbcValueString);
|
primaryKeyMap.put(columnName, jdbcValueString);
|
||||||
} else {
|
} 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.factory.ExportServiceFactory;
|
||||||
import ai.chat2db.server.web.api.controller.rdb.request.DataExportRequest;
|
import ai.chat2db.server.web.api.controller.rdb.request.DataExportRequest;
|
||||||
import ai.chat2db.server.web.api.controller.rdb.vo.TableVO;
|
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.model.Table;
|
||||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||||
import ai.chat2db.spi.sql.ConnectInfo;
|
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.SQLUtils;
|
||||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
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.ast.statement.SQLSelectStatement;
|
||||||
import com.alibaba.druid.sql.visitor.VisitorFeature;
|
import com.alibaba.druid.sql.visitor.VisitorFeature;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
@ -250,6 +250,7 @@ public class TaskBizService {
|
|||||||
.charset(StandardCharsets.UTF_8)
|
.charset(StandardCharsets.UTF_8)
|
||||||
.excelType(ExcelTypeEnum.CSV);
|
.excelType(ExcelTypeEnum.CSV);
|
||||||
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
excelWrapper.setExcelWriterBuilder(excelWriterBuilder);
|
||||||
|
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql, headerList -> {
|
||||||
excelWriterBuilder.head(
|
excelWriterBuilder.head(
|
||||||
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
EasyCollectionUtils.toList(headerList, header -> Lists.newArrayList(header.getName())));
|
||||||
@ -259,7 +260,7 @@ public class TaskBizService {
|
|||||||
List<List<String>> writeDataList = Lists.newArrayList();
|
List<List<String>> writeDataList = Lists.newArrayList();
|
||||||
writeDataList.add(dataList);
|
writeDataList.add(dataList);
|
||||||
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
excelWrapper.getExcelWriter().write(writeDataList, excelWrapper.getWriteSheet());
|
||||||
}, false);
|
}, jdbcDataValue -> valueProcessor.getJdbcValue(jdbcDataValue),false);
|
||||||
} finally {
|
} finally {
|
||||||
if (excelWrapper.getExcelWriter() != null) {
|
if (excelWrapper.getExcelWriter() != null) {
|
||||||
excelWrapper.getExcelWriter().finish();
|
excelWrapper.getExcelWriter().finish();
|
||||||
@ -272,22 +273,19 @@ public class TaskBizService {
|
|||||||
throws IOException {
|
throws IOException {
|
||||||
try (PrintWriter printWriter = new PrintWriter(file, StandardCharsets.UTF_8.name())) {
|
try (PrintWriter printWriter = new PrintWriter(file, StandardCharsets.UTF_8.name())) {
|
||||||
RdbDmlExportController.InsertWrapper insertWrapper = new RdbDmlExportController.InsertWrapper();
|
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,
|
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
||||||
headerList -> insertWrapper.setHeaderList(
|
headerList -> {
|
||||||
EasyCollectionUtils.toList(headerList, header -> new SQLIdentifierExpr(header.getName())))
|
headerList.forEach(header -> headerColumns.add(header.getName()));
|
||||||
|
}
|
||||||
, dataList -> {
|
, dataList -> {
|
||||||
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
String insertSql = sqlBuilder.buildSingleInsertSql(databaseName, schemaName, tableName, headerColumns, dataList);
|
||||||
sqlInsertStatement.setDbType(dbType);
|
printWriter.println(insertSql + ";");
|
||||||
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
}, jdbcDataValue -> valueProcessor.getJdbcSqlValueString(jdbcDataValue), false);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,5 +36,5 @@ public interface ValueProcessor {
|
|||||||
*
|
*
|
||||||
* @return 一个格式化后的字符串,可以直接用于DML语句中,确保数据的正确插入或更新。
|
* @return 一个格式化后的字符串,可以直接用于DML语句中,确保数据的正确插入或更新。
|
||||||
*/
|
*/
|
||||||
String getJdbcValueString(JDBCDataValue dataValue);
|
String getJdbcSqlValueString(JDBCDataValue dataValue);
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ public class DefaultDBManage implements DBManage {
|
|||||||
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
for (int i = 1; i <= metaData.getColumnCount(); i++) {
|
||||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
||||||
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
JDBCDataValue jdbcDataValue = new JDBCDataValue(resultSet, metaData, i, false);
|
||||||
String valueString = valueProcessor.getJdbcValueString(jdbcDataValue);
|
String valueString = valueProcessor.getJdbcSqlValueString(jdbcDataValue);
|
||||||
valueList.add(valueString);
|
valueList.add(valueString);
|
||||||
}
|
}
|
||||||
String insertSql = sqlBuilder.buildSingleInsertSql(null, null, tableName, columnList, valueList);
|
String insertSql = sqlBuilder.buildSingleInsertSql(null, null, tableName, columnList, valueList);
|
||||||
|
@ -4,6 +4,7 @@ import ai.chat2db.server.tools.base.wrapper.result.PageResult;
|
|||||||
import ai.chat2db.spi.*;
|
import ai.chat2db.spi.*;
|
||||||
import ai.chat2db.spi.model.*;
|
import ai.chat2db.spi.model.*;
|
||||||
import ai.chat2db.spi.sql.SQLExecutor;
|
import ai.chat2db.spi.sql.SQLExecutor;
|
||||||
|
import ai.chat2db.spi.util.SqlUtils;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -110,7 +111,14 @@ public class DefaultMetaService implements MetaData {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName) {
|
public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName) {
|
||||||
return SQLExecutor.getInstance().columns(connection, StringUtils.isEmpty(databaseName) ? null : databaseName, StringUtils.isEmpty(schemaName) ? null : schemaName, tableName, null);
|
List<TableColumn> columns = SQLExecutor.getInstance().columns(connection, StringUtils.isEmpty(databaseName) ? null : databaseName, StringUtils.isEmpty(schemaName) ? null : schemaName, tableName, null);
|
||||||
|
if (CollectionUtils.isNotEmpty(columns)) {
|
||||||
|
for (TableColumn column : columns) {
|
||||||
|
String columnType = SqlUtils.removeDigits(column.getColumnType());
|
||||||
|
column.setColumnType(columnType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,6 +3,7 @@ package ai.chat2db.spi.jdbc;
|
|||||||
import ai.chat2db.server.tools.common.util.EasyStringUtils;
|
import ai.chat2db.server.tools.common.util.EasyStringUtils;
|
||||||
import ai.chat2db.spi.MetaData;
|
import ai.chat2db.spi.MetaData;
|
||||||
import ai.chat2db.spi.SqlBuilder;
|
import ai.chat2db.spi.SqlBuilder;
|
||||||
|
import ai.chat2db.spi.ValueProcessor;
|
||||||
import ai.chat2db.spi.enums.DmlType;
|
import ai.chat2db.spi.enums.DmlType;
|
||||||
import ai.chat2db.spi.model.*;
|
import ai.chat2db.spi.model.*;
|
||||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||||
@ -371,6 +372,8 @@ public class DefaultSqlBuilder implements SqlBuilder<Table> {
|
|||||||
StringBuilder script = new StringBuilder();
|
StringBuilder script = new StringBuilder();
|
||||||
script.append("INSERT INTO ").append(tableName)
|
script.append("INSERT INTO ").append(tableName)
|
||||||
.append(" (");
|
.append(" (");
|
||||||
|
|
||||||
|
ValueProcessor valueProcessor = metaSchema.getValueProcessor();
|
||||||
for (int i = 1; i < row.size(); i++) {
|
for (int i = 1; i < row.size(); i++) {
|
||||||
Header header = headerList.get(i);
|
Header header = headerList.get(i);
|
||||||
//String newValue = row.get(i);
|
//String newValue = row.get(i);
|
||||||
@ -385,7 +388,9 @@ public class DefaultSqlBuilder implements SqlBuilder<Table> {
|
|||||||
String newValue = row.get(i);
|
String newValue = row.get(i);
|
||||||
//if (newValue != null) {
|
//if (newValue != null) {
|
||||||
Header header = headerList.get(i);
|
Header header = headerList.get(i);
|
||||||
script.append(SqlUtils.getSqlValue(newValue, header.getDataType()))
|
SQLDataValue sqlDataValue = new SQLDataValue();
|
||||||
|
String value = valueProcessor.getSqlValueString(sqlDataValue);
|
||||||
|
script.append(value)
|
||||||
.append(",");
|
.append(",");
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public class DefaultValueProcessor implements ValueProcessor {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getJdbcValueString(JDBCDataValue dataValue) {
|
public String getJdbcSqlValueString(JDBCDataValue dataValue) {
|
||||||
// Object value = dataValue.getObject();
|
// Object value = dataValue.getObject();
|
||||||
// if (Objects.isNull(value)) {
|
// if (Objects.isNull(value)) {
|
||||||
// return "NULL";
|
// return "NULL";
|
||||||
|
@ -60,4 +60,9 @@ public class Command implements Serializable {
|
|||||||
* Only available for select statements
|
* Only available for select statements
|
||||||
*/
|
*/
|
||||||
private Boolean pageSizeAll;
|
private Boolean pageSizeAll;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* single SQL
|
||||||
|
*/
|
||||||
|
private boolean single;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("execute:{}", sql,e);
|
log.error("execute:{}", sql, e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -77,7 +77,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("execute:{}", sql,e);
|
log.error("execute:{}", sql, e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,11 +87,14 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
// execute(connection, sql, headerConsumer, rowConsumer, true, valueHandler);
|
// execute(connection, sql, headerConsumer, rowConsumer, true, valueHandler);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
public void execute(Connection connection, String sql, Consumer<List<Header>> headerConsumer,
|
public void execute(
|
||||||
Consumer<List<String>> rowConsumer, boolean limitSize) {
|
Connection connection, String sql,
|
||||||
|
Consumer<List<Header>> headerConsumer,
|
||||||
|
Consumer<List<String>> rowConsumer,
|
||||||
|
java.util.function.Function<JDBCDataValue,
|
||||||
|
String> valueFunction,
|
||||||
|
boolean limitSize) {
|
||||||
Assert.notNull(sql, "SQL must not be null");
|
Assert.notNull(sql, "SQL must not be null");
|
||||||
|
|
||||||
ValueProcessor valueProcessor = Chat2DBContext.getMetaData().getValueProcessor();
|
|
||||||
try (Statement stmt = connection.createStatement();) {
|
try (Statement stmt = connection.createStatement();) {
|
||||||
boolean query = stmt.execute(sql);
|
boolean query = stmt.execute(sql);
|
||||||
// Represents the query
|
// Represents the query
|
||||||
@ -110,7 +113,8 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
List<String> row = Lists.newArrayListWithExpectedSize(col);
|
List<String> row = Lists.newArrayListWithExpectedSize(col);
|
||||||
for (int i = 1; i <= col; i++) {
|
for (int i = 1; i <= col; i++) {
|
||||||
row.add(valueProcessor.getJdbcValue(new JDBCDataValue(rs, resultSetMetaData, i, limitSize)));
|
JDBCDataValue jdbcDataValue = new JDBCDataValue(rs, resultSetMetaData, i, limitSize);
|
||||||
|
row.add(valueFunction.apply(jdbcDataValue));
|
||||||
}
|
}
|
||||||
rowConsumer.accept(row);
|
rowConsumer.accept(row);
|
||||||
}
|
}
|
||||||
@ -119,7 +123,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
log.error("execute:{}", sql,e);
|
log.error("execute:{}", sql, e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -381,7 +385,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
tableName,
|
tableName,
|
||||||
String columnName) {
|
String columnName) {
|
||||||
try (ResultSet resultSet = connection.getMetaData().getColumns(databaseName, schemaName, tableName,
|
try (ResultSet resultSet = connection.getMetaData().getColumns(databaseName, schemaName, tableName,
|
||||||
columnName)) {
|
columnName)) {
|
||||||
return ResultSetUtils.toObjectList(resultSet, TableColumn.class);
|
return ResultSetUtils.toObjectList(resultSet, TableColumn.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
@ -400,8 +404,8 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
public List<TableIndex> indexes(Connection connection, String databaseName, String schemaName, String tableName) {
|
public List<TableIndex> indexes(Connection connection, String databaseName, String schemaName, String tableName) {
|
||||||
List<TableIndex> tableIndices = Lists.newArrayList();
|
List<TableIndex> tableIndices = Lists.newArrayList();
|
||||||
try (ResultSet resultSet = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName,
|
try (ResultSet resultSet = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName,
|
||||||
false,
|
false,
|
||||||
false)) {
|
false)) {
|
||||||
List<TableIndexColumn> tableIndexColumns = ResultSetUtils.toObjectList(resultSet, TableIndexColumn.class);
|
List<TableIndexColumn> tableIndexColumns = ResultSetUtils.toObjectList(resultSet, TableIndexColumn.class);
|
||||||
tableIndexColumns.stream().filter(c -> c.getIndexName() != null).collect(
|
tableIndexColumns.stream().filter(c -> c.getIndexName() != null).collect(
|
||||||
Collectors.groupingBy(TableIndexColumn::getIndexName)).entrySet()
|
Collectors.groupingBy(TableIndexColumn::getIndexName)).entrySet()
|
||||||
@ -493,8 +497,10 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
// parse sql
|
// parse sql
|
||||||
String type = Chat2DBContext.getConnectInfo().getDbType();
|
String type = Chat2DBContext.getConnectInfo().getDbType();
|
||||||
DbType dbType = JdbcUtils.parse2DruidDbType(type);
|
DbType dbType = JdbcUtils.parse2DruidDbType(type);
|
||||||
List<String> sqlList = SqlUtils.parse(command.getScript(), dbType,true);
|
List<String> sqlList = Lists.newArrayList(command.getScript());
|
||||||
|
if(!command.isSingle()) {
|
||||||
|
sqlList = SqlUtils.parse(command.getScript(), dbType, true);
|
||||||
|
}
|
||||||
if (CollectionUtils.isEmpty(sqlList)) {
|
if (CollectionUtils.isEmpty(sqlList)) {
|
||||||
throw new BusinessException("dataSource.sqlAnalysisError");
|
throw new BusinessException("dataSource.sqlAnalysisError");
|
||||||
}
|
}
|
||||||
@ -577,7 +583,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
Header rowNumberHeader = Header.builder()
|
Header rowNumberHeader = Header.builder()
|
||||||
.name(I18nUtils.getMessage("sqlResult.rowNumber"))
|
.name(I18nUtils.getMessage("sqlResult.rowNumber"))
|
||||||
.dataType(DataTypeEnum.CHAT2DB_ROW_NUMBER
|
.dataType(DataTypeEnum.CHAT2DB_ROW_NUMBER
|
||||||
.getCode()).build();
|
.getCode()).build();
|
||||||
executeResult.setHeaderList(EasyCollectionUtils.union(Arrays.asList(rowNumberHeader), headers));
|
executeResult.setHeaderList(EasyCollectionUtils.union(Arrays.asList(rowNumberHeader), headers));
|
||||||
|
|
||||||
// Add row number
|
// Add row number
|
||||||
@ -632,7 +638,7 @@ public class SQLExecutor implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("execute error:{}", sql,e);
|
log.error("execute error:{}", sql, e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user