From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp38.i.mail.ru (smtp38.i.mail.ru [94.100.177.98]) (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 29CDD469711 for ; Thu, 28 May 2020 17:17:32 +0300 (MSK) From: Mergen Imeev Date: Thu, 28 May 2020 17:17:31 +0300 Message-Id: <92fc506a755863ccdf807b232dca5b96737708c6.1590671266.git.imeevma@gmail.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH 2/6] sql: remove mem_apply_type() from OP_MakeRecord List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org, tsafin@tarantool.org, tarantool-patches@dev.tarantool.org This patch removes type changing from OP_MakeRecord. Part of #4230 --- src/box/sql/analyze.c | 7 +------ src/box/sql/delete.c | 8 ++------ src/box/sql/expr.c | 8 +------- src/box/sql/fk_constraint.c | 9 ++------- src/box/sql/select.c | 25 ++++++------------------- src/box/sql/update.c | 14 +++----------- src/box/sql/vdbe.c | 11 ----------- test/sql-tap/in3.test.lua | 4 ++-- 8 files changed, 17 insertions(+), 69 deletions(-) diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c index f74f9b358..23fbb15de 100644 --- a/src/box/sql/analyze.c +++ b/src/box/sql/analyze.c @@ -965,12 +965,7 @@ vdbe_emit_analyze_space(struct Parse *parse, struct space *space) sqlVdbeAddOp2(v, OP_Next, idx_cursor, next_row_addr); /* Add the entry to the stat1 table. */ callStatGet(v, stat4_reg, STAT_GET_STAT1, stat1_reg); - enum field_type types[4] = { FIELD_TYPE_STRING, - FIELD_TYPE_STRING, - FIELD_TYPE_STRING, - field_type_MAX }; - sqlVdbeAddOp4(v, OP_MakeRecord, tab_name_reg, 4, tmp_reg, - (char *)types, sizeof(types)); + sqlVdbeAddOp3(v, OP_MakeRecord, tab_name_reg, 4, tmp_reg); sqlVdbeAddOp4(v, OP_IdxInsert, tmp_reg, 0, 0, (char *)stat1, P4_SPACEPTR); /* Add the entries to the stat4 table. */ diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c index 68abd1f58..0b6f0bd62 100644 --- a/src/box/sql/delete.c +++ b/src/box/sql/delete.c @@ -328,12 +328,8 @@ sql_table_delete_from(struct Parse *parse, struct SrcList *tab_list, * key. */ key_len = 0; - struct index *pk = space_index(space, 0); - enum field_type *types = is_view ? NULL : - sql_index_type_str(parse->db, - pk->def); - sqlVdbeAddOp4(v, OP_MakeRecord, reg_pk, pk_len, - reg_key, (char *)types, P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, reg_pk, pk_len, + reg_key); /* Set flag to save memory allocating one * by malloc. */ diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c index bc2182446..019628a26 100644 --- a/src/box/sql/expr.c +++ b/src/box/sql/expr.c @@ -2859,8 +2859,6 @@ sqlCodeSubselect(Parse * pParse, /* Parsing context */ struct ExprList_item *pItem; int r1, r2, r3; - enum field_type lhs_type = - sql_expr_type(pLeft); bool unused; struct coll *unused_coll; if (sql_expr_coll(pParse, pExpr->pLeft, &unused, @@ -2886,11 +2884,7 @@ sqlCodeSubselect(Parse * pParse, /* Parsing context */ jmpIfDynamic = -1; } r3 = sqlExprCodeTarget(pParse, pE2, r1); - enum field_type types[2] = - { lhs_type, field_type_MAX }; - sqlVdbeAddOp4(v, OP_MakeRecord, r3, - 1, r2, (char *)types, - sizeof(types)); + sqlVdbeAddOp3(v, OP_MakeRecord, r3, 1, r2); sql_expr_type_cache_change(pParse, r3, 1); sqlVdbeAddOp2(v, OP_IdxInsert, r2, diff --git a/src/box/sql/fk_constraint.c b/src/box/sql/fk_constraint.c index 482220a95..43471d51a 100644 --- a/src/box/sql/fk_constraint.c +++ b/src/box/sql/fk_constraint.c @@ -262,13 +262,8 @@ fk_constraint_lookup_parent(struct Parse *parse_context, struct space *parent, link->child_field + 1 + reg_data, temp_regs + i); } - struct index *idx = space_index(parent, referenced_idx); - assert(idx != NULL); - sqlVdbeAddOp4(v, OP_MakeRecord, temp_regs, field_count, - rec_reg, - (char *) sql_index_type_str(parse_context->db, - idx->def), - P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, temp_regs, field_count, + rec_reg); sqlVdbeAddOp4Int(v, OP_Found, cursor, ok_label, rec_reg, 0); sqlReleaseTempReg(parse_context, rec_reg); sqlReleaseTempRange(parse_context, temp_regs, field_count); diff --git a/src/box/sql/select.c b/src/box/sql/select.c index f39484013..64ef9f0b5 100644 --- a/src/box/sql/select.c +++ b/src/box/sql/select.c @@ -1270,13 +1270,8 @@ selectInnerLoop(Parse * pParse, /* The parser context */ regOrig, nResultCol, nPrefixReg); } else { int r1 = sqlGetTempReg(pParse); - enum field_type *types = - field_type_sequence_dup(pParse, - pDest->dest_type, - nResultCol); - sqlVdbeAddOp4(v, OP_MakeRecord, regResult, - nResultCol, r1, (char *)types, - P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, regResult, + nResultCol, r1); sql_expr_type_cache_change(pParse, regResult, nResultCol); @@ -1693,12 +1688,8 @@ generateSortTail(Parse * pParse, /* Parsing context */ break; } case SRT_Set:{ - enum field_type *types = - field_type_sequence_dup(pParse, pDest->dest_type, - nColumn); - sqlVdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, - regTupleid, (char *)types, - P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, regRow, nColumn, + regTupleid); sql_expr_type_cache_change(pParse, regRow, nColumn); sqlVdbeAddOp2(v, OP_IdxInsert, regTupleid, pDest->reg_eph); break; @@ -3134,12 +3125,8 @@ generateOutputSubroutine(struct Parse *parse, struct Select *p, int r1; testcase(in->nSdst > 1); r1 = sqlGetTempReg(parse); - enum field_type *types = - field_type_sequence_dup(parse, dest->dest_type, - in->nSdst); - sqlVdbeAddOp4(v, OP_MakeRecord, in->iSdst, - in->nSdst, r1, (char *)types, - P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, in->iSdst, in->nSdst, + r1); sql_expr_type_cache_change(parse, in->iSdst, in->nSdst); sqlVdbeAddOp2(v, OP_IdxInsert, r1, dest->reg_eph); diff --git a/src/box/sql/update.c b/src/box/sql/update.c index d25262c21..cb10ed3a1 100644 --- a/src/box/sql/update.c +++ b/src/box/sql/update.c @@ -251,11 +251,7 @@ sqlUpdate(Parse * pParse, /* The parser context */ nKey = pk_part_count; regKey = iPk; } else { - enum field_type *types = is_view ? NULL : - sql_index_type_str(pParse->db, - pPk->def); - sqlVdbeAddOp4(v, OP_MakeRecord, iPk, pk_part_count, - regKey, (char *) types, P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, iPk, pk_part_count, regKey); /* * Set flag to save memory allocating one by * malloc. @@ -420,12 +416,8 @@ sqlUpdate(Parse * pParse, /* The parser context */ int key_reg; if (okOnePass) { key_reg = sqlGetTempReg(pParse); - enum field_type *types = - sql_index_type_str(pParse->db, - pPk->def); - sqlVdbeAddOp4(v, OP_MakeRecord, iPk, - pk_part_count, key_reg, - (char *) types, P4_DYNAMIC); + sqlVdbeAddOp3(v, OP_MakeRecord, iPk, + pk_part_count, key_reg); } else { assert(nKey == 0); key_reg = regKey; diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index 2a941025c..fc41ee0d6 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -2902,7 +2902,6 @@ case OP_CheckType: { * into ephemeral space. Thus, sort of memory optimization can be performed. */ case OP_MakeRecord: { - Mem *pRec; /* The new record */ Mem *pData0; /* First field to be combined into the record */ Mem MAYBE_UNUSED *pLast; /* Last field of the record */ int nField; /* Number of fields in the record */ @@ -2924,7 +2923,6 @@ case OP_MakeRecord: { * of the record to data0. */ nField = pOp->p1; - 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]; @@ -2935,15 +2933,6 @@ case OP_MakeRecord: { assert(pOp->p3p1 || pOp->p3>=pOp->p1+pOp->p2); pOut = vdbe_prepare_null_out(p, pOp->p3); - /* Apply the requested types to all inputs */ - assert(pData0<=pLast); - if (types != NULL) { - pRec = pData0; - do { - mem_apply_type(pRec++, *(types++)); - } while(types[0] != field_type_MAX); - } - struct region *region = &fiber()->gc; size_t used = region_used(region); uint32_t tuple_size; diff --git a/test/sql-tap/in3.test.lua b/test/sql-tap/in3.test.lua index e29db9d93..f7681640e 100755 --- a/test/sql-tap/in3.test.lua +++ b/test/sql-tap/in3.test.lua @@ -354,7 +354,7 @@ test:do_test( return exec_neph(" SELECT y IN (SELECT a FROM t1) FROM t2 ") end, { -- - 1, true + 1, false -- }) @@ -378,7 +378,7 @@ test:do_test( return exec_neph(" SELECT y IN (SELECT c FROM t1) FROM t2 ") end, { -- - 1, true + 1, false -- }) -- 2.25.1