Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ArrayIndexOutOfBoundsException on delete from table #226

Closed
GoogleCodeExporter opened this issue Mar 17, 2016 · 18 comments
Closed

ArrayIndexOutOfBoundsException on delete from table #226

GoogleCodeExporter opened this issue Mar 17, 2016 · 18 comments

Comments

@GoogleCodeExporter
Copy link

Simple query suddenly stops working:

DELETE FROM news WHERE newstime >= '2004-01-01' AND newstime < '2010-03-01'

org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.ArrayIndexOutOfBoundsException" [50000-141]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.table.RegularTable.addRow(RegularTable.java:134)
    at org.h2.engine.UndoLogRecord.undo(UndoLogRecord.java:116)
    at org.h2.engine.Session.rollbackTo(Session.java:546)
    at org.h2.command.Command.executeUpdate(Command.java:238)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
    at workbench.sql.commands.UpdatingCommand.execute(UpdatingCommand.java:98)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:292)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:367)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:137)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:129)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:129)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:159)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:124)
    at org.h2.table.RegularTable.addRow(RegularTable.java:116)
    ... 10 more

Original issue reported on code.google.com by victor.p...@gmail.com on 23 Aug 2010 at 1:07

@GoogleCodeExporter
Copy link
Author

I try to rollback:

08-23 18:51:58 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.ArrayIndexOutOfBoundsException"; SQL statement:
ROLLBACK [50000-141]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.table.RegularTable.addRow(RegularTable.java:134)
    at org.h2.engine.UndoLogRecord.undo(UndoLogRecord.java:116)
    at org.h2.engine.Session.rollbackTo(Session.java:546)
    at org.h2.engine.Session.rollback(Session.java:523)
    at org.h2.command.dml.TransactionCommand.update(TransactionCommand.java:123)
    at org.h2.command.CommandContainer.update(CommandContainer.java:70)
    at org.h2.command.Command.executeUpdate(Command.java:199)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
    at workbench.sql.commands.SingleVerbCommand.execute(SingleVerbCommand.java:58)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:292)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:367)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:137)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:129)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:129)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:159)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:124)
    at org.h2.table.RegularTable.addRow(RegularTable.java:116)
    ... 13 more

Original comment by victor.p...@gmail.com on 23 Aug 2010 at 1:09

@GoogleCodeExporter
Copy link
Author

Then I tried to reboot and run the query:

SELECT * FROM news WHERE newstime >= '2004-01-01' AND newstime < '2010-03-01'

08-23 18:59:34 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.ArrayIndexOutOfBoundsException: 0" [50000-141]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.message.DbException.toSQLException(DbException.java:252)
    at org.h2.message.TraceObject.logAndConvert(TraceObject.java:386)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:85)
    at workbench.sql.commands.SelectCommand.execute(SelectCommand.java:116)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:318)
    at org.h2.index.PageDataLeaf.getRow(PageDataLeaf.java:435)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:270)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:270)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:270)
    at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:394)
    at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:383)
    at org.h2.table.RegularTable.getRow(RegularTable.java:104)
    at org.h2.index.PageBtreeIndex.getRow(PageBtreeIndex.java:288)
    at org.h2.index.PageBtreeCursor.get(PageBtreeCursor.java:45)
    at org.h2.index.IndexCursor.get(IndexCursor.java:209)
    at org.h2.table.TableFilter.getValue(TableFilter.java:824)
    at org.h2.expression.ExpressionColumn.getValue(ExpressionColumn.java:167)
    at org.h2.command.dml.Select.queryFlat(Select.java:498)
    at org.h2.command.dml.Select.queryWithoutCache(Select.java:579)
    at org.h2.command.dml.Query.query(Query.java:241)
    at org.h2.command.CommandContainer.query(CommandContainer.java:80)
    at org.h2.command.Command.executeQuery(Command.java:132)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:76)
    ... 5 more

Original comment by victor.p...@gmail.com on 23 Aug 2010 at 1:14

@GoogleCodeExporter
Copy link
Author

Queries without condition are working fine. For example:

SELECT COUNT(*), MIN(newstime), MAX(newstime), MIN(news_id), MAX(news_id) FROM 
news;

Original comment by victor.p...@gmail.com on 23 Aug 2010 at 1:17

