From d86531967fa54418dfecbc604168bbba3d14e1e5 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 3 Aug 2021 17:29:38 +0800 Subject: [PATCH] feat: sqlserver --- .../datasource/provider/JdbcProvider.java | 2 +- .../io/dataease/provider/QueryProvider.java | 4 --- .../provider/doris/DorisQueryProvider.java | 10 ------- .../provider/mysql/MysqlQueryProvider.java | 10 ------- .../provider/oracle/OracleQueryProvider.java | 10 ------- .../sqlserver/SqlServerSQLConstants.java | 6 ++-- .../sqlserver/SqlserverQueryProvider.java | 30 ++++++++++--------- 7 files changed, 20 insertions(+), 52 deletions(-) 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 d2bc037a38..45f4854820 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -287,7 +287,7 @@ public class JdbcProvider extends DatasourceProvider { } tableFiled.setRemarks(remarks); tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE"))); - String dbType = resultSet.getString("TYPE_NAME"); + String dbType = resultSet.getString("TYPE_NAME").toUpperCase(); tableFiled.setFieldType(dbType); if(dbType.equalsIgnoreCase("LONG")){tableFiled.setFieldSize(65533);} if(StringUtils.isNotEmpty(dbType) && dbType.toLowerCase().contains("date") && tableFiled.getFieldSize() < 50 ){ diff --git a/backend/src/main/java/io/dataease/provider/QueryProvider.java b/backend/src/main/java/io/dataease/provider/QueryProvider.java index b6c97d0a31..0847ed6dd2 100644 --- a/backend/src/main/java/io/dataease/provider/QueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/QueryProvider.java @@ -14,10 +14,6 @@ import java.util.List; public abstract class QueryProvider { public abstract Integer transFieldType(String field); - public abstract String createQueryCountSQL(String table); - - public abstract String createQueryCountSQLAsTmp(String sql); - public abstract String createSQLPreview(String sql, String orderBy); public abstract String createQuerySQL(String table, List fields, 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 fc995d6e11..eb40e3cb96 100644 --- a/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/doris/DorisQueryProvider.java @@ -70,16 +70,6 @@ public class DorisQueryProvider extends QueryProvider { } } - @Override - public String createQueryCountSQL(String table) { - return MessageFormat.format("SELECT count(*) FROM {0}", table); - } - - @Override - public String createQueryCountSQLAsTmp(String sql) { - return createQueryCountSQL(" (" + sql + ") AS tmp "); - } - @Override public String createSQLPreview(String sql, String orderBy) { return "SELECT * FROM (" + sql + ") AS tmp ORDER BY " + orderBy + " LIMIT 0,1000"; 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 13ba47b27f..fdbcb7d98d 100644 --- a/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/mysql/MysqlQueryProvider.java @@ -70,16 +70,6 @@ public class MysqlQueryProvider extends QueryProvider { } } - @Override - public String createQueryCountSQL(String table) { - return MessageFormat.format("SELECT COUNT(*) FROM {0}", table); - } - - @Override - public String createQueryCountSQLAsTmp(String sql) { - return createQueryCountSQL(" (" + sqlFix(sql) + ") AS tmp "); - } - @Override public String createSQLPreview(String sql, String orderBy) { return "SELECT * FROM (" + sqlFix(sql) + ") AS tmp ORDER BY null " + " LIMIT 0,1000"; 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 124c383736..2e97ec068b 100644 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java @@ -82,16 +82,6 @@ public class OracleQueryProvider extends QueryProvider { } } - @Override - public String createQueryCountSQL(String table) { - return MessageFormat.format("SELECT COUNT(*) FROM {0}", table); - } - - @Override - public String createQueryCountSQLAsTmp(String sql) { - return createQueryCountSQL(" (" + sqlFix(sql) + ") DE_TMP "); - } - @Override public String createSQLPreview(String sql, String orderBy) { return "SELECT * FROM (" + sqlFix(sql) + ") DE_TMP " + " WHERE rownum <= 1000"; 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 3a93536ecd..3f7a47d704 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlServerSQLConstants.java @@ -2,16 +2,16 @@ package io.dataease.provider.sqlserver; import io.dataease.provider.SQLConstants; -import static io.dataease.datasource.constants.DatasourceTypes.mysql; +import static io.dataease.datasource.constants.DatasourceTypes.sqlServer; /** * @Author gin * @Date 2021/7/8 7:22 下午 */ public class SqlServerSQLConstants extends SQLConstants { - public static final String KEYWORD_TABLE = mysql.getKeywordPrefix() + "%s" + mysql.getKeywordSuffix(); + public static final String KEYWORD_TABLE = sqlServer.getKeywordPrefix() + "%s" + sqlServer.getKeywordSuffix(); - public static final String KEYWORD_FIX = "%s." + mysql.getKeywordPrefix() + "%s" + mysql.getKeywordSuffix(); + public static final String KEYWORD_FIX = "%s." + sqlServer.getKeywordPrefix() + "%s" + sqlServer.getKeywordSuffix(); public static final String UNIX_TIMESTAMP = "UNIX_TIMESTAMP(%s)"; 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 7c81918cbb..c70cb49ad7 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -29,28 +29,35 @@ public class SqlserverQueryProvider extends QueryProvider { public Integer transFieldType(String field) { switch (field) { case "CHAR": + case "NCHAR": + case "NTEXT": case "VARCHAR": case "TEXT": case "TINYTEXT": case "MEDIUMTEXT": case "LONGTEXT": case "ENUM": + case "XML": return 0;// 文本 case "DATE": case "TIME": case "YEAR": case "DATETIME": + case "DATETIME2": + case "DATETIMEOFFSET": case "TIMESTAMP": return 1;// 时间 case "INT": - case "SMALLINT": case "MEDIUMINT": case "INTEGER": case "BIGINT": + case "SMALLINT": return 2;// 整型 case "FLOAT": case "DOUBLE": case "DECIMAL": + case "MONEY": + case "NUMERIC": return 3;// 浮点 case "BIT": case "TINYINT": @@ -60,19 +67,14 @@ public class SqlserverQueryProvider extends QueryProvider { } } - @Override - public String createQueryCountSQL(String table) { - return MessageFormat.format("SELECT COUNT(*) FROM {0}", table); - } - - @Override - public String createQueryCountSQLAsTmp(String sql) { - return createQueryCountSQL(" (" + sqlFix(sql) + ") AS tmp "); - } - + 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 * FROM (" + sqlFix(sql) + ") AS tmp ORDER BY null " + " LIMIT 0,1000"; + return "SELECT top 1000 * FROM (" + sqlFix(sql) + ") AS tmp"; } @Override @@ -89,8 +91,8 @@ public class SqlserverQueryProvider extends QueryProvider { String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i); String fieldName = ""; // 处理横轴字段 - if (f.getDeExtractType() == 1) { - if (f.getDeType() == 2 || f.getDeType() == 3) { + if (f.getDeExtractType() == DE_TIME) { // 时间 转为 数值 + if (f.getDeType() == DE_INT || f.getDeType() == DE_FLOAT) { fieldName = String.format(SqlServerSQLConstants.UNIX_TIMESTAMP, originField) + "*1000"; } else { fieldName = originField;