Hi, This should be fixed with the latest version of H2.
Regards, Thomas On Thursday, April 17, 2014, Thomas Mueller <[email protected]> wrote: > Hi, > > By the way, a shorter SQL script test case: > > drop table test; > create table test(id int primary key, a int unique, b int); > set autocommit false; > insert into test values (1, 1, 1); > insert into test values (2, 2, 2); > -- gives a constraint violation > update test set a = 1 where id = 2; > -- the row that failed to update is no longer found by its old values > select * from test where id = 2; > select * from test where a = 2; > -- both selects above fail to find anything... > -- ...but this works > select * from test where b = 2; > > Regards, > Thomas > > On Thursday, April 17, 2014, Noel Grandin > <[email protected]<javascript:_e(%7B%7D,'cvml','[email protected]');>> > wrote: > >> >> This is my initial analysis - I don't know how to solve it yet, but >> either someone else will, or I will get back to it at a later date. >> >> >> This problem appears to be specific to the combination of an in-memory >> database and MVCC=true, which is on by default in version 1.4.x >> >> The problem is occurring somewhere in the stacktrace below. >> I suspect it has to do with one of >> MultiVersionIndex.add(Session, Row) >> RegularTable.addRow(Session, Row) >> both which are attempting to do an insert/remove combination. >> I suspect that one of them is incorrectly restoring state when a unique >> constraint violation occurs. >> >> Thread [H2 Console thread] (Suspended (breakpoint at line 103 in >> BaseIndex)) >> owns: Database (id=103) >> owns: Session (id=104) >> TreeIndex(BaseIndex).getDuplicateKeyException(String) line: 103 >> TreeIndex.add(Session, Row) line: 69 >> MultiVersionIndex.add(Session, Row) line: 59 >> RegularTable.addRow(Session, Row) line: 120 >> RegularTable(Table).updateRows(Prepared, Session, RowList) line: >> 467 >> Update.update() line: 146 >> CommandContainer.update() line: 79 >> CommandContainer(Command).executeUpdate() line: 254 >> JdbcStatement.executeInternal(String) line: 186 >> JdbcStatement.execute(String) line: 160 >> WebThread(WebApp).getResult(Connection, int, String, boolean, >> boolean) line: 1391 >> WebThread(WebApp).query(Connection, String, int, int, >> StringBuilder) line: 1064 >> WebApp$1.next() line: 1026 >> WebApp$1.next() line: 1 >> WebThread.process() line: 168 >> WebThread.run() line: 94 >> Thread.run() line: 662 >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "H2 Database" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/h2-database. >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
