H2选择查询在内存模式下失败,但在嵌入模式下失败

时间:2013-10-10 13:56:26

标签: h2

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

有什么想法吗?谢谢。劳伦

1 个答案:

答案 0 :(得分:2)

这是H2数据库中的错误。出现同样的问题:

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

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

相关问题