@GoogleCodeExporter
Copy link
Author

D:\>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

Original comment by victor.p...@gmail.com on 23 Aug 2010 at 1:21

@GoogleCodeExporter
Copy link
Author

H2 V1.2.141

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 5:28

@GoogleCodeExporter
Copy link
Author

Some details:

1. The error is reproducible.

2. Referential integrity constraint is not working during DELETE execution. 
After execution, several of the records have been deleted.

3. The table becomes unusable. Even a select does not work.

SELECT news_id FROM news WHERE newstime >= '2010-02-20' AND newstime < 
'2010-03-01'; <- don't work
SELECT news_id FROM news WHERE newstime = '2010-02-19 15:49:31'; <- don't work
SELECT * FROM news WHERE newstime = '2010-02-19 15:49:31'; <- don't work
SELECT news_id FROM news WHERE newstime > '2010-02-19 15:51:00' AND newstime < 
'2010-03-01'; <- work

4. I can not simplify testcase. Original database is available at 
http://iris.kase.kz/swf/20100824_database_h2.7z (225 Mb)

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 7:31

@GoogleCodeExporter
Copy link
Author

Username: iris
Password: q

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 7:36

@GoogleCodeExporter
Copy link
Author

Then I am opening this database (created by V1.2.141) using V1.2.140 and running

DELETE FROM news WHERE newstime >= '2004-01-01' AND newstime < '2010-03-01'

org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)" 
[50000-140]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.table.RegularTable.addRow(RegularTable.java:134)
    at org.h2.engine.UndoLogRecord.undo(UndoLogRecord.java:116)
    at org.h2.engine.Session.rollbackTo(Session.java:546)
    at org.h2.command.Command.executeUpdate(Command.java:238)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
    at workbench.sql.commands.UpdatingCommand.execute(UpdatingCommand.java:98)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)
    at java.util.Arrays.rangeCheck(Arrays.java:1306)
    at java.util.Arrays.fill(Arrays.java:2567)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:290)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:363)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:151)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:143)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:143)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:159)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:124)
    at org.h2.table.RegularTable.addRow(RegularTable.java:116)
    ... 10 more

SELECT COUNT(*), MIN(newstime), MAX(newstime), MIN(news_id), MAX(news_id) FROM 
news;

08-24 13:42:30 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.ArrayIndexOutOfBoundsException: 2049" [50000-140]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.message.DbException.toSQLException(DbException.java:252)
    at org.h2.message.TraceObject.logAndConvert(TraceObject.java:386)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:85)
    at workbench.sql.commands.SelectCommand.execute(SelectCommand.java:116)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2049
    at org.h2.store.Data.readValue(Data.java:632)
    at org.h2.index.PageDataIndex.readRow(PageDataIndex.java:411)
    at org.h2.index.PageDataLeaf.getRowAt(PageDataLeaf.java:318)
    at org.h2.index.PageDataLeaf.getRow(PageDataLeaf.java:431)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:282)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:282)
    at org.h2.index.PageDataNode.getRow(PageDataNode.java:282)
    at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:394)
    at org.h2.index.PageDataIndex.getRow(PageDataIndex.java:383)
    at org.h2.table.RegularTable.getRow(RegularTable.java:104)
    at org.h2.index.PageBtreeIndex.getRow(PageBtreeIndex.java:288)
    at org.h2.index.PageBtreeCursor.get(PageBtreeCursor.java:45)
    at org.h2.index.IndexCursor.get(IndexCursor.java:207)
    at org.h2.table.TableFilter.getValue(TableFilter.java:824)
    at org.h2.expression.ExpressionColumn.getValue(ExpressionColumn.java:167)
    at org.h2.expression.Aggregate.updateAggregate(Aggregate.java:238)
    at org.h2.command.dml.Select.queryGroup(Select.java:335)
    at org.h2.command.dml.Select.queryWithoutCache(Select.java:574)
    at org.h2.command.dml.Query.query(Query.java:241)
    at org.h2.command.CommandContainer.query(CommandContainer.java:80)
    at org.h2.command.Command.executeQuery(Command.java:132)
    at org.h2.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:76)
    ... 5 more


Original comment by victor.p...@gmail.com on 24 Aug 2010 at 7:47

