From 727cdd7c7e0ebc6e6cb98c06d44eaff82b2776e0 Mon Sep 17 00:00:00 2001 From: linghengqian Date: Wed, 22 Jan 2025 11:12:32 +0800 Subject: [PATCH] Add GraalVM Reachability Metadata and corresponding nativeTest for Presto --- RELEASE-NOTES.md | 1 + .../graalvm-native-image/_index.cn.md | 3 - .../graalvm-native-image/_index.en.md | 3 - .../database/PrestoDatabaseMetaData.java | 18 ++ .../presto-jdbc/0.290/proxy-config.json | 6 + .../presto-jdbc/0.290/reflect-config.json | 182 ++++++++++++++++++ .../presto-jdbc/0.290/resource-config.json | 17 ++ .../reflect-config.json | 79 ++++++-- .../resource-config.json | 7 +- .../reflect-config.json | 30 +++ pom.xml | 2 +- test/native/pom.xml | 11 ++ .../natived/commons/TestShardingService.java | 13 ++ .../natived/jdbc/databases/PrestoTest.java | 171 ++++++++++++++++ .../reflect-config.json | 48 +++-- .../properties/presto-config.properties | 22 +++ .../properties/presto-memory.properties | 18 ++ .../yaml/jdbc/databases/presto.yaml | 66 +++++++ 18 files changed, 654 insertions(+), 43 deletions(-) create mode 100644 infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/proxy-config.json create mode 100644 infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/reflect-config.json create mode 100644 infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/resource-config.json create mode 100644 test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PrestoTest.java create mode 100644 test/native/src/test/resources/test-native/properties/presto-config.properties create mode 100644 test/native/src/test/resources/test-native/properties/presto-memory.properties create mode 100644 test/native/src/test/resources/test-native/yaml/jdbc/databases/presto.yaml diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index cf3cede27504e6..a0035ffe865139 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -9,6 +9,7 @@ 1. Infra: Support for connecting to Presto's Memory Connector in ShardingSphere config - [#34432](https://github.com/apache/shardingsphere/pull/34432) 1. Metadata: Add support for partition tables in PostgreSQL [#34346](https://github.com/apache/shardingsphere/pull/34346) 1. SQL Binder: Support select aggregation function sql bind in projection and having - [#34379](https://github.com/apache/shardingsphere/pull/34379) +1. Proxy Native: Add GraalVM Reachability Metadata and corresponding nativeTest for Presto - [#34429](https://github.com/apache/shardingsphere/pull/34429) ### Bug Fixes diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md index f18270218c9f50..c1753144753496 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md @@ -330,9 +330,6 @@ ShardingSphere 的单元测试仅使用 Maven 模块 `io.github.linghengqian:hiv 9. 由于 https://github.com/apache/doris/issues/9426 的影响,当通过 Shardinghere JDBC 连接至 Apache Doris FE, 用户需自行提供 `apache/doris` 集成模块相关的 GraalVM Reachability Metadata。 -10. 由于 https://github.com/prestodb/presto/issues/23226 的影响,当通过 Shardinghere JDBC 连接至 Presto Server, -用户需自行提供 `com.facebook.presto:presto-jdbc` 和 `prestodb/presto` 集成模块相关的 GraalVM Reachability Metadata。 - ## 贡献 GraalVM Reachability Metadata ShardingSphere 对在 GraalVM Native Image 下的可用性的验证,是通过 GraalVM Native Build Tools 的 Maven Plugin 子项目来完成的。 diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md index 8ebe31f5e4248e..ac5380be022ed9 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md @@ -344,9 +344,6 @@ the Oracle JDBC Driver corresponding to the `com.oracle.database.jdbc:ojdbc8` Ma 9. Due to https://github.com/apache/doris/issues/9426, when connecting to Apache Doris FE via Shardinghere JDBC, users need to provide GraalVM Reachability Metadata related to the `apache/doris` integration module. -10. Due to https://github.com/prestodb/presto/issues/23226, when connecting to Presto Server via Shardinghere JDBC, - users need to provide GraalVM Reachability Metadata related to the `com.facebook.presto:presto-jdbc` and `prestodb/presto` integration module. - ## Contribute GraalVM Reachability Metadata The verification of ShardingSphere's availability under GraalVM Native Image is completed through the Maven Plugin subproject diff --git a/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java b/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java index 2d1001965c24a3..7be7c27054224c 100644 --- a/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java +++ b/infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java @@ -17,10 +17,13 @@ package org.apache.shardingsphere.infra.database.presto.metadata.database; +import com.cedarsoftware.util.CaseInsensitiveMap; import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter; +import java.sql.Types; +import java.util.Map; import java.util.Optional; /** @@ -43,6 +46,21 @@ public Optional getDefaultSchema() { return Optional.of("default"); } + /** + * TODO For prestodb/presto 0.290, + * the `DATA_TYPE` column of the `INFORMATION_SCHEMA.COLUMNS` table of `Memory` catalog only records strings like `varchar(50)`, + * which is expected to have potential optimizations on ShardingSphere side. + * + * @return Extra data types + */ + @Override + public Map getExtraDataTypes() { + Map result = new CaseInsensitiveMap<>(); + result.put("varchar(50)", Types.VARCHAR); + result.put("varchar(100)", Types.VARCHAR); + return result; + } + @Override public String getDatabaseType() { return "Presto"; diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/proxy-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/proxy-config.json new file mode 100644 index 00000000000000..2fcd0d1191f5d1 --- /dev/null +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/proxy-config.json @@ -0,0 +1,6 @@ +[ + { + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.guava.reflect.Reflection"}, + "interfaces":["java.lang.reflect.TypeVariable"] + } +] diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/reflect-config.json new file mode 100644 index 00000000000000..a9eb685bc04258 --- /dev/null +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/reflect-config.json @@ -0,0 +1,182 @@ +[ +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.client.StatementClientV1"}, + "name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignature", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.util.List","java.util.List","java.util.List"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignature", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.DefaultDeserializationContext"}, + "name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignatureParameter$ClientTypeSignatureParameterDeserializer", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.client.StatementClientV1"}, + "name":"com.facebook.presto.jdbc.internal.client.Column", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String","com.facebook.presto.jdbc.internal.client.ClientTypeSignature"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.Column", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.ErrorLocation", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.FailureInfo", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "allPublicConstructors": true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.QueryData", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.QueryError", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "allPublicConstructors": true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.QueryResults", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":["java.lang.String","java.net.URI","java.net.URI","java.net.URI","java.util.List","java.util.List","java.util.List","com.facebook.presto.jdbc.internal.client.StatementStats","com.facebook.presto.jdbc.internal.client.QueryError","java.util.List","java.lang.String","java.lang.Long"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.QueryStatusInfo", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoPreparedStatement"}, + "name":"com.facebook.presto.jdbc.internal.client.StageStats", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoResultSet$ResultsPageIterator"}, + "name":"com.facebook.presto.jdbc.internal.client.StageStats", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoStatement"}, + "name":"com.facebook.presto.jdbc.internal.client.StageStats", + "methods":[{"name":"","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.StageStats", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.client.StatementStats", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":["java.lang.String","boolean","boolean","boolean","int","int","int","int","int","long","long","long","long","long","long","long","long","long","long","long","com.facebook.presto.jdbc.internal.client.StageStats","com.facebook.presto.jdbc.internal.common.RuntimeStats"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.std.MapDeserializer"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeMetric", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":["java.lang.String","com.facebook.presto.jdbc.internal.common.RuntimeUnit","long","long","long","long"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeStats", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.AnnotatedConstructor"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeStats", + "methods":[{"name":"","parameterTypes":["java.util.Map"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.std.MapDeserializer"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.JacksonAnnotationIntrospector"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit", + "allDeclaredFields":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.util.ClassUtil"}, + "name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit", + "allDeclaredFields":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectMapper"}, + "name":"com.facebook.presto.jdbc.internal.common.type.ParameterKind", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.AnnotatedMethod"}, + "name":"com.facebook.presto.jdbc.internal.common.type.ParameterKind", + "methods":[{"name":"fromJsonValue","parameterTypes":["java.lang.String"] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.guava.reflect.Types$TypeVariableInvocationHandler"}, + "name":"com.facebook.presto.jdbc.internal.guava.reflect.Types$TypeVariableImpl", + "queryAllPublicMethods":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7Handlers"}, + "name":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7HandlersImpl", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7Support"}, + "name":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7SupportImpl", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.com.facebook.airlift.json.ObjectMapperProvider"}, + "name":"com.facebook.presto.jdbc.internal.joda.time.DateTime" +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.spi.PrestoWarning", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"}, + "name":"com.facebook.presto.jdbc.internal.spi.WarningCode", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +} +] diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/resource-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/resource-config.json new file mode 100644 index 00000000000000..4b5051ca87cd27 --- /dev/null +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.facebook.presto/presto-jdbc/0.290/resource-config.json @@ -0,0 +1,17 @@ +{ + "resources":{ + "includes":[{ + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.common.type.TimeZoneKey"}, + "pattern":"\\Qcom/facebook/presto/jdbc/internal/common/type/zone-index.properties\\E" + }, { + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"}, + "pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/ZoneInfoMap\\E" + }, { + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"}, + "pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/Asia/Shanghai\\E" + }, { + "condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"}, + "pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/Etc/UTC\\E" + }]}, + "bundles":[] +} diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json index 5ea99760f5590a..9149d1a1873511 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reflect-config.json @@ -28,7 +28,7 @@ "name":"[Lcom.github.dockerjava.api.model.VolumesFrom;" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.connection.DriverDatabaseConnectionManager$$Lambda/0x00007f7c3fdf9c28"}, + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.connection.DriverDatabaseConnectionManager$$Lambda/0x00007f957fe19dd8"}, "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" }, { @@ -59,6 +59,10 @@ "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.postgresql.metadata.data.loader.PostgreSQLMetaDataLoader"}, "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.presto.metadata.data.loader.PrestoMetaDataLoader"}, + "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" +}, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.sqlserver.metadata.data.loader.SQLServerMetaDataLoader"}, "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" @@ -75,10 +79,6 @@ "condition":{"typeReachable":"org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder"}, "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" }, -{ - "condition":{"typeReachable":"org.apache.shardingsphere.mode.metadata.MetaDataContexts"}, - "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" -}, { "condition":{"typeReachable":"org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService"}, "name":"[Lcom.zaxxer.hikari.util.ConcurrentBag$IConcurrentBagEntry;" @@ -1595,6 +1595,22 @@ "condition":{"typeReachable":"org.apache.shardingsphere.infra.props.TypedPropertyValue"}, "name":"org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDatabaseType" }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal"}, + "name":"org.apache.shardingsphere.infra.database.presto.connector.PrestoConnectionPropertiesParser" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDataLoader"}, + "name":"org.apache.shardingsphere.infra.database.presto.metadata.data.loader.PrestoMetaDataLoader" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry"}, + "name":"org.apache.shardingsphere.infra.database.presto.metadata.database.PrestoDatabaseMetaData" +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.infra.props.TypedPropertyValue"}, + "name":"org.apache.shardingsphere.infra.database.presto.type.PrestoDatabaseType" +}, { "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal"}, "name":"org.apache.shardingsphere.infra.database.sql92.connector.SQL92ConnectionPropertiesParser" @@ -3401,6 +3417,26 @@ "name":"org.apache.shardingsphere.sql.parser.postgresql.visitor.statement.type.PostgreSQLDMLStatementVisitor", "methods":[{"name":"","parameterTypes":[] }] }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.presto.parser.PrestoLexer", + "methods":[{"name":"","parameterTypes":["org.antlr.v4.runtime.CharStream"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.presto.parser.PrestoParser", + "methods":[{"name":"","parameterTypes":["org.antlr.v4.runtime.TokenStream"] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.core.database.visitor.SQLStatementVisitorFactory"}, + "name":"org.apache.shardingsphere.sql.parser.presto.visitor.statement.PrestoStatementVisitorFacade", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.presto.visitor.statement.type.PrestoDDLStatementVisitor", + "methods":[{"name":"","parameterTypes":[] }] +}, { "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.core.database.visitor.SQLStatementVisitorFactory"}, "name":"org.apache.shardingsphere.sql.parser.sql92.visitor.statement.SQL92StatementVisitorFacade", @@ -3448,7 +3484,7 @@ }, { "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, - "name":"org.apache.shardingsphere.sql.parser.statement.firebird.ddl.FirebirdCreateTableStatement", + "name":"org.apache.shardingsphere.sql.parser.statement.firebird.ddl.FirebirdDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { @@ -3477,13 +3513,13 @@ "methods":[{"name":"","parameterTypes":[] }] }, { - "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "condition":{"typeReachable":"org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory"}, "name":"org.apache.shardingsphere.sql.parser.statement.mysql.ddl.MySQLCreateTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { - "condition":{"typeReachable":"org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory"}, - "name":"org.apache.shardingsphere.sql.parser.statement.mysql.ddl.MySQLCreateTableStatement", + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.mysql.ddl.MySQLDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { @@ -3528,7 +3564,7 @@ }, { "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, - "name":"org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussCreateTableStatement", + "name":"org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { @@ -3547,13 +3583,13 @@ "methods":[{"name":"","parameterTypes":[] }] }, { - "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.parse.PostgreSQLComParseExecutor"}, "name":"org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLCreateTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { - "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.parse.PostgreSQLComParseExecutor"}, - "name":"org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLCreateTableStatement", + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.postgresql.ddl.PostgreSQLDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { @@ -3598,7 +3634,22 @@ }, { "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, - "name":"org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerCreateTableStatement", + "name":"org.apache.shardingsphere.sql.parser.statement.presto.ddl.PrestoDropTableStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.presto.dml.PrestoInsertStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.presto.dml.PrestoSelectStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, { diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json index 90fc000ab6f764..1b4cc4984f1271 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/resource-config.json @@ -91,7 +91,7 @@ "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.connection.DriverDatabaseConnectionManager"}, "pattern":"\\QMETA-INF/services/com.clickhouse.client.ClickHouseClient\\E" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.connection.DriverDatabaseConnectionManager$$Lambda/0x00007f7c3fca2710"}, + "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.connection.DriverDatabaseConnectionManager$$Lambda/0x00007f957fcc2710"}, "pattern":"\\QMETA-INF/services/com.clickhouse.client.ClickHouseClient\\E" }, { "condition":{"typeReachable":"org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource"}, @@ -271,7 +271,7 @@ "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal"}, "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.infra.executor.checker.SQLExecutionChecker\\E" }, { - "condition":{"typeReachable":"org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine"}, + "condition":{"typeReachable":"org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal"}, "pattern":"\\QMETA-INF/services/org.apache.shardingsphere.infra.executor.sql.hook.SQLExecutionHook\\E" }, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.executor.sql.prepare.AbstractExecutionPrepareEngine"}, @@ -2055,6 +2055,9 @@ }, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, "pattern":"\\Qtest-native/yaml/jdbc/databases/postgresql.yaml\\E" + }, { + "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, + "pattern":"\\Qtest-native/yaml/jdbc/databases/presto.yaml\\E" }, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.url.classpath.ClassPathURLLoader"}, "pattern":"\\Qtest-native/yaml/jdbc/databases/sqlserver.yaml\\E" diff --git a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json index 7cdc40c4f3c6f9..e19a383848146e 100644 --- a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json +++ b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reflect-config.json @@ -198,6 +198,11 @@ "name":"java.net.SocketException", "methods":[{"name":"","parameterTypes":["java.lang.String"] }] }, +{ + "condition":{"typeReachable":"java.net.SocketTimeoutException"}, + "name":"java.net.SocketTimeoutException", + "methods":[{"name":"","parameterTypes":["java.lang.String"] }] +}, { "condition":{"typeReachable":"org.apache.shardingsphere.infra.util.yaml.YamlEngine"}, "name":"org.apache.shardingsphere.encrypt.yaml.config.rule.YamlEncryptColumnItemRuleConfiguration", @@ -367,6 +372,31 @@ "name":"org.apache.shardingsphere.sql.parser.statement.firebird.ddl.FirebirdDropTableStatement", "methods":[{"name":"","parameterTypes":[] }] }, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.presto.visitor.statement.type.PrestoDMLStatementVisitor"}, + "name":"org.apache.shardingsphere.sql.parser.presto.visitor.statement.type.PrestoDMLStatementVisitor", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.statement.presto.ddl.PrestoDropTableStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.presto.ddl.PrestoDropTableStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussCreateTableStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.opengauss.ddl.OpenGaussCreateTableStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.statement.firebird.ddl.FirebirdCreateTableStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.firebird.ddl.FirebirdCreateTableStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerCreateTableStatement"}, + "name":"org.apache.shardingsphere.sql.parser.statement.sqlserver.ddl.SQLServerCreateTableStatement", + "methods":[{"name":"","parameterTypes":[] }] +}, { "condition":{"typeReachable":"javax.security.auth.login.Configuration"}, "name":"sun.security.provider.ConfigFile", diff --git a/pom.xml b/pom.xml index 0dcf96dd3e6bb9..af5a2a3228c392 100644 --- a/pom.xml +++ b/pom.xml @@ -131,7 +131,7 @@ 4.0.1 1.6.0 3.3.6 - 0.288.1 + 0.290 5.0.6.java8 4.0.3 diff --git a/test/native/pom.xml b/test/native/pom.xml index 4c306022985b16..8e87d2ec297ebc 100644 --- a/test/native/pom.xml +++ b/test/native/pom.xml @@ -147,6 +147,12 @@ ${project.version} test + + org.apache.shardingsphere + shardingsphere-parser-sql-presto + ${project.version} + test + org.awaitility @@ -212,6 +218,11 @@ jaybird test + + com.facebook.presto + presto-jdbc + test + org.testcontainers junit-jupiter diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java index 552484ede967d5..004ccc83476b36 100644 --- a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java @@ -125,6 +125,19 @@ public void processSuccessInHive() throws SQLException { assertThat(addressRepository.selectAll(), equalTo(Collections.emptyList())); } + /** + * Process success in Presto Memory Connector. + * TODO ShardingSphere's Presto integration has a bug in transaction support. + * Can't execute {@code orderItemRepository.assertRollbackWithTransactions();} here. + * Presto Memory Connector does not support `DELETE FROM` SQL. + * + * @throws SQLException SQL exception + */ + public void processSuccessInPresto() throws SQLException { + insertData(Statement.RETURN_GENERATED_KEYS); + extracted(); + } + /** * Insert data. * diff --git a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PrestoTest.java b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PrestoTest.java new file mode 100644 index 00000000000000..92b96868f27e58 --- /dev/null +++ b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/PrestoTest.java @@ -0,0 +1,171 @@ +/* + * 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.shardingsphere.test.natived.jdbc.databases; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection; +import org.apache.shardingsphere.infra.database.core.DefaultDatabase; +import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit; +import org.apache.shardingsphere.mode.manager.ContextManager; +import org.apache.shardingsphere.test.natived.commons.TestShardingService; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledInNativeImage; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.MountableFile; + +import javax.sql.DataSource; +import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.time.Duration; +import java.util.stream.Stream; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; + +/** + * Unable to use `org.testcontainers:presto:1.20.4` under GraalVM Native Image. + * Background comes from testcontainers/testcontainers-java#8657. + */ +@SuppressWarnings({"resource", "SqlNoDataSourceInspection"}) +@EnabledInNativeImage +@Testcontainers +public class PrestoTest { + + private final String systemPropKeyPrefix = "fixture.test-native.yaml.database.presto."; + + private String baseJdbcUrl; + + @Container + private final GenericContainer container = new GenericContainer<>("prestodb/presto:0.290") + .withExposedPorts(8080) + .withCopyFileToContainer( + MountableFile.forHostPath(Paths.get("src/test/resources/test-native/properties/presto-memory.properties").toAbsolutePath()), + "/opt/presto-server/etc/catalog/memory.properties") + .withCopyFileToContainer( + MountableFile.forHostPath(Paths.get("src/test/resources/test-native/properties/presto-config.properties").toAbsolutePath()), + "/opt/presto-server/etc/config.properties") + .waitingFor(Wait.forHttp("/v1/info/state").forPort(8080).forResponsePredicate("\"ACTIVE\""::equals)); + + private DataSource logicDataSource; + + @BeforeEach + void beforeEach() { + assertThat(System.getProperty(systemPropKeyPrefix + "ds0.jdbc-url"), is(nullValue())); + assertThat(System.getProperty(systemPropKeyPrefix + "ds1.jdbc-url"), is(nullValue())); + assertThat(System.getProperty(systemPropKeyPrefix + "ds2.jdbc-url"), is(nullValue())); + } + + @AfterEach + void afterEach() throws SQLException { + try (Connection connection = logicDataSource.getConnection()) { + ContextManager contextManager = connection.unwrap(ShardingSphereConnection.class).getContextManager(); + for (StorageUnit each : contextManager.getStorageUnits(DefaultDatabase.LOGIC_NAME).values()) { + each.getDataSource().unwrap(HikariDataSource.class).close(); + } + contextManager.close(); + } + System.clearProperty(systemPropKeyPrefix + "ds0.jdbc-url"); + System.clearProperty(systemPropKeyPrefix + "ds1.jdbc-url"); + System.clearProperty(systemPropKeyPrefix + "ds2.jdbc-url"); + } + + @Test + void assertShardingInLocalTransactions() throws SQLException { + baseJdbcUrl = "jdbc:presto://localhost:" + container.getMappedPort(8080) + "/memory"; + logicDataSource = createDataSource(); + TestShardingService testShardingService = new TestShardingService(logicDataSource); + testShardingService.processSuccessInPresto(); + testShardingService.cleanEnvironment(); + } + + private DataSource createDataSource() throws SQLException { + Awaitility.await().atMost(Duration.ofMinutes(1L)).ignoreExceptions().until(() -> { + try (Connection con = DriverManager.getConnection(baseJdbcUrl, "test", null)) { + con.createStatement().execute("SHOW SCHEMAS"); + } + return true; + }); + try ( + Connection con = DriverManager.getConnection(baseJdbcUrl, "test", null); + Statement stmt = con.createStatement()) { + stmt.execute("CREATE SCHEMA memory.demo_ds_0"); + stmt.execute("CREATE SCHEMA memory.demo_ds_1"); + stmt.execute("CREATE SCHEMA memory.demo_ds_2"); + } + Stream.of("demo_ds_0", "demo_ds_1", "demo_ds_2").forEach(this::initSchema); + HikariConfig config = new HikariConfig(); + config.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver"); + config.setJdbcUrl("jdbc:shardingsphere:classpath:test-native/yaml/jdbc/databases/presto.yaml?placeholder-type=system_props"); + System.setProperty(systemPropKeyPrefix + "ds0.jdbc-url", baseJdbcUrl + "/demo_ds_0"); + System.setProperty(systemPropKeyPrefix + "ds1.jdbc-url", baseJdbcUrl + "/demo_ds_1"); + System.setProperty(systemPropKeyPrefix + "ds2.jdbc-url", baseJdbcUrl + "/demo_ds_2"); + return new HikariDataSource(config); + } + + /** + * TODO `shardingsphere-parser-sql-presto` module does not support `create table` statements yet. + * Presto Memory Connector does not support AUTO_INCREMENT columns. + * Presto Memory Connector does not support non-null column for column name. + * Presto Memory Connector does not support Primary Key constraints. + * Presto Memory Connector does not support `truncate table` SQL. + * + * @param schemaName schema name + * @throws RuntimeException Runtime exception + */ + private void initSchema(final String schemaName) { + try ( + Connection con = DriverManager.getConnection(baseJdbcUrl + "/" + schemaName, "test", null); + Statement stmt = con.createStatement()) { + Awaitility.await().atMost(Duration.ofMinutes(1L)).ignoreExceptions().until(() -> { + con.createStatement().execute("SHOW TABLES"); + return true; + }); + stmt.execute("CREATE TABLE t_order (\n" + + " order_id BIGINT,\n" + + " order_type INTEGER,\n" + + " user_id INTEGER,\n" + + " address_id BIGINT,\n" + + " status VARCHAR(50)\n" + + ")"); + stmt.execute("CREATE TABLE IF NOT EXISTS t_order_item (\n" + + " order_item_id BIGINT,\n" + + " order_id BIGINT,\n" + + " user_id INT,\n" + + " phone VARCHAR(50),\n" + + " status VARCHAR(50)\n" + + ")"); + stmt.execute("CREATE TABLE IF NOT EXISTS t_address (\n" + + " address_id BIGINT,\n" + + " address_name VARCHAR(100)\n" + + ")"); + } catch (final SQLException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/reflect-config.json b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/reflect-config.json index 996859280ee635..345ae2c2a8b98a 100644 --- a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/reflect-config.json +++ b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native-test-metadata/reflect-config.json @@ -9,14 +9,6 @@ "name":"org.apache.shardingsphere.test.natived.commons.algorithm.TestQueryAssistedShardingEncryptAlgorithm", "methods":[{"name":"","parameterTypes":[] }] }, -{ - "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.databases.MySQLTest"}, - "name":"org.apache.shardingsphere.test.natived.proxy.databases.MySQLTest", - "allDeclaredConstructors": true, - "allDeclaredMethods": true, - "allPublicMethods": true, - "allDeclaredFields": true -}, { "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.transactions.xa.NarayanaTest"}, "name":"org.apache.shardingsphere.test.natived.jdbc.transactions.xa.NarayanaTest", @@ -33,14 +25,6 @@ "allPublicMethods": true, "allDeclaredFields": true }, -{ - "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.databases.PostgresTest"}, - "name":"org.apache.shardingsphere.test.natived.proxy.databases.PostgresTest", - "allDeclaredConstructors": true, - "allDeclaredMethods": true, - "allPublicMethods": true, - "allDeclaredFields": true -}, { "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest"}, "name":"org.apache.shardingsphere.test.natived.jdbc.modes.cluster.ZookeeperTest", @@ -178,16 +162,40 @@ "allPublicMethods": true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.transactions.base.SeataTest"}, - "name":"org.apache.shardingsphere.test.natived.proxy.transactions.base.SeataTest", + "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.databases.FirebirdTest"}, + "name":"org.apache.shardingsphere.test.natived.jdbc.databases.FirebirdTest", "allDeclaredFields": true, "allDeclaredConstructors": true, "allDeclaredMethods": true, "allPublicMethods": true }, { - "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.databases.FirebirdTest"}, - "name":"org.apache.shardingsphere.test.natived.jdbc.databases.FirebirdTest", + "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.jdbc.databases.PrestoTest"}, + "name":"org.apache.shardingsphere.test.natived.jdbc.databases.PrestoTest", + "allDeclaredFields": true, + "allDeclaredConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.databases.MySQLTest"}, + "name":"org.apache.shardingsphere.test.natived.proxy.databases.MySQLTest", + "allDeclaredConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.databases.PostgresTest"}, + "name":"org.apache.shardingsphere.test.natived.proxy.databases.PostgresTest", + "allDeclaredConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true +}, +{ + "condition":{"typeReachable":"org.apache.shardingsphere.test.natived.proxy.transactions.base.SeataTest"}, + "name":"org.apache.shardingsphere.test.natived.proxy.transactions.base.SeataTest", "allDeclaredFields": true, "allDeclaredConstructors": true, "allDeclaredMethods": true, diff --git a/test/native/src/test/resources/test-native/properties/presto-config.properties b/test/native/src/test/resources/test-native/properties/presto-config.properties new file mode 100644 index 00000000000000..3b077f1b7742e9 --- /dev/null +++ b/test/native/src/test/resources/test-native/properties/presto-config.properties @@ -0,0 +1,22 @@ +# +# 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. +# + +coordinator=true +node-scheduler.include-coordinator=true +http-server.http.port=8080 +discovery-server.enabled=true +discovery.uri=http://localhost:8080 diff --git a/test/native/src/test/resources/test-native/properties/presto-memory.properties b/test/native/src/test/resources/test-native/properties/presto-memory.properties new file mode 100644 index 00000000000000..2d8a5793ac7089 --- /dev/null +++ b/test/native/src/test/resources/test-native/properties/presto-memory.properties @@ -0,0 +1,18 @@ +# +# 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. +# + +connector.name=memory diff --git a/test/native/src/test/resources/test-native/yaml/jdbc/databases/presto.yaml b/test/native/src/test/resources/test-native/yaml/jdbc/databases/presto.yaml new file mode 100644 index 00000000000000..7e9ef8b8e7a6f1 --- /dev/null +++ b/test/native/src/test/resources/test-native/yaml/jdbc/databases/presto.yaml @@ -0,0 +1,66 @@ +# +# 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. +# + +dataSources: + ds_0: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: com.facebook.presto.jdbc.PrestoDriver + jdbcUrl: $${fixture.test-native.yaml.database.presto.ds0.jdbc-url::} + username: test + ds_1: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: com.facebook.presto.jdbc.PrestoDriver + jdbcUrl: $${fixture.test-native.yaml.database.presto.ds1.jdbc-url::} + username: test + ds_2: + dataSourceClassName: com.zaxxer.hikari.HikariDataSource + driverClassName: com.facebook.presto.jdbc.PrestoDriver + jdbcUrl: $${fixture.test-native.yaml.database.presto.ds2.jdbc-url::} + username: test + +rules: +- !SHARDING + tables: + t_order: + actualDataNodes: ds_0.t_order, ds_1.t_order, ds_2.t_order + keyGenerateStrategy: + column: order_id + keyGeneratorName: snowflake + t_order_item: + actualDataNodes: ds_0.t_order_item, ds_1.t_order_item, ds_2.t_order_item + keyGenerateStrategy: + column: order_item_id + keyGeneratorName: snowflake + defaultDatabaseStrategy: + standard: + shardingColumn: user_id + shardingAlgorithmName: inline + shardingAlgorithms: + inline: + type: CLASS_BASED + props: + strategy: STANDARD + algorithmClassName: org.apache.shardingsphere.test.natived.commons.algorithm.ClassBasedInlineShardingAlgorithmFixture + keyGenerators: + snowflake: + type: SNOWFLAKE + auditors: + sharding_key_required_auditor: + type: DML_SHARDING_CONDITIONS +- !BROADCAST + tables: + - t_address