hamidhtc / h2database

Automatically exported from code.google.com/p/h2database
0 stars 0 forks source link

TIMESTAMP JDBC ArrayIndexOutOfBoundsException on big tables #611

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
I searched for ArrayIndexOutOfBoundsException in the issues and did not found 
any fitting, so I think this bug is not fixed in a later version. The two 
databases mgmtp-20141128 and mgmtp-20150327 have the same schema, but they are 
differing in the size:

    1161216 Mar 27 12:52 /cc/H2/mgmtp-20141128.h2.db
 2311876608 Mar 27 11:46 /cc/H2/mgmtp-20150327.h2.db

A crucial amount of this difference is a result of the row count in the table 
APP.TBL_LOGS (see below). It seems to me, that any query containing a TIMESTAMP 
comparison is failing with the same exception on the big table. In contrary 
comparisons on other columns are working:

$ e "select min(id), max(id) from APP.TBL_LOGS;" | xd /cc/Program\ Files\ \(x86
\)/H2/bin/ java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:tcp://localhost/c:/
H2/mgmtp-20150327 -user app -password 000

Welcome to H2 Shell 1.3.169 (2012-09-09)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> MIN(ID) | MAX(ID)
506452  | 776686
(1 row, 13 ms)
sql> Aborted
Connection closed

$ e "select max(dte_time) from APP.TBL_LOGS;" | xd /cc/Program\ Files\ \(x86\)/
H2/bin/ java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:tcp://localhost/c:/H2/
mgmtp-20141128 -user app -password 000

Welcome to H2 Shell 1.3.169 (2012-09-09)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> MAX(DTE_TIME)
2014-11-28 08:39:42.25
(1 row, 44 ms)
sql> Aborted
Connection closed
 ~  46611
$ e "select max(dte_time) from APP.TBL_LOGS;" | xd /cc/Program\ Files\ \(x86\)/
H2/bin/ java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:tcp://localhost/c:/H2/
mgmtp-20150327 -user app -password 000

Welcome to H2 Shell 1.3.169 (2012-09-09)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> Error: org.h2.jdbc.JdbcSQLException: Allgemeiner Fehler: "java.lang.ArrayIn
dexOutOfBoundsException: 0"
General error: "java.lang.ArrayIndexOutOfBoundsException: 0"; SQL statement:
select max(dte_time) from APP.TBL_LOGS [50000-169]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
        at org.h2.message.DbException.get(DbException.java:158)
        at org.h2.message.DbException.convert(DbException.java:281)
        at org.h2.command.Command.executeQuery(Command.java:195)
        at org.h2.server.TcpServerThread.process(TcpServerThread.java:308)
        at org.h2.server.TcpServerThread.run(TcpServerThread.java:149)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:327)
        at org.h2.index.PageDataCursor.nextRow(PageDataCursor.java:97)
        at org.h2.index.PageDataCursor.next(PageDataCursor.java:49)
        at org.h2.index.IndexCursor.next(IndexCursor.java:238)
        at org.h2.table.TableFilter.next(TableFilter.java:353)
        at org.h2.command.dml.Select.queryGroup(Select.java:311)
        at org.h2.command.dml.Select.queryWithoutCache(Select.java:613)
        at org.h2.command.dml.Query.query(Query.java:307)
        at org.h2.command.dml.Query.query(Query.java:277)
        at org.h2.command.dml.Query.query(Query.java:36)
        at org.h2.command.CommandContainer.query(CommandContainer.java:86)
        at org.h2.command.Command.executeQuery(Command.java:191)
        ... 3 more

sql> Aborted
Connection closed

$ e "select count(*) from APP.TBL_LOGS;" | xd /cc/Program\ Files\ \(x86\)/H2/bi
n/ java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:tcp://localhost/c:/H2/mgmtp
-20150327 -user app -password 000

Welcome to H2 Shell 1.3.169 (2012-09-09)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> COUNT(*)
270133
(1 row, 14 ms)
sql> Aborted
Connection closed
 ~  46613
$ e "select count(*) from APP.TBL_LOGS;" | xd /cc/Program\ Files\ \(x86\)/H2/bi
n/ java -cp h2*.jar org.h2.tools.Shell -url jdbc:h2:tcp://localhost/c:/H2/mgmtp
-20141128 -user app -password 000

Welcome to H2 Shell 1.3.169 (2012-09-09)
Exit with Ctrl+C
Commands are case insensitive; SQL statements end with ';'
help or ?      Display this help
list           Toggle result list / stack trace mode
maxwidth       Set maximum column width (default is 100)
autocommit     Enable or disable autocommit
history        Show the last 20 statements
quit or exit   Close the connection and exit

sql> COUNT(*)
66
(1 row, 14 ms)
sql> Aborted
Connection closed

Original issue reported on code.google.com by Dolland....@gmail.com on 27 Mar 2015 at 12:38

GoogleCodeExporter commented 9 years ago
Sorry, I had to find out while trying to drop the table, that it was corrupted:

An error occurred when executing the SQL command:
DROP TABLE IF EXISTS APP.TBL_LOGS CASCADE

File corrupted while reading record: "wrong checksum". Possible solution: use 
the recovery tool; SQL statement:
DROP TABLE IF EXISTS APP.TBL_LOGS CASCADE [90030-169] [SQL State=90030, DB 
Errorcode=90030] 

Execution time: 0.17s
(Statement 1 of 8 finished)

Script execution finished
Total script execution time: 30.036s

The question remains, how the corruption occurred.

Original comment by Dolland....@gmail.com on 27 Mar 2015 at 3:27