@GoogleCodeExporter
Copy link
Author

Then the database was created and opened using V1.2.140:

DELETE FROM news WHERE newstime >= '2004-01-01' AND newstime < '2010-03-01';

08-24 15:21:46 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)" 
[50000-140]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
    at org.h2.message.DbException.get(DbException.java:156)
    at org.h2.message.DbException.convert(DbException.java:279)
    at org.h2.table.RegularTable.addRow(RegularTable.java:134)
    at org.h2.engine.UndoLogRecord.undo(UndoLogRecord.java:116)
    at org.h2.engine.Session.rollbackTo(Session.java:546)
    at org.h2.command.Command.executeUpdate(Command.java:238)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
    at workbench.sql.commands.UpdatingCommand.execute(UpdatingCommand.java:98)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)
    at java.util.Arrays.rangeCheck(Arrays.java:1306)
    at java.util.Arrays.fill(Arrays.java:2567)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:290)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:363)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:151)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:143)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:143)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:159)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:124)
    at org.h2.table.RegularTable.addRow(RegularTable.java:116)
    ... 10 more

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 9:31

@GoogleCodeExporter
Copy link
Author

Then the database was created and opened using V1.2.127:

DELETE FROM news WHERE newstime >= '2004-01-01' AND newstime < '2010-03-01';

08-24 17:05:33 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)" 
[50000-127]
    at org.h2.message.Message.getSQLException(Message.java:110)
    at org.h2.message.Message.convert(Message.java:287)
    at org.h2.table.TableData.addRow(TableData.java:149)
    at org.h2.log.UndoLogRecord.undo(UndoLogRecord.java:126)
    at org.h2.engine.Session.rollbackTo(Session.java:531)
    at org.h2.command.Command.executeUpdate(Command.java:239)
    at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:176)
    at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:151)
    at workbench.sql.commands.UpdatingCommand.execute(UpdatingCommand.java:98)
    at workbench.sql.StatementRunner.runStatement(StatementRunner.java:375)
    at workbench.gui.sql.SqlPanel.displayResult(SqlPanel.java:2766)
    at workbench.gui.sql.SqlPanel.runStatement(SqlPanel.java:1771)
    at workbench.gui.sql.SqlPanel$12.run(SqlPanel.java:1739)
Caused by: java.lang.IllegalArgumentException: fromIndex(2049) > toIndex(2048)
    at java.util.Arrays.rangeCheck(Arrays.java:1306)
    at java.util.Arrays.fill(Arrays.java:2567)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:286)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:359)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:153)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:145)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:145)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:153)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:126)
    at org.h2.table.TableData.addRow(TableData.java:130)
    ... 10 more
08-24 17:06:27 jdbc[2]: SQLException
org.h2.jdbc.JdbcSQLException: General error: 
"java.lang.IllegalArgumentException: fromIndex(2058) > toIndex(2048)"; SQL 
statement:
ROLLBACK [50000-127]
    at org.h2.message.Message.getSQLException(Message.java:110)
    at org.h2.message.Message.convert(Message.java:287)
    at org.h2.table.TableData.addRow(TableData.java:149)
    at org.h2.log.UndoLogRecord.undo(UndoLogRecord.java:126)
    at org.h2.engine.Session.rollbackTo(Session.java:531)
    at org.h2.engine.Session.rollback(Session.java:508)
    at org.h2.command.dml.TransactionCommand.update(TransactionCommand.java:125)
    at org.h2.command.CommandContainer.update(CommandContainer.java:71)
    at org.h2.command.Command.executeUpdate(Command.java:199)
    at org.h2.jdbc.JdbcConnection.rollbackInternal(JdbcConnection.java:1391)
    at org.h2.jdbc.JdbcConnection.close(JdbcConnection.java:311)
    at workbench.db.WbConnection.shutdown(WbConnection.java:619)
    at workbench.db.ConnectionMgr.closeConnection(ConnectionMgr.java:457)
    at workbench.db.ConnectionMgr.disconnect(ConnectionMgr.java:418)
    at workbench.gui.MainWindow.doDisconnect(MainWindow.java:1641)
    at workbench.gui.MainWindow$13.run(MainWindow.java:1592)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.IllegalArgumentException: fromIndex(2058) > toIndex(2048)
    at java.util.Arrays.rangeCheck(Arrays.java:1306)
    at java.util.Arrays.fill(Arrays.java:2567)
    at org.h2.index.PageDataLeaf.removeRow(PageDataLeaf.java:286)
    at org.h2.index.PageDataLeaf.split(PageDataLeaf.java:359)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:153)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:145)
    at org.h2.index.PageDataNode.addRowTry(PageDataNode.java:145)
    at org.h2.index.PageDataIndex.addTry(PageDataIndex.java:153)
    at org.h2.index.PageDataIndex.add(PageDataIndex.java:126)
    at org.h2.table.TableData.addRow(TableData.java:130)
    ... 21 more

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 11:10

