akarshan2701 / h2database

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

ArrayIndexOutOfBoundsException on delete from table #226

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
H2 V1.2.141

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

GoogleCodeExporter commented 8 years ago
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 commented 8 years ago
Username: iris
Password: q

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

GoogleCodeExporter commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
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 commented 8 years ago
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 commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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 commented 8 years ago
It looks like a different issue, I'm sorry.

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