Skip to content

Commit e70ef51

Browse files
committed
fix
1 parent c6b157a commit e70ef51

File tree

12 files changed

+66
-70
lines changed

12 files changed

+66
-70
lines changed

databend-jdbc/src/main/java/com/databend/jdbc/DatabendPreparedStatement.java

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,57 +9,23 @@
99
import org.joda.time.format.DateTimeFormatter;
1010
import org.joda.time.format.ISODateTimeFormat;
1111

12-
import java.io.ByteArrayInputStream;
13-
import java.io.ByteArrayOutputStream;
14-
import java.io.File;
15-
import java.io.FileInputStream;
16-
import java.io.IOException;
17-
import java.io.InputStream;
18-
import java.io.Reader;
12+
import java.io.*;
1913
import java.math.BigDecimal;
2014
import java.net.URL;
2115
import java.nio.charset.StandardCharsets;
22-
import java.sql.Array;
23-
import java.sql.Blob;
24-
import java.sql.Clob;
2516
import java.sql.Date;
26-
import java.sql.NClob;
27-
import java.sql.ParameterMetaData;
28-
import java.sql.PreparedStatement;
29-
import java.sql.Ref;
30-
import java.sql.ResultSet;
31-
import java.sql.ResultSetMetaData;
32-
import java.sql.RowId;
33-
import java.sql.SQLException;
34-
import java.sql.SQLFeatureNotSupportedException;
35-
import java.sql.SQLXML;
36-
import java.sql.Time;
37-
import java.sql.Timestamp;
38-
import java.sql.Types;
39-
import java.time.LocalDate;
40-
import java.time.LocalDateTime;
41-
import java.time.LocalTime;
42-
import java.time.OffsetDateTime;
43-
import java.time.OffsetTime;
17+
import java.sql.*;
18+
import java.time.*;
4419
import java.time.format.DateTimeFormatterBuilder;
45-
import java.util.ArrayList;
46-
import java.util.Arrays;
47-
import java.util.Base64;
48-
import java.util.Calendar;
49-
import java.util.Collections;
50-
import java.util.HashMap;
51-
import java.util.List;
52-
import java.util.Map;
53-
import java.util.Objects;
54-
import java.util.UUID;
20+
import java.util.*;
5521
import java.util.function.Consumer;
5622
import java.util.logging.Logger;
5723
import java.util.regex.Matcher;
5824
import java.util.stream.Collectors;
5925

