Autoincrement primary key column in H2 causes allocation of new value 
during execution of INSERT.  Normally these values should be returned from  
Statement.getGeneratedKeys().  Somehow this API works fine with H2.196.  In 
latest code some major refactoring was done  using new class in H2 - 
GeneratedKeys.  Now there is a possibility that  generated keys collected 
in GeneratedKeys data structure that is held by Session during INSERT 
execution  are GONE, if during INSERT there is a trigger that does another 
INSERT... 



    public void setCurrentCommand(Command command, Object 
generatedKeysRequest) {
        this.currentCommand = command;
        // Preserve generated keys in case of a new query due to possible 
nested
        // queries in update
        if (command != null && !command.isQuery()) {
            getGeneratedKeys().clear(generatedKeysRequest);
        }

This occurs inside of Session.setCurrentCommand... 


I suppose this 
        // Preserve generated keys in case of a new query due to possible 
nested
        // queries in update

is TODO?


I see that it could be solved by moving responsibility to maintain 
GeneratedKeys 
data structure directly to Command/CommandContainer  objects..  So, then 
nesting of queries (in a form of stack) won't clear this state in "shared"  
Session.

Each  command (like INSERT) then is able to return its generated keys 
properly.



-- 
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 h2-database+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/h2-database/6fceb305-8c11-47a4-bea5-2baac3d8d0f2%40googlegroups.com.

Reply via email to