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]> 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.
