我正在使用H2 1.3.173。
我有下表:
CREATE TABLE Flights (
FlightId INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY HASH,
AircraftId INTEGER NOT NULL,
DepartureDate TIMESTAMP NOT NULL,
DepartureAirport VARCHAR(3) NOT NULL,
ArrivalDate TIMESTAMP NOT NULL,
ArrivalAirport VARCHAR(3) NOT NULL,
);
CREATE HASH INDEX idxFlightAircraftId ON Flights (AircraftId);
我正在寻找每架飞机的第一个出发机场,并提出以下问题:
SELECT * FROM Flights A INNER JOIN (SELECT AircraftId,
MIN(DepartureDate) AS DepDate FROM Flights
GROUP BY AircraftId) B
ON A.AircraftId = B.AircraftId
AND A.DepartureDate = B.DepDate
ORDER BY A.AircraftId ASC;
查询在文件模式下正确运行,即使用以下URL:
jdbc:h2:file:~/db
但不是在内存模式下,即使用以下URL:
jdbc:h2:mem:db
在这种情况下,我得到以下异常:
org.h2.jdbc.JdbcSQLException: General error:
"java.lang.RuntimeException: Unexpected code path"
编辑:异常消息和错误代码:
org.h2.jdbc.JdbcSQLException: General error: "java.lang.RuntimeException: Unexpected code path"; SQL statement:
SELECT * FROM Flights A INNER JOIN (SELECT AircraftId, MIN(DepartureDate) AS DepDate FROM Flights GROUP BY AircraftId) B ON A.AircraftId = B.AircraftId AND A.DepartureDate = B.DepDate ORDER BY A.AircraftId ASC [50000-173]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:331) ~[h2-1.3.173.jar:1.3.173]
at org.h2.message.DbException.get(DbException.java:160) ~[h2-1.3.173.jar:1.3.173]
at org.h2.message.DbException.convert(DbException.java:283) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.Command.executeQuery(Command.java:199) ~[h2-1.3.173.jar:1.3.173]
at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:78) ~[h2-1.3.173.jar:1.3.173]
...
Caused by: java.lang.RuntimeException: Unexpected code path
at org.h2.message.DbException.throwInternalError(DbException.java:230) ~[h2-1.3.173.jar:1.3.173]
at org.h2.message.DbException.throwInternalError(DbException.java:243) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.NonUniqueHashIndex.find(NonUniqueHashIndex.java:80) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.BaseIndex.find(BaseIndex.java:126) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.IndexCursor.find(IndexCursor.java:155) ~[h2-1.3.173.jar:1.3.173]
at org.h2.table.TableFilter.next(TableFilter.java:328) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Select.queryGroupSorted(Select.java:164) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Select.queryWithoutCache(Select.java:618) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Query.query(Query.java:314) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Query.query(Query.java:284) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.ViewIndex.find(ViewIndex.java:253) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.BaseIndex.find(BaseIndex.java:126) ~[h2-1.3.173.jar:1.3.173]
at org.h2.index.IndexCursor.find(IndexCursor.java:155) ~[h2-1.3.173.jar:1.3.173]
at org.h2.table.TableFilter.next(TableFilter.java:328) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Select.queryFlat(Select.java:518) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Select.queryWithoutCache(Select.java:625) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Query.query(Query.java:314) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Query.query(Query.java:284) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.dml.Query.query(Query.java:36) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.CommandContainer.query(CommandContainer.java:91) ~[h2-1.3.173.jar:1.3.173]
at org.h2.command.Command.executeQuery(Command.java:195) ~[h2-1.3.173.jar:1.3.173]
有什么想法吗?谢谢。劳伦
答案 0 :(得分:2)
这是H2数据库中的错误。出现同样的问题:
create table test(x int);
create hash index on test(x);
select 1 from test group by x;
这将在下一个版本中修复。