-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Closed
Description
Version 2.3.232
Getting an NPE on select including some timestamp comparison:
Caused by: java.lang.NullPointerException: Cannot invoke "org.h2.engine.CastDataProvider.currentTimeZone()" because "<parameter2>" is null
at org.h2.value.Value.convertToTimestampTimeZone(Value.java:2067) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.convertTo(Value.java:1181) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.convertTo(Value.java:1020) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.compareToNotNullable(Value.java:2672) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.compareTo(Value.java:2646) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.ValueRow.compareTypeSafe(ValueRow.java:128) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.compareToNotNullable(Value.java:2675) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.Value.compareTo(Value.java:2646) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.CompareMode.compare(CompareMode.java:280) ~[h2-2.3.232.jar:2.3.232]
at org.h2.value.CompareMode.compare(CompareMode.java:20) ~[h2-2.3.232.jar:2.3.232]
at java.base/java.util.TreeMap.getEntryUsingComparator(TreeMap.java:374) ~[na:na]
at java.base/java.util.TreeMap.getEntry(TreeMap.java:344) ~[na:na]
at java.base/java.util.TreeMap.get(TreeMap.java:279) ~[na:na]
at org.h2.result.LocalResult.containsDistinct(LocalResult.java:249) ~[h2-2.3.232.jar:2.3.232]
at org.h2.expression.condition.ConditionInQuery.getValue(ConditionInQuery.java:95) ~[h2-2.3.232.jar:2.3.232]
at org.h2.expression.condition.ConditionInQuery.getValue(ConditionInQuery.java:55) ~[h2-2.3.232.jar:2.3.232]
at org.h2.expression.Expression.getBooleanValue(Expression.java:343) ~[h2-2.3.232.jar:2.3.232]
at org.h2.expression.SearchedCase.getValue(SearchedCase.java:30) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Select$LazyResultQueryFlat.fetchNextRow(Select.java:1897) ~[h2-2.3.232.jar:2.3.232]
at org.h2.result.LazyResult.hasNext(LazyResult.java:78) ~[h2-2.3.232.jar:2.3.232]
at org.h2.result.FetchedResult.next(FetchedResult.java:34) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Select.queryFlat(Select.java:767) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Select.queryWithoutCache(Select.java:891) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Query.queryWithoutCacheLazyCheck(Query.java:211) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Query.query(Query.java:530) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.query.Query.query(Query.java:498) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.CommandContainer.query(CommandContainer.java:222) ~[h2-2.3.232.jar:2.3.232]
at org.h2.command.Command.executeQuery(Command.java:196) ~[h2-2.3.232.jar:2.3.232]
... 27 common frames omittedThe subject table:
CREATE TABLE TEST_ENTITY (
ID VARCHAR(256) PRIMARY KEY,
P15 TIMESTAMP(3) WITH TIME ZONE,
);An NPE occures during the following select:
SELECT
CASE
WHEN t0.ts = ANY (
SELECT ?::TIMESTAMP
) THEN TRUE
ELSE FALSE
END
FROM
TEST_ENTITY t0Java example to reproduce:
try (Connection connection = dataSource.getConnection()){
// Table
PreparedStatement ddl = connection.prepareStatement("CREATE TABLE TEST_ENTITY (id VARCHAR(256) PRIMARY KEY, ts TIMESTAMP(3) with time zone)");
ddl.execute();
// Insert
PreparedStatement insert = connection.prepareStatement("INSERT INTO TEST_ENTITY (id, ts) VALUES (?, ?)");
insert.setString(1, UUID.randomUUID().toString());
insert.setObject(2, OffsetDateTime.now());
insert.executeUpdate();
// NPE Select
PreparedStatement select = connection.prepareStatement("""
SELECT
CASE
WHEN t0.ts = ANY (
SELECT ?::TIMESTAMP
) THEN TRUE
ELSE FALSE
END
FROM
TEST_ENTITY t0
""");
select.setObject(1, LocalDateTime.now());
select.executeQuery();
} catch (SQLException e) {
throw new RuntimeException(e);
}Metadata
Metadata
Assignees
Labels
No labels