From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id D15A846970F for ; Thu, 28 Nov 2019 21:34:07 +0300 (MSK) From: Roman Khabibov Date: Thu, 28 Nov 2019 21:34:02 +0300 Message-Id: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v2 0/2] Add constraint names hash table to space List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org Cc: v.shpilevoy@tarantool.org 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)