This is an automated email from the ASF dual-hosted git repository.
terrymanu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 583271f4d45 Fix firebird result timestamp fraction (#40172)
583271f4d45 is described below
commit 583271f4d45c563b49c58cac94caeee861b4e697
Author: Maxim Igoshin <[email protected]>
AuthorDate: Sat Oct 17 04:59:02 2026 +0300
Fix firebird result timestamp fraction (#40172)
* Keep the fractions of a millisecond of Firebird TIMESTAMP result values
* Retrigger CI
* Fix CODE_OF_CONDUCT violations in Firebird result timestamp encoding
---
.../protocol/FirebirdTimestampBinaryProtocolValue.java | 14 +++++++++++++-
.../FirebirdTimestampBinaryProtocolValueTest.java | 17 +++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git
a/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValue.java
b/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValue.java
index 0b7f0a8903c..bcababaaf7f 100644
---
a/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValue.java
+++
b/database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValue.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.database.protocol.firebird.packet.command.quer
import
org.apache.shardingsphere.database.protocol.firebird.packet.command.query.statement.execute.protocol.util.FirebirdDateTimeUtils;
import
org.apache.shardingsphere.database.protocol.firebird.payload.FirebirdPacketPayload;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import java.sql.Timestamp;
import java.time.LocalDateTime;
@@ -36,11 +37,22 @@ public final class FirebirdTimestampBinaryProtocolValue
implements FirebirdBinar
@Override
public void write(final FirebirdPacketPayload payload, final Object value)
{
- LocalDateTime localDateTime = value instanceof LocalDateTime ?
(LocalDateTime) value : new Timestamp(((Date)
value).getTime()).toLocalDateTime();
+ LocalDateTime localDateTime = toLocalDateTime(value);
payload.writeInt4(FirebirdDateTimeUtils.getEncodedDate(localDateTime));
payload.writeInt4(new
FirebirdDateTimeUtils(localDateTime).getEncodedTime());
}
+ @HighFrequencyInvocation
+ private LocalDateTime toLocalDateTime(final Object value) {
+ if (value instanceof LocalDateTime) {
+ return (LocalDateTime) value;
+ }
+ if (value instanceof Timestamp) {
+ return ((Timestamp) value).toLocalDateTime();
+ }
+ return new Timestamp(((Date) value).getTime()).toLocalDateTime();
+ }
+
@Override
public int getLength(final FirebirdPacketPayload payload) {
return 8;
diff --git
a/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValueTest.java
b/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValueTest.java
index a95fbce1234..39d79046fb2 100644
---
a/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValueTest.java
+++
b/database/protocol/dialect/firebird/src/test/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/statement/execute/protocol/FirebirdTimestampBinaryProtocolValueTest.java
@@ -26,6 +26,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.sql.Timestamp;
import java.time.LocalDateTime;
+import java.util.Date;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -55,6 +56,22 @@ class FirebirdTimestampBinaryProtocolValueTest {
verify(payload).writeInt4(new
FirebirdDateTimeUtils(dateTime).getEncodedTime());
}
+ @Test
+ void assertWriteWithSubMillisecondTimestamp() {
+ LocalDateTime dateTime = LocalDateTime.of(2024, 2, 29, 23, 59, 59,
999_900_000);
+ new FirebirdTimestampBinaryProtocolValue().write(payload,
Timestamp.valueOf(dateTime));
+
verify(payload).writeInt4(FirebirdDateTimeUtils.getEncodedDate(dateTime));
+ verify(payload).writeInt4(new
FirebirdDateTimeUtils(dateTime).getEncodedTime());
+ }
+
+ @Test
+ void assertWriteWithJavaUtilDate() {
+ LocalDateTime dateTime = LocalDateTime.of(2024, 1, 3, 14, 0, 0,
123_000_000);
+ new FirebirdTimestampBinaryProtocolValue().write(payload, new
Date(Timestamp.valueOf(dateTime).getTime()));
+
verify(payload).writeInt4(FirebirdDateTimeUtils.getEncodedDate(dateTime));
+ verify(payload).writeInt4(new
FirebirdDateTimeUtils(dateTime).getEncodedTime());
+ }
+
@Test
void assertWriteWithLocalDateTime() {
LocalDateTime dateTime = LocalDateTime.parse("2024-01-02T13:00:00");