From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 2B58424605 for ; Mon, 22 Jul 2019 07:22:39 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id SV10PUrhqkDK for ; Mon, 22 Jul 2019 07:22:39 -0400 (EDT) Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id 89902245E7 for ; Mon, 22 Jul 2019 07:22:29 -0400 (EDT) Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Subject: [tarantool-patches] Re: [PATCH v1 1/1] sql: increase row_count when adding CHECK constraint From: "n.pettik" In-Reply-To: <5dba4410ecdc97004cd4a9890e302baa20b07529.1563525363.git.imeevma@gmail.com> Date: Mon, 22 Jul 2019 14:22:26 +0300 Content-Transfer-Encoding: quoted-printable Message-Id: <16B9D8C3-A880-4002-8C06-BEC3D152FE8D@tarantool.org> References: <5dba4410ecdc97004cd4a9890e302baa20b07529.1563525363.git.imeevma@gmail.com> Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: tarantool-patches@freelists.org Cc: Imeev Mergen > On 19 Jul 2019, at 11:38, imeevma@tarantool.org wrote: >=20 > If a CHECK constraint was added using an ALTER TABLE statement, > row_count should be increased. Note that row_count does not > increase if a CHECK constraint is added during the execution of a > CREATE TABLE statement. > For example: >=20 > box.execute('CREATE TABLE t1(id INTEGER PRIMARY KEY);') > box.execute('ALTER TABLE t1 ADD CONSTRAINT ck1 CHECK(id > 0);') >=20 > Should return: > - row_count: 1 >=20 > However it was '0' before the patch. >=20 > Closes #4363 > =E2=80=94 I=E2=80=99ve pushed this fix: diff --git a/src/box/sql/build.c b/src/box/sql/build.c index 183f87505..a1a71174c 100644 --- a/src/box/sql/build.c +++ b/src/box/sql/build.c @@ -772,9 +772,13 @@ sql_create_check_contraint(struct Parse *parser) return; } int space_id_reg =3D ++parser->nMem; - sqlVdbeAddOp2(sqlGetVdbe(parser), OP_Integer, = space->def->id, + struct Vdbe *v =3D sqlGetVdbe(parser); + sqlVdbeAddOp2(v, OP_Integer, space->def->id, space_id_reg); vdbe_emit_ck_constraint_create(parser, ck_def, = space_id_reg); + assert(sqlVdbeGetOp(v, v->nOp)->opcode =3D=3D = OP_SInsert); + sqlVdbeCountChanges(v); + sqlVdbeChangeP5(v, OPFLAG_NCHANGE); } else { rlist_add_entry(&parser->create_table_def.new_check, = ck_parse, link); @@ -1124,14 +1128,6 @@ vdbe_emit_ck_constraint_create(struct Parse = *parser, return; sqlVdbeAddOp3(v, OP_SInsert, BOX_CK_CONSTRAINT_ID, 0, ck_constraint_reg + 5); - /* - * In case constraint was added using ALTER TABLE - * statement we should increase row_count. - */ - if (parser->create_table_def.new_space =3D=3D NULL) { - sqlVdbeCountChanges(v); - sqlVdbeChangeP5(v, OPFLAG_NCHANGE); - } save_record(parser, BOX_CK_CONSTRAINT_ID, ck_constraint_reg, 2, v->nOp - 1, true); VdbeComment((v, "Create CK constraint %s", ck_def->name));