From 5eac06b287e9db625d28d61bfbf86579d1b9cf3f Mon Sep 17 00:00:00 2001
From: zyyang <69311263+zyyang-taosdata@users.noreply.github.com>
Date: Fri, 30 Apr 2021 11:41:24 +0800
Subject: [PATCH] merge taos-jdbcdriver-2.0.28 all changes to master branch
(#5974)
* merge taos-jdbcdriver-2.0.28 all changes to master branch
* change version in cmake/install.inc
---
cmake/install.inc | 2 +-
src/connector/jdbc/CMakeLists.txt | 2 +-
src/connector/jdbc/deploy-pom.xml | 2 +-
src/connector/jdbc/pom.xml | 2 +-
.../com/taosdata/jdbc/AbstractConnection.java | 18 +-
.../com/taosdata/jdbc/AbstractResultSet.java | 3 +-
.../com/taosdata/jdbc/TSDBConnection.java | 1 +
.../java/com/taosdata/jdbc/TSDBDriver.java | 7 +-
.../taosdata/jdbc/TSDBPreparedStatement.java | 163 +-------
.../java/com/taosdata/jdbc/TSDBResultSet.java | 7 +-
.../taosdata/jdbc/TSDBResultSetRowData.java | 15 +-
.../taosdata/jdbc/rs/RestfulConnection.java | 1 +
.../com/taosdata/jdbc/rs/RestfulDriver.java | 2 +-
.../jdbc/rs/RestfulPreparedStatement.java | 47 +--
.../taosdata/jdbc/rs/RestfulResultSet.java | 108 ++++-
.../taosdata/jdbc/rs/RestfulStatement.java | 46 ++-
.../taosdata/jdbc/utils/UtcTimestampUtil.java | 12 +
.../java/com/taosdata/jdbc/utils/Utils.java | 135 +++++++
.../jdbc/TSDBPreparedStatementTest.java | 47 ++-
.../com/taosdata/jdbc/TSDBResultSetTest.java | 1 +
.../jdbc/cases/DriverAutoloadTest.java | 2 +
.../cases/InsertSpecialCharacterJniTest.java | 375 +++++++++++++++++
.../InsertSpecialCharacterRestfulTest.java | 376 ++++++++++++++++++
.../NullValueInResultSetForJdbcJniTest.java | 64 +++
.../com/taosdata/jdbc/cases/TD3841Test.java | 91 +++++
.../TwoTypeTimestampPercisionInJniTest.java | 89 +++++
...woTypeTimestampPercisionInRestfulTest.java | 168 ++++++++
.../jdbc/rs/RestfulPreparedStatementTest.java | 49 ++-
.../jdbc/rs/RestfulResultSetTest.java | 1 +
.../com/taosdata/jdbc/utils/UtilsTest.java | 24 ++
30 files changed, 1624 insertions(+), 236 deletions(-)
create mode 100644 src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/UtcTimestampUtil.java
create mode 100644 src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/InsertSpecialCharacterJniTest.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/InsertSpecialCharacterRestfulTest.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/NullValueInResultSetForJdbcJniTest.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/TD3841Test.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/TwoTypeTimestampPercisionInJniTest.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/TwoTypeTimestampPercisionInRestfulTest.java
create mode 100644 src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/UtilsTest.java
diff --git a/cmake/install.inc b/cmake/install.inc
index 5823ef743e..9e325531d5 100755
--- a/cmake/install.inc
+++ b/cmake/install.inc
@@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
IF (TD_MVN_INSTALLED)
- INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.25-dist.jar DESTINATION connector/jdbc)
+ INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.28-dist.jar DESTINATION connector/jdbc)
ENDIF ()
ELSEIF (TD_DARWIN)
SET(TD_MAKE_INSTALL_SH "${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh")
diff --git a/src/connector/jdbc/CMakeLists.txt b/src/connector/jdbc/CMakeLists.txt
index eb158b1f76..de4b8f6bfb 100644
--- a/src/connector/jdbc/CMakeLists.txt
+++ b/src/connector/jdbc/CMakeLists.txt
@@ -8,7 +8,7 @@ IF (TD_MVN_INSTALLED)
ADD_CUSTOM_COMMAND(OUTPUT ${JDBC_CMD_NAME}
POST_BUILD
COMMAND mvn -Dmaven.test.skip=true install -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.25-dist.jar ${LIBRARY_OUTPUT_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.28-dist.jar ${LIBRARY_OUTPUT_PATH}
COMMAND mvn -Dmaven.test.skip=true clean -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
COMMENT "build jdbc driver")
ADD_CUSTOM_TARGET(${JDBC_TARGET_NAME} ALL WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} DEPENDS ${JDBC_CMD_NAME})
diff --git a/src/connector/jdbc/deploy-pom.xml b/src/connector/jdbc/deploy-pom.xml
index eb8c92575c..a31796ffde 100755
--- a/src/connector/jdbc/deploy-pom.xml
+++ b/src/connector/jdbc/deploy-pom.xml
@@ -5,7 +5,7 @@
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.25
+ 2.0.28
jar
JDBCDriver
diff --git a/src/connector/jdbc/pom.xml b/src/connector/jdbc/pom.xml
index 1f75754b0c..3400a82e73 100755
--- a/src/connector/jdbc/pom.xml
+++ b/src/connector/jdbc/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.25
+ 2.0.28
jar
JDBCDriver
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractConnection.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractConnection.java
index 976078da95..2970f6c2d3 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractConnection.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractConnection.java
@@ -4,13 +4,23 @@ import java.sql.*;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import java.util.concurrent.*;
public abstract class AbstractConnection extends WrapperImpl implements Connection {
protected volatile boolean isClosed;
protected volatile String catalog;
- protected volatile Properties clientInfoProps = new Properties();
+ protected final Properties clientInfoProps = new Properties();
+
+ protected AbstractConnection(Properties properties) {
+ Set propNames = properties.stringPropertyNames();
+ for (String propName : propNames) {
+ clientInfoProps.setProperty(propName, properties.getProperty(propName));
+ }
+ String timestampFormat = properties.getProperty(TSDBDriver.PROPERTY_KEY_TIMESTAMP_FORMAT, "STRING");
+ clientInfoProps.setProperty(TSDBDriver.PROPERTY_KEY_TIMESTAMP_FORMAT, timestampFormat);
+ }
@Override
public abstract Statement createStatement() throws SQLException;
@@ -35,7 +45,6 @@ public abstract class AbstractConnection extends WrapperImpl implements Connecti
}
-
@Override
public void setAutoCommit(boolean autoCommit) throws SQLException {
if (isClosed())
@@ -441,9 +450,8 @@ public abstract class AbstractConnection extends WrapperImpl implements Connecti
if (isClosed)
throw (SQLClientInfoException) TSDBError.createSQLException(TSDBErrorNumbers.ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED);
- if (clientInfoProps == null)
- clientInfoProps = new Properties();
- clientInfoProps.setProperty(name, value);
+ if (clientInfoProps != null)
+ clientInfoProps.setProperty(name, value);
}
@Override
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
index abd348e68c..4b5b88d93b 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
@@ -10,6 +10,7 @@ import java.util.Map;
public abstract class AbstractResultSet extends WrapperImpl implements ResultSet {
private int fetchSize;
+ protected boolean wasNull;
protected void checkAvailability(int columnIndex, int bounds) throws SQLException {
if (isClosed())
@@ -28,7 +29,7 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
@Override
public boolean wasNull() throws SQLException {
- return false;
+ return wasNull;
}
@Override
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
index 5b4615485d..c8ab9fb15a 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConnection.java
@@ -28,6 +28,7 @@ public class TSDBConnection extends AbstractConnection {
}
public TSDBConnection(Properties info, TSDBDatabaseMetaData meta) throws SQLException {
+ super(info);
this.databaseMetaData = meta;
connect(info.getProperty(TSDBDriver.PROPERTY_KEY_HOST),
Integer.parseInt(info.getProperty(TSDBDriver.PROPERTY_KEY_PORT, "0")),
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
index 5f599df130..55533bd28c 100755
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
@@ -95,11 +95,16 @@ public class TSDBDriver extends AbstractDriver {
*/
public static final String PROPERTY_KEY_BATCH_LOAD = "batchfetch";
+ /**
+ * timestamp format for JDBC-RESTful,should one of the options: string or timestamp or utc
+ */
+ public static final String PROPERTY_KEY_TIMESTAMP_FORMAT = "timestampFormat";
+
private TSDBDatabaseMetaData dbMetaData = null;
static {
try {
- java.sql.DriverManager.registerDriver(new TSDBDriver());
+ DriverManager.registerDriver(new TSDBDriver());
} catch (SQLException e) {
throw TSDBError.createRuntimeException(TSDBErrorNumbers.ERROR_CANNOT_REGISTER_JNI_DRIVER, e);
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
index 728b537f71..56f971a35e 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
@@ -14,11 +14,12 @@
*****************************************************************************/
package com.taosdata.jdbc;
+import com.taosdata.jdbc.utils.Utils;
+
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
-import java.nio.charset.Charset;
import java.sql.*;
import java.util.ArrayList;
import java.util.Calendar;
@@ -33,17 +34,9 @@ import java.util.regex.Pattern;
public class TSDBPreparedStatement extends TSDBStatement implements PreparedStatement {
private String rawSql;
- private String sql;
- // private ArrayList