[Tarantool-patches] [PATCH v2 0/2] Add constraint names hash table to space
Roman Khabibov
roman.habibov at tarantool.org
Thu Nov 28 21:34:02 MSK 2019
I have made essential changes to the previous patch, so I decided
to send it as v2.
1) I still don't understand, why we need to store constraint id. If we have the
query "ALTER TABLE T DROP CONSTRAINT C", we just get struct space by its name,
then find the corresponding constraint_def node by the name and emit opcode on
replace in _index/_fk_constraint/_ck_constraint depending on
constraint_def->type.
2) space_delete()
I don't know how to check, if the hash table is empty, because it jsut freed.
salad/mhash.h
void
_mh(delete)(struct _mh(t) *h)
{
if (h->shadow->p) {
free(h->shadow->p);
free(h->shadow->b);
memset(h->shadow, 0, sizeof(*h->shadow));
}
free(h->shadow);
free(h->b);
free(h->p);
free(h);
}
3) I copy names of constraints instead of use index_def->name or
ck_constraint_def->name or fk_constraint_def->name, because in some cases these
defs can be freed. I discovered it during degugging, when I haven't use name copy
yet: there was node in the hash table with name length and hash, but without name
itself. Now, I decided to store duplicates in struct constraint_def.
Issue: https://github.com/tarantool/tarantool/issues/3503
Branch: https://github.com/tarantool/tarantool/tree/romanhabibov/gh-3503-constr-names_v3
Roman Khabibov (2):
box: introduce constraint names hash table
sql: make constraint operations transactional
src/box/CMakeLists.txt | 1 +
src/box/alter.cc | 427 +++++++++++++++++++++++++++++++----
src/box/constraint_def.c | 59 +++++
src/box/constraint_def.h | 83 +++++++
src/box/space.c | 56 +++++
src/box/space.h | 39 ++++
test/sql/constraint.result | 190 ++++++++++++++++
test/sql/constraint.test.lua | 84 +++++++
8 files changed, 892 insertions(+), 47 deletions(-)
create mode 100755 src/box/constraint_def.c
create mode 100755 src/box/constraint_def.h
create mode 100644 test/sql/constraint.result
create mode 100755 test/sql/constraint.test.lua
--
2.21.0 (Apple Git-122)
More information about the Tarantool-patches
mailing list