schema: add new system space for FK constraints
This patch introduces new system space to persist foreign keys constraints. Format of the space: _fk_constraint (space id = 358) [<constraint name> STR, <parent id> UINT, <child id> UINT, <is deferred> BOOL, <match> STR, <on delete action> STR, <on update action> STR, <child cols> ARRAY<UINT>, <parent cols> ARRAY<UINT>] FK constraint is local to space, so every pair <FK name, child id> is unique (and it is PK in _fk_constraint space). After insertion into this space, new instance describing FK constraint is created. FK constraints are held in data-dictionary as two lists (for child and parent constraints) in struct space. There is a list of FK restrictions: - At the time of FK creation parent and child spaces must exist; - VIEWs can't be involved into FK processing; - Child space must be empty; - Types of referencing and referenced fields must be comparable; - Collations of referencing and referenced fields must match; - Referenced fields must compose unique index; - Referenced fields can not contain duplicates. Until space (child) features FK constraints it isn't allowed to be dropped. Implicitly referenced index also can't be dropped (and that is why parent space can't be dropped). But :drop() method of child space firstly deletes all FK constraint (the same as SQL triggers, indexes etc) and then removes entry from _space. Part of #3271 Review fixes
Showing
- src/box/CMakeLists.txt 1 addition, 0 deletionssrc/box/CMakeLists.txt
- src/box/alter.cc 453 additions, 6 deletionssrc/box/alter.cc
- src/box/alter.h 1 addition, 0 deletionssrc/box/alter.h
- src/box/bootstrap.snap 0 additions, 0 deletionssrc/box/bootstrap.snap
- src/box/errcode.h 2 additions, 0 deletionssrc/box/errcode.h
- src/box/fkey.c 56 additions, 0 deletionssrc/box/fkey.c
- src/box/fkey.h 138 additions, 0 deletionssrc/box/fkey.h
- src/box/lua/schema.lua 4 additions, 0 deletionssrc/box/lua/schema.lua
- src/box/lua/space.cc 2 additions, 0 deletionssrc/box/lua/space.cc
- src/box/lua/upgrade.lua 21 additions, 0 deletionssrc/box/lua/upgrade.lua
- src/box/schema.cc 16 additions, 0 deletionssrc/box/schema.cc
- src/box/schema_def.h 15 additions, 0 deletionssrc/box/schema_def.h
- src/box/space.c 4 additions, 0 deletionssrc/box/space.c
- src/box/space.h 9 additions, 0 deletionssrc/box/space.h
- src/box/sql.c 8 additions, 0 deletionssrc/box/sql.c
- src/box/sql/fkey.c 10 additions, 43 deletionssrc/box/sql/fkey.c
- src/box/sql/tarantoolInt.h 1 addition, 0 deletionssrc/box/sql/tarantoolInt.h
- test/box/access_misc.result 5 additions, 0 deletionstest/box/access_misc.result
- test/box/access_sysview.result 3 additions, 3 deletionstest/box/access_sysview.result
- test/box/alter.result 4 additions, 2 deletionstest/box/alter.result
Loading
Please register or sign in to comment