forked from github/dataease
fix(X-Pack): 修复数据填报建表时包含大写字母时可能会导致查询数据页面报错的问题
This commit is contained in:
parent
fb936ac977
commit
ca5650ed65
@ -103,8 +103,12 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
||||
|
||||
@Override
|
||||
public List<TableField> getTableFields(DatasourceRequest datasourceRequest) throws Exception {
|
||||
String requestTableName = datasourceRequest.getTable();
|
||||
if (datasourceRequest.isLowerCaseTaleNames()) {
|
||||
requestTableName = requestTableName.toLowerCase();
|
||||
}
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo")) {
|
||||
datasourceRequest.setQuery("select * from " + datasourceRequest.getTable());
|
||||
datasourceRequest.setQuery("select * from " + requestTableName);
|
||||
return fetchResultField(datasourceRequest);
|
||||
}
|
||||
List<TableField> list = new LinkedList<>();
|
||||
@ -117,7 +121,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
||||
}
|
||||
}
|
||||
DatabaseMetaData databaseMetaData = connection.getMetaData();
|
||||
String tableNamePattern = datasourceRequest.getTable();
|
||||
String tableNamePattern = requestTableName;
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.mysql.name())) {
|
||||
if (databaseMetaData.getDriverMajorVersion() < 8) {
|
||||
tableNamePattern = String.format(MySQLConstants.KEYWORD_TABLE, tableNamePattern);
|
||||
@ -146,22 +150,25 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
||||
} else {
|
||||
database = primaryKeys.getString("TABLE_CAT");
|
||||
}
|
||||
if (datasourceRequest.isLowerCaseTaleNames()) {
|
||||
tableName = tableName.toLowerCase();
|
||||
}
|
||||
//获取主键的名称
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name())) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
primaryKeySet.add(primaryKeys.getString("COLUMN_NAME"));
|
||||
}
|
||||
} else if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest)) && schema.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDatabase(datasourceRequest)) && schema.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
primaryKeySet.add(primaryKeys.getString("COLUMN_NAME"));
|
||||
}
|
||||
} else {
|
||||
if (database != null) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
|
||||
primaryKeySet.add(primaryKeys.getString("COLUMN_NAME"));
|
||||
}
|
||||
} else {
|
||||
if (tableName.equals(datasourceRequest.getTable())) {
|
||||
if (tableName.equals(requestTableName)) {
|
||||
primaryKeySet.add(primaryKeys.getString("COLUMN_NAME"));
|
||||
}
|
||||
}
|
||||
@ -179,24 +186,27 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
||||
} else {
|
||||
database = resultSet.getString("TABLE_CAT");
|
||||
}
|
||||
if (datasourceRequest.isLowerCaseTaleNames()) {
|
||||
tableName = tableName.toLowerCase();
|
||||
}
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.pg.name())) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
TableField tableField = getTableFiled(resultSet, datasourceRequest, primaryKeySet);
|
||||
list.add(tableField);
|
||||
}
|
||||
} else if (datasourceRequest.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest)) && schema.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDatabase(datasourceRequest)) && schema.equalsIgnoreCase(getDsSchema(datasourceRequest))) {
|
||||
TableField tableField = getTableFiled(resultSet, datasourceRequest, primaryKeySet);
|
||||
list.add(tableField);
|
||||
}
|
||||
} else {
|
||||
if (database != null) {
|
||||
if (tableName.equals(datasourceRequest.getTable()) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
|
||||
if (tableName.equals(requestTableName) && database.equalsIgnoreCase(getDatabase(datasourceRequest))) {
|
||||
TableField tableField = getTableFiled(resultSet, datasourceRequest, primaryKeySet);
|
||||
list.add(tableField);
|
||||
}
|
||||
} else {
|
||||
if (tableName.equals(datasourceRequest.getTable())) {
|
||||
if (tableName.equals(requestTableName)) {
|
||||
TableField tableField = getTableFiled(resultSet, datasourceRequest, primaryKeySet);
|
||||
list.add(tableField);
|
||||
}
|
||||
@ -209,7 +219,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
||||
DataEaseException.throwException(e);
|
||||
} catch (Exception e) {
|
||||
if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("ds_doris") || datasourceRequest.getDatasource().getType().equalsIgnoreCase("StarRocks")) {
|
||||
datasourceRequest.setQuery("select * from " + datasourceRequest.getTable());
|
||||
datasourceRequest.setQuery("select * from " + requestTableName);
|
||||
return fetchResultField(datasourceRequest);
|
||||
} else {
|
||||
DataEaseException.throwException(Translator.get("i18n_datasource_connect_error") + e.getMessage());
|
||||
|
@ -26,6 +26,11 @@ public class MysqlExtDDLProvider extends DefaultExtDDLProvider {
|
||||
|
||||
private static final String dropTableSql = "DROP TABLE IF EXISTS `TABLE_NAME`";
|
||||
|
||||
@Override
|
||||
public String getLowerCaseTaleNames() {
|
||||
return "SHOW VARIABLES LIKE 'lower_case_table_names'";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String dropTableSql(String table) {
|
||||
return dropTableSql.replace("TABLE_NAME", table);
|
||||
|
@ -11,6 +11,7 @@ import io.dataease.ext.ExtDataFillFormMapper;
|
||||
import io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs;
|
||||
import io.dataease.plugins.common.base.domain.Datasource;
|
||||
import io.dataease.plugins.common.base.mapper.DataFillFormMapper;
|
||||
import io.dataease.plugins.common.constants.DatasourceTypes;
|
||||
import io.dataease.plugins.common.dto.datafill.ExtTableField;
|
||||
import io.dataease.plugins.common.dto.datasource.TableField;
|
||||
import io.dataease.plugins.common.exception.DataEaseException;
|
||||
@ -76,6 +77,23 @@ public class DataFillDataService {
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(ds);
|
||||
datasourceRequest.setTable(dataFillForm.getTableName());
|
||||
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
DatasourceTypes datasourceType = DatasourceTypes.valueOf(ds.getType());
|
||||
switch (datasourceType) {
|
||||
case mysql:
|
||||
case mariadb:
|
||||
String checkLowerCaseSql = extDDLProvider.getLowerCaseTaleNames();
|
||||
datasourceRequest.setQuery(checkLowerCaseSql);
|
||||
List<String[]> checkLowerCaseData = datasourceProvider.getData(datasourceRequest);
|
||||
long lowCase = NumberUtils.toLong(checkLowerCaseData.get(0)[1]);
|
||||
datasourceRequest.setLowerCaseTaleNames(lowCase > 0);
|
||||
break;
|
||||
default:
|
||||
datasourceRequest.setLowerCaseTaleNames(true);
|
||||
}
|
||||
|
||||
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
|
||||
Map<String, ExtTableField.BaseType> extTableFieldTypeMap = new HashMap<>();
|
||||
Map<String, TableField> tableFieldMap = new HashMap<>();
|
||||
@ -125,7 +143,6 @@ public class DataFillDataService {
|
||||
}
|
||||
}
|
||||
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
String whereSql = "";
|
||||
if (StringUtils.isNoneBlank(searchRequest.getPrimaryKeyValue())) {
|
||||
|
@ -17,7 +17,7 @@ import java.util.regex.Pattern;
|
||||
@Setter
|
||||
public class DatasourceRequest {
|
||||
private final String REG_WITH_SQL_FRAGMENT = "((?i)WITH[\\s\\S]+(?i)AS?\\s*\\([\\s\\S]+\\))\\s*(?i)SELECT";
|
||||
private Pattern WITH_SQL_FRAGMENT = Pattern.compile(REG_WITH_SQL_FRAGMENT);
|
||||
private Pattern WITH_SQL_FRAGMENT = Pattern.compile(REG_WITH_SQL_FRAGMENT);
|
||||
|
||||
protected String query;
|
||||
|
||||
@ -43,6 +43,7 @@ public class DatasourceRequest {
|
||||
private boolean totalPageFlag;
|
||||
|
||||
private List<TableFieldWithValue> tableFieldWithValues;
|
||||
private boolean lowerCaseTaleNames;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
@ -66,4 +66,9 @@ public class DefaultExtDDLProvider extends ExtDDLProvider {
|
||||
public String whereSql(String tableName, List<TableField> searchFields) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLowerCaseTaleNames() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -32,4 +32,6 @@ public abstract class ExtDDLProvider {
|
||||
public abstract String checkUniqueValueSql(String tableName, DatasourceRequest.TableFieldWithValue field, DatasourceRequest.TableFieldWithValue pk);
|
||||
|
||||
public abstract String whereSql(String tableName, List<TableField> searchFields);
|
||||
|
||||
public abstract String getLowerCaseTaleNames();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user