From ca5650ed65b9eac832de5500272bdf1188d22dde Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 2 Apr 2024 14:37:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(X-Pack):=20=E4=BF=AE=E5=A4=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A1=AB=E6=8A=A5=E5=BB=BA=E8=A1=A8=E6=97=B6=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E5=A4=A7=E5=86=99=E5=AD=97=E6=AF=8D=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=9F=A5=E8=AF=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=A1=B5=E9=9D=A2=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/datasource/JdbcProvider.java | 32 ++++++++++++------- .../provider/ext/MysqlExtDDLProvider.java | 5 +++ .../service/datafill/DataFillDataService.java | 19 ++++++++++- .../request/datasource/DatasourceRequest.java | 3 +- .../provider/DefaultExtDDLProvider.java | 5 +++ .../datasource/provider/ExtDDLProvider.java | 2 ++ 6 files changed, 53 insertions(+), 13 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index ffba6a3762..4aa9145a95 100644 --- a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -103,8 +103,12 @@ public class JdbcProvider extends DefaultJdbcProvider { @Override public List 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 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()); diff --git a/core/backend/src/main/java/io/dataease/provider/ext/MysqlExtDDLProvider.java b/core/backend/src/main/java/io/dataease/provider/ext/MysqlExtDDLProvider.java index bf7e178c83..2ce17685e3 100644 --- a/core/backend/src/main/java/io/dataease/provider/ext/MysqlExtDDLProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/ext/MysqlExtDDLProvider.java @@ -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); diff --git a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java index de9a4067b0..48c018ac65 100644 --- a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java +++ b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java @@ -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 checkLowerCaseData = datasourceProvider.getData(datasourceRequest); + long lowCase = NumberUtils.toLong(checkLowerCaseData.get(0)[1]); + datasourceRequest.setLowerCaseTaleNames(lowCase > 0); + break; + default: + datasourceRequest.setLowerCaseTaleNames(true); + } + List tableFields = datasourceProvider.getTableFields(datasourceRequest); Map extTableFieldTypeMap = new HashMap<>(); Map tableFieldMap = new HashMap<>(); @@ -125,7 +143,6 @@ public class DataFillDataService { } } - ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType()); String whereSql = ""; if (StringUtils.isNoneBlank(searchRequest.getPrimaryKeyValue())) { diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/request/datasource/DatasourceRequest.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/request/datasource/DatasourceRequest.java index 9eef39abef..5d7e5f2303 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/request/datasource/DatasourceRequest.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/request/datasource/DatasourceRequest.java @@ -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 tableFieldWithValues; + private boolean lowerCaseTaleNames; @Getter @Setter diff --git a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultExtDDLProvider.java b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultExtDDLProvider.java index 23ce1d8aaa..b5284a058e 100644 --- a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultExtDDLProvider.java +++ b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/DefaultExtDDLProvider.java @@ -66,4 +66,9 @@ public class DefaultExtDDLProvider extends ExtDDLProvider { public String whereSql(String tableName, List searchFields) { return null; } + + @Override + public String getLowerCaseTaleNames() { + return null; + } } diff --git a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/ExtDDLProvider.java b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/ExtDDLProvider.java index dff96f1fd4..f12402fb83 100644 --- a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/ExtDDLProvider.java +++ b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/provider/ExtDDLProvider.java @@ -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 searchFields); + + public abstract String getLowerCaseTaleNames(); }