From d0666257ee49e66a5662ae1243151d4b01551553 Mon Sep 17 00:00:00 2001
From: taojinlong <jinlong@fit2cloud.com>
Date: Thu, 8 Aug 2024 16:54:34 +0800
Subject: [PATCH] =?UTF-8?q?fix:=E3=80=90=E6=95=B0=E6=8D=AE=E6=BA=90?=
 =?UTF-8?q?=E3=80=91StarRocks=E9=80=89=E6=8B=A9=E6=95=B0=E6=8D=AE=E6=BA=90?=
 =?UTF-8?q?=E8=A1=A8=E8=AF=A6=E6=83=85=E5=85=B6=E4=B8=AD=E8=A1=A8=E5=A4=87?=
 =?UTF-8?q?=E6=B3=A8=E6=98=AF=E5=90=A6=E5=8F=AF=E4=BB=A5=E6=98=BE=E7=A4=BA?=
 =?UTF-8?q?=E6=B3=A8=E9=87=8A=20#11433?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../datasource/provider/CalciteProvider.java  | 327 ++++++++----------
 1 file changed, 141 insertions(+), 186 deletions(-)

diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
index b5acae0241..0c90d960e1 100644
--- a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
+++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
@@ -221,8 +221,7 @@ public class CalciteProvider extends Provider {
         String table = datasourceRequest.getTable();
         if (StringUtils.isEmpty(table)) {
             ResultSet resultSet = null;
-            try (ConnectionObj con = getConnection(datasourceRequest.getDatasource());
-                 Statement statement = getStatement(con.getConnection(), 30)) {
+            try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); Statement statement = getStatement(con.getConnection(), 30)) {
                 if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
                     statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
                 }
@@ -241,10 +240,9 @@ public class CalciteProvider extends Provider {
             }
         } else {
             ResultSet resultSet = null;
-            try (ConnectionObj con = getConnection(datasourceRequest.getDatasource());
-                 Statement statement = getStatement(con.getConnection(), 30)) {
+            try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); Statement statement = getStatement(con.getConnection(), 30)) {
                 datasourceRequest.setDsVersion(con.getConnection().getMetaData().getDatabaseMajorVersion());
-                if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo") || datasourceRequest.getDatasource().getType().equalsIgnoreCase("doris")) {
+                if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo") || isDorisCatalog(datasourceRequest)) {
                     resultSet = statement.executeQuery("select * from " + table + " limit 0 offset 0 ");
                     return fetchResultField(resultSet);
                 }
@@ -278,6 +276,21 @@ public class CalciteProvider extends Provider {
         return datasetTableFields;
     }
 
