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 05AA3268A1 for ; Tue, 5 Feb 2019 10:08:21 -0500 (EST) 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 8bQwH0XKANMu for ; Tue, 5 Feb 2019 10:08:20 -0500 (EST) 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 B0D4825239 for ; Tue, 5 Feb 2019 10:08:20 -0500 (EST) Subject: [tarantool-patches] Re: [PATCH 5/8] sql: replace field type with affinity for VDBE runtime References: <6e7623ee-fdcc-616f-6a99-20aff0e97f43@tarantool.org> <93178595-D7AF-49DE-8273-0FBD18545D56@tarantool.org> <115cb635-13f4-1946-22b3-36b828d9d679@tarantool.org> <2ED4082B-7899-4880-8FF2-25E1A3E6D90B@tarantool.org> From: Vladislav Shpilevoy Message-ID: <69deceb9-307d-047b-d0de-fa463137bf46@tarantool.org> Date: Tue, 5 Feb 2019 18:08:18 +0300 MIME-Version: 1.0 In-Reply-To: <2ED4082B-7899-4880-8FF2-25E1A3E6D90B@tarantool.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit 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: "n.pettik" , tarantool-patches@freelists.org Hi! Thanks for the fixes! >>> diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c >>> index 24d992284..80d2fd0aa 100644 >>> --- a/src/box/sql/vdbe.c >>> +++ b/src/box/sql/vdbe.c >>> @@ -2881,7 +2873,7 @@ case OP_MakeRecord: { >>> * of the record to data0. >>> */ >>> nField = pOp->p1; >>> - zAffinity = pOp->p4.z; >>> + enum field_type *types = (enum field_type *)pOp->p4.z; >> >> 2. Maybe, it is worth adding enum field_type *types into VdbeOp.p4union >> and do not cast. Like we did with many other pointers. > > Thanks for suggestion, but I guess it is not necessary now. > Lets consider this refactoring a bit later. > Space * and other members of p4union also were not necessary, but they make it easier to understand what can be stored in p4, when you look at struct VdbeOp. So please, apply this: diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index 80d2fd0aa..5e685389b 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -2814,7 +2814,7 @@ case OP_Column: { * memory cell in the range. */ case OP_ApplyType: { - enum field_type *type_str = (enum field_type *)pOp->p4.z; + enum field_type *type_str = pOp->p4.types; assert(type_str != NULL); assert(type_str[pOp->p2] == field_type_MAX); pIn1 = &aMem[pOp->p1]; @@ -2873,7 +2873,7 @@ case OP_MakeRecord: { * of the record to data0. */ nField = pOp->p1; - enum field_type *types = (enum field_type *)pOp->p4.z; + enum field_type *types = pOp->p4.types; bIsEphemeral = pOp->p5; assert(nField>0 && pOp->p2>0 && pOp->p2+nField<=(p->nMem+1 - p->nCursor)+1); pData0 = &aMem[nField]; diff --git a/src/box/sql/vdbe.h b/src/box/sql/vdbe.h index dcf974c51..088f24d0e 100644 --- a/src/box/sql/vdbe.h +++ b/src/box/sql/vdbe.h @@ -84,6 +84,11 @@ struct VdbeOp { struct sql_key_info *key_info; /** Used when p4type is P4_SPACEPTR. */ struct space *space; + /** + * Used to apply types when making a record, or + * doing a cast. + */ + enum field_type *types; } p4; #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS char *zComment; /* Comment to improve readability */