0

我正在使用 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]

任何想法?谢谢。洛朗

4

1 回答 1

2

这是 H2 数据库中的一个错误。同样的问题发生在:

create table test(x int);
create hash index on test(x);
select 1 from test group by x;

这将在下一个版本中修复。

于 2013-10-11T17:37:32.500 回答