From 18d176c5f483ecc8f7624031f9561bdd94604571 Mon Sep 17 00:00:00 2001 From: Zinway Date: Fri, 2 Jun 2023 13:57:37 +0800 Subject: [PATCH] feat: Introduce new datasource vertica (#14232) Co-authored-by: Zinway Liu --- docs/configs/docsdev.js | 8 + docs/docs/en/guide/datasource/vertica.md | 21 +++ docs/docs/zh/guide/datasource/vertica.md | 19 +++ docs/img/new_ui/dev/datasource/vertica.png | Bin 0 -> 241720 bytes dolphinscheduler-bom/pom.xml | 7 + .../common/constants/DataSourceConstants.java | 3 + .../dolphinscheduler-datasource-all/pom.xml | 5 + .../datasource/BaseDataSourceParamDTO.java | 35 ++++ .../BaseDataSourceParamDTOTest.java | 80 ++++++++++ .../datasource/MySQLDataSourceParamDTO.java | 45 ++++++ .../pom.xml | 50 ++++++ .../vertica/VerticaDataSourceChannel.java | 31 ++++ .../VerticaDataSourceChannelFactory.java | 37 +++++ .../vertica/VerticaDataSourceClient.java | 30 ++++ .../vertica/param/VerticaConnectionParam.java | 38 +++++ .../param/VerticaDataSourceParamDTO.java | 43 +++++ .../param/VerticaDataSourceProcessor.java | 134 ++++++++++++++++ .../VerticaDataSourceChannelFactoryTest.java | 33 ++++ .../vertica/VerticaDataSourceChannelTest.java | 39 +++++ .../param/VerticaDataSourceProcessorTest.java | 108 +++++++++++++ .../provider/JDBCDataSourceProviderTest.java | 65 ++++++++ .../vertica/utils/DataSourceUtilsTest.java | 149 ++++++++++++++++++ dolphinscheduler-datasource-plugin/pom.xml | 1 + dolphinscheduler-dist/release-docs/LICENSE | 5 + dolphinscheduler-dist/release-docs/NOTICE | 23 +++ .../licenses/LICENSE-vertica-jdbc.txt | 18 +++ .../dolphinscheduler/spi/enums/DbType.java | 3 +- .../src/service/modules/data-source/types.ts | 1 + .../src/views/datasource/list/use-form.ts | 5 + .../components/node/fields/use-datasource.ts | 5 + tools/dependencies/known-dependencies.txt | 3 +- 31 files changed, 1042 insertions(+), 2 deletions(-) create mode 100644 docs/docs/en/guide/datasource/vertica.md create mode 100644 docs/docs/zh/guide/datasource/vertica.md create mode 100644 docs/img/new_ui/dev/datasource/vertica.png create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTOTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/MySQLDataSourceParamDTO.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/pom.xml create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannel.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactory.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceClient.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaConnectionParam.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceParamDTO.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactoryTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessorTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/provider/JDBCDataSourceProviderTest.java create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/utils/DataSourceUtilsTest.java create mode 100644 dolphinscheduler-dist/release-docs/licenses/LICENSE-vertica-jdbc.txt diff --git a/docs/configs/docsdev.js b/docs/configs/docsdev.js index 6e8a3d58c0..17ee92367f 100644 --- a/docs/configs/docsdev.js +++ b/docs/configs/docsdev.js @@ -254,6 +254,10 @@ export default { title: 'File Parameter', link: '/en-us/docs/dev/user_doc/guide/parameter/file-parameter.html', }, + { + title: 'Vertica', + link: '/en-us/docs/dev/user_doc/guide/datasource/vertica.html', + }, ], }, { @@ -930,6 +934,10 @@ export default { title: 'SSH', link: '/zh-cn/docs/dev/user_doc/guide/task/ssh.html', }, + { + title: 'Vertica', + link: '/zh-cn/docs/dev/user_doc/guide/datasource/vertica.html', + }, ], }, { diff --git a/docs/docs/en/guide/datasource/vertica.md b/docs/docs/en/guide/datasource/vertica.md new file mode 100644 index 0000000000..edd771c19f --- /dev/null +++ b/docs/docs/en/guide/datasource/vertica.md @@ -0,0 +1,21 @@ +# Vertica + +![vertica](../../../../img/new_ui/dev/datasource/vertica.png) + +## Datasource Parameters + +| **Parameter** | **Description** | +|----------------------------|------------------------------------------------------------| +| Datasource | Select VERTICA. | +| Datasource Name | Enter the name of the DataSource. | +| Description | Enter a description of the DataSource. | +| IP/Host Name | Enter the Vertica service IP. | +| Port | Enter the Vertica service port. | +| Username | Set the username for Vertica connection. | +| Password | Set the password for Vertica connection. | +| Database name | Enter the database name of the Vertica connection. | +| Jdbc connection parameters | Parameter settings for Vertica connection, in JSON format. | + +## Native Supported + +Yes, could use this datasource by default. diff --git a/docs/docs/zh/guide/datasource/vertica.md b/docs/docs/zh/guide/datasource/vertica.md new file mode 100644 index 0000000000..8130639826 --- /dev/null +++ b/docs/docs/zh/guide/datasource/vertica.md @@ -0,0 +1,19 @@ +# VERTICA 数据源 + +![vertica](../../../../img/new_ui/dev/datasource/vertica.png) + +| **参数名称** | **参数描述** | +|-----------|--------------------------------| +| 数据源 | 选择 VERTICA | +| 数据源名称 | 输入数据源的名称 | +| 描述 | 输入数据源的描述 | +| IP 主机名 | 输入连接 VERTICA 的 IP | +| 端口 | 输入连接 VERTICA 的端口 | +| 用户名 | 设置连接 VERTICA 的用户名 | +| 密码 | 设置连接 VERTICA 的密码 | +| 数据库名 | 输入连接 VERTICA 的数据库名称 | +| JDBC 连接参数 | 用于 VERTICA 连接的参数设置,以 JSON 形式填写 | + +## 是否原生支持 + +是,数据源不需要任务附加操作即可使用。 diff --git a/docs/img/new_ui/dev/datasource/vertica.png b/docs/img/new_ui/dev/datasource/vertica.png new file mode 100644 index 0000000000000000000000000000000000000000..208bcbb64f6dc564ced5dad12c6ddd125bd3bad6 GIT binary patch literal 241720 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

ecjlSLpNT_I8RycDGucc}sB&@Q1#IM2a#c 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 HyTbDeuE)Q4S+5` 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 S*?tr7@2Z;irJM`akNyv`=r>jX literal 0 HcmV?d00001 diff --git a/dolphinscheduler-bom/pom.xml b/dolphinscheduler-bom/pom.xml index 09955f7725..3994199726 100644 --- a/dolphinscheduler-bom/pom.xml +++ b/dolphinscheduler-bom/pom.xml @@ -57,6 +57,7 @@ 9.1.6 2.1.210 8.0.16 + 12.0.4-0 21.5.0.0 8.1.2.79 1.7.36 @@ -398,6 +399,12 @@ ${dameng-jdbc.version} + + com.vertica.jdbc + vertica-jdbc + ${vertica-jdbc.version} + + com.h2database h2 diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java index 25ea5bea48..9e7a378307 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java @@ -41,6 +41,7 @@ public class DataSourceConstants { public static final String ORG_APACHE_KYUUBI_JDBC_DRIVER = "org.apache.kyuubi.jdbc.KyuubiHiveDriver"; public static final String COM_OCEANBASE_JDBC_DRIVER = "com.oceanbase.jdbc.Driver"; public static final String NET_SNOWFLAKE_JDBC_DRIVER = "net.snowflake.client.jdbc.SnowflakeDriver"; + public static final String COM_VERTICA_JDBC_DRIVER = "com.vertica.jdbc.Driver"; /** * validation Query */ @@ -60,6 +61,7 @@ public class DataSourceConstants { public static final String SNOWFLAKE_VALIDATION_QUERY = "select 1"; public static final String KYUUBI_VALIDATION_QUERY = "select 1"; + public static final String VERTICA_VALIDATION_QUERY = "select 1"; /** * jdbc url @@ -82,6 +84,7 @@ public class DataSourceConstants { public static final String JDBC_DAMENG = "jdbc:dm://"; public static final String JDBC_OCEANBASE = "jdbc:oceanbase://"; public static final String JDBC_SNOWFLAKE = "jdbc:snowflake://"; + public static final String JDBC_VERTICA = "jdbc:vertica://"; /** * database type diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml index e84fab766f..d8ce6ec46f 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-all/pom.xml @@ -127,5 +127,10 @@ dolphinscheduler-datasource-kyuubi ${project.version} + + org.apache.dolphinscheduler + dolphinscheduler-datasource-vertica + ${project.version} + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTO.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTO.java index da9a6403eb..d197a3e210 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTO.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTO.java @@ -17,9 +17,11 @@ package org.apache.dolphinscheduler.plugin.datasource.api.datasource; +import org.apache.dolphinscheduler.common.constants.Constants; import org.apache.dolphinscheduler.spi.enums.DbType; import java.io.Serializable; +import java.util.ArrayList; import java.util.Map; /** @@ -89,6 +91,39 @@ public abstract class BaseDataSourceParamDTO implements Serializable { this.port = port; } + /** + * extract the host and port from the address, + * then set it + * @param address address like 'jdbc:mysql://host:port' or 'jdbc:hive2://zk1:port,zk2:port,zk3:port' + */ + public void setHostAndPortByAddress(String address) { + if (address == null) { + throw new IllegalArgumentException("address is null."); + } + address = address.trim(); + + int doubleSlashIndex = address.indexOf(Constants.DOUBLE_SLASH); + // trim address like 'jdbc:mysql://host:port/xxx' ends with '/xxx' + int slashIndex = address.indexOf(Constants.SLASH, doubleSlashIndex + 2); + String hostPortString = slashIndex == -1 ? address.substring(doubleSlashIndex + 2) + : address.substring(doubleSlashIndex + 2, slashIndex); + + ArrayList hosts = new ArrayList<>(); + String portString = null; + for (String hostPort : hostPortString.split(Constants.COMMA)) { + String[] parts = hostPort.split(Constants.COLON); + hosts.add(parts[0]); + if (portString == null && parts.length > 1) + portString = parts[1]; + } + if (hosts.size() == 0 || portString == null) { + throw new IllegalArgumentException(String.format("host:port '%s' illegal.", hostPortString)); + } + + this.host = String.join(Constants.COMMA, hosts); + this.port = Integer.parseInt(portString); + } + public String getDatabase() { return database; } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTOTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTOTest.java new file mode 100644 index 0000000000..b145c5a762 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/BaseDataSourceParamDTOTest.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.api.datasource; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** + * Use MySQLDataSourceParamDTO extends BaseDataSourceParamDTO for test. + */ +public class BaseDataSourceParamDTOTest { + + private MySQLDataSourceParamDTO mockDataSourceParamDTO; + + @BeforeEach + public void setUp() { + mockDataSourceParamDTO = new MySQLDataSourceParamDTO(); + } + + @Test + public void setHostAndPortByAddressTest1() { + mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://1.2.3.4:3306"); + assertEquals("1.2.3.4", mockDataSourceParamDTO.getHost()); + assertEquals(3306, mockDataSourceParamDTO.getPort()); + } + + @Test + public void setHostAndPortByAddressTest2() { + mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://1.2.3.4:3306/database"); + assertEquals("1.2.3.4", mockDataSourceParamDTO.getHost()); + assertEquals(3306, mockDataSourceParamDTO.getPort()); + } + + @Test + public void setHostAndPortByAddressTest3() { + mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://h1,h2,h3:3306"); + assertEquals("h1,h2,h3", mockDataSourceParamDTO.getHost()); + assertEquals(3306, mockDataSourceParamDTO.getPort()); + } + + @Test + public void setHostAndPortByAddressTest4() { + mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://h1:3306,h2:3306,h3:3306"); + assertEquals("h1,h2,h3", mockDataSourceParamDTO.getHost()); + assertEquals(3306, mockDataSourceParamDTO.getPort()); + } + + @Test + public void setHostAndPortByAddressTest5() { + Throwable exception = assertThrows(IllegalArgumentException.class, + () -> mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://h1")); + assertEquals("host:port 'h1' illegal.", exception.getMessage()); + } + + @Test + public void setHostAndPortByAddressTest6() { + Throwable exception = assertThrows(NumberFormatException.class, + () -> mockDataSourceParamDTO.setHostAndPortByAddress("jdbc:mysql://h1:port")); + assertEquals("For input string: \"port\"", exception.getMessage()); + } + +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/MySQLDataSourceParamDTO.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/MySQLDataSourceParamDTO.java new file mode 100644 index 0000000000..7417692fea --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/MySQLDataSourceParamDTO.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.api.datasource; + +import org.apache.dolphinscheduler.spi.enums.DbType; + +/** + * Used for test in BaseDataSourceParamDTOTest. + */ +public class MySQLDataSourceParamDTO extends BaseDataSourceParamDTO { + + @Override + public String toString() { + return "MySQLDataSourceParamDTO{" + + "name='" + name + '\'' + + ", note='" + note + '\'' + + ", host='" + host + '\'' + + ", port=" + port + + ", database='" + database + '\'' + + ", userName='" + userName + '\'' + + ", password='" + password + '\'' + + ", other='" + other + '\'' + + '}'; + } + + @Override + public DbType getType() { + return DbType.MYSQL; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/pom.xml new file mode 100644 index 0000000000..47f04db588 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + org.apache.dolphinscheduler + dolphinscheduler-datasource-plugin + dev-SNAPSHOT + + + dolphinscheduler-datasource-vertica + jar + ${project.artifactId} + + + + + org.apache.dolphinscheduler + dolphinscheduler-spi + provided + + + + org.apache.dolphinscheduler + dolphinscheduler-datasource-api + ${project.version} + + + + com.vertica.jdbc + vertica-jdbc + + + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannel.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannel.java new file mode 100644 index 0000000000..3616be438f --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannel.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica; + +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; +import org.apache.dolphinscheduler.spi.datasource.DataSourceClient; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class VerticaDataSourceChannel implements DataSourceChannel { + + @Override + public DataSourceClient createDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + return new VerticaDataSourceClient(baseConnectionParam, dbType); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactory.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactory.java new file mode 100644 index 0000000000..b507a207b4 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactory.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica; + +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannelFactory; + +import com.google.auto.service.AutoService; + +@AutoService(DataSourceChannelFactory.class) +public class VerticaDataSourceChannelFactory implements DataSourceChannelFactory { + + @Override + public String getName() { + return "vertica"; + } + + @Override + public DataSourceChannel create() { + return new VerticaDataSourceChannel(); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceClient.java new file mode 100644 index 0000000000..8e71d5cfdd --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceClient.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica; + +import org.apache.dolphinscheduler.plugin.datasource.api.client.CommonDataSourceClient; +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class VerticaDataSourceClient extends CommonDataSourceClient { + + public VerticaDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { + super(baseConnectionParam, dbType); + } + +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaConnectionParam.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaConnectionParam.java new file mode 100644 index 0000000000..18a5abbf4c --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaConnectionParam.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.param; + +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; + +public class VerticaConnectionParam extends BaseConnectionParam { + + @Override + public String toString() { + return "VerticaConnectionParam{" + + "user='" + user + '\'' + + ", password='" + password + '\'' + + ", address='" + address + '\'' + + ", database='" + database + '\'' + + ", jdbcUrl='" + jdbcUrl + '\'' + + ", driverLocation='" + driverLocation + '\'' + + ", driverClassName='" + driverClassName + '\'' + + ", validationQuery='" + validationQuery + '\'' + + ", other='" + other + '\'' + + '}'; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceParamDTO.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceParamDTO.java new file mode 100644 index 0000000000..fcffe48eec --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceParamDTO.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.param; + +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO; +import org.apache.dolphinscheduler.spi.enums.DbType; + +public class VerticaDataSourceParamDTO extends BaseDataSourceParamDTO { + + @Override + public String toString() { + return "VerticaDataSourceParamDTO{" + + "name='" + name + '\'' + + ", note='" + note + '\'' + + ", host='" + host + '\'' + + ", port=" + port + + ", database='" + database + '\'' + + ", userName='" + userName + '\'' + + ", password='" + password + '\'' + + ", other='" + other + '\'' + + '}'; + } + + @Override + public DbType getType() { + return DbType.VERTICA; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java new file mode 100644 index 0000000000..9505ab363d --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/main/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessor.java @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.param; + +import org.apache.dolphinscheduler.common.constants.DataSourceConstants; +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.AbstractDataSourceProcessor; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO; +import org.apache.dolphinscheduler.plugin.datasource.api.datasource.DataSourceProcessor; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import org.apache.dolphinscheduler.spi.datasource.ConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.apache.commons.collections4.MapUtils; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Map; + +import com.google.auto.service.AutoService; + +@AutoService(DataSourceProcessor.class) +public class VerticaDataSourceProcessor extends AbstractDataSourceProcessor { + + @Override + public BaseDataSourceParamDTO castDatasourceParamDTO(String paramJson) { + return JSONUtils.parseObject(paramJson, VerticaDataSourceParamDTO.class); + } + + @Override + public BaseDataSourceParamDTO createDatasourceParamDTO(String connectionJson) { + VerticaConnectionParam connectionParams = (VerticaConnectionParam) createConnectionParams(connectionJson); + VerticaDataSourceParamDTO verticaDatasourceParamDTO = new VerticaDataSourceParamDTO(); + + verticaDatasourceParamDTO.setHostAndPortByAddress(connectionParams.getAddress()); + verticaDatasourceParamDTO.setUserName(connectionParams.getUser()); + verticaDatasourceParamDTO.setDatabase(connectionParams.getDatabase()); + verticaDatasourceParamDTO.setOther(connectionParams.getOther()); + + return verticaDatasourceParamDTO; + } + + @Override + public BaseConnectionParam createConnectionParams(BaseDataSourceParamDTO dataSourceParam) { + VerticaDataSourceParamDTO verticaDatasourceParam = (VerticaDataSourceParamDTO) dataSourceParam; + // address format: "jdbc:vertica://VerticaHost:portNumber" + String address = String.format("%s%s:%s", DataSourceConstants.JDBC_VERTICA, verticaDatasourceParam.getHost(), + verticaDatasourceParam.getPort()); + // jdbc format: "jdbc:vertica://VerticaHost:portNumber/databaseName" + String jdbcUrl = String.format("%s/%s", address, verticaDatasourceParam.getDatabase()); + + VerticaConnectionParam verticaConnectionParam = new VerticaConnectionParam(); + verticaConnectionParam.setJdbcUrl(jdbcUrl); + verticaConnectionParam.setDatabase(verticaDatasourceParam.getDatabase()); + verticaConnectionParam.setAddress(address); + verticaConnectionParam.setUser(verticaDatasourceParam.getUserName()); + verticaConnectionParam.setPassword(PasswordUtils.encodePassword(verticaDatasourceParam.getPassword())); + verticaConnectionParam.setDriverClassName(getDatasourceDriver()); + verticaConnectionParam.setValidationQuery(getValidationQuery()); + + return verticaConnectionParam; + } + + @Override + public ConnectionParam createConnectionParams(String connectionJson) { + return JSONUtils.parseObject(connectionJson, VerticaConnectionParam.class); + } + + @Override + public String getDatasourceDriver() { + return DataSourceConstants.COM_VERTICA_JDBC_DRIVER; + } + + @Override + public String getValidationQuery() { + return DataSourceConstants.VERTICA_VALIDATION_QUERY; + } + + @Override + public String getJdbcUrl(ConnectionParam connectionParam) { + VerticaConnectionParam verticaConnectionParam = (VerticaConnectionParam) connectionParam; + String jdbcUrl = verticaConnectionParam.getJdbcUrl(); + if (MapUtils.isNotEmpty(verticaConnectionParam.getOther())) { + jdbcUrl = String.format("%s?%s", jdbcUrl, transformOther(verticaConnectionParam.getOther())); + } + return jdbcUrl; + } + + @Override + public Connection getConnection(ConnectionParam connectionParam) throws ClassNotFoundException, SQLException { + VerticaConnectionParam verticaConnectionParam = (VerticaConnectionParam) connectionParam; + Class.forName(getDatasourceDriver()); + String user = verticaConnectionParam.getUser(); + String password = PasswordUtils.decodePassword(verticaConnectionParam.getPassword()); + return DriverManager.getConnection(getJdbcUrl(connectionParam), user, password); + } + + @Override + public DbType getDbType() { + return DbType.VERTICA; + } + + @Override + public DataSourceProcessor create() { + return new VerticaDataSourceProcessor(); + } + + private String transformOther(Map otherMap) { + if (MapUtils.isEmpty(otherMap)) { + return null; + } + StringBuilder stringBuilder = new StringBuilder(); + otherMap.forEach((key, value) -> stringBuilder.append(String.format("%s=%s&", key, value))); + return stringBuilder.toString(); + } + +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactoryTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactoryTest.java new file mode 100644 index 0000000000..715c062d2c --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelFactoryTest.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica; + +import org.apache.dolphinscheduler.spi.datasource.DataSourceChannel; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class VerticaDataSourceChannelFactoryTest { + + @Test + public void testCreate() { + VerticaDataSourceChannelFactory sourceChannelFactory = new VerticaDataSourceChannelFactory(); + DataSourceChannel dataSourceChannel = sourceChannelFactory.create(); + Assertions.assertNotNull(dataSourceChannel); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelTest.java new file mode 100644 index 0000000000..49012585e0 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/VerticaDataSourceChannelTest.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica; + +import org.apache.dolphinscheduler.plugin.datasource.vertica.param.VerticaConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class VerticaDataSourceChannelTest { + + @Test + public void testCreateDataSourceClient() { + VerticaDataSourceChannel sourceChannel = Mockito.mock(VerticaDataSourceChannel.class); + VerticaDataSourceClient dataSourceClient = Mockito.mock(VerticaDataSourceClient.class); + Mockito.when(sourceChannel.createDataSourceClient(Mockito.any(), Mockito.any())).thenReturn(dataSourceClient); + Assertions.assertNotNull(sourceChannel.createDataSourceClient(new VerticaConnectionParam(), DbType.VERTICA)); + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessorTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessorTest.java new file mode 100644 index 0000000000..95767d6611 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/param/VerticaDataSourceProcessorTest.java @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.param; + +import org.apache.dolphinscheduler.common.constants.DataSourceConstants; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class VerticaDataSourceProcessorTest { + + private VerticaDataSourceProcessor verticaDatasourceProcessor = new VerticaDataSourceProcessor(); + + @Test + public void testCreateConnectionParams() { + Map props = new HashMap<>(); + props.put("serverTimezone", "utc"); + VerticaDataSourceParamDTO verticaDatasourceParamDTO = new VerticaDataSourceParamDTO(); + verticaDatasourceParamDTO.setUserName("root"); + verticaDatasourceParamDTO.setPassword("123456"); + verticaDatasourceParamDTO.setHost("localhost"); + verticaDatasourceParamDTO.setPort(5433); + verticaDatasourceParamDTO.setDatabase("default"); + verticaDatasourceParamDTO.setOther(props); + try (MockedStatic mockedStaticPasswordUtils = Mockito.mockStatic(PasswordUtils.class)) { + mockedStaticPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())).thenReturn("test"); + VerticaConnectionParam connectionParams = (VerticaConnectionParam) verticaDatasourceProcessor + .createConnectionParams(verticaDatasourceParamDTO); + Assertions.assertEquals("jdbc:vertica://localhost:5433", connectionParams.getAddress()); + Assertions.assertEquals("jdbc:vertica://localhost:5433/default", connectionParams.getJdbcUrl()); + } + } + + @Test + public void testCreateConnectionParams2() { + String connectionJson = + "{\"user\":\"root\",\"password\":\"123456\",\"address\":\"jdbc:vertica://localhost:5433\"" + + ",\"database\":\"default\",\"jdbcUrl\":\"jdbc:vertica://localhost:5433/default\"}"; + VerticaConnectionParam connectionParams = (VerticaConnectionParam) verticaDatasourceProcessor + .createConnectionParams(connectionJson); + Assertions.assertNotNull(connectionJson); + Assertions.assertEquals("root", connectionParams.getUser()); + } + + @Test + public void testGetDatasourceDriver() { + Assertions.assertEquals(DataSourceConstants.COM_VERTICA_JDBC_DRIVER, + verticaDatasourceProcessor.getDatasourceDriver()); + } + + @Test + public void testGetJdbcUrl() { + VerticaConnectionParam verticaConnectionParam = new VerticaConnectionParam(); + verticaConnectionParam.setJdbcUrl("jdbc:vertica://localhost:5433/default"); + Assertions.assertEquals( + "jdbc:vertica://localhost:5433/default", + verticaDatasourceProcessor.getJdbcUrl(verticaConnectionParam)); + } + + @Test + public void testGetDbType() { + Assertions.assertEquals(DbType.VERTICA, verticaDatasourceProcessor.getDbType()); + } + + @Test + public void testGetValidationQuery() { + Assertions.assertEquals(DataSourceConstants.VERTICA_VALIDATION_QUERY, + verticaDatasourceProcessor.getValidationQuery()); + } + + @Test + public void testGetDatasourceUniqueId() { + VerticaConnectionParam verticaConnectionParam = new VerticaConnectionParam(); + verticaConnectionParam.setJdbcUrl("jdbc:vertica://localhost:5433/default"); + verticaConnectionParam.setUser("root"); + verticaConnectionParam.setPassword("123456"); + try (MockedStatic mockedPasswordUtils = Mockito.mockStatic(PasswordUtils.class)) { + mockedPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())).thenReturn("123456"); + Assertions.assertEquals("vertica@root@123456@jdbc:vertica://localhost:5433/default", + verticaDatasourceProcessor.getDatasourceUniqueId(verticaConnectionParam, DbType.VERTICA)); + } + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/provider/JDBCDataSourceProviderTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/provider/JDBCDataSourceProviderTest.java new file mode 100644 index 0000000000..7dbd75d46b --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/provider/JDBCDataSourceProviderTest.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.provider; + +import org.apache.dolphinscheduler.plugin.datasource.api.provider.JDBCDataSourceProvider; +import org.apache.dolphinscheduler.plugin.datasource.vertica.param.VerticaConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.zaxxer.hikari.HikariDataSource; + +@ExtendWith(MockitoExtension.class) +public class JDBCDataSourceProviderTest { + + @Test + public void testCreateJdbcDataSource() { + try ( + MockedStatic mockedJDBCDataSourceProvider = + Mockito.mockStatic(JDBCDataSourceProvider.class)) { + HikariDataSource dataSource = Mockito.mock(HikariDataSource.class); + mockedJDBCDataSourceProvider + .when(() -> JDBCDataSourceProvider.createJdbcDataSource(Mockito.any(), Mockito.any())) + .thenReturn(dataSource); + Assertions.assertNotNull( + JDBCDataSourceProvider.createJdbcDataSource(new VerticaConnectionParam(), DbType.VERTICA)); + } + } + + @Test + public void testCreateOneSessionJdbcDataSource() { + try ( + MockedStatic mockedJDBCDataSourceProvider = + Mockito.mockStatic(JDBCDataSourceProvider.class)) { + HikariDataSource dataSource = Mockito.mock(HikariDataSource.class); + mockedJDBCDataSourceProvider + .when(() -> JDBCDataSourceProvider.createOneSessionJdbcDataSource(Mockito.any(), Mockito.any())) + .thenReturn(dataSource); + Assertions.assertNotNull( + JDBCDataSourceProvider.createOneSessionJdbcDataSource(new VerticaConnectionParam(), + DbType.VERTICA)); + } + } + +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/utils/DataSourceUtilsTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/utils/DataSourceUtilsTest.java new file mode 100644 index 0000000000..1c10d2b726 --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-vertica/src/test/java/org/apache/dolphinscheduler/plugin/datasource/vertica/utils/DataSourceUtilsTest.java @@ -0,0 +1,149 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.vertica.utils; + +import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.utils.PropertyUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.plugin.DataSourceClientProvider; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.CommonUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.DataSourceUtils; +import org.apache.dolphinscheduler.plugin.datasource.api.utils.PasswordUtils; +import org.apache.dolphinscheduler.plugin.datasource.vertica.param.VerticaConnectionParam; +import org.apache.dolphinscheduler.plugin.datasource.vertica.param.VerticaDataSourceParamDTO; +import org.apache.dolphinscheduler.spi.datasource.ConnectionParam; +import org.apache.dolphinscheduler.spi.enums.DbType; + +import java.sql.Connection; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class DataSourceUtilsTest { + + @Test + public void testCheckDatasourceParam() { + VerticaDataSourceParamDTO verticaDatasourceParamDTO = new VerticaDataSourceParamDTO(); + verticaDatasourceParamDTO.setHost("localhost"); + verticaDatasourceParamDTO.setDatabase("default"); + Map other = new HashMap<>(); + other.put("serverTimezone", "Asia/Shanghai"); + other.put("queryTimeout", "-1"); + other.put("characterEncoding", "utf8"); + verticaDatasourceParamDTO.setOther(other); + DataSourceUtils.checkDatasourceParam(verticaDatasourceParamDTO); + Assertions.assertTrue(true); + } + + @Test + public void testBuildConnectionParams() { + VerticaDataSourceParamDTO verticaDatasourceParamDTO = new VerticaDataSourceParamDTO(); + verticaDatasourceParamDTO.setHost("localhost"); + verticaDatasourceParamDTO.setDatabase("default"); + verticaDatasourceParamDTO.setUserName("root"); + verticaDatasourceParamDTO.setPort(5433); + verticaDatasourceParamDTO.setPassword("123456"); + + try ( + MockedStatic mockedStaticPasswordUtils = Mockito.mockStatic(PasswordUtils.class); + MockedStatic mockedStaticCommonUtils = Mockito.mockStatic(CommonUtils.class)) { + mockedStaticPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())) + .thenReturn("123456"); + mockedStaticCommonUtils.when(CommonUtils::getKerberosStartupState).thenReturn(false); + ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(verticaDatasourceParamDTO); + Assertions.assertNotNull(connectionParam); + } + } + + @Test + public void testBuildConnectionParams2() { + VerticaDataSourceParamDTO verticaDatasourceParamDTO = new VerticaDataSourceParamDTO(); + verticaDatasourceParamDTO.setHost("localhost"); + verticaDatasourceParamDTO.setDatabase("default"); + verticaDatasourceParamDTO.setUserName("root"); + verticaDatasourceParamDTO.setPort(5433); + verticaDatasourceParamDTO.setPassword("123456"); + ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(DbType.VERTICA, + JSONUtils.toJsonString(verticaDatasourceParamDTO)); + Assertions.assertNotNull(connectionParam); + } + + @Test + public void testGetConnection() throws ExecutionException { + try ( + MockedStatic mockedStaticPropertyUtils = Mockito.mockStatic(PropertyUtils.class); + MockedStatic mockedStaticDataSourceClientProvider = + Mockito.mockStatic(DataSourceClientProvider.class)) { + mockedStaticPropertyUtils.when(() -> PropertyUtils.getLong("kerberos.expire.time", 24L)).thenReturn(24L); + DataSourceClientProvider clientProvider = Mockito.mock(DataSourceClientProvider.class); + mockedStaticDataSourceClientProvider.when(DataSourceClientProvider::getInstance).thenReturn(clientProvider); + + Connection connection = Mockito.mock(Connection.class); + Mockito.when(clientProvider.getConnection(Mockito.any(), Mockito.any())).thenReturn(connection); + + VerticaConnectionParam connectionParam = new VerticaConnectionParam(); + connectionParam.setUser("root"); + connectionParam.setPassword("123456"); + connection = DataSourceClientProvider.getInstance().getConnection(DbType.VERTICA, connectionParam); + + Assertions.assertNotNull(connection); + } + + } + + @Test + public void testGetJdbcUrl() { + VerticaConnectionParam verticaConnectionParam = new VerticaConnectionParam(); + verticaConnectionParam.setJdbcUrl("jdbc:vertica://localhost:5433"); + String jdbcUrl = DataSourceUtils.getJdbcUrl(DbType.VERTICA, verticaConnectionParam); + Assertions.assertEquals("jdbc:vertica://localhost:5433", + jdbcUrl); + } + + @Test + public void testBuildDatasourceParamDTO() { + VerticaConnectionParam connectionParam = new VerticaConnectionParam(); + connectionParam.setJdbcUrl("jdbc:vertica://localhost:5433"); + connectionParam.setAddress("jdbc:vertica://localhost:5433"); + connectionParam.setUser("root"); + connectionParam.setPassword("123456"); + + Assertions.assertNotNull( + DataSourceUtils.buildDatasourceParamDTO(DbType.VERTICA, JSONUtils.toJsonString(connectionParam))); + + } + + @Test + public void testGetDatasourceProcessor() { + Assertions.assertNotNull(DataSourceUtils.getDatasourceProcessor(DbType.VERTICA)); + } + + @Test + public void testGetDatasourceProcessorError() { + Assertions.assertThrows(Exception.class, () -> { + DataSourceUtils.getDatasourceProcessor(null); + }); + } +} diff --git a/dolphinscheduler-datasource-plugin/pom.xml b/dolphinscheduler-datasource-plugin/pom.xml index 332bab306a..4882382cd7 100644 --- a/dolphinscheduler-datasource-plugin/pom.xml +++ b/dolphinscheduler-datasource-plugin/pom.xml @@ -50,6 +50,7 @@ dolphinscheduler-datasource-ssh dolphinscheduler-datasource-databend dolphinscheduler-datasource-snowflake + dolphinscheduler-datasource-vertica diff --git a/dolphinscheduler-dist/release-docs/LICENSE b/dolphinscheduler-dist/release-docs/LICENSE index 4cfa9268b5..10562bf9e3 100644 --- a/dolphinscheduler-dist/release-docs/LICENSE +++ b/dolphinscheduler-dist/release-docs/LICENSE @@ -788,3 +788,8 @@ SIL licenses JDOM licenses ======================================== jdom2 2.0.6.1: https://github.com/hunterhacker/jdom/blob/master/LICENSE.txt JDOM + +======================================== +Vertica Client Driver License +======================================== + vertica-jdbc 12.0.4-0: https://mvnrepository.com/artifact/com.vertica.jdbc/vertica-jdbc/12.0.4-0, Vertica Client Driver License diff --git a/dolphinscheduler-dist/release-docs/NOTICE b/dolphinscheduler-dist/release-docs/NOTICE index 65055179ec..88f29ae796 100644 --- a/dolphinscheduler-dist/release-docs/NOTICE +++ b/dolphinscheduler-dist/release-docs/NOTICE @@ -2118,3 +2118,26 @@ Copyright 2010-2017 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). + +========================================================================= + +Vertica Client Driver License NOTICE + +========================================================================= + +End User License Agreement +BY SELECTING “ACCEPT AND CONTINUE” BELOW, YOU ARE EXPRESSLY ACKNOWLEDGING AND AGREEING THAT THIS AGREEMENT, BETWEEN YOU AND MICRO FOCUS LLC (WITH ITS AFFILIATES, “MICRO FOCUS” OR “WE”), GOVERNS YOUR USE OF THE VERTICA CLIENT DRIVER SOFTWARE (TOGETHER WITH ANY UPDATES AND ENHANCEMENTS TO IT, AND ACCOMPANYING DOCUMENTATION, THE “DRIVERS”) THAT WE MAKE AVAILABLE TO YOU IN CONNECTION WITH MICRO FOCUS’ VERTICA SOFTWARE PRODUCT (OR ANY SUCCESSOR PRODUCT DESIGNATED BY US IN WRITING, THE “SOFTWARE”). THIS AGREEMENT GOVERNS THE LICENSING OF THE DRIVERS ONLY AND IF YOU WISH TO USE THE VERTICA SOFTWARE PRODUCT ITSELF, YOU WILL NEED TO LICENSE IT SEPARATELY UNDER THE APPROPRIATE COMMERCIAL OR COMMUNITY EDITION LICENSE. + +1. Except as stated below in this Agreement, the Drivers are governed by the Micro Focus End User License Agreement (the “EULA”) located at https://www.microfocus.com/en-us/legal/software-licensing. In the event of any conflict between the terms of this Agreement and the EULA, this Agreement will control and take precedence. +2. This Agreement grants you a limited, nonexclusive, non-transferable, non-sublicensable license to install, use, and copy the object code of the Drivers free of charge for the sole purpose of developing a program that can use the Drivers to connect to the Software database. You may generally use the Drivers to connect to the Software. You may also distribute the Drivers, provided that (a) you distribute the Drivers as part of a software program or package that you develop; (b) you require end users to agree to terms that are consistent with, and at least as protective of Micro Focus and the Drivers as, this Agreement; (c) you retain without modification any copyright, patent, trademark, or attribution notices that are present in the Drivers; and (d) you distribute the Drivers for the sole purpose of your program connecting to the Software. +3. Your rights under this Agreement will immediately and automatically terminate if you do not comply with any term or condition of this Agreement. In the case of termination, you must cease all use and destroy all copies of the Drivers. We may modify, suspend, discontinue, or terminate your right to use part or all of the Drivers at any time without notice to you and Micro Focus will not be liable to you should it exercise those rights. We may amend this Agreement at our sole discretion by posting the revised terms on the Micro Focus website https://www.vertica.com/download/vertica/client-drivers/ or within the Drivers. Your continued use of the Drivers after any amendment’s effective date evidence your agreement to be bound by it. +4. The Drivers are the sole and exclusive intellectual property of Micro Focus. No support is provided for the Drivers. +5. Some components of the Drivers may be governed by applicable open source software licenses. Your license rights with respect to these individual components are defined by the applicable open source software licenses, and nothing in this Agreement will restrict, limit, or otherwise affect any rights or obligations you may have, or conditions to which you may be subject, under such open source software licenses. +6. The Drivers contains third party components, including any run time or other elements licensed to Micro Focus by a third party licensor (“Third Party Components”). Third Party Components are the sole and exclusive intellectual property of the applicable third party licensor. You agree that to the extent required by a third party licensor of a Third Party Component, that third party licensor is an intended third party beneficiary of this Agreement as necessary to protect its intellectual property rights software and limit certain uses thereof. You agree that any third party licensors of Third Party Components will have no liability with respect to the Third Party Components under this agreement. +7. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THE EULA, YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT USE AND DISTRIBUTION OF THE DRIVERS IS AT YOUR SOLE RISK AND ARE DELIVERED TO YOU “AS IS” WITHOUT WARRANTY OF ANY KIND, AND MICRO FOCUS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED. +8. You are liable for and will defend, indemnify, and hold harmless Micro Focus and its affiliates, officers, directors, agents, and employees, from and against any claims, liability, loss, damage, cost, or expense (including reasonable attorneys’ fees) arising out of (i) your distribution or use of your programs, (ii) your use of the Drivers, (iii) violation of applicable law, or (iv) violation of any right of any person or entity, including without limitation intellectual property rights. +9. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THE EULA, TO THE EXTENT NOT PROHIBITED BY LAW, MICRO FOCUS WILL NOT BE LIABLE TO YOU FOR ANY INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR BREACH OF ANY EXPRESS OR IMPLIED WARRANTY, BREACH OF CONTRACT, NEGLIGENCE, STRICT LIABILITY, OR ANY OTHER LEGAL THEORY RELATED TO THE DRIVERS, INCLUDING WITHOUT LIMITATION ANY DAMAGES ARISING OUT OF LOSS OF PROFITS, REVENUE, DATA, OR USE OF THE DRIVERS. IN ANY CASE, MICRO FOCUS’ AGGREGATE LIABILITY UNDER THIS AGREEMENT WILL BE LIMITED TO $100.00. + +[ ] I consent and accept the terms and conditions stated in this Agreement. + +========================================================================= diff --git a/dolphinscheduler-dist/release-docs/licenses/LICENSE-vertica-jdbc.txt b/dolphinscheduler-dist/release-docs/licenses/LICENSE-vertica-jdbc.txt new file mode 100644 index 0000000000..88a1093401 --- /dev/null +++ b/dolphinscheduler-dist/release-docs/licenses/LICENSE-vertica-jdbc.txt @@ -0,0 +1,18 @@ +Vertica Client Driver License +https://www.vertica.com/download/vertica/client-drivers/ + + +End User License Agreement +BY SELECTING “ACCEPT AND CONTINUE” BELOW, YOU ARE EXPRESSLY ACKNOWLEDGING AND AGREEING THAT THIS AGREEMENT, BETWEEN YOU AND MICRO FOCUS LLC (WITH ITS AFFILIATES, “MICRO FOCUS” OR “WE”), GOVERNS YOUR USE OF THE VERTICA CLIENT DRIVER SOFTWARE (TOGETHER WITH ANY UPDATES AND ENHANCEMENTS TO IT, AND ACCOMPANYING DOCUMENTATION, THE “DRIVERS”) THAT WE MAKE AVAILABLE TO YOU IN CONNECTION WITH MICRO FOCUS’ VERTICA SOFTWARE PRODUCT (OR ANY SUCCESSOR PRODUCT DESIGNATED BY US IN WRITING, THE “SOFTWARE”). THIS AGREEMENT GOVERNS THE LICENSING OF THE DRIVERS ONLY AND IF YOU WISH TO USE THE VERTICA SOFTWARE PRODUCT ITSELF, YOU WILL NEED TO LICENSE IT SEPARATELY UNDER THE APPROPRIATE COMMERCIAL OR COMMUNITY EDITION LICENSE. + +1. Except as stated below in this Agreement, the Drivers are governed by the Micro Focus End User License Agreement (the “EULA”) located at https://www.microfocus.com/en-us/legal/software-licensing. In the event of any conflict between the terms of this Agreement and the EULA, this Agreement will control and take precedence. +2. This Agreement grants you a limited, nonexclusive, non-transferable, non-sublicensable license to install, use, and copy the object code of the Drivers free of charge for the sole purpose of developing a program that can use the Drivers to connect to the Software database. You may generally use the Drivers to connect to the Software. You may also distribute the Drivers, provided that (a) you distribute the Drivers as part of a software program or package that you develop; (b) you require end users to agree to terms that are consistent with, and at least as protective of Micro Focus and the Drivers as, this Agreement; (c) you retain without modification any copyright, patent, trademark, or attribution notices that are present in the Drivers; and (d) you distribute the Drivers for the sole purpose of your program connecting to the Software. +3. Your rights under this Agreement will immediately and automatically terminate if you do not comply with any term or condition of this Agreement. In the case of termination, you must cease all use and destroy all copies of the Drivers. We may modify, suspend, discontinue, or terminate your right to use part or all of the Drivers at any time without notice to you and Micro Focus will not be liable to you should it exercise those rights. We may amend this Agreement at our sole discretion by posting the revised terms on the Micro Focus website https://www.vertica.com/download/vertica/client-drivers/ or within the Drivers. Your continued use of the Drivers after any amendment’s effective date evidence your agreement to be bound by it. +4. The Drivers are the sole and exclusive intellectual property of Micro Focus. No support is provided for the Drivers. +5. Some components of the Drivers may be governed by applicable open source software licenses. Your license rights with respect to these individual components are defined by the applicable open source software licenses, and nothing in this Agreement will restrict, limit, or otherwise affect any rights or obligations you may have, or conditions to which you may be subject, under such open source software licenses. +6. The Drivers contains third party components, including any run time or other elements licensed to Micro Focus by a third party licensor (“Third Party Components”). Third Party Components are the sole and exclusive intellectual property of the applicable third party licensor. You agree that to the extent required by a third party licensor of a Third Party Component, that third party licensor is an intended third party beneficiary of this Agreement as necessary to protect its intellectual property rights software and limit certain uses thereof. You agree that any third party licensors of Third Party Components will have no liability with respect to the Third Party Components under this agreement. +7. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THE EULA, YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT USE AND DISTRIBUTION OF THE DRIVERS IS AT YOUR SOLE RISK AND ARE DELIVERED TO YOU “AS IS” WITHOUT WARRANTY OF ANY KIND, AND MICRO FOCUS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED. +8. You are liable for and will defend, indemnify, and hold harmless Micro Focus and its affiliates, officers, directors, agents, and employees, from and against any claims, liability, loss, damage, cost, or expense (including reasonable attorneys’ fees) arising out of (i) your distribution or use of your programs, (ii) your use of the Drivers, (iii) violation of applicable law, or (iv) violation of any right of any person or entity, including without limitation intellectual property rights. +9. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THE EULA, TO THE EXTENT NOT PROHIBITED BY LAW, MICRO FOCUS WILL NOT BE LIABLE TO YOU FOR ANY INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR BREACH OF ANY EXPRESS OR IMPLIED WARRANTY, BREACH OF CONTRACT, NEGLIGENCE, STRICT LIABILITY, OR ANY OTHER LEGAL THEORY RELATED TO THE DRIVERS, INCLUDING WITHOUT LIMITATION ANY DAMAGES ARISING OUT OF LOSS OF PROFITS, REVENUE, DATA, OR USE OF THE DRIVERS. IN ANY CASE, MICRO FOCUS’ AGGREGATE LIABILITY UNDER THIS AGREEMENT WILL BE LIMITED TO $100.00. + +[ ] I consent and accept the terms and conditions stated in this Agreement. diff --git a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java index 4360b8cfd0..1931f64015 100644 --- a/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java +++ b/dolphinscheduler-spi/src/main/java/org/apache/dolphinscheduler/spi/enums/DbType.java @@ -48,7 +48,8 @@ public enum DbType { SSH(17, "ssh"), KYUUBI(18, "kyuubi"), DATABEND(19, "databend"), - SNOWFLAKE(20, "snowflake"); + SNOWFLAKE(20, "snowflake"), + VERTICA(21, "vertica"); private static final Map DB_TYPE_MAP = Arrays.stream(DbType.values()).collect(toMap(DbType::getCode, Functions.identity())); diff --git a/dolphinscheduler-ui/src/service/modules/data-source/types.ts b/dolphinscheduler-ui/src/service/modules/data-source/types.ts index b445c974c8..d1b46f824b 100644 --- a/dolphinscheduler-ui/src/service/modules/data-source/types.ts +++ b/dolphinscheduler-ui/src/service/modules/data-source/types.ts @@ -24,6 +24,7 @@ type IDataBase = | 'ORACLE' | 'SQLSERVER' | 'DB2' + | 'VERTICA' | 'PRESTO' | 'REDSHIFT' | 'ATHENA' diff --git a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts index fa856d6b8d..6abfe6ecd6 100644 --- a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts +++ b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts @@ -390,6 +390,11 @@ export const datasourceType: IDataBaseOptionKeys = { label: 'DB2', defaultPort: 50000 }, + VERTICA: { + value: 'VERTICA', + label: 'VERTICA', + defaultPort: 5433 + }, PRESTO: { value: 'PRESTO', label: 'PRESTO', diff --git a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts index 46942a526f..bec381c55b 100644 --- a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts +++ b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-datasource.ts @@ -122,6 +122,11 @@ export function useDatasource( id: 16, code: 'DATABEND', disabled: false + }, + { + id: 21, + code: 'VERTICA', + disabled: false } ] diff --git a/tools/dependencies/known-dependencies.txt b/tools/dependencies/known-dependencies.txt index c3f101f445..6d00786891 100644 --- a/tools/dependencies/known-dependencies.txt +++ b/tools/dependencies/known-dependencies.txt @@ -482,4 +482,5 @@ casdoor-java-sdk-1.11.0.jar casdoor-spring-boot-starter-1.6.0.jar org.apache.oltu.oauth2.client-1.0.2.jar org.apache.oltu.oauth2.common-1.0.2.jar -snowflake-jdbc-3.13.10.jar \ No newline at end of file +snowflake-jdbc-3.13.10.jar +vertica-jdbc-12.0.4-0.jar