sql: allow transitive Lua <-> SQL transactions
This patch makes possible to start transaction in Lua and continue operations in SQL as well, and vice versa. Previously, such transactions result in assertion fault. To support them, it is required to hold deferred foreign keys constraints as attributes of transaction, not particular VDBE. Thus, deferred foreign keys counters have been completely removed from VDBE and transfered to sql_txn struct. In its turn, if there is at least one deferred foreign key violation, error will be raised alongside with rollback - that is what ANSI SQL says. Note that in SQLite rollback doesn't occur: transaction remains open untill explicit rollback or resolving all FK violations. Also, 'PRAGMA defer_foreign_keys' has been slightly changed: now it is not automatically turned off after trasaction's rollback or commit. It can be turned off by explicit PRAGMA statement only. It was made owing to the fact that execution of PRAGMA statement occurs in auto-commit mode, so it ends with COMMIT. Hence, it turns off right after turning on (outside the transaction). Closes #3237
Showing
- src/box/errcode.h 1 addition, 0 deletionssrc/box/errcode.h
- src/box/sql/fkey.c 22 additions, 44 deletionssrc/box/sql/fkey.c
- src/box/sql/main.c 0 additions, 5 deletionssrc/box/sql/main.c
- src/box/sql/pragma.c 0 additions, 3 deletionssrc/box/sql/pragma.c
- src/box/sql/select.c 7 additions, 2 deletionssrc/box/sql/select.c
- src/box/sql/sqliteInt.h 0 additions, 2 deletionssrc/box/sql/sqliteInt.h
- src/box/sql/status.c 1 addition, 2 deletionssrc/box/sql/status.c
- src/box/sql/vdbe.c 13 additions, 12 deletionssrc/box/sql/vdbe.c
- src/box/sql/vdbe.h 23 additions, 0 deletionssrc/box/sql/vdbe.h
- src/box/sql/vdbeInt.h 2 additions, 24 deletionssrc/box/sql/vdbeInt.h
- src/box/sql/vdbeapi.c 0 additions, 3 deletionssrc/box/sql/vdbeapi.c
- src/box/sql/vdbeaux.c 47 additions, 30 deletionssrc/box/sql/vdbeaux.c
- src/box/txn.c 16 additions, 1 deletionsrc/box/txn.c
- src/box/txn.h 21 additions, 1 deletionsrc/box/txn.h
- test/box/misc.result 1 addition, 0 deletionstest/box/misc.result
- test/sql/transitive-transactions.result 126 additions, 0 deletionstest/sql/transitive-transactions.result
- test/sql/transitive-transactions.test.lua 65 additions, 0 deletionstest/sql/transitive-transactions.test.lua
Loading
Please register or sign in to comment