@GoogleCodeExporter
Copy link
Author

It may be stupid question but why does ConstraintReferential.isBefore() equal 
false?

Original comment by victor.p...@gmail.com on 24 Aug 2010 at 1:29

@GoogleCodeExporter
Copy link
Author

Thanks for reporting this issue! I can reproduce the problem using your 
database. The problem occurs while the transaction is rolled back because of a 
constraint violation (Referential integrity constraint violation: 
"FK_NEWSSECTREFS_NEWS_ID: PUBLIC.NEWSSECTREFS FOREIGN KEY(NEWS_ID) REFERENCES 
PUBLIC.NEWS(NEWS_ID)"). I somewhat understand what's the problem (trying to 
remove a large row when splittinga page), but I don't have a standalone test 
case yet. Specially I don't understand yet why the automated tests didn't run 
into this issue, something must be special in your case. But with the test 
database it should be relatively easy to that out. Maybe the problem is related 
to referential integrity (but that's just a guess so far).

> why does ConstraintReferential.isBefore() equal false

I'm not sure.

Original comment by thomas.t...@gmail.com on 24 Aug 2010 at 5:09

  • Changed state: Accepted

@GoogleCodeExporter
Copy link
Author

[deleted comment]

@GoogleCodeExporter
Copy link
Author

I understand that the discussion of referential integrity is beyond the scope 
of the issue but H2 behaviour causes me to misunderstand in this context. I try 
to explain my thoughts on attached picture.

Original comment by victor.p...@gmail.com on 25 Aug 2010 at 6:33

@GoogleCodeExporter
Copy link
Author

I don't think that it is optimal algorithm. In example above H2 must delete and 
restore 500 Mb without any visible cause.

Original comment by victor.p...@gmail.com on 25 Aug 2010 at 6:40

@GoogleCodeExporter
Copy link
Author

Fixed in version 1.2.142.

The problem with "first check all constraints before doing any updates" is 
performance. It would need to read / update each row twice. For small updates 
that's not a problem, but for large updates the cache usage would be bad. H2 is 
optimized for the case where the constraints are not violated, which I think is 
a reasonable assumption.

Original comment by thomas.t...@gmail.com on 31 Aug 2010 at 6:10

  • Changed state: Fixed

@GoogleCodeExporter
Copy link
Author

The same database. The same table. Exception on ALTER TABLE.

Is it possible that this is the same error?

09:10:43,909 DEBUG [H2Utils] add patcher listener
09:10:43,909 INFO  [IRISSchemePatcher] PATCH to 49
09:10:43,909 INFO  [SchemePatcherSystem] EXECUTE: ALTER TABLE news ADD   
begtime     DATETIME     DEFAULT NULL
10:03:17,774 DEBUG [SchemePatcherSystem] ERROR: code = 50000, state = HY000, 
message = ?????????? ??????: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:
ALTER TABLE news ADD   begtime     DATETIME     DEFAULT NULL [50000-141]
10:03:17,837 DEBUG [ClientStoreFactory] passivateObject
10:03:18,071 ERROR [SgenDbUpdateThread] run 
(kz.bips.comps.jdbc.versql.SqlSchemeCreatorException): DDL execution error
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.execute(SqlSchemeBuilder.java:53)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.o(SqlSchemeBuilder.java:150)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.helpers.SchemePatcherSystem.patchDDL_V49_begtime_h2
(SchemePatcherSystem.java:225)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.patches.Patch0049.patch(Patch0049.java:60)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTSchemePatcher.applyPatch(NTSchemePatcher.java:52)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.updateDb(SqlSchemeCreator.java:142)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.bonkDb(SqlSchemeCreator.java:97)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.checkDb(SqlSchemeCreator.java:23)
10:03:18,071 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTVersqlRunner.checkDb(NTVersqlRunner.java:29)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.H2Utils.checkDataBase(H2Utils.java:185)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.store.ClientStoreConnector.verifyDatabase(Unknown 
Source)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.ui.jobs.SgenDbUpdateThread.run(Unknown Source)
10:03:18,087 ERROR [SgenDbUpdateThread] List causes 
(org.h2.jdbc.JdbcSQLException): ?????????? ??????: 
"java.lang.NullPointerException"
General error: "java.lang.NullPointerException"; SQL statement:
ALTER TABLE news ADD   begtime     DATETIME     DEFAULT NULL [50000-141]
10:03:18,087 DEBUG [SgenDbUpdateThread] ErrorCode = 50000, ErrorState = HY000
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.message.DbException.get(DbException.java:156)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.message.DbException.convert(DbException.java:279)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.Command.executeUpdate(Command.java:219)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:124)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:109)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.SqlHelper.execute(SqlHelper.java:529)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.execute(SqlSchemeBuilder.java:50)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.o(SqlSchemeBuilder.java:150)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.helpers.SchemePatcherSystem.patchDDL_V49_begtime_h2
(SchemePatcherSystem.java:225)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.patches.Patch0049.patch(Patch0049.java:60)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTSchemePatcher.applyPatch(NTSchemePatcher.java:52)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.updateDb(SqlSchemeCreator.java:142)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.bonkDb(SqlSchemeCreator.java:97)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.checkDb(SqlSchemeCreator.java:23)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTVersqlRunner.checkDb(NTVersqlRunner.java:29)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.H2Utils.checkDataBase(H2Utils.java:185)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.store.ClientStoreConnector.verifyDatabase(Unknown 
Source)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.ui.jobs.SgenDbUpdateThread.run(Unknown Source)
10:03:18,087 ERROR [SgenDbUpdateThread] List causes 
(java.lang.NullPointerException): null
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.store.PageLog.removeUntil(PageLog.java:690)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.store.PageLog.removeUntil(PageLog.java:667)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.store.PageStore.checkpoint(PageStore.java:376)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.store.PageStore.commit(PageStore.java:1253)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.engine.Database.commit(Database.java:1706)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.engine.Session.commit(Session.java:468)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.ddl.AlterTableAlterColumn.execute(AlterTableAlterColumn.java:423)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.ddl.AlterTableAlterColumn.copyData(AlterTableAlterColumn.java:218
)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.ddl.AlterTableAlterColumn.update(AlterTableAlterColumn.java:157)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.CommandContainer.update(CommandContainer.java:70)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.command.Command.executeUpdate(Command.java:199)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:124)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:109)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.SqlHelper.execute(SqlHelper.java:529)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.execute(SqlSchemeBuilder.java:50)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeBuilder.o(SqlSchemeBuilder.java:150)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.helpers.SchemePatcherSystem.patchDDL_V49_begtime_h2
(SchemePatcherSystem.java:225)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.nt.patches.Patch0049.patch(Patch0049.java:60)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTSchemePatcher.applyPatch(NTSchemePatcher.java:52)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.updateDb(SqlSchemeCreator.java:142)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.bonkDb(SqlSchemeCreator.java:97)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.SqlSchemeCreator.checkDb(SqlSchemeCreator.java:23)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.bips.comps.jdbc.versql.NTVersqlRunner.checkDb(NTVersqlRunner.java:29)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.versql.H2Utils.checkDataBase(H2Utils.java:185)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.store.ClientStoreConnector.verifyDatabase(Unknown 
Source)
10:03:18,087 DEBUG [SgenDbUpdateThread]   trace: 
kz.irbis.apps.iris.client.ui.jobs.SgenDbUpdateThread.run(Unknown Source)

Original comment by victor.p...@gmail.com on 9 Sep 2010 at 11:10

@GoogleCodeExporter
Copy link
Author

It looks like a different issue, I'm sorry.

Original comment by thomas.t...@gmail.com on 17 Sep 2010 at 8:57

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant