Skip to content

Commit 727cdd7

Browse files
committed
Add GraalVM Reachability Metadata and corresponding nativeTest for Presto
1 parent 944fd32 commit 727cdd7

File tree

18 files changed

+654
-43
lines changed

18 files changed

+654
-43
lines changed

RELEASE-NOTES.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
1. Infra: Support for connecting to Presto's Memory Connector in ShardingSphere config - [#34432](https://github.com/apache/shardingsphere/pull/34432)
1010
1. Metadata: Add support for partition tables in PostgreSQL [#34346](https://github.com/apache/shardingsphere/pull/34346)
1111
1. SQL Binder: Support select aggregation function sql bind in projection and having - [#34379](https://github.com/apache/shardingsphere/pull/34379)
12+
1. Proxy Native: Add GraalVM Reachability Metadata and corresponding nativeTest for Presto - [#34429](https://github.com/apache/shardingsphere/pull/34429)
1213

1314
### Bug Fixes
1415

docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md

-3
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,6 @@ ShardingSphere 的单元测试仅使用 Maven 模块 `io.github.linghengqian:hiv
330330
9. 由于 https://github.com/apache/doris/issues/9426 的影响,当通过 Shardinghere JDBC 连接至 Apache Doris FE,
331331
用户需自行提供 `apache/doris` 集成模块相关的 GraalVM Reachability Metadata。
332332

333-
10. 由于 https://github.com/prestodb/presto/issues/23226 的影响,当通过 Shardinghere JDBC 连接至 Presto Server,
334-
用户需自行提供 `com.facebook.presto:presto-jdbc` 和 `prestodb/presto` 集成模块相关的 GraalVM Reachability Metadata。
335-
336333
## 贡献 GraalVM Reachability Metadata
337334

338335
ShardingSphere 对在 GraalVM Native Image 下的可用性的验证,是通过 GraalVM Native Build Tools 的 Maven Plugin 子项目来完成的。

docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md

-3
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,6 @@ the Oracle JDBC Driver corresponding to the `com.oracle.database.jdbc:ojdbc8` Ma
344344
9. Due to https://github.com/apache/doris/issues/9426, when connecting to Apache Doris FE via Shardinghere JDBC,
345345
users need to provide GraalVM Reachability Metadata related to the `apache/doris` integration module.
346346

347-
10. Due to https://github.com/prestodb/presto/issues/23226, when connecting to Presto Server via Shardinghere JDBC,
348-
users need to provide GraalVM Reachability Metadata related to the `com.facebook.presto:presto-jdbc` and `prestodb/presto` integration module.
349-
350347
## Contribute GraalVM Reachability Metadata
351348

352349
The verification of ShardingSphere's availability under GraalVM Native Image is completed through the Maven Plugin subproject

infra/database/type/presto/src/main/java/org/apache/shardingsphere/infra/database/presto/metadata/database/PrestoDatabaseMetaData.java

+18
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717

1818
package org.apache.shardingsphere.infra.database.presto.metadata.database;
1919

20+
import com.cedarsoftware.util.CaseInsensitiveMap;
2021
import org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
2122
import org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
2223
import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
2324

25+
import java.sql.Types;
26+
import java.util.Map;
2427
import java.util.Optional;
2528

2629
/**
@@ -43,6 +46,21 @@ public Optional<String> getDefaultSchema() {
4346
return Optional.of("default");
4447
}
4548

49+
/**
50+
* TODO For prestodb/presto 0.290,
51+
* the `DATA_TYPE` column of the `INFORMATION_SCHEMA.COLUMNS` table of `Memory` catalog only records strings like `varchar(50)`,
52+
* which is expected to have potential optimizations on ShardingSphere side.
53+
*
54+
* @return Extra data types
55+
*/
56+
@Override
57+
public Map<String, Integer> getExtraDataTypes() {
58+
Map<String, Integer> result = new CaseInsensitiveMap<>();
59+
result.put("varchar(50)", Types.VARCHAR);
60+
result.put("varchar(100)", Types.VARCHAR);
61+
return result;
62+
}
63+
4664
@Override
4765
public String getDatabaseType() {
4866
return "Presto";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[
2+
{
3+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.guava.reflect.Reflection"},
4+
"interfaces":["java.lang.reflect.TypeVariable"]
5+
}
6+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
[
2+
{
3+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.client.StatementClientV1"},
4+
"name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignature",
5+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.util.List","java.util.List","java.util.List"] }]
6+
},
7+
{
8+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
9+
"name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignature",
10+
"allDeclaredFields":true,
11+
"queryAllDeclaredMethods":true,
12+
"queryAllDeclaredConstructors":true
13+
},
14+
{
15+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.DefaultDeserializationContext"},
16+
"name":"com.facebook.presto.jdbc.internal.client.ClientTypeSignatureParameter$ClientTypeSignatureParameterDeserializer",
17+
"methods":[{"name":"<init>","parameterTypes":[] }]
18+
},
19+
{
20+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.client.StatementClientV1"},
21+
"name":"com.facebook.presto.jdbc.internal.client.Column",
22+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","com.facebook.presto.jdbc.internal.client.ClientTypeSignature"] }]
23+
},
24+
{
25+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
26+
"name":"com.facebook.presto.jdbc.internal.client.Column",
27+
"allDeclaredFields":true,
28+
"queryAllDeclaredMethods":true,
29+
"queryAllDeclaredConstructors":true
30+
},
31+
{
32+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
33+
"name":"com.facebook.presto.jdbc.internal.client.ErrorLocation",
34+
"allDeclaredFields":true,
35+
"queryAllDeclaredMethods":true,
36+
"queryAllDeclaredConstructors":true
37+
},
38+
{
39+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
40+
"name":"com.facebook.presto.jdbc.internal.client.FailureInfo",
41+
"allDeclaredFields":true,
42+
"queryAllDeclaredMethods":true,
43+
"queryAllDeclaredConstructors":true,
44+
"allPublicConstructors": true
45+
},
46+
{
47+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
48+
"name":"com.facebook.presto.jdbc.internal.client.QueryData",
49+
"queryAllDeclaredMethods":true
50+
},
51+
{
52+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
53+
"name":"com.facebook.presto.jdbc.internal.client.QueryError",
54+
"allDeclaredFields":true,
55+
"queryAllDeclaredMethods":true,
56+
"queryAllDeclaredConstructors":true,
57+
"allPublicConstructors": true
58+
},
59+
{
60+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
61+
"name":"com.facebook.presto.jdbc.internal.client.QueryResults",
62+
"allDeclaredFields":true,
63+
"queryAllDeclaredMethods":true,
64+
"queryAllDeclaredConstructors":true,
65+
"methods":[{"name":"<init>","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"] }]
66+
},
67+
{
68+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
69+
"name":"com.facebook.presto.jdbc.internal.client.QueryStatusInfo",
70+
"queryAllDeclaredMethods":true
71+
},
72+
{
73+
"condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoPreparedStatement"},
74+
"name":"com.facebook.presto.jdbc.internal.client.StageStats",
75+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }]
76+
},
77+
{
78+
"condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoResultSet$ResultsPageIterator"},
79+
"name":"com.facebook.presto.jdbc.internal.client.StageStats",
80+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }]
81+
},
82+
{
83+
"condition":{"typeReachable":"com.facebook.presto.jdbc.PrestoStatement"},
84+
"name":"com.facebook.presto.jdbc.internal.client.StageStats",
85+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","boolean","int","int","int","int","int","long","long","long","long","java.util.List"] }]
86+
},
87+
{
88+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
89+
"name":"com.facebook.presto.jdbc.internal.client.StageStats",
90+
"allDeclaredFields":true,
91+
"queryAllDeclaredMethods":true,
92+
"queryAllDeclaredConstructors":true
93+
},
94+
{
95+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
96+
"name":"com.facebook.presto.jdbc.internal.client.StatementStats",
97+
"allDeclaredFields":true,
98+
"queryAllDeclaredMethods":true,
99+
"queryAllDeclaredConstructors":true,
100+
"methods":[{"name":"<init>","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"] }]
101+
},
102+
{
103+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.std.MapDeserializer"},
104+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeMetric",
105+
"allDeclaredFields":true,
106+
"queryAllDeclaredMethods":true,
107+
"queryAllDeclaredConstructors":true,
108+
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","com.facebook.presto.jdbc.internal.common.RuntimeUnit","long","long","long","long"] }]
109+
},
110+
{
111+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
112+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeStats",
113+
"allDeclaredFields":true,
114+
"queryAllDeclaredMethods":true,
115+
"queryAllDeclaredConstructors":true
116+
},
117+
{
118+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.AnnotatedConstructor"},
119+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeStats",
120+
"methods":[{"name":"<init>","parameterTypes":["java.util.Map"] }]
121+
},
122+
{
123+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.deser.std.MapDeserializer"},
124+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit",
125+
"allDeclaredFields":true,
126+
"queryAllDeclaredMethods":true
127+
},
128+
{
129+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.JacksonAnnotationIntrospector"},
130+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit",
131+
"allDeclaredFields":true
132+
},
133+
{
134+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.util.ClassUtil"},
135+
"name":"com.facebook.presto.jdbc.internal.common.RuntimeUnit",
136+
"allDeclaredFields":true
137+
},
138+
{
139+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectMapper"},
140+
"name":"com.facebook.presto.jdbc.internal.common.type.ParameterKind",
141+
"allDeclaredFields":true,
142+
"queryAllDeclaredMethods":true
143+
},
144+
{
145+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.introspect.AnnotatedMethod"},
146+
"name":"com.facebook.presto.jdbc.internal.common.type.ParameterKind",
147+
"methods":[{"name":"fromJsonValue","parameterTypes":["java.lang.String"] }]
148+
},
149+
{
150+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.guava.reflect.Types$TypeVariableInvocationHandler"},
151+
"name":"com.facebook.presto.jdbc.internal.guava.reflect.Types$TypeVariableImpl",
152+
"queryAllPublicMethods":true
153+
},
154+
{
155+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7Handlers"},
156+
"name":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7HandlersImpl",
157+
"methods":[{"name":"<init>","parameterTypes":[] }]
158+
},
159+
{
160+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7Support"},
161+
"name":"com.facebook.presto.jdbc.internal.jackson.databind.ext.Java7SupportImpl",
162+
"methods":[{"name":"<init>","parameterTypes":[] }]
163+
},
164+
{
165+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.com.facebook.airlift.json.ObjectMapperProvider"},
166+
"name":"com.facebook.presto.jdbc.internal.joda.time.DateTime"
167+
},
168+
{
169+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
170+
"name":"com.facebook.presto.jdbc.internal.spi.PrestoWarning",
171+
"allDeclaredFields":true,
172+
"queryAllDeclaredMethods":true,
173+
"queryAllDeclaredConstructors":true
174+
},
175+
{
176+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.jackson.databind.ObjectReader"},
177+
"name":"com.facebook.presto.jdbc.internal.spi.WarningCode",
178+
"allDeclaredFields":true,
179+
"queryAllDeclaredMethods":true,
180+
"queryAllDeclaredConstructors":true
181+
}
182+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"resources":{
3+
"includes":[{
4+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.common.type.TimeZoneKey"},
5+
"pattern":"\\Qcom/facebook/presto/jdbc/internal/common/type/zone-index.properties\\E"
6+
}, {
7+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"},
8+
"pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/ZoneInfoMap\\E"
9+
}, {
10+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"},
11+
"pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/Asia/Shanghai\\E"
12+
}, {
13+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"},
14+
"pattern":"\\Qcom/facebook/presto/jdbc/internal/joda/time/tz/data/Etc/UTC\\E"
15+
}]},
16+
"bundles":[]
17+
}

0 commit comments

Comments
 (0)