+    private boolean isDorisCatalog(DatasourceRequest datasourceRequest) {
+        DatasourceConfiguration configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class);
+        String database = "";
+        if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
+            database = configuration.getDataBase();
+        } else {
+            Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
+            Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
+            matcher.find();
+            String[] databasePrams = matcher.group(3).split("\\?");
+            database = databasePrams[0];
+        }
+        return datasourceRequest.getDatasource().getType().equalsIgnoreCase("doris") && database.contains(".");
+    }
+
     @Override
     public ConnectionObj getConnection(DatasourceDTO coreDatasource) throws Exception {
         ConnectionObj connectionObj = new ConnectionObj();
@@ -373,8 +386,7 @@ public class CalciteProvider extends Provider {
 
         // schema
         ResultSet resultSet = null;
-        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource());
-             PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
+        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
             if (DatasourceConfiguration.DatasourceType.valueOf(value.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
                 statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
             }
@@ -418,8 +430,7 @@ public class CalciteProvider extends Provider {
 
         // schema
         ResultSet resultSet = null;
-        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource());
-             PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
+        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
             if (DatasourceConfiguration.DatasourceType.valueOf(value.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
                 statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
             }
@@ -458,8 +469,7 @@ public class CalciteProvider extends Provider {
 
         // schema
         ResultSet resultSet = null;
-        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource());
-             PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
+        try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); PreparedStatement statement = getPreparedStatement(con.getConnection(), datasourceConfiguration.getQueryTimeout(), datasourceRequest.getQuery())) {
             if (DatasourceConfiguration.DatasourceType.valueOf(value.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
                 statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
             }
@@ -660,137 +670,7 @@ public class CalciteProvider extends Provider {
         }
     }
 
-    private String getTableFiledSql(DatasourceRequest datasourceRequest) {
-        String sql = "";
-        DatasourceConfiguration configuration = null;
-        String database = "";
-        DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasourceRequest.getDatasource().getType());
-        switch (datasourceType) {
-            case mysql:
-            case mongo:
-            case mariadb:
-            case TiDB:
-            case StarRocks:
-            case doris:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class);
-                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
-                    database = configuration.getDataBase();
-                } else {
-                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
-                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
-                    matcher.find();
-                    String[] databasePrams = matcher.group(3).split("\\?");
-                    database = databasePrams[0];
-                }
-                sql = String.format("SELECT COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT,IF(COLUMN_KEY='PRI',1,0) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '%s' AND   TABLE_NAME = '%s'", database, datasourceRequest.getTable());
-                break;
-            case oracle:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Oracle.class);
-                if (StringUtils.isEmpty(configuration.getSchema())) {
-                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
-                }
-                sql = String.format("SELECT a.COLUMN_NAME , a.DATA_TYPE , b.COMMENTS ,0 FROM all_tab_columns a LEFT JOIN all_col_comments b ON a.owner = b.owner AND a.table_name = b.table_name AND a.column_name = b.column_name WHERE a.owner = '%s' AND a.table_name = '%s'   ORDER BY a.table_name, a.column_id", configuration.getSchema(), datasourceRequest.getTable());
-                break;
-            case db2:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Db2.class);
-                if (StringUtils.isEmpty(configuration.getSchema())) {
-                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
-                }
-                sql = String.format("SELECT COLNAME , TYPENAME , REMARKS FROM SYSCAT.COLUMNS WHERE TABSCHEMA = '%s' AND TABNAME = '%s' ", configuration.getSchema(), datasourceRequest.getTable());
-                break;
-            case sqlServer:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Sqlserver.class);
-                if (StringUtils.isEmpty(configuration.getSchema())) {
-                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
-                }
-
-                sql = String.format("SELECT \n" +
-                        "    c.name ,t.name ,ep.value, 0  \n" +
-                        "FROM \n" +
-                        "    sys.columns AS c\n" +
-                        "LEFT JOIN  sys.extended_properties AS ep ON c.object_id = ep.major_id AND c.column_id = ep.minor_id\n" +
-                        "LEFT JOIN sys.types AS t ON c.user_type_id = t.user_type_id\n" +
-                        "LEFT JOIN sys.objects AS o ON c.object_id = o.object_id\n" +
-                        "WHERE  o.name = '%s'", datasourceRequest.getTable());
-                break;
-            case pg:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class);
-                if (StringUtils.isEmpty(configuration.getSchema())) {
-                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
-                }
-                sql = String.format("SELECT\n" +
-                        "    a.attname AS ColumnName,\n" +
-                        "    t.typname,\n" +
-                        "    b.description AS ColumnDescription,\n" +
-                        "    0\n" +
-                        "FROM\n" +
-                        "    pg_class c\n" +
-                        "    JOIN pg_attribute a ON a.attrelid = c.oid\n" +
-                        "    LEFT JOIN pg_description b ON a.attrelid = b.objoid AND a.attnum = b.objsubid\n" +
-                        "    JOIN pg_type t ON a.atttypid = t.oid\n" +
-                        "where\n" +
-                        " \tc.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '%s') \n" +
-                        "    AND c.relname = '%s'\n" +
-                        "    AND a.attnum > 0\n" +
-                        "    AND NOT a.attisdropped\n" +
-                        "ORDER BY\n" +
-                        "    a.attnum;", configuration.getSchema(), datasourceRequest.getTable());
-                break;
-            case redshift:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
-                sql = String.format("SELECT\n" +
-                        "    a.attname AS ColumnName,\n" +
-                        "    t.typname,\n" +
-                        "    b.description AS ColumnDescription,\n" +
-                        "    0\n" +
-                        "FROM\n" +
-                        "    pg_class c\n" +
-                        "    JOIN pg_attribute a ON a.attrelid = c.oid\n" +
-                        "    LEFT JOIN pg_description b ON a.attrelid = b.objoid AND a.attnum = b.objsubid\n" +
-                        "    JOIN pg_type t ON a.atttypid = t.oid\n" +
-                        "WHERE\n" +
-                        "    c.relname = '%s'\n" +
-                        "    AND a.attnum > 0\n" +
-                        "    AND NOT a.attisdropped\n" +
-                        "ORDER BY\n" +
-                        "    a.attnum\n" +
-                        "   ", datasourceRequest.getTable());
-                break;
-            case ck:
-                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
-
-                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
-                    database = configuration.getDataBase();
-                } else {
-                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:clickhouse://(.*):(\\d+)/(.*)");
-                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
-                    matcher.find();
-                    String[] databasePrams = matcher.group(3).split("\\?");
-                    database = databasePrams[0];
-                }
-                sql = String.format(" SELECT\n" +
-                        "    name,\n" +
-                        "    type,\n" +
-                        "    comment,\n" +
-                        "    0\n" +
-                        "FROM\n" +
-                        "    system.columns\n" +
-                        "WHERE\n" +
-                        "    database = '%s'  \n" +
-                        "    AND table = '%s' ", database, datasourceRequest.getTable());
-                break;
-            case impala:
-                sql = String.format("DESCRIBE `%s`", datasourceRequest.getTable());
-                break;
-            default:
-                break;
-        }
-
-        return sql;
-    }
-
-    private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws
-            SQLException {
+    private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws SQLException {
         TableField tableField = new TableField();
         tableField.setOriginName(resultSet.getString(1));
         tableField.setType(resultSet.getString(2).toUpperCase());
@@ -1050,6 +930,103 @@ public class CalciteProvider extends Provider {
         return list;
     }
 
+    private String getTableFiledSql(DatasourceRequest datasourceRequest) {
+        String sql = "";
+        DatasourceConfiguration configuration = null;
+        String database = "";
+        DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasourceRequest.getDatasource().getType());
+        switch (datasourceType) {
+            case StarRocks:
+            case doris:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class);
+                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
+                    database = configuration.getDataBase();
+                } else {
+                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
+                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
+                    matcher.find();
+                    String[] databasePrams = matcher.group(3).split("\\?");
+                    database = databasePrams[0];
+                }
+                if (database.contains(".")) {
+                    sql = "select * from " + datasourceRequest.getTable() + " limit 0 offset 0 ";
+                } else {
+                    sql = String.format("SELECT TABLE_NAME,TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '%s' ;", database);
+                }
+                break;
+            case mysql:
+            case mongo:
+            case mariadb:
+            case TiDB:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class);
+                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
+                    database = configuration.getDataBase();
+                } else {
+                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
+                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
+                    matcher.find();
+                    String[] databasePrams = matcher.group(3).split("\\?");
+                    database = databasePrams[0];
+                }
+                sql = String.format("SELECT COLUMN_NAME,DATA_TYPE,COLUMN_COMMENT,IF(COLUMN_KEY='PRI',1,0) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '%s' AND   TABLE_NAME = '%s'", database, datasourceRequest.getTable());
+                break;
+            case oracle:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Oracle.class);
+                if (StringUtils.isEmpty(configuration.getSchema())) {
+                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
+                }
+                sql = String.format("SELECT a.COLUMN_NAME , a.DATA_TYPE , b.COMMENTS ,0 FROM all_tab_columns a LEFT JOIN all_col_comments b ON a.owner = b.owner AND a.table_name = b.table_name AND a.column_name = b.column_name WHERE a.owner = '%s' AND a.table_name = '%s'   ORDER BY a.table_name, a.column_id", configuration.getSchema(), datasourceRequest.getTable());
+                break;
+            case db2:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Db2.class);
+                if (StringUtils.isEmpty(configuration.getSchema())) {
+                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
+                }
+                sql = String.format("SELECT COLNAME , TYPENAME , REMARKS FROM SYSCAT.COLUMNS WHERE TABSCHEMA = '%s' AND TABNAME = '%s' ", configuration.getSchema(), datasourceRequest.getTable());
+                break;
+            case sqlServer:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Sqlserver.class);
+                if (StringUtils.isEmpty(configuration.getSchema())) {
+                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
+                }
+
+                sql = String.format("SELECT \n" + "    c.name ,t.name ,ep.value, 0  \n" + "FROM \n" + "    sys.columns AS c\n" + "LEFT JOIN  sys.extended_properties AS ep ON c.object_id = ep.major_id AND c.column_id = ep.minor_id\n" + "LEFT JOIN sys.types AS t ON c.user_type_id = t.user_type_id\n" + "LEFT JOIN sys.objects AS o ON c.object_id = o.object_id\n" + "WHERE  o.name = '%s'", datasourceRequest.getTable());
+                break;
+            case pg:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class);
+                if (StringUtils.isEmpty(configuration.getSchema())) {
+                    DEException.throwException(Translator.get("i18n_schema_is_empty"));
+                }
+                sql = String.format("SELECT\n" + "    a.attname AS ColumnName,\n" + "    t.typname,\n" + "    b.description AS ColumnDescription,\n" + "    0\n" + "FROM\n" + "    pg_class c\n" + "    JOIN pg_attribute a ON a.attrelid = c.oid\n" + "    LEFT JOIN pg_description b ON a.attrelid = b.objoid AND a.attnum = b.objsubid\n" + "    JOIN pg_type t ON a.atttypid = t.oid\n" + "where\n" + " \tc.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '%s') \n" + "    AND c.relname = '%s'\n" + "    AND a.attnum > 0\n" + "    AND NOT a.attisdropped\n" + "ORDER BY\n" + "    a.attnum;", configuration.getSchema(), datasourceRequest.getTable());
+                break;
+            case redshift:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
+                sql = String.format("SELECT\n" + "    a.attname AS ColumnName,\n" + "    t.typname,\n" + "    b.description AS ColumnDescription,\n" + "    0\n" + "FROM\n" + "    pg_class c\n" + "    JOIN pg_attribute a ON a.attrelid = c.oid\n" + "    LEFT JOIN pg_description b ON a.attrelid = b.objoid AND a.attnum = b.objsubid\n" + "    JOIN pg_type t ON a.atttypid = t.oid\n" + "WHERE\n" + "    c.relname = '%s'\n" + "    AND a.attnum > 0\n" + "    AND NOT a.attisdropped\n" + "ORDER BY\n" + "    a.attnum\n" + "   ", datasourceRequest.getTable());
+                break;
+            case ck:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
+
+                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
+                    database = configuration.getDataBase();
+                } else {
+                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:clickhouse://(.*):(\\d+)/(.*)");
+                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
+                    matcher.find();
+                    String[] databasePrams = matcher.group(3).split("\\?");
+                    database = databasePrams[0];
+                }
+                sql = String.format(" SELECT\n" + "    name,\n" + "    type,\n" + "    comment,\n" + "    0\n" + "FROM\n" + "    system.columns\n" + "WHERE\n" + "    database = '%s'  \n" + "    AND table = '%s' ", database, datasourceRequest.getTable());
+                break;
+            case impala:
+                sql = String.format("DESCRIBE `%s`", datasourceRequest.getTable());
+                break;
+            default:
+                break;
+        }
+
+        return sql;
+    }
+
     private List<String> getTablesSql(DatasourceRequest datasourceRequest) throws DEException {
         List<String> tableSqls = new ArrayList<>();
         DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasourceRequest.getDatasource().getType());
@@ -1058,6 +1035,22 @@ public class CalciteProvider extends Provider {
         switch (datasourceType) {
             case StarRocks:
             case doris:
+                configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class);
+                if (StringUtils.isEmpty(configuration.getUrlType()) || configuration.getUrlType().equalsIgnoreCase("hostName")) {
+                    database = configuration.getDataBase();
+                } else {
+                    Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
+                    Matcher matcher = WITH_SQL_FRAGMENT.matcher(configuration.getJdbcUrl());
+                    matcher.find();
+                    String[] databasePrams = matcher.group(3).split("\\?");
+                    database = databasePrams[0];
+                }
+                if (database.contains(".")) {
+                    tableSqls.add("show tables");
+                } else {
+                    tableSqls.add(String.format("SELECT TABLE_NAME,TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '%s' ;", database));
+                }
+                break;
             case mongo:
                 tableSqls.add("show tables");
                 break;
@@ -1096,57 +1089,19 @@ public class CalciteProvider extends Provider {
                 if (StringUtils.isEmpty(configuration.getSchema())) {
                     DEException.throwException(Translator.get("i18n_schema_is_empty"));
                 }
-                tableSqls.add("SELECT   \n" +
-                        "    t.name AS TableName,  \n" +
-                        "    ep.value AS TableDescription  \n" +
-                        "FROM   \n" +
-                        "    sys.tables t  \n" +
-                        "LEFT OUTER JOIN   sys.schemas sc ON sc.schema_id =t.schema_id \n" +
-                        "LEFT OUTER JOIN   \n" +
-                        "    sys.extended_properties ep ON t.object_id = ep.major_id   \n" +
-                        "                               AND ep.minor_id = 0   \n" +
-                        "                               AND ep.class = 1  \n" +
-                        "                               AND ep.name = 'MS_Description'\n" +
-                        "where sc.name ='DS_SCHEMA'"
-                                .replace("DS_SCHEMA", configuration.getSchema()));
-                tableSqls.add("SELECT   \n" +
-                        "    t.name AS TableName,  \n" +
-                        "    ep.value AS TableDescription  \n" +
-                        "FROM   \n" +
-                        "    sys.views t  \n" +
-                        "LEFT OUTER JOIN   sys.schemas sc ON sc.schema_id =t.schema_id \n" +
-                        "LEFT OUTER JOIN   \n" +
-                        "    sys.extended_properties ep ON t.object_id = ep.major_id   \n" +
-                        "                               AND ep.minor_id = 0   \n" +
-                        "                               AND ep.class = 1  \n" +
-                        "                               AND ep.name = 'MS_Description'\n" +
-                        "where sc.name ='DS_SCHEMA'"
-                                .replace("DS_SCHEMA", configuration.getSchema()));
+                tableSqls.add("SELECT   \n" + "    t.name AS TableName,  \n" + "    ep.value AS TableDescription  \n" + "FROM   \n" + "    sys.tables t  \n" + "LEFT OUTER JOIN   sys.schemas sc ON sc.schema_id =t.schema_id \n" + "LEFT OUTER JOIN   \n" + "    sys.extended_properties ep ON t.object_id = ep.major_id   \n" + "                               AND ep.minor_id = 0   \n" + "                               AND ep.class = 1  \n" + "                               AND ep.name = 'MS_Description'\n" + "where sc.name ='DS_SCHEMA'".replace("DS_SCHEMA", configuration.getSchema()));
+                tableSqls.add("SELECT   \n" + "    t.name AS TableName,  \n" + "    ep.value AS TableDescription  \n" + "FROM   \n" + "    sys.views t  \n" + "LEFT OUTER JOIN   sys.schemas sc ON sc.schema_id =t.schema_id \n" + "LEFT OUTER JOIN   \n" + "    sys.extended_properties ep ON t.object_id = ep.major_id   \n" + "                               AND ep.minor_id = 0   \n" + "                               AND ep.class = 1  \n" + "                               AND ep.name = 'MS_Description'\n" + "where sc.name ='DS_SCHEMA'".replace("DS_SCHEMA", configuration.getSchema()));
                 break;
             case pg:
                 configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class);
                 if (StringUtils.isEmpty(configuration.getSchema())) {
                     DEException.throwException(Translator.get("i18n_schema_is_empty"));
                 }
-                tableSqls.add("SELECT  \n" +
-                        "    relname AS TableName,  \n" +
-                        "    obj_description(relfilenode::regclass, 'pg_class') AS TableDescription  \n" +
-                        "FROM  \n" +
-                        "    pg_class  \n" +
-                        "WHERE  \n" +
-                        "    relkind = 'r'  \n" +
-                        "    AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'SCHEMA') ".replace("SCHEMA", configuration.getSchema()));
+                tableSqls.add("SELECT  \n" + "    relname AS TableName,  \n" + "    obj_description(relfilenode::regclass, 'pg_class') AS TableDescription  \n" + "FROM  \n" + "    pg_class  \n" + "WHERE  \n" + "    relkind = 'r'  \n" + "    AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'SCHEMA') ".replace("SCHEMA", configuration.getSchema()));
                 break;
             case redshift:
                 configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
-                tableSqls.add("SELECT  \n" +
-                        "    relname AS TableName,  \n" +
-                        "    obj_description(relfilenode::regclass, 'pg_class') AS TableDescription  \n" +
-                        "FROM  \n" +
-                        "    pg_class  \n" +
-                        "WHERE  \n" +
-                        "    relkind = 'r'  \n" +
-                        "    AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'SCHEMA') ".replace("SCHEMA", configuration.getSchema()));
+                tableSqls.add("SELECT  \n" + "    relname AS TableName,  \n" + "    obj_description(relfilenode::regclass, 'pg_class') AS TableDescription  \n" + "FROM  \n" + "    pg_class  \n" + "WHERE  \n" + "    relkind = 'r'  \n" + "    AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'SCHEMA') ".replace("SCHEMA", configuration.getSchema()));
                 break;
             case ck:
                 configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), CK.class);
@@ -1159,9 +1114,9 @@ public class CalciteProvider extends Provider {
                     String[] databasePrams = matcher.group(3).split("\\?");
                     database = databasePrams[0];
                 }
-                if(datasourceRequest.getDsVersion() < 22){
+                if (datasourceRequest.getDsVersion() < 22) {
                     tableSqls.add("SELECT name, name FROM system.tables where database='DATABASE';".replace("DATABASE", database));
-                }else {
+                } else {
                     tableSqls.add("SELECT name, comment FROM system.tables where database='DATABASE';".replace("DATABASE", database));
                 }