Skip to content

Commit 2a0d900

Browse files
committed
Add GraalVM Reachability Metadata and corresponding nativeTest for Presto
1 parent 068f921 commit 2a0d900

File tree

21 files changed

+674
-218
lines changed

21 files changed

+674
-218
lines changed

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,3 @@ ShardingSphere 的单元测试仅使用 Maven 模块 `io.github.linghengqian:hiv
329329

330330
9. 由于 https://github.com/apache/doris/issues/9426 的影响,当通过 Shardinghere JDBC 连接至 Apache Doris FE,
331331
用户需自行提供 `apache/doris` 集成模块相关的 GraalVM Reachability Metadata。
332-
333-
10. 由于 https://github.com/prestodb/presto/issues/23226 的影响,当通过 Shardinghere JDBC 连接至 Presto Server,
334-
用户需自行提供 `com.facebook.presto:presto-jdbc` 和 `prestodb/presto` 集成模块相关的 GraalVM Reachability Metadata。

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,3 @@ the Oracle JDBC Driver corresponding to the `com.oracle.database.jdbc:ojdbc8` Ma
343343

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.
346-
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.

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
2222
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
2323
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.IdentifierPatternType;
24+
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
2425
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DefaultSchemaOption;
2526
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption;
27+
import org.apache.shardingsphere.infra.database.presto.metadata.database.option.PrestoDataTypeOption;
2628

2729
/**
2830
* Database meta data of Presto.
@@ -49,6 +51,11 @@ public DialectSchemaOption getSchemaOption() {
4951
return new DefaultSchemaOption(false, "default");
5052
}
5153

54+
@Override
55+
public DialectDataTypeOption getDataTypeOption() {
56+
return new PrestoDataTypeOption();
57+
}
58+
5259
@Override
5360
public String getDatabaseType() {
5461
return "Presto";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.shardingsphere.infra.database.presto.metadata.database.option;
19+
20+
import com.cedarsoftware.util.CaseInsensitiveMap;
21+
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DefaultDataTypeOption;
22+
import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
23+
24+
import java.sql.Types;
25+
import java.util.Map;
26+
import java.util.Optional;
27+
28+
/**
29+
* Data type option for Presto.
30+
*/
31+
public final class PrestoDataTypeOption implements DialectDataTypeOption {
32+
33+
private static final Map<String, Integer> EXTRA_DATA_TYPES;
34+
35+
private final DialectDataTypeOption delegate = new DefaultDataTypeOption();
36+
37+
static {
38+
EXTRA_DATA_TYPES = setUpExtraDataTypes();
39+
}
40+
41+
/**
42+
* TODO For prestodb/presto 0.292,
43+
* the `DATA_TYPE` column of the `INFORMATION_SCHEMA.COLUMNS` table of `Memory` catalog only records strings like `varchar(50)`,
44+
* which is expected to have potential optimizations on ShardingSphere side.
45+
*
46+
* @return Extra data types
47+
*/
48+
private static Map<String, Integer> setUpExtraDataTypes() {
49+
Map<String, Integer> result = new CaseInsensitiveMap<>();
50+
result.put("varchar(50)", Types.VARCHAR);
51+
result.put("varchar(100)", Types.VARCHAR);
52+
return result;
53+
}
54+
55+
@Override
56+
public Map<String, Integer> getExtraDataTypes() {
57+
return EXTRA_DATA_TYPES;
58+
}
59+
60+
@Override
61+
public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) {
62+
return Optional.empty();
63+
}
64+
65+
@Override
66+
public boolean isIntegerDataType(final int sqlType) {
67+
return delegate.isIntegerDataType(sqlType);
68+
}
69+
70+
@Override
71+
public boolean isStringDataType(final int sqlType) {
72+
return delegate.isStringDataType(sqlType);
73+
}
74+
75+
@Override
76+
public boolean isBinaryDataType(final int sqlType) {
77+
return delegate.isBinaryDataType(sqlType);
78+
}
79+
}
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,14 @@
1+
{
2+
"resources":{
3+
"includes":[{
4+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.joda.time.tz.ZoneInfoProvider"},
5+
"pattern":".*com/facebook/presto/jdbc/internal/joda/time/tz/data/.+"
6+
}, {
7+
"condition":{"typeReachable":"com.facebook.presto.jdbc.internal.common.type.TimeZoneKey"},
8+
"pattern":"\\Qcom/facebook/presto/jdbc/internal/common/type/zone-index.properties\\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/ZoneInfoMap\\E"
12+
}]},
13+
"bundles":[]
14+
}

0 commit comments

Comments
 (0)