26+
import static com.databend.jdbc.DatabendConstant.*;
6027
import static com.databend.jdbc.ObjectCasts.*;
6128
import static com.databend.jdbc.StatementUtil.replaceParameterMarksWithValues;
62-
import static com.databend.jdbc.DatabendConstant.*;
6329
import static java.lang.String.format;
6430
import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE;
6531
import static java.time.format.DateTimeFormatter.ISO_LOCAL_TIME;
@@ -162,7 +128,7 @@ private StageAttachment uploadBatches() throws SQLException {
162128
}
163129
File saved = batchInsertUtils.saveBatchToCSV(batchValuesCSV);
164130
try (FileInputStream fis = new FileInputStream(saved)) {
165-
DatabendConnectionImpl c = (DatabendConnectionImpl) getConnection();
131+
Connection c = getConnection();
166132
String uuid = UUID.randomUUID().toString().replace("-", "");
167133
// format %Y/%m/%d/%H/%M/%S/fileName.csv
168134
String stagePrefix = String.format("%s/%s/%s/%s/%s/%s/%s/",
@@ -175,7 +141,7 @@ private StageAttachment uploadBatches() throws SQLException {
175141
uuid);
176142
String fileName = saved.getName();
177143
// upload to stage
178-
c.uploadStream(null, stagePrefix, fis, fileName, saved.length(), false);
144+
c.unwrap(DatabendConnection.class).uploadStream(null, stagePrefix, fis, fileName, saved.length(), false);
179145
String stagePath = "@~/" + stagePrefix + fileName;
180146
return buildStateAttachment(c, stagePath);
181147
} catch (Exception e) {
@@ -197,12 +163,14 @@ private StageAttachment uploadBatches() throws SQLException {
197163
* A stage in Databend is a temporary storage area where data files are stored
198164
* before being loaded into the Databend database.
199165
*
200-
* @param connection The DatabendConnection object which contains the connection
166+
* @param conn The DatabendConnection object which contains the connection
201167
* details to the Databend database.
202168
* @param stagePath The path of the stage in the Databend database.
203169
* @return A StageAttachment object which contains the details of the stage.
204170
*/
205-
static StageAttachment buildStateAttachment(DatabendConnectionImpl connection, String stagePath) {
171+
static StageAttachment buildStateAttachment(Connection conn, String stagePath) {
172+
DatabendConnectionImpl connection = (DatabendConnectionImpl) conn;
173+
206174
Map<String, String> fileFormatOptions = new HashMap<>();
207175
if (!Objects.equals(connection.binaryFormat(), "")) {
208176
fileFormatOptions.put("binary_format", String.valueOf(connection.binaryFormat()));

databend-jdbc/src/main/java/com/databend/jdbc/PresignContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,19 @@ private PresignContext(PresignMethod method, String stageName, String fileName,
2828
this.url = url;
2929
}
3030

31-
public static void createStageIfNotExists(Connection connection, String stageName) throws SQLException {
31+
static void createStageIfNotExists(Connection connection, String stageName) throws SQLException {
3232
String sql = String.format("CREATE STAGE IF NOT EXISTS %s", stageName);
3333
Statement statement = connection.createStatement();
3434
statement.execute(sql);
3535
}
3636

37-
public static void dropStageIfExists(DatabendConnectionImpl connection, String stageName) throws SQLException {
37+
public static void dropStageIfExists(Connection connection, String stageName) throws SQLException {
3838
String sql = String.format("DROP STAGE IF EXISTS %s", stageName);
3939
Statement statement = connection.createStatement();
4040
statement.execute(sql);
4141
}
4242

43-
public static PresignContext getPresignContext(DatabendConnectionImpl connection, PresignMethod method, String stageName, String fileName)
43+
static PresignContext getPresignContext(Connection connection, PresignMethod method, String stageName, String fileName)
4444
throws SQLException {
4545
requireNonNull(connection, "connection is null");
4646
requireNonNull(method, "method is null");

databend-jdbc/src/test/java/com/databend/jdbc/Compatibility.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import com.vdurmont.semver4j.Semver;
44

5+
import java.lang.reflect.InvocationTargetException;
6+
import java.lang.reflect.Method;
7+
import java.sql.Connection;
8+
59
public class Compatibility {
610
public static class Capability {
711
boolean streamingLoad;
@@ -65,4 +69,25 @@ public static boolean skipBugLowerThenOrEqualTo(String serverVersionBug, String
6569
}
6670
return false;
6771
}
72+
73+
boolean isNewInterface() {
74+
return driverVersion == null || driverVersion.isGreaterThanOrEqualTo(new Semver("4.0.1"));
75+
}
76+
77+
static Object invokeMethod(Object target, String methodName,
78+
Class<?>[] parameterTypes, Object[] args) {
79+
Class<?> targetClass = target.getClass();
80+
Method method = null;
81+
try {
82+
method = targetClass.getDeclaredMethod(methodName, parameterTypes);
83+
method.setAccessible(true);
84+
return method.invoke(target, args);
85+
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
86+
throw new RuntimeException(e);
87+
}
88+
}
89+
90+
static Object invokeMethodNoArg(Object target, String methodName) {
91+
return invokeMethod(target, methodName, new Class<?>[0], new Object[0]);
92+
}
6893
}

databend-jdbc/src/test/java/com/databend/jdbc/TestBasicDriver.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.databend.client.DatabendSession;
44
import com.databend.client.PaginationOptions;
5+
import com.vdurmont.semver4j.Semver;
56
import org.testng.Assert;
67
import org.testng.annotations.BeforeTest;
78
import org.testng.annotations.Test;
@@ -39,7 +40,7 @@ public void setUp()
3940
public void testBasic()
4041
throws SQLException {
4142
try (Connection connection = Utils.createConnection()) {
42-
PaginationOptions p = connection.unwrap(DatabendConnectionImpl.class).getPaginationOptions();
43+
PaginationOptions p = (PaginationOptions) Compatibility.invokeMethodNoArg(connection, "getPaginationOptions");
4344
Assert.assertEquals(p.getWaitTimeSecs(), PaginationOptions.getDefaultWaitTimeSec());
4445
Assert.assertEquals(p.getMaxRowsInBuffer(), PaginationOptions.getDefaultMaxRowsInBuffer());
4546
Assert.assertEquals(p.getMaxRowsPerPage(), PaginationOptions.getDefaultMaxRowsPerPage());
@@ -67,10 +68,6 @@ public void testExecuteInvalidSql() {
6768
@Test(groups = {"IT"})
6869
public void testSchema() throws SQLException {
6970
try (Connection connection = Utils.createConnection()) {
70-
PaginationOptions p = connection.unwrap(DatabendConnectionImpl.class).getPaginationOptions();
71-
Assert.assertEquals(p.getWaitTimeSecs(), PaginationOptions.getDefaultWaitTimeSec());
72-
Assert.assertEquals(p.getMaxRowsInBuffer(), PaginationOptions.getDefaultMaxRowsInBuffer());
73-
Assert.assertEquals(p.getMaxRowsPerPage(), PaginationOptions.getDefaultMaxRowsPerPage());
7471
DatabendStatement statement = (DatabendStatement) connection.createStatement();
7572
statement.execute("set global timezone='Asia/Shanghai';");
7673
statement.execute("SELEcT schema_name as TABLE_SCHEM, catalog_name as TABLE_CATALOG FROM information_schema.schemata where schema_name = 'default' order by catalog_name, schema_name");
@@ -226,7 +223,7 @@ public void testBasicWithProperties() throws SQLException {
226223

227224
//INFO databend_query::servers::http::v1::http_query_handlers: receive http query: HttpQueryRequest { session_id: None, session: Some(HttpSessionConf { database: Some("test_basic_driver"), keep_server_session_secs: None, settings: None }), sql: "SELECT 1", pagination: PaginationConf { wait_time_secs: 10, max_rows_in_buffer: 100, max_rows_per_page: 100 }, string_fields: true, stage_attachment: None }
228225
try (Connection connection = Utils.createConnection("test_basic_driver", p)) {
229-
PaginationOptions options = connection.unwrap(DatabendConnectionImpl.class).getPaginationOptions();
226+
PaginationOptions options = (PaginationOptions) Compatibility.invokeMethodNoArg(connection, "getPaginationOptions");
230227
Assert.assertEquals(options.getWaitTimeSecs(), 10);
231228
Assert.assertEquals(options.getMaxRowsInBuffer(), 100);
232229
Assert.assertEquals(options.getMaxRowsPerPage(), 100);
@@ -279,7 +276,7 @@ public void testUpdateSession()
279276
try (Connection connection = Utils.createConnection("test_basic_driver")) {
280277
connection.createStatement().execute("set max_threads=1");
281278
connection.createStatement().execute("use test_basic_driver_2");
282-
DatabendSession session = connection.unwrap(DatabendConnectionImpl.class).getSession();
279+
DatabendSession session = (DatabendSession) Compatibility.invokeMethodNoArg(connection, "getSession");
283280
Assert.assertEquals(session.getDatabase(), "test_basic_driver_2");
284281
Assert.assertEquals(session.getSettings().get("max_threads"), "1");
285282
}

databend-jdbc/src/test/java/com/databend/jdbc/TestDatabendDatabaseMetaData.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.databend.jdbc;
22

3+
import com.vdurmont.semver4j.Semver;
34
import org.testng.Assert;
45
import org.testng.annotations.BeforeTest;
56
import org.testng.annotations.Test;
67

78
import java.math.BigDecimal;
89
import java.math.RoundingMode;
10+
import java.net.URI;
911
import java.sql.*;
1012
import java.util.ArrayList;
1113
import java.util.List;
@@ -117,11 +119,11 @@ public void testGetDatabaseProductVersion()
117119
Assert.assertTrue(metaData.getDatabaseProductVersion().contains(checkVersion));
118120

119121
if (Compatibility.serverCapability.streamingLoad && Compatibility.driverCapability.streamingLoad) {
120-
DatabendConnectionImpl conn = connection.unwrap(DatabendConnectionImpl.class);
121-
if (conn.getServerVersion() != null) {
122-
String semver = "v" + conn.getServerVersion().toString();
122+
Semver ver = (Semver) Compatibility.invokeMethodNoArg(connection, "getServerVersion");
123+
if (ver != null) {
124+
String semver = "v" + ver.toString();
123125
Assert.assertTrue(semver.startsWith(checkVersion), semver);
124-
Assert.assertNotNull(conn.getServerCapability());
126+
Assert.assertNotNull(Compatibility.invokeMethodNoArg(connection, "getServerCapability"));
125127
}
126128
}
127129
}

databend-jdbc/src/test/java/com/databend/jdbc/TestDatabendDriverUri.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public void testFull() throws SQLException {
241241

242242
@Test(groups = "IT")
243243
public void TestSetSchema() throws SQLException {
244-
try (DatabendConnectionImpl connection = (DatabendConnectionImpl) Utils.createConnection()) {
244+
try (Connection connection = Utils.createConnection()) {
245245
connection.createStatement().execute("create or replace database test2");
246246
connection.createStatement().execute("create or replace table test2.test2(id int)");
247247
connection.setSchema("test2");

databend-jdbc/src/test/java/com/databend/jdbc/TestDatabendPresignClient.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package com.databend.jdbc;
22

3+
import com.databend.client.PaginationOptions;
34
import com.databend.jdbc.cloud.DatabendPresignClient;
45
import com.databend.jdbc.cloud.DatabendPresignClientV1;
56
import okhttp3.OkHttpClient;
67
import org.testng.annotations.Test;
78

89
import java.io.*;
10+
import java.net.URI;
11+
import java.sql.Connection;
912
import java.sql.SQLException;
1013

1114
public class TestDatabendPresignClient {
@@ -28,9 +31,10 @@ private String generateRandomCSV(int lines) throws IOException {
2831
@Test(groups = {"LOCAL"})
2932
public void uploadFileAPI() throws IOException, SQLException {
3033
String filePath = null;
31-
try (DatabendConnectionImpl connection = Utils.createConnection().unwrap(DatabendConnectionImpl.class)) {
32-
OkHttpClient client = connection.getHttpClient();
33-
DatabendPresignClient presignClient = new DatabendPresignClientV1(client, connection.getURI().toString());
34+
try (Connection connection = Utils.createConnection()) {
35+
URI uri = (URI) Compatibility.invokeMethodNoArg(connection, "getURI");
36+
OkHttpClient client = (OkHttpClient) Compatibility.invokeMethodNoArg(connection, "getHttpClient");
37+
DatabendPresignClient presignClient = new DatabendPresignClientV1(client,uri.toString());
3438
filePath = generateRandomCSV(10);
3539
File file = new File(filePath);
3640
InputStream inputStream = new FileInputStream(file);

databend-jdbc/src/test/java/com/databend/jdbc/TestHeartbeat.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void testHeartbeat() throws SQLException, InterruptedException {
4848
statement.close();
4949
Thread.sleep(5000);
5050

51-
Assert.assertTrue(c1.unwrap(DatabendConnectionImpl.class).isHeartbeatStopped());
51+
Assert.assertFalse((boolean) Compatibility.invokeMethodNoArg(c1, "isHeartbeatStopped"));
5252
}
5353
}
5454
}

databend-jdbc/src/test/java/com/databend/jdbc/TestMultiHost.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,14 @@ public void testAutoDiscovery()
122122

123123
@Test(groups = {"IT", "MULTI_HOST"})
124124
public void testUnSupportedAutoDiscovery()
125-
throws SQLException {
125+
throws Exception {
126126
try (Connection connection = createConnection(UNSUPPORT_AUTO_DISCOVERY_JDBC_URL)) {
127127
DatabendStatement statement = (DatabendStatement) connection.createStatement();
128128
statement.execute("select value from system.configs where name = 'http_handler_port';");
129129
ResultSet r = statement.getResultSet();
130130
r.next();
131-
DatabendConnectionImpl dbc = (DatabendConnectionImpl) connection;
132-
// automatically
133-
Assert.assertFalse(dbc.isAutoDiscovery());
131+
132+
Assert.assertFalse((boolean) Compatibility.invokeMethodNoArg(connection, "isAutoDiscovery"));
134133
}
135134
}
136135

databend-jdbc/src/test/java/com/databend/jdbc/TestPrepareStatement.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,8 +465,7 @@ public void testAllPreparedStatement() throws SQLException {
465465
@Test(groups = "IT")
466466
public void shouldBuildStageAttachmentWithFileFormatOptions() throws SQLException {
467467
Connection conn = Utils.createConnection();
468-
Assert.assertEquals("", conn.unwrap(DatabendConnectionImpl.class).binaryFormat());
469-
StageAttachment stageAttachment = DatabendPreparedStatement.buildStateAttachment((DatabendConnectionImpl) conn,
468+
StageAttachment stageAttachment = DatabendPreparedStatement.buildStateAttachment(conn,
470469
"stagePath");
471470

472471
Assert.assertFalse(stageAttachment.getFileFormatOptions().containsKey("binary_format"));

0 commit comments

Comments
 (0)