mirror of
https://github.com/dataease/dataease.git
synced 2026-06-13 01:01:20 +08:00
fix: 修复时间参数过滤失败
This commit is contained in:
@@ -768,7 +768,7 @@ public class SqlparserUtils {
|
||||
if (StringUtils.equals(sqlVariableDetails.getOperator(), "in")) {
|
||||
return CollectionUtils.isEmpty(sqlVariableDetails.getValue()) ? Collections.emptyList() : sqlVariableDetails.getValue();
|
||||
}
|
||||
if (StringUtils.equals(sqlVariableDetails.getOperator(), "between")) {
|
||||
if (StringUtils.equals(sqlVariableDetails.getOperator(), "between") || StringUtils.equals(sqlVariableDetails.getOperator(), "eq")) {
|
||||
if (sqlVariableDetails.getDeType() == 1) {
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(sqlVariableDetails.getType().size() > 1 ? (String) sqlVariableDetails.getType().get(1).replace("DD", "dd").replace("YYYY", "yyyy") : "yyyy");
|
||||
if (StringUtils.endsWith(sqlVariableDetails.getId(), START_END_SEPARATOR)) {
|
||||
|
||||
@@ -297,6 +297,7 @@ public class CalciteProvider extends Provider {
|
||||
try {
|
||||
CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);
|
||||
statement = calciteConnection.prepareStatement(datasourceRequest.getQuery());
|
||||
bindPreparedStatementValues(statement, datasourceRequest.getTableFieldWithValues(), null, null, null);
|
||||
resultSet = statement.executeQuery();
|
||||
ResultSetMetaData metaData = resultSet.getMetaData();
|
||||
int columnCount = metaData.getColumnCount();
|
||||
@@ -325,11 +326,12 @@ public class CalciteProvider extends Provider {
|
||||
String table = datasourceRequest.getTable();
|
||||
if (StringUtils.isEmpty(table)) {
|
||||
ResultSet resultSet = null;
|
||||
try (Connection con = getConnectionFromPool(datasourceRequest.getDatasource().getId()); Statement statement = getStatement(con, 30)) {
|
||||
if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
|
||||
statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
|
||||
}
|
||||
resultSet = statement.executeQuery(datasourceRequest.getQuery());
|
||||
String oracleCharset = normalizeOracleCharset(datasourceConfiguration.getCharset());
|
||||
String oracleTargetCharset = normalizeOracleCharset(datasourceConfiguration.getTargetCharset());
|
||||
try (Connection con = getConnectionFromPool(datasourceRequest.getDatasource().getId())) {
|
||||
Statement statement = getStatement(datasourceSchemaDTO, con, datasourceRequest, datasourceConfiguration, null);
|
||||
bindPreparedStatementValues(statement, datasourceRequest.getTableFieldWithValues(), DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()), oracleCharset, oracleTargetCharset);
|
||||
resultSet = executeQuery(statement, datasourceRequest.getQuery());
|
||||
datasetTableFields.addAll(getField(resultSet, datasourceRequest));
|
||||
} catch (Exception e) {
|
||||
DEException.throwException(e.getMessage());
|
||||
@@ -390,6 +392,43 @@ public class CalciteProvider extends Provider {
|
||||
return datasetTableFields;
|
||||
}
|
||||
|
||||
private void bindPreparedStatementValues(Statement statement, List<TableFieldWithValue> tableFieldWithValues,
|
||||
DatasourceConfiguration.DatasourceType datasourceType,
|
||||
String oracleCharset, String oracleTargetCharset) throws SQLException {
|
||||
if (!(statement instanceof PreparedStatement preparedStatement) || CollectionUtils.isEmpty(tableFieldWithValues)) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < tableFieldWithValues.size(); i++) {
|
||||
TableFieldWithValue tableFieldWithValue = tableFieldWithValues.get(i);
|
||||
try {
|
||||
Object valueObject = tableFieldWithValue.getValue();
|
||||
if (valueObject instanceof String
|
||||
&& datasourceType == DatasourceConfiguration.DatasourceType.oracle
|
||||
&& StringUtils.isNotEmpty(oracleCharset)
|
||||
&& StringUtils.isNotEmpty(oracleTargetCharset)) {
|
||||
valueObject = convertOracleText((String) valueObject, oracleTargetCharset, oracleCharset);
|
||||
}
|
||||
if (tableFieldWithValue.getType() != null && tableFieldWithValue.getType().equals(Types.CLOB) && valueObject instanceof String stringValue) {
|
||||
Reader reader = new StringReader(stringValue);
|
||||
preparedStatement.setCharacterStream(i + 1, reader, stringValue.length());
|
||||
} else if (tableFieldWithValue.getType() != null) {
|
||||
preparedStatement.setObject(i + 1, valueObject, tableFieldWithValue.getType());
|
||||
} else {
|
||||
preparedStatement.setObject(i + 1, valueObject);
|
||||
}
|
||||
} catch (SQLException | UnsupportedEncodingException e) {
|
||||
throw new SQLException(e.getMessage() + ". VALUE: " + String.valueOf(tableFieldWithValue.getValue()) + " , TARGET TYPE: " + tableFieldWithValue.getColumnTypeName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ResultSet executeQuery(Statement statement, String query) throws SQLException {
|
||||
if (statement instanceof PreparedStatement preparedStatement) {
|
||||
return preparedStatement.executeQuery();
|
||||
}
|
||||
return statement.executeQuery(query);
|
||||
}
|
||||
|
||||
private boolean isDorisCatalog(DatasourceRequest datasourceRequest) {
|
||||
if (!datasourceRequest.getDatasource().getType().equalsIgnoreCase("doris")) {
|
||||
return false;
|
||||
|
||||
@@ -921,43 +921,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
}
|
||||
ExcelUtils excelUtils = new ExcelUtils();
|
||||
ExcelFileData excelFileData = excelUtils.excelSaveAndParse(file, String.valueOf(AuthUtils.getUser().getUserId()));
|
||||
|
||||
if (Objects.equals(editType, append)) { //按照excel sheet 名称匹配,替换:0;追加:1
|
||||
if (coreDatasource != null) {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> datasetTableDTOS = ExcelUtils.getTables(datasourceRequest);
|
||||
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
List<TableField> newTableFields = sheet.getFields();
|
||||
datasourceRequest.setTable(datasetTableDTO.getTableName());
|
||||
List<TableField> oldTableFields = ExcelUtils.getTableFields(datasourceRequest);
|
||||
if (isEqual(newTableFields, oldTableFields)) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
excelSheetDataList.add(sheet);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
excelFileData.setSheets(excelSheetDataList);
|
||||
}
|
||||
} else {
|
||||
// 替换
|
||||
if (coreDatasource != null) {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> datasetTableDTOS = ExcelUtils.getTables(datasourceRequest);
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mergeExcelEditConfig(excelFileData, coreDatasource, editType);
|
||||
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (int i = 0; i < sheet.getFields().size() - 1; i++) {
|
||||
@@ -979,18 +943,7 @@ public class DatasourceServer implements DatasourceApi {
|
||||
if (ObjectUtils.isNotEmpty(remoteExcelRequest.getDatasourceId()) && 0L != remoteExcelRequest.getDatasourceId()) {
|
||||
coreDatasource = dataSourceManage.getCoreDatasource(remoteExcelRequest.getDatasourceId());
|
||||
}
|
||||
if (coreDatasource != null) {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> datasetTableDTOS = ExcelUtils.getTables(datasourceRequest);
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mergeExcelEditConfig(excelFileData, coreDatasource, remoteExcelRequest.getEditType());
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (int i = 0; i < sheet.getFields().size() - 1; i++) {
|
||||
for (int j = i + 1; j < sheet.getFields().size(); j++) {
|
||||
@@ -1003,6 +956,42 @@ public class DatasourceServer implements DatasourceApi {
|
||||
return excelFileData;
|
||||
}
|
||||
|
||||
private void mergeExcelEditConfig(ExcelFileData excelFileData, CoreDatasource coreDatasource, Integer editType) throws DEException {
|
||||
if (coreDatasource == null) {
|
||||
return;
|
||||
}
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(transDTO(coreDatasource));
|
||||
List<DatasetTableDTO> datasetTableDTOS = ExcelUtils.getTables(datasourceRequest);
|
||||
if (Objects.equals(editType, append)) { // 按照 excel sheet 名称匹配,替换:0;追加:1
|
||||
List<ExcelSheetData> excelSheetDataList = new ArrayList<>();
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
List<TableField> newTableFields = sheet.getFields();
|
||||
datasourceRequest.setTable(datasetTableDTO.getTableName());
|
||||
List<TableField> oldTableFields = ExcelUtils.getTableFields(datasourceRequest);
|
||||
if (isEqual(newTableFields, oldTableFields)) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
excelSheetDataList.add(sheet);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
excelFileData.setSheets(excelSheetDataList);
|
||||
return;
|
||||
}
|
||||
for (ExcelSheetData sheet : excelFileData.getSheets()) {
|
||||
for (DatasetTableDTO datasetTableDTO : datasetTableDTOS) {
|
||||
if (excelDataTableName(datasetTableDTO.getTableName()).equals(sheet.getTableName())) {
|
||||
sheet.setDeTableName(datasetTableDTO.getTableName());
|
||||
datasourceRequest.setTable(datasetTableDTO.getTableName());
|
||||
mergeFields(ExcelUtils.getTableFields(datasourceRequest), sheet.getFields());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private boolean isEqual(List<TableField> newTableFields, List<TableField> oldTableFields) {
|
||||
if (CollectionUtils.isEmpty(newTableFields) || CollectionUtils.isEmpty(oldTableFields)) {
|
||||
|
||||
Reference in New Issue
Block a user