This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-19321
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 26f8fb4756d391dc199cf347dea2e6fcbd099f96
Author: amashenkov <[email protected]>
AuthorDate: Fri May 5 16:37:48 2023 +0300

    Fix conversion jdbc arguments of temporal types.
---
 .../client/proto/ClientBinaryTupleUtils.java       | 16 ------------
 .../internal/jdbc/JdbcPreparedStatement.java       | 29 +++++++++++++++++++++-
 .../sql/engine/exec/RuntimeSortedIndexTest.java    |  2 +-
 3 files changed, 29 insertions(+), 18 deletions(-)

diff --git 
a/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
 
b/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
index 8232844980..183b2544b3 100644
--- 
a/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
+++ 
b/modules/client-common/src/main/java/org/apache/ignite/internal/client/proto/ClientBinaryTupleUtils.java
@@ -21,9 +21,6 @@ import static 
org.apache.ignite.lang.ErrorGroups.Client.PROTOCOL_ERR;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.sql.Date;
-import java.sql.Time;
-import java.sql.Timestamp;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -178,19 +175,6 @@ public class ClientBinaryTupleUtils {
         } else if (obj instanceof Instant) {
             appendTypeAndScale(builder, ColumnType.TIMESTAMP);
             builder.appendTimestamp((Instant) obj);
-        } else if (obj instanceof Timestamp) {
-            appendTypeAndScale(builder, ColumnType.DATETIME);
-            Timestamp timeStamp = (Timestamp) obj;
-            LocalDateTime localDateTime = timeStamp.toLocalDateTime();
-            builder.appendDateTime(localDateTime);
-        } else if (obj instanceof Date) {
-            appendTypeAndScale(builder, ColumnType.DATE);
-            Date date = (Date) obj;
-            builder.appendDate(date.toLocalDate());
-        } else if (obj instanceof Time) {
-            appendTypeAndScale(builder, ColumnType.TIME);
-            Time time = (Time) obj;
-            builder.appendTime(time.toLocalTime());
         } else if (obj instanceof BigInteger) {
             appendTypeAndScale(builder, ColumnType.NUMBER);
             builder.appendNumber((BigInteger) obj);
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
index d10709347b..680c89e693 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/JdbcPreparedStatement.java
@@ -53,6 +53,7 @@ import 
org.apache.ignite.internal.jdbc.proto.event.JdbcBatchExecuteResult;
 import 
org.apache.ignite.internal.jdbc.proto.event.JdbcBatchPreparedStmntRequest;
 import org.apache.ignite.internal.util.CollectionUtils;
 import org.apache.ignite.internal.util.StringUtils;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Jdbc prepared statement implementation.
@@ -652,7 +653,33 @@ public class JdbcPreparedStatement extends JdbcStatement 
implements PreparedStat
             currentArgs.add(null);
         }
 
-        currentArgs.set(paramIdx - 1, val);
+        currentArgs.set(paramIdx - 1, convertJdbcTypeToInternal(val));
+    }
+
+    /**
+     * Converts value of JDBC type to value of Ignite Client protocol types.
+     *
+     * <ul>
+     *     <li>java.sql.* to Java Time API</li>
+     * </ul>
+     */
+    private @Nullable Object convertJdbcTypeToInternal(@Nullable Object val) {
+        if (val instanceof java.util.Date) {
+            if (val instanceof Timestamp) {
+                Timestamp timeStamp = (Timestamp) val;
+                return timeStamp.toLocalDateTime();
+            } else if (val instanceof Date) {
+                Date date = (Date) val;
+                return date.toLocalDate();
+            } else if (val instanceof Time) {
+                Time time = (Time) val;
+                return time.toLocalTime();
+            }
+
+            return ((java.util.Date) val).toInstant();
+        }
+
+        return val;
     }
 
     /**
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
index 480996bbb6..940d814c6e 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/RuntimeSortedIndexTest.java
@@ -19,11 +19,11 @@ package org.apache.ignite.internal.sql.engine.exec;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.sql.Date;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.BitSet;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;

Reply via email to