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