From: Kirill Shcherbatov <kshcherbatov@tarantool.org> To: tarantool-patches@freelists.org, Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Subject: [tarantool-patches] Re: [PATCH v1 3/4] sql: got rid of redundant MASKBIT32 definition Date: Wed, 20 Feb 2019 16:42:59 +0300 [thread overview] Message-ID: <e02b568d-206d-d15b-969d-d52c99176571@tarantool.org> (raw) In-Reply-To: <82b74351-95c9-9ad3-7371-4c796eac1a58@tarantool.org> > Thanks for the patch! See 4 comments below. > > 1. We do not use the past in commit titles. Please, use 'get', > not 'got'. In the next commit too. Ok, done. > 2. In the previous commit you said, that 32bit mask is already > replaced with 64bit one where possible. But why was not it > possible to replace this one? The answer is in previous commit description: " The 32b bitmasks are still used to specify constant OP_Function arguments because this change would require changing the P1 type of the VDBE p1 argument, which is not desirable. Moreover, the 64 function's arguments is an explicit overkill. " >> for (i = 0; i < nFarg; i++) { >> - if (i < 32 >> - && sqlite3ExprIsConstant(pFarg->a[i]. >> - pExpr)) { >> - testcase(i == 31); >> - constMask |= MASKBIT32(i); >> + if (i < 32 && > > 3. Why 32? The column mask is smart, it has no size restrictions. All function arguments that are not able to fit in mask to be marked as constant, assumed to by dynamic. There is nice commit before sqlVdbeDeleteAuxData routine definition. i < 32 must be kept to avoid calculation sqlite3ExprIsConstant where unnecessary. In fact such 32bit column mask is not smart, but it is not matter. Smart mask also works fine in this scenario. > >> + sqlite3ExprIsConstant(pFarg->a[i].pExpr)) { >> + column_mask_set_fieldno((uint64_t *) >> + &const_mask, i); > > 4. column_mask_set_fieldo does *mask = ... . It means, that it rewrites 8 bytes > from the specified address. But you passed a value of only 4 bytes, so the next > 4 bytes of foreign memory are polluted. You are right. It is not problem anymore. ============================================= MASK BIT 32 macro is now redundant, so we got rid of it. Also refactored related code to use core bitmasks helpers Part of #3571 --- src/box/sql/expr.c | 24 +++++++++++++----------- src/box/sql/sqlInt.h | 1 - src/box/sql/vdbeaux.c | 8 +++----- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/box/sql/expr.c b/src/box/sql/expr.c index 35145cef6..a72f986c6 100644 --- a/src/box/sql/expr.c +++ b/src/box/sql/expr.c @@ -3914,7 +3914,11 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) int nFarg; /* Number of function arguments */ FuncDef *pDef; /* The function definition object */ const char *zId; /* The function name */ - u32 constMask = 0; /* Mask of function arguments that are constant */ + /* + * Mask of function arguments that are + * constant. + */ + uint32_t const_mask = 0; int i; /* Loop counter */ sql *db = pParse->db; /* The database connection */ struct coll *coll = NULL; @@ -3988,11 +3992,10 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) } for (i = 0; i < nFarg; i++) { - if (i < 32 - && sqlExprIsConstant(pFarg->a[i]. - pExpr)) { - testcase(i == 31); - constMask |= MASKBIT32(i); + if (i < 32 && + sqlExprIsConstant(pFarg->a[i].pExpr)) { + column_mask32_set_fieldno(&const_mask, + i); } if ((pDef->funcFlags & SQL_FUNC_NEEDCOLL) != 0 && coll == NULL) { @@ -4004,7 +4007,7 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) } } if (pFarg) { - if (constMask) { + if (const_mask != 0) { r1 = pParse->nMem + 1; pParse->nMem += nFarg; } else { @@ -4052,12 +4055,11 @@ sqlExprCodeTarget(Parse * pParse, Expr * pExpr, int target) sqlVdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)coll, P4_COLLSEQ); } - sqlVdbeAddOp4(v, OP_Function0, constMask, r1, - target, (char *)pDef, P4_FUNCDEF); + sqlVdbeAddOp4(v, OP_Function0, const_mask, r1, target, + (char *)pDef, P4_FUNCDEF); sqlVdbeChangeP5(v, (u8) nFarg); - if (nFarg && constMask == 0) { + if (nFarg && const_mask == 0) sqlReleaseTempRange(pParse, r1, nFarg); - } return target; } case TK_EXISTS: diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h index 5be695e51..a9b7dfa4e 100644 --- a/src/box/sql/sqlInt.h +++ b/src/box/sql/sqlInt.h @@ -2255,7 +2255,6 @@ typedef u64 Bitmask; * A bit in a Bitmask */ #define MASKBIT(n) (((Bitmask)1)<<(n)) -#define MASKBIT32(n) (((unsigned int)1)<<(n)) #define ALLBITS ((Bitmask)-1) /* diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index b831b52ad..fedbc0a15 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -2698,11 +2698,9 @@ (sql * db, AuxData ** pp, int iOp, int mask) { while (*pp) { AuxData *pAux = *pp; - if ((iOp < 0) - || (pAux->iOp == iOp - && (pAux->iArg > 31 || !(mask & MASKBIT32(pAux->iArg)))) - ) { - testcase(pAux->iArg == 31); + if (iOp < 0 || (pAux->iOp == iOp && + (pAux->iArg >= 32 || + !column_mask32_fieldno_is_set(mask, pAux->iArg)))) { if (pAux->xDelete) { pAux->xDelete(pAux->pAux); } -- 2.20.1
next prev parent reply other threads:[~2019-02-20 13:43 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-08 12:52 [tarantool-patches] [PATCH v1 0/4] sql: replace 32 bit column mask Kirill Shcherbatov 2019-02-08 12:52 ` [tarantool-patches] [PATCH v1 1/4] box: introduce new helpers in column_mask.h Kirill Shcherbatov 2019-02-15 17:05 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-20 13:42 ` Kirill Shcherbatov 2019-02-22 17:51 ` Vladislav Shpilevoy 2019-02-22 18:01 ` Konstantin Osipov 2019-02-22 18:22 ` Konstantin Osipov 2019-02-08 12:52 ` [tarantool-patches] [PATCH v1 2/4] sql: use 64b bitmasks instead of 32b where possible Kirill Shcherbatov 2019-02-15 17:05 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-20 13:42 ` Kirill Shcherbatov 2019-02-08 12:52 ` [tarantool-patches] [PATCH v1 3/4] sql: got rid of redundant MASKBIT32 definition Kirill Shcherbatov 2019-02-15 17:05 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-20 13:42 ` Kirill Shcherbatov [this message] 2019-02-08 12:52 ` [tarantool-patches] [PATCH v1 4/4] sql: got rid of redundant bitmask helpers Kirill Shcherbatov 2019-02-15 17:05 ` [tarantool-patches] " Vladislav Shpilevoy 2019-02-20 13:42 ` Kirill Shcherbatov 2019-02-22 17:52 ` Vladislav Shpilevoy
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=e02b568d-206d-d15b-969d-d52c99176571@tarantool.org \ --to=kshcherbatov@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='[tarantool-patches] Re: [PATCH v1 3/4] sql: got rid of redundant MASKBIT32 definition' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox