You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by pe...@apache.org on 2023/06/01 14:02:53 UTC

[linkis] branch dev-1.4.0 updated: Generate jdbc sql (#4589)

This is an automated email from the ASF dual-hosted git repository.

peacewong pushed a commit to branch dev-1.4.0
in repository https://gitbox.apache.org/repos/asf/linkis.git


The following commit(s) were added to refs/heads/dev-1.4.0 by this push:
     new 281e1b5f3 Generate jdbc sql (#4589)
281e1b5f3 is described below

commit 281e1b5f314cc4a31af150855813a4269e36425d
Author: ChengJie1053 <18...@163.com>
AuthorDate: Thu Jun 1 22:02:45 2023 +0800

    Generate jdbc sql (#4589)
    
    * Generate jdbc sql
    
    * Modify generate jdbc sql
---
 .../query/common/domain/MetaColumnInfo.java        |  9 +++
 .../common/service/AbstractDbMetaService.java      | 19 ++++++
 .../query/common/service/MetadataDbService.java    | 12 ++++
 .../query/server/restful/MetadataQueryRestful.java | 56 ++++++++++++++++++
 .../query/server/service/MetadataQueryService.java | 19 ++++++
 .../service/impl/MetadataQueryServiceImpl.java     | 21 +++++++
 .../query/service/AbstractSqlConnection.java       | 67 ++++++++++++++++++++++
 .../query/service/ClickhouseMetaService.java       | 11 ++++
 .../metadata/query/service/Db2MetaService.java     | 11 ++++
 .../metadata/query/service/DmMetaService.java      | 11 ++++
 .../query/service/GreenplumMetaService.java        | 11 ++++
 .../query/service/KingbaseMetaService.java         | 11 ++++
 .../metadata/query/service/MysqlMetaService.java   | 11 ++++
 .../metadata/query/service/OracleMetaService.java  | 11 ++++
 .../query/service/PostgresqlMetaService.java       | 11 ++++
 .../query/service/SqlserverMetaService.java        | 11 ++++
 .../query/service/clickhouse/SqlConnection.java    |  2 +
 .../metadata/query/service/dm/SqlConnection.java   | 24 ++++++++
 .../query/service/kingbase/SqlConnection.java      |  2 +
 .../query/service/mysql/SqlConnection.java         | 22 +++++++
 .../query/service/oracle/SqlConnection.java        | 24 ++++++++
 .../query/service/sqlserver/SqlConnection.java     |  2 +
 22 files changed, 378 insertions(+)

diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/domain/MetaColumnInfo.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/domain/MetaColumnInfo.java
index 1a6c83868..ee565708b 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/domain/MetaColumnInfo.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/domain/MetaColumnInfo.java
@@ -32,6 +32,15 @@ public class MetaColumnInfo implements Serializable {
   private String type;
   private int length;
   private String colComment;
+  private boolean isNullable;
+
+  public boolean isNullable() {
+    return isNullable;
+  }
+
+  public void setNullable(boolean nullable) {
+    isNullable = nullable;
+  }
 
   public String getColComment() {
     return colComment;
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/AbstractDbMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/AbstractDbMetaService.java
index f7677c885..f2108eafd 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/AbstractDbMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/AbstractDbMetaService.java
@@ -18,6 +18,7 @@
 package org.apache.linkis.metadata.query.common.service;
 
 import org.apache.linkis.common.exception.WarnException;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaPartitionInfo;
 
@@ -43,6 +44,12 @@ public abstract class AbstractDbMetaService<C extends Closeable> extends Abstrac
     return this.getConnAndRun(operator, params, this::querySqlConnectUrl);
   }
 
+  @Override
+  public GenerateSqlInfo getJdbcSql(
+      String operator, Map<String, Object> params, String database, String table) {
+    return this.getConnAndRun(operator, params, conn -> this.queryJdbcSql(conn, database, table));
+  }
+
   @Override
   public List<String> getTables(String operator, Map<String, Object> params, String database) {
     return this.getConnAndRun(operator, params, conn -> this.queryTables(conn, database));
@@ -103,6 +110,18 @@ public abstract class AbstractDbMetaService<C extends Closeable> extends Abstrac
     throw new WarnException(-1, "This method is no supported");
   }
 
+  /**
+   * Get jdbc sql
+   *
+   * @param connection metadata connection
+   * @param database database
+   * @param table table
+   * @return
+   */
+  public GenerateSqlInfo queryJdbcSql(C connection, String database, String table) {
+    throw new WarnException(-1, "This method is no supported");
+  }
+
   /**
    * Get table list by connection and database
    *
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/MetadataDbService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/MetadataDbService.java
index e8c5d3db6..58ef7984c 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/MetadataDbService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/common/src/main/java/org/apache/linkis/metadata/query/common/service/MetadataDbService.java
@@ -17,6 +17,7 @@
 
 package org.apache.linkis.metadata.query.common.service;
 
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaPartitionInfo;
 
@@ -92,4 +93,15 @@ public interface MetadataDbService extends BaseMetadataService {
    * @return
    */
   public String getSqlConnectUrl(String operator, Map<String, Object> params);
+
+  /**
+   * Get jdbc ddl sql
+   *
+   * @param params
+   * @param database
+   * @param table
+   * @return
+   */
+  GenerateSqlInfo getJdbcSql(
+      String operator, Map<String, Object> params, String database, String table);
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/restful/MetadataQueryRestful.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/restful/MetadataQueryRestful.java
index eb2d61956..ddb7214b3 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/restful/MetadataQueryRestful.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/restful/MetadataQueryRestful.java
@@ -467,6 +467,62 @@ public class MetadataQueryRestful {
     }
   }
 
+  @ApiOperation(value = "getJdbcSql", notes = "get jdbc sql", response = Message.class)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = "dataSourceName", required = true, dataType = "String"),
+    @ApiImplicitParam(name = "envId", required = false, dataType = "String"),
+    @ApiImplicitParam(name = "system", required = true, dataType = "String"),
+    @ApiImplicitParam(name = "database", required = true, dataType = "String"),
+    @ApiImplicitParam(name = "table", required = true, dataType = "String")
+  })
+  @RequestMapping(value = "/getJdbcSql", method = RequestMethod.GET)
+  public Message getJdbcSql(
+      @RequestParam("dataSourceName") String dataSourceName,
+      @RequestParam(value = "envId", required = false) String envId,
+      @RequestParam("database") String database,
+      @RequestParam("table") String table,
+      @RequestParam("system") String system,
+      HttpServletRequest request) {
+    try {
+      if (StringUtils.isBlank(system)) {
+        return Message.error("'system' is missing[缺少系统名]");
+      }
+      if (!MetadataUtils.nameRegexPattern.matcher(system).matches()) {
+        return Message.error("'system' is invalid[系统名错误]");
+      }
+      if (!MetadataUtils.nameRegexPattern.matcher(database).matches()) {
+        return Message.error("'database' is invalid[数据库名错误]");
+      }
+      if (!MetadataUtils.nameRegexPattern.matcher(table).matches()) {
+        return Message.error("'table' is invalid[表名错误]");
+      }
+      if (!MetadataUtils.nameRegexPattern.matcher(dataSourceName).matches()) {
+        return Message.error("'dataSourceName' is invalid[数据源错误]");
+      }
+
+      String userName =
+          ModuleUserUtils.getOperationUser(request, "getJdbcSql, dataSourceName:" + dataSourceName);
+
+      GenerateSqlInfo sparkSql =
+          metadataQueryService.getJdbcSqlByDsNameAndEnvId(
+              dataSourceName, database, table, system, userName, envId);
+      return Message.ok().data("jdbcSql", sparkSql);
+    } catch (Exception e) {
+      return errorToResponseMessage(
+          "Fail to jdbc sql[获取getJdbcSql信息失败], name:["
+              + dataSourceName
+              + "]"
+              + ", system:["
+              + system
+              + "], database:["
+              + database
+              + "], table:["
+              + table
+              + "]",
+          e);
+    }
+  }
+
   private Message errorToResponseMessage(String uiMessage, Exception e) {
     if (e instanceof MetaMethodInvokeException) {
       MetaMethodInvokeException invokeException = (MetaMethodInvokeException) e;
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/MetadataQueryService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/MetadataQueryService.java
index 7e5449274..1e7438559 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/MetadataQueryService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/MetadataQueryService.java
@@ -262,4 +262,23 @@ public interface MetadataQueryService {
       String userName,
       String envId)
       throws ErrorException;
+
+  /**
+   * @param dataSourceName
+   * @param database
+   * @param table
+   * @param system
+   * @param userName
+   * @param envId
+   * @return
+   * @throws ErrorException
+   */
+  GenerateSqlInfo getJdbcSqlByDsNameAndEnvId(
+      String dataSourceName,
+      String database,
+      String table,
+      String system,
+      String userName,
+      String envId)
+      throws ErrorException;
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/impl/MetadataQueryServiceImpl.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/impl/MetadataQueryServiceImpl.java
index 55b8061d1..1a9b6db7d 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/impl/MetadataQueryServiceImpl.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/server/src/main/java/org/apache/linkis/metadata/query/server/service/impl/MetadataQueryServiceImpl.java
@@ -443,6 +443,27 @@ public class MetadataQueryServiceImpl implements MetadataQueryService {
     return generateSqlInfo;
   }
 
+  @Override
+  public GenerateSqlInfo getJdbcSqlByDsNameAndEnvId(
+      String dataSourceName,
+      String database,
+      String table,
+      String system,
+      String userName,
+      String envId)
+      throws ErrorException {
+    DsInfoResponse dsInfoResponse =
+        queryDataSourceInfoByNameAndEnvId(dataSourceName, system, userName, envId);
+    if (StringUtils.isNotBlank(dsInfoResponse.getDsType())) {
+      return invokeMetaMethod(
+          dsInfoResponse.getDsType(),
+          "getJdbcSql",
+          new Object[] {dsInfoResponse.getCreator(), dsInfoResponse.getParams(), database, table},
+          GenerateSqlInfo.class);
+    }
+    return new GenerateSqlInfo();
+  }
+
   /**
    * Request to get data source information (type and connection parameters)
    *
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/AbstractSqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/AbstractSqlConnection.java
index 66439aa39..8261f99dd 100755
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/AbstractSqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/AbstractSqlConnection.java
@@ -17,7 +17,12 @@
 
 package org.apache.linkis.metadata.query.service;
 
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.service.SparkDdlSQlTemplate;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -25,6 +30,7 @@ import java.sql.*;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -71,6 +77,8 @@ public abstract class AbstractSqlConnection implements Closeable {
       for (int i = 1; i < columnCount + 1; i++) {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
+        info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
@@ -108,6 +116,65 @@ public abstract class AbstractSqlConnection implements Closeable {
     }
   }
 
+  public GenerateSqlInfo queryJdbcSql(String database, String table) {
+    GenerateSqlInfo generateSqlInfo = new GenerateSqlInfo();
+    String ddl = generateJdbcDdlSql(database, table);
+    generateSqlInfo.setDdl(ddl);
+
+    String dml = String.format(SparkDdlSQlTemplate.DML_SQL_TEMPLATE, table);
+    generateSqlInfo.setDml(dml);
+
+    String columnStr = "*";
+    try {
+      List<MetaColumnInfo> columns = getColumns(database, table);
+      if (CollectionUtils.isNotEmpty(columns)) {
+        columnStr =
+            columns.stream().map(column -> column.getName()).collect(Collectors.joining(","));
+      }
+    } catch (Exception e) {
+      LOG.warn("Fail to get Sql columns(获取字段列表失败)", e);
+    }
+    String dql = String.format(SparkDdlSQlTemplate.DQL_SQL_TEMPLATE, columnStr, table);
+    generateSqlInfo.setDql(dql);
+    return generateSqlInfo;
+  }
+
+  public String generateJdbcDdlSql(String database, String table) {
+    StringBuilder ddl = new StringBuilder();
+    ddl.append("CREATE TABLE ").append(String.format("%s.%s", database, table)).append(" (");
+
+    try {
+      List<MetaColumnInfo> columns = getColumns(database, table);
+      if (CollectionUtils.isNotEmpty(columns)) {
+        for (MetaColumnInfo column : columns) {
+          ddl.append("\n\t").append(column.getName()).append(" ").append(column.getType());
+          if (column.getLength() > 0) {
+            ddl.append("(").append(column.getLength()).append(")");
+          }
+          if (!column.isNullable()) {
+            ddl.append(" NOT NULL");
+          }
+          ddl.append(",");
+        }
+        String primaryKeys =
+            columns.stream()
+                .filter(MetaColumnInfo::isPrimaryKey)
+                .map(MetaColumnInfo::getName)
+                .collect(Collectors.joining(", "));
+        if (StringUtils.isNotBlank(primaryKeys)) {
+          ddl.append(String.format("\n\tPRIMARY KEY (%s),", primaryKeys));
+        }
+        ddl.deleteCharAt(ddl.length() - 1);
+      }
+    } catch (Exception e) {
+      LOG.warn("Fail to get Sql columns(获取字段列表失败)", e);
+    }
+
+    ddl.append("\n)");
+
+    return ddl.toString();
+  }
+
   /**
    * close database resource
    *
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/ClickhouseMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/ClickhouseMetaService.java
index 9b246eabe..b1abb0677 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/ClickhouseMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/ClickhouseMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.clickhouse.SqlConnection;
@@ -100,4 +102,13 @@ public class ClickhouseMetaService extends AbstractDbMetaService<SqlConnection>
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/Db2MetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/Db2MetaService.java
index b34e2b6f0..309cc9c51 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/Db2MetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/Db2MetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -101,4 +103,13 @@ public class Db2MetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/DmMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/DmMetaService.java
index 25a81f018..d4e5a530d 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/DmMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/DmMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -98,4 +100,13 @@ public class DmMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/GreenplumMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/GreenplumMetaService.java
index f13d052b5..2eb91bdfd 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/GreenplumMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/GreenplumMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -106,4 +108,13 @@ public class GreenplumMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/KingbaseMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/KingbaseMetaService.java
index 23e3aada4..f5ea7fda5 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/KingbaseMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/KingbaseMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -99,4 +101,13 @@ public class KingbaseMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/MysqlMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/MysqlMetaService.java
index e178101f5..958245fc8 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/MysqlMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/MysqlMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -99,4 +101,13 @@ public class MysqlMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/OracleMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/OracleMetaService.java
index dc46d2192..71f659595 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/OracleMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/OracleMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -114,4 +116,13 @@ public class OracleMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/PostgresqlMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/PostgresqlMetaService.java
index 95415d1f3..e9f292e13 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/PostgresqlMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/PostgresqlMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -108,4 +110,13 @@ public class PostgresqlMetaService extends AbstractDbMetaService<SqlConnection>
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/SqlserverMetaService.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/SqlserverMetaService.java
index 5729fd710..f9ddd99e8 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/SqlserverMetaService.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/SqlserverMetaService.java
@@ -18,7 +18,9 @@
 package org.apache.linkis.metadata.query.service;
 
 import org.apache.linkis.datasourcemanager.common.util.json.Json;
+import org.apache.linkis.metadata.query.common.domain.GenerateSqlInfo;
 import org.apache.linkis.metadata.query.common.domain.MetaColumnInfo;
+import org.apache.linkis.metadata.query.common.exception.MetaRuntimeException;
 import org.apache.linkis.metadata.query.common.service.AbstractDbMetaService;
 import org.apache.linkis.metadata.query.common.service.MetadataConnection;
 import org.apache.linkis.metadata.query.service.conf.SqlParamsMapper;
@@ -94,4 +96,13 @@ public class SqlserverMetaService extends AbstractDbMetaService<SqlConnection> {
   public String querySqlConnectUrl(SqlConnection connection) {
     return connection.getSqlConnectUrl();
   }
+
+  @Override
+  public GenerateSqlInfo queryJdbcSql(SqlConnection connection, String database, String table) {
+    try {
+      return connection.queryJdbcSql(database, table);
+    } catch (Exception e) {
+      throw new MetaRuntimeException("Fail to get jdbc sql (获取jdbcSql失败)", e);
+    }
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/clickhouse/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/clickhouse/SqlConnection.java
index 4984b1806..fb65235e7 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/clickhouse/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/clickhouse/SqlConnection.java
@@ -110,6 +110,8 @@ public class SqlConnection extends AbstractSqlConnection {
       for (int i = 1; i < columnCount + 1; i++) {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
+        info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/dm/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/dm/SqlConnection.java
index 32ae65b58..cb4e7dd56 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/dm/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/dm/SqlConnection.java
@@ -104,6 +104,7 @@ public class SqlConnection extends AbstractSqlConnection {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
         info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
@@ -186,4 +187,27 @@ public class SqlConnection extends AbstractSqlConnection {
   public String getSqlConnectUrl() {
     return SQL_CONNECT_URL.getValue();
   }
+
+  @Override
+  public String generateJdbcDdlSql(String database, String table) {
+    String columnSql =
+        String.format(
+            "SELECT DBMS_METADATA.GET_DDL('TABLE', '%s', '%s') AS DDL  FROM DUAL ",
+            table, database);
+    PreparedStatement ps = null;
+    ResultSet rs = null;
+    String ddl = "";
+    try {
+      ps = conn.prepareStatement(columnSql);
+      rs = ps.executeQuery();
+      if (rs.next()) {
+        ddl = rs.getString("DDL");
+      }
+    } catch (SQLException e) {
+      throw new RuntimeException(e);
+    } finally {
+      closeResource(null, ps, rs);
+    }
+    return ddl;
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/kingbase/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/kingbase/SqlConnection.java
index 85fba9489..f49c43a8e 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/kingbase/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/kingbase/SqlConnection.java
@@ -109,6 +109,8 @@ public class SqlConnection extends AbstractSqlConnection {
       for (int i = 1; i < columnCount + 1; i++) {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
+        info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/mysql/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/mysql/SqlConnection.java
index 167023e3f..c329ab59f 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/mysql/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/mysql/SqlConnection.java
@@ -112,6 +112,8 @@ public class SqlConnection extends AbstractSqlConnection {
       for (int i = 1; i < columnCount + 1; i++) {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
+        info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
@@ -155,4 +157,24 @@ public class SqlConnection extends AbstractSqlConnection {
   public String getSqlConnectUrl() {
     return SQL_CONNECT_URL.getValue();
   }
+
+  @Override
+  public String generateJdbcDdlSql(String database, String table) {
+    String columnSql = String.format("SHOW CREATE TABLE %s.%s", database, table);
+    PreparedStatement ps = null;
+    ResultSet rs = null;
+    String ddl = "";
+    try {
+      ps = conn.prepareStatement(columnSql);
+      rs = ps.executeQuery();
+      if (rs.next()) {
+        ddl = rs.getString("Create Table");
+      }
+    } catch (SQLException e) {
+      throw new RuntimeException(e);
+    } finally {
+      closeResource(null, ps, rs);
+    }
+    return ddl.replaceAll("\n", "\n\t");
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/oracle/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/oracle/SqlConnection.java
index d40008ff6..8125c6805 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/oracle/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/oracle/SqlConnection.java
@@ -121,6 +121,7 @@ public class SqlConnection extends AbstractSqlConnection {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
         info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {
@@ -201,4 +202,27 @@ public class SqlConnection extends AbstractSqlConnection {
   public String getSqlConnectUrl() {
     return SQL_CONNECT_URL.getValue();
   }
+
+  @Override
+  public String generateJdbcDdlSql(String database, String table) {
+    String columnSql =
+        String.format(
+            "SELECT DBMS_METADATA.GET_DDL('TABLE', '%s', '%s') AS DDL  FROM DUAL ",
+            table, database);
+    PreparedStatement ps = null;
+    ResultSet rs = null;
+    String ddl = "";
+    try {
+      ps = conn.prepareStatement(columnSql);
+      rs = ps.executeQuery();
+      if (rs.next()) {
+        ddl = rs.getString("DDL");
+      }
+    } catch (SQLException e) {
+      throw new RuntimeException(e);
+    } finally {
+      closeResource(null, ps, rs);
+    }
+    return ddl;
+  }
 }
diff --git a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/sqlserver/SqlConnection.java b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/sqlserver/SqlConnection.java
index c963b2358..55454ea6a 100644
--- a/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/sqlserver/SqlConnection.java
+++ b/linkis-public-enhancements/linkis-datasource/linkis-metadata-query/service/jdbc/src/main/java/org/apache/linkis/metadata/query/service/sqlserver/SqlConnection.java
@@ -116,6 +116,8 @@ public class SqlConnection extends AbstractSqlConnection {
       for (int i = 1; i < columnCount + 1; i++) {
         MetaColumnInfo info = new MetaColumnInfo();
         info.setIndex(i);
+        info.setLength(meta.getColumnDisplaySize(i));
+        info.setNullable((meta.isNullable(i) == ResultSetMetaData.columnNullable));
         info.setName(meta.getColumnName(i));
         info.setType(meta.getColumnTypeName(i));
         if (primaryKeys.contains(meta.getColumnName(i))) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org