diff --git a/backend/src/main/java/io/dataease/commons/constants/DeTypeConstants.java b/backend/src/main/java/io/dataease/commons/constants/DeTypeConstants.java new file mode 100644 index 0000000000..50a925c2ee --- /dev/null +++ b/backend/src/main/java/io/dataease/commons/constants/DeTypeConstants.java @@ -0,0 +1,12 @@ +package io.dataease.commons.constants; + +public class DeTypeConstants { + + public final static Integer DE_STRING = 0; + public final static Integer DE_TIME = 1; + public final static Integer DE_INT = 2; + public final static Integer DE_FLOAT = 3; + public final static Integer DE_BOOL = 4; + public final static Integer DE_Binary = 5; + +} diff --git a/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java b/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java index 3a913cb270..2894857bef 100644 --- a/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java +++ b/backend/src/main/java/io/dataease/commons/filter/SqlFilter.java @@ -68,7 +68,6 @@ public class SqlFilter implements Filter { } br.close(); } catch (IOException e) { - System.out.println("IOException: " + e); } return str; diff --git a/backend/src/main/java/io/dataease/controller/sys/LicenseController.java b/backend/src/main/java/io/dataease/controller/sys/LicenseController.java index 0e932cec62..d45745a8bb 100644 --- a/backend/src/main/java/io/dataease/controller/sys/LicenseController.java +++ b/backend/src/main/java/io/dataease/controller/sys/LicenseController.java @@ -32,7 +32,6 @@ public class LicenseController { return ResultHolder.success(null); } F2CLicenseResponse f2CLicenseResponse = defaultLicenseService.validateLicense(); - System.out.println(new Gson().toJson(f2CLicenseResponse)); switch (f2CLicenseResponse.getStatus()) { case no_record: return ResultHolder.success(f2CLicenseResponse); diff --git a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java index a3e4c0deff..12e30186df 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -42,25 +42,20 @@ public class JdbcProvider extends DatasourceProvider { public List getData(DatasourceRequest dsr) throws Exception { List list = new LinkedList<>(); Connection connection = null; - connection = getConnectionFromPool(dsr); - Statement stat = connection.createStatement(); - ResultSet rs = stat.executeQuery(dsr.getQuery()); - System.out.println(rs == null); - list = fetchResult(rs); -// try { -// connection = getConnectionFromPool(dsr); -// Statement stat = connection.createStatement(); -// ResultSet rs = stat.executeQuery(dsr.getQuery()); -// list = fetchResult(rs); -// } catch (SQLException e) { -// DataEaseException.throwException(e); -// } catch (Exception e) { -// DataEaseException.throwException(e); -// } finally { -// if(connection != null){ -// connection.close(); -// } -// } + try { + connection = getConnectionFromPool(dsr); + Statement stat = connection.createStatement(); + ResultSet rs = stat.executeQuery(dsr.getQuery()); + list = fetchResult(rs); + } catch (SQLException e) { + DataEaseException.throwException(e); + } catch (Exception e) { + DataEaseException.throwException(e); + } finally { + if(connection != null){ + connection.close(); + } + } return list; } @@ -107,12 +102,10 @@ public class JdbcProvider extends DatasourceProvider { List list = new LinkedList<>(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); - System.out.println("columnCount: " + columnCount); while (rs.next()) { String[] row = new String[columnCount]; for (int j = 0; j < columnCount; j++) { int columType = metaData.getColumnType(j + 1); - switch (columType) { case Types.DATE: if(rs.getDate(j + 1) != null){ @@ -123,7 +116,6 @@ public class JdbcProvider extends DatasourceProvider { row[j] = rs.getString(j + 1); break; } - System.out.println(j + " " + columType + " " + row[j]); } list.add(row); } diff --git a/backend/src/main/java/io/dataease/provider/QueryProvider.java b/backend/src/main/java/io/dataease/provider/QueryProvider.java index 0847ed6dd2..ca76fab730 100644 --- a/backend/src/main/java/io/dataease/provider/QueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/QueryProvider.java @@ -1,6 +1,7 @@ package io.dataease.provider; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; @@ -12,17 +13,18 @@ import java.util.List; * @Date 2021/5/17 2:42 下午 */ public abstract class QueryProvider { + public abstract Integer transFieldType(String field); public abstract String createSQLPreview(String sql, String orderBy); - public abstract String createQuerySQL(String table, List fields, boolean isGroup); + public abstract String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds); public abstract String createQuerySQLAsTmp(String sql, List fields, boolean isGroup); - public abstract String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup); + public abstract String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds); - public abstract String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup); + public abstract String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup, Datasource ds); public abstract String createQuerySqlWithLimit(String sql, List fields, Integer limit, boolean isGroup); diff --git a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java index eb40e3cb96..948f1a933d 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.doris; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.DatasetTableFieldExample; +import io.dataease.base.domain.Datasource; import io.dataease.base.mapper.DatasetTableFieldMapper; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.dto.chart.ChartCustomFilterDTO; @@ -76,7 +77,7 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -149,17 +150,17 @@ public class DorisQueryProvider extends QueryProvider { @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup) { - return createQuerySQL("(" + sql + ")", fields, isGroup); + return createQuerySQL("(" + sql + ")", fields, isGroup, null); } @Override - public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " LIMIT " + (page - 1) * pageSize + "," + realSize; + public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, null) + " LIMIT " + (page - 1) * pageSize + "," + realSize; } @Override - public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " LIMIT 0," + limit; + public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, null) + " LIMIT 0," + limit; } @Override diff --git a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java index fdbcb7d98d..88798dbbb4 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.mysql; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.DatasetTableFieldExample; +import io.dataease.base.domain.Datasource; import io.dataease.base.mapper.DatasetTableFieldMapper; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.dto.chart.ChartCustomFilterDTO; @@ -76,7 +77,7 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -140,17 +141,17 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup); + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null); } @Override - public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " LIMIT " + (page - 1) * pageSize + "," + realSize; + public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, null) + " LIMIT " + (page - 1) * pageSize + "," + realSize; } @Override - public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " LIMIT 0," + limit; + public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, null) + " LIMIT 0," + limit; } @Override diff --git a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java index 2e97ec068b..3690f3254f 100644 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java @@ -2,6 +2,7 @@ package io.dataease.provider.oracle; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.DatasetTableFieldExample; +import io.dataease.base.domain.Datasource; import io.dataease.base.mapper.DatasetTableFieldMapper; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.dto.chart.ChartCustomFilterDTO; @@ -88,7 +89,7 @@ public class OracleQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0))) @@ -169,19 +170,19 @@ public class OracleQueryProvider extends QueryProvider { @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup); + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null); } @Override - public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { + public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) { List xFields = xFields(table, fields); return MessageFormat.format("SELECT {0} FROM ( SELECT DE_TMP.*, rownum r FROM ( {1} ) DE_TMP WHERE rownum <= {2} ) WHERE r > {3} ", - sqlColumn(xFields), createQuerySQL(table, fields, isGroup), Integer.valueOf(page * realSize).toString(), Integer.valueOf((page - 1) * pageSize).toString()); + sqlColumn(xFields), createQuerySQL(table, fields, isGroup, null), Integer.valueOf(page * realSize).toString(), Integer.valueOf((page - 1) * pageSize).toString()); } @Override - public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup) { + public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup, Datasource ds) { return String.format("SELECT %s.* from %s WHERE rownum <= %s ", table, table, limit.toString()); } diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java index 783c185082..4ea9eda683 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java @@ -13,7 +13,7 @@ public class SqlServerSQLConstants extends SQLConstants { public static final String KEYWORD_FIX = "%s." + sqlServer.getKeywordPrefix() + "%s" + sqlServer.getKeywordSuffix(); - public static final String UNIX_TIMESTAMP = "(CAST(DATEDIFF(SS, '1970-01-01 00:00:00', s ) as bigint) - 8 * 3600 ) * 1000"; + public static final String UNIX_TIMESTAMP = "CAST(DATEDIFF(ss,'1970-01-01 08:00:00', %s) as bigint ) * 1000 "; public static final String DATE_FORMAT = "CONVERT(varchar(100), %s, %s)"; @@ -22,9 +22,8 @@ public class SqlServerSQLConstants extends SQLConstants { public static final String CONVERT = "CONVERT(%s, %s)"; public static final String LONG_TO_DATE = "DATEADD(second,%s,'1970-01-01 08:00:00')"; - public static final String STRING_TO_DATE = "CONVERT(datetime, %s ,120)"; - public static final String DEFAULT_DATE_FORMAT = "%Y-%m-%d %H:%i:%S"; + public static final String STRING_TO_DATE = "CONVERT(datetime, %s ,120)"; public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)"; diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java index c1983357db..1ceeb608b3 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -1,7 +1,11 @@ package io.dataease.provider.sqlserver; +import com.google.gson.Gson; import io.dataease.base.domain.DatasetTableField; +import io.dataease.base.domain.Datasource; +import io.dataease.commons.constants.DeTypeConstants; import io.dataease.controller.request.chart.ChartExtFilterRequest; +import io.dataease.datasource.dto.SqlServerConfigration; import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.dto.sqlObj.SQLObj; @@ -38,51 +42,53 @@ public class SqlserverQueryProvider extends QueryProvider { case "LONGTEXT": case "ENUM": case "XML": - return 0;// 文本 - case "DATE": case "TIME": + return DeTypeConstants.DE_STRING;// 文本 + case "DATE": case "YEAR": case "DATETIME": case "DATETIME2": case "DATETIMEOFFSET": - case "TIMESTAMP": - return 1;// 时间 + return DeTypeConstants.DE_TIME;// 时间 case "INT": case "MEDIUMINT": case "INTEGER": case "BIGINT": case "SMALLINT": - return 2;// 整型 + return DeTypeConstants.DE_INT;// 整型 case "FLOAT": case "DOUBLE": case "DECIMAL": case "MONEY": case "NUMERIC": - return 3;// 浮点 + return DeTypeConstants.DE_FLOAT;// 浮点 case "BIT": case "TINYINT": - return 4;// 布尔 + return DeTypeConstants.DE_BOOL;// 布尔 + case "TIMESTAMP": + return DeTypeConstants.DE_Binary;// 二进制 default: - return 0; + return DeTypeConstants.DE_STRING; } } - private static Integer DE_STRING = 0; - private static Integer DE_TIME = 1; - private static Integer DE_INT = 2; - private static Integer DE_FLOAT = 3; - private static Integer DE_BOOL = 4; @Override public String createSQLPreview(String sql, String orderBy) { return "SELECT top 1000 * FROM (" + sqlFix(sql) + ") AS tmp"; } @Override - public String createQuerySQL(String table, List fields, boolean isGroup) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds) { + SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); + if(ds != null){ + String schema = new Gson().fromJson(ds.getConfiguration(), SqlServerConfigration.class).getSchema(); + tableObj.setTableName(schema + "." + tableObj.getTableName()); + } + List xFields = new ArrayList<>(); if (CollectionUtils.isNotEmpty(fields)) { for (int i = 0; i < fields.size(); i++) { @@ -91,33 +97,28 @@ public class SqlserverQueryProvider extends QueryProvider { String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); String fieldName = ""; // 处理横轴字段 - if (f.getDeExtractType() == DE_TIME) { // 时间 转为 数值 - if (f.getDeType() == DE_INT || f.getDeType() == DE_FLOAT) { + if (f.getDeExtractType() == DeTypeConstants.DE_TIME) { // 时间 转为 数值 + if (f.getDeType() == DeTypeConstants.DE_INT || f.getDeType() == DeTypeConstants.DE_FLOAT) { fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField); } else { fieldName = originField; } - } else if (f.getDeExtractType() == DE_STRING) { //字符串转时间 - if (f.getDeType() == DE_INT) { - fieldName = originField; -// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT); - } else if (f.getDeType() == DE_FLOAT) { - fieldName = originField; -// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT); - } else if (f.getDeType() == DE_TIME) { - fieldName = originField; -// String.format(SqlServerSQLConstants.DATE_FORMAT, originField, SqlServerSQLConstants.DEFAULT_DATE_FORMAT); + } else if (f.getDeExtractType() == DeTypeConstants.DE_STRING) { + if (f.getDeType() == DeTypeConstants.DE_INT) { + fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_INT_FORMAT, originField); + } else if (f.getDeType() == DeTypeConstants.DE_FLOAT) { + fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT, originField); + } else if (f.getDeType() == DeTypeConstants.DE_TIME) { //字符串转时间 + fieldName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originField); } else { fieldName = originField; } } else { - if (f.getDeType() == DE_TIME) { // -// String cast = String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT) + "/1000"; - fieldName = originField; -// String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast, SqlServerSQLConstants.DEFAULT_DATE_FORMAT); - } else if (f.getDeType() == DE_INT) { - fieldName = originField; -// String.format(SqlServerSQLConstants.CAST, originField, SqlServerSQLConstants.DEFAULT_INT_FORMAT); + if (f.getDeType() == DeTypeConstants.DE_TIME) { // 数值转时间 + String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originField + "/1000"); + fieldName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); + } else if (f.getDeType() == DeTypeConstants.DE_INT) { + fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_INT_FORMAT, originField); } else { fieldName = originField; } @@ -139,27 +140,27 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup); + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null); } @Override - public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; + public String createQuerySQLWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, ds) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; } @Override public String createQuerySQLAsTmpWithPage(String sql, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { - return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; + return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; } @Override - public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup) { - return createQuerySQL(table, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset 0 rows fetch next " + limit + " rows only"; + public String createQueryTableWithLimit(String table, List fields, Integer limit, boolean isGroup, Datasource ds) { + return createQuerySQL(table, fields, isGroup, ds) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset 0 rows fetch next " + limit + " rows only"; } @Override public String createQuerySqlWithLimit(String sql, List fields, Integer limit, boolean isGroup) { - return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY " + fields.get(0).getOriginName() + " offset 0 rows fetch next " + limit + " rows only"; + return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset 0 rows fetch next " + limit + " rows only"; } @Override @@ -463,14 +464,15 @@ public class SqlserverQueryProvider extends QueryProvider { public String createRawQuerySQL(String table, List fields) { String[] array = fields.stream().map(f -> { StringBuilder stringBuilder = new StringBuilder(); - if (f.getDeExtractType() == 4) { // 处理 tinyint - stringBuilder.append("concat(`").append(f.getOriginName()).append("`,'') AS ").append(f.getDataeaseName()); - } else { - stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); - } +// if (f.getDeExtractType() == 4) { // 处理 tinyint +// stringBuilder.append("concat(`").append(f.getOriginName()).append("`,'') AS ").append(f.getDataeaseName()); +// } else { +// stringBuilder.append("`").append(f.getOriginName()).append("` AS ").append(f.getDataeaseName()); +// } + stringBuilder.append("\"").append(f.getOriginName()).append("\" AS ").append(f.getDataeaseName()); return stringBuilder.toString(); }).toArray(String[]::new); - return MessageFormat.format("SELECT {0} FROM {1} ORDER BY null", StringUtils.join(array, ","), table); + return MessageFormat.format("SELECT {0} FROM {1}", StringUtils.join(array, ","), table); } @Override @@ -527,7 +529,7 @@ public class SqlserverQueryProvider extends QueryProvider { String whereTerm = transMysqlFilterTerm(request.getTerm()); String whereValue = ""; String originName = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - if (field.getDeType() == DE_TIME && field.getDeExtractType() != DE_TIME) { + if (field.getDeType() == DeTypeConstants.DE_TIME && field.getDeExtractType() != DeTypeConstants.DE_TIME) { String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); whereName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); } else { @@ -581,7 +583,7 @@ public class SqlserverQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { whereValue = "'%" + value.get(0) + "%'"; } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { - if (request.getDatasetTableField().getDeType() == DE_TIME) { + if (request.getDatasetTableField().getDeType() == DeTypeConstants.DE_TIME) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); @@ -620,7 +622,11 @@ public class SqlserverQueryProvider extends QueryProvider { case "y": return "CONVERT(varchar(100), datepart(yy, " + originField + "))"; case "y_M": - return "CONVERT(varchar(100), datepart(yy, " + originField + ")) N'" + split + "'CONVERT(varchar(100), datepart(mm, " + originField + "))"; + if(split.equalsIgnoreCase("-")){ + return "substring( convert(varchar," + originField + ",120),1,7)"; + }else { + return "replace("+ "substring( convert(varchar," + originField + ",120),1,7), '-','/')"; + } case "y_M_d": if(split.equalsIgnoreCase("-")){ return "CONVERT(varchar(100), " + originField + ", 23)"; @@ -628,7 +634,7 @@ public class SqlserverQueryProvider extends QueryProvider { return "CONVERT(varchar(100), " + originField + ", 111)"; } case "H_m_s": - return "CONVERT(varchar(100), " + originField + ", 24)"; + return "CONVERT(varchar(100), " + originField + ", 8)"; case "y_M_d_H_m": if(split.equalsIgnoreCase("-")){ return "substring( convert(varchar," + originField + ",120),1,16)"; @@ -689,17 +695,17 @@ public class SqlserverQueryProvider extends QueryProvider { private SQLObj getXFields(ChartViewFieldDTO x, String originField, String fieldAlias) { String fieldName = ""; - if (x.getDeExtractType() == DE_TIME) { - if (x.getDeType() == DE_INT || x.getDeType() == DE_FLOAT) { //时间转数值 + if (x.getDeExtractType() == DeTypeConstants.DE_TIME) { + if (x.getDeType() == DeTypeConstants.DE_INT || x.getDeType() == DeTypeConstants.DE_FLOAT) { //时间转数值 fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField); - } else if (x.getDeType() == DE_TIME) { //时间格式化 + } else if (x.getDeType() == DeTypeConstants.DE_TIME) { //时间格式化 fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), originField); } else { fieldName = originField; } } else { - if (x.getDeType() == DE_TIME) { - if (x.getDeExtractType() == DE_STRING) {// 字符串转时间 + if (x.getDeType() == DeTypeConstants.DE_TIME) { + if (x.getDeExtractType() == DeTypeConstants.DE_STRING) {// 字符串转时间 String cast = String.format(SqlServerSQLConstants.STRING_TO_DATE, originField); fieldName = transDateFormat(x.getDateStyle(), x.getDatePattern(), cast); } else {// 数值转时间 @@ -724,7 +730,7 @@ public class SqlserverQueryProvider extends QueryProvider { fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, y.getSummary(), originField); } else { if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) { - String convert = String.format(SqlServerSQLConstants.CONVERT, y.getDeType() == DE_INT ? SqlServerSQLConstants.DEFAULT_INT_FORMAT : SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT, originField); + String convert = String.format(SqlServerSQLConstants.CONVERT, y.getDeType() == DeTypeConstants.DE_INT ? SqlServerSQLConstants.DEFAULT_INT_FORMAT : SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT, originField); String agg = String.format(SqlServerSQLConstants.AGG_FIELD, y.getSummary(), convert); fieldName = String.format(SqlServerSQLConstants.CONVERT, SqlServerSQLConstants.DEFAULT_FLOAT_FORMAT, agg); } else { diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index c8ae09aad9..080882493f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -377,8 +377,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = dataTableInfoDTO.getTable(); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false)); - System.out.println(datasourceRequest.getQuery()); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); try { data.addAll(datasourceProvider.getData(datasourceRequest)); @@ -387,7 +386,7 @@ public class DataSetTableService { DEException.throwException(e.getMessage()); } try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false, ds)); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); } catch (Exception e) { e.printStackTrace(); @@ -404,7 +403,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false)); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); @@ -413,7 +412,7 @@ public class DataSetTableService { DEException.throwException(e.getMessage()); } try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false, ds)); dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); } catch (Exception e) { e.printStackTrace(); @@ -459,7 +458,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false)); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); @@ -468,7 +467,7 @@ public class DataSetTableService { DEException.throwException(e.getMessage()); } try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false, ds)); dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); } catch (Exception e) { e.printStackTrace(); @@ -486,7 +485,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false)); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); @@ -495,7 +494,7 @@ public class DataSetTableService { DEException.throwException(e.getMessage()); } try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false, ds)); dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); } catch (Exception e) { e.printStackTrace(); @@ -538,7 +537,7 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = DorisTableUtils.dorisName(dataSetTableRequest.getId()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false)); + datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); @@ -548,7 +547,7 @@ public class DataSetTableService { } try { - datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); + datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow()), false, ds)); dataSetPreviewPage.setTotal(jdbcProvider.getData(datasourceRequest).size()); } catch (Exception e) { e.printStackTrace(); diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 8aafc110d1..6c90cb0491 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -865,7 +865,7 @@ public class ExtractDataService { textFileOutputMeta.setSeparator(separator); textFileOutputMeta.setExtension(extention); - if (datasource.getType().equalsIgnoreCase(DatasourceTypes.oracle.name())) { + if (datasource.getType().equalsIgnoreCase(DatasourceTypes.oracle.name()) ) { TextFileField[] outputFields = new TextFileField[datasetTableFields.size() + 1]; for(int i=0;i< datasetTableFields.size();i++){ TextFileField textFileField = new TextFileField(); @@ -878,6 +878,20 @@ public class ExtractDataService { textFileField.setType("String"); outputFields[datasetTableFields.size()] = textFileField; + textFileOutputMeta.setOutputFields(outputFields); + }else if (datasource.getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())){ + TextFileField[] outputFields = new TextFileField[datasetTableFields.size() + 1]; + for(int i=0;i< datasetTableFields.size();i++){ + TextFileField textFileField = new TextFileField(); + textFileField.setName(datasetTableFields.get(i).getDataeaseName()); + textFileField.setType("String"); + outputFields[i] = textFileField; + } + TextFileField textFileField = new TextFileField(); + textFileField.setName("dataease_uuid"); + textFileField.setType("String"); + outputFields[datasetTableFields.size()] = textFileField; + textFileOutputMeta.setOutputFields(outputFields); }else { textFileOutputMeta.setOutputFields(new TextFileField[0]); @@ -891,6 +905,14 @@ public class ExtractDataService { private StepMeta udjc(List datasetTableFields, DatasourceTypes datasourceType) { String needToChangeColumnType = ""; + String handleBinaryTypeCode = ""; + + for (DatasetTableField datasetTableField : datasetTableFields) { + if(datasetTableField.getDeExtractType() == 5){ + handleBinaryTypeCode = handleBinaryTypeCode + "\n" + this.handleBinaryType.replace("FEILD", datasetTableField.getDataeaseName()); + } + } + UserDefinedJavaClassMeta userDefinedJavaClassMeta = new UserDefinedJavaClassMeta(); List fields = new ArrayList<>(); UserDefinedJavaClassMeta.FieldInfo fieldInfo = new UserDefinedJavaClassMeta.FieldInfo("dataease_uuid", ValueMetaInterface.TYPE_STRING, -1, -1); @@ -906,11 +928,15 @@ public class ExtractDataService { } else { Column_Fields = String.join(",", datasetTableFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList())); } + if (datasourceType.equals(DatasourceTypes.excel)) { tmp_code = tmp_code.replace("handleExcelIntColumn", handleExcelIntColumn).replace("Column_Fields", Column_Fields); } else { tmp_code = tmp_code.replace("handleExcelIntColumn", "").replace("Column_Fields", Column_Fields); } + + tmp_code = tmp_code.replace("handleBinaryType", handleBinaryTypeCode); + UserDefinedJavaClassDef userDefinedJavaClassDef = new UserDefinedJavaClassDef(UserDefinedJavaClassDef.ClassType.TRANSFORM_CLASS, "Processor", tmp_code); userDefinedJavaClassDef.setActive(true); @@ -993,6 +1019,12 @@ public class ExtractDataService { } } + private static String handleBinaryType = " \t\tif(\"FEILD\".equalsIgnoreCase(filed)){\n" + + " get(Fields.Out, filed).setValue(r, \"\");\n" + + " get(Fields.Out, filed).getValueMeta().setType(2);\n" + + " \t}"; + + private static String alterColumnTypeCode = " if(\"FILED\".equalsIgnoreCase(filed)){\n" + "\t if(tmp != null && tmp.equalsIgnoreCase(\"Y\")){\n" + " get(Fields.Out, filed).setValue(r, 1);\n" + @@ -1049,6 +1081,7 @@ public class ExtractDataService { " String tmp = get(Fields.In, filed).getString(r);\n" + "handleWraps \n" + "alterColumnTypeCode \n" + + "handleBinaryType \n" + "handleExcelIntColumn \n" + " str = str + tmp;\n" + " }\n" + diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 3694d17c1a..e683bea423 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -67,7 +67,7 @@ public class DirectFieldService implements DataSetFieldService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); - datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), Collections.singletonList(field), true)); + datasourceRequest.setQuery(qp.createQuerySQL(dataTableInfoDTO.getTable(), Collections.singletonList(field), true, ds)); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { datasourceRequest.setQuery(qp.createQuerySQLAsTmp(dataTableInfoDTO.getSql(), Collections.singletonList(field), true)); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "custom")) { @@ -85,7 +85,7 @@ public class DirectFieldService implements DataSetFieldService { tableName = "ds_" + datasetTable.getId().replaceAll("-", "_"); datasourceRequest.setTable(tableName); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - datasourceRequest.setQuery(qp.createQuerySQL(tableName, Collections.singletonList(field), true)); + datasourceRequest.setQuery(qp.createQuerySQL(tableName, Collections.singletonList(field), true, null)); } try {