From: Mergen Imeev via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: v.shpilevoy@tarantool.org, tsafin@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v5 23/52] sql: introduce mem_set_null() Date: Fri, 9 Apr 2021 21:11:44 +0300 [thread overview] Message-ID: <58d128b714ab205f03d6508bd34623ecf4e825e2.1617984948.git.imeevma@gmail.com> (raw) In-Reply-To: <cover.1617984948.git.imeevma@gmail.com> This patch introduces mem_set_null(). This function clears MEM and sets it to NULL. Part of #5818 --- src/box/sql/mem.c | 64 +++++++++++++++++++------------------------ src/box/sql/mem.h | 7 +++-- src/box/sql/vdbe.c | 14 ++++------ src/box/sql/vdbeapi.c | 4 +-- 4 files changed, 40 insertions(+), 49 deletions(-) diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c index aeb801c7c..937fa3272 100644 --- a/src/box/sql/mem.c +++ b/src/box/sql/mem.c @@ -267,6 +267,12 @@ mem_destroy(struct Mem *mem) mem->zMalloc = NULL; } +void +mem_set_null(struct Mem *mem) +{ + mem_clear(mem); +} + int mem_copy(struct Mem *to, const struct Mem *from) { @@ -2058,24 +2064,6 @@ sqlVdbeMemSetStr(Mem * pMem, /* Memory cell to set to string value */ return 0; } -/* - * Delete any previous value and set the value stored in *pMem to NULL. - * - * This routine calls the Mem.xDel destructor to dispose of values that - * require the destructor. But it preserves the Mem.zMalloc memory allocation. - * To free all resources, use mem_destroy(), which both calls this - * routine to invoke the destructor and deallocates Mem.zMalloc. - * - * Use this routine to reset the Mem prior to insert a new value. - * - * Use mem_destroy() to complete erase the Mem prior to abandoning it. - */ -void -sqlVdbeMemSetNull(Mem * pMem) -{ - mem_clear(pMem); -} - /* * Delete any previous value and set the value to be a BLOB of length * n containing all zeros. @@ -2106,12 +2094,6 @@ sqlValueSetStr(sql_value * v, /* Value to be set */ sqlVdbeMemSetStr((Mem *) v, z, n, 1, xDel); } -void -sqlValueSetNull(sql_value * p) -{ - sqlVdbeMemSetNull((Mem *) p); -} - /* * Free an sql_value object */ @@ -3001,21 +2983,27 @@ port_lua_get_vdbemem(struct port *base, uint32_t *size) NULL, -1 - i, &field) < 0) { goto error; } + mem_clear(&val[i]); switch (field.type) { case MP_BOOL: - mem_set_bool(&val[i], field.bval); + val[i].flags = MEM_Bool; + val[i].u.b = field.bval; break; case MP_FLOAT: - mem_set_double(&val[i], field.fval); + val[i].flags = MEM_Real; + val[i].u.r = field.fval; break; case MP_DOUBLE: - mem_set_double(&val[i], field.dval); + val[i].flags = MEM_Real; + val[i].u.r = field.dval; break; case MP_INT: - mem_set_i64(&val[i], field.ival); + val[i].flags = MEM_Int; + val[i].u.i = field.ival; break; case MP_UINT: - mem_set_u64(&val[i], field.ival); + val[i].flags = MEM_UInt; + val[i].u.i = field.ival; break; case MP_STR: if (sqlVdbeMemSetStr(&val[i], field.sval.data, @@ -3024,7 +3012,6 @@ port_lua_get_vdbemem(struct port *base, uint32_t *size) goto error; break; case MP_NIL: - sqlVdbeMemSetNull(&val[i]); break; default: diag_set(ClientError, ER_SQL_EXECUTE, @@ -3071,22 +3058,28 @@ port_c_get_vdbemem(struct port *base, uint32_t *size) data = pe->mp; } uint32_t len; + mem_clear(&val[i]); const char *str; switch (mp_typeof(*data)) { case MP_BOOL: - mem_set_bool(&val[i], mp_decode_bool(&data)); + val[i].flags = MEM_Bool; + val[i].u.b = mp_decode_bool(&data); break; case MP_FLOAT: - mem_set_double(&val[i], mp_decode_float(&data)); + val[i].flags = MEM_Real; + val[i].u.r = mp_decode_float(&data); break; case MP_DOUBLE: - mem_set_double(&val[i], mp_decode_double(&data)); + val[i].flags = MEM_Real; + val[i].u.r = mp_decode_double(&data); break; case MP_INT: - mem_set_i64(&val[i], mp_decode_int(&data)); + val[i].flags = MEM_Int; + val[i].u.i = mp_decode_int(&data); break; case MP_UINT: - mem_set_u64(&val[i], mp_decode_uint(&data)); + val[i].flags = MEM_UInt; + val[i].u.u = mp_decode_uint(&data); break; case MP_STR: str = mp_decode_str(&data, &len); @@ -3095,7 +3088,6 @@ port_c_get_vdbemem(struct port *base, uint32_t *size) goto error; break; case MP_NIL: - sqlVdbeMemSetNull(&val[i]); break; default: diag_set(ClientError, ER_SQL_EXECUTE, diff --git a/src/box/sql/mem.h b/src/box/sql/mem.h index e3b55644e..581ef007a 100644 --- a/src/box/sql/mem.h +++ b/src/box/sql/mem.h @@ -162,6 +162,10 @@ mem_create(struct Mem *mem); void mem_destroy(struct Mem *mem); +/** Clear MEM and set it to NULL. */ +void +mem_set_null(struct Mem *mem); + /** * Copy content of MEM from one MEM to another. In case source MEM contains * string or binary and allocation type is not STATIC, this value is copied to @@ -468,12 +472,9 @@ mem_set_double(struct Mem *mem, double value); int sqlVdbeMemSetStr(struct Mem *, const char *, int, u8, void (*)(void *)); void -sqlVdbeMemSetNull(struct Mem *); -void sqlVdbeMemSetZeroBlob(struct Mem *, int); void sqlValueSetStr(struct Mem *, int, const void *, void (*)(void *)); -void sqlValueSetNull(struct Mem *); void sqlValueFree(struct Mem *); struct Mem *sqlValueNew(struct sql *); diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index 2ad681fa4..c7d21ddd5 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -276,7 +276,7 @@ vdbe_prepare_null_out(struct Vdbe *v, int n) assert(n <= (v->nMem + 1 - v->nCursor)); struct Mem *out = &v->aMem[n]; memAboutToChange(v, out); - sqlVdbeMemSetNull(out); + mem_set_null(out); out->field_type = field_type_MAX; return out; } @@ -862,19 +862,17 @@ case OP_String: { /* out2 */ */ case OP_Null: { /* out2 */ int cnt; - u16 nullFlag; pOut = vdbe_prepare_null_out(p, pOp->p2); cnt = pOp->p3-pOp->p2; assert(pOp->p3<=(p->nMem+1 - p->nCursor)); - pOut->flags = nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; - pOut->n = 0; + if (pOp->p1 != 0) + pOut->flags = MEM_Null | MEM_Cleared; while( cnt>0) { pOut++; memAboutToChange(p, pOut); - sqlVdbeMemSetNull(pOut); - pOut->flags = nullFlag; - pOut->field_type = field_type_MAX; - pOut->n = 0; + mem_set_null(pOut); + if (pOp->p1 != 0) + pOut->flags = MEM_Null | MEM_Cleared; cnt--; } break; diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c index 3e9f1ff6f..4398b41b1 100644 --- a/src/box/sql/vdbeapi.c +++ b/src/box/sql/vdbeapi.c @@ -201,7 +201,7 @@ sql_result_bool(struct sql_context *ctx, bool value) void sql_result_null(sql_context * pCtx) { - sqlVdbeMemSetNull(pCtx->pOut); + mem_set_null(pCtx->pOut); } void @@ -382,7 +382,7 @@ createAggContext(sql_context * p, int nByte) Mem *pMem = p->pMem; assert(!mem_is_agg(pMem)); if (nByte <= 0) { - sqlVdbeMemSetNull(pMem); + mem_set_null(pMem); pMem->z = 0; } else { sqlVdbeMemClearAndResize(pMem, nByte); -- 2.25.1
next prev parent reply other threads:[~2021-04-09 18:12 UTC|newest] Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-09 16:51 [Tarantool-patches] [PATCH v5 00/52] Move mem-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 01/52] sql: enhance vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-04-11 17:42 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:01 ` Mergen Imeev via Tarantool-patches 2021-04-13 12:12 ` Mergen Imeev via Tarantool-patches 2021-04-13 23:22 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 23:34 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 02/52] sql: disable unused code in sql/analyze.c Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 03/52] sql: disable unused code in sql/legacy.c Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 04/52] sql: remove NULL-termination in OP_ResultRow Mergen Imeev via Tarantool-patches 2021-04-14 22:23 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 22:37 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:51 ` [Tarantool-patches] [PATCH v5 05/52] sql: move MEM-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 06/52] sql: refactor port_vdbemem_*() functions Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 07/52] sql: remove unused MEM-related functions Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 08/52] sql: disable unused code in sql/vdbemem.c Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 09/52] sql: introduce mem_str() Mergen Imeev via Tarantool-patches 2021-04-11 17:44 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:36 ` Mergen Imeev via Tarantool-patches 2021-04-14 22:23 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 22:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 16:59 ` [Tarantool-patches] [PATCH v5 10/52] sql: introduce mem_create() Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 11/52] sql: introduce mem_destroy() Mergen Imeev via Tarantool-patches 2021-04-11 17:46 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 12:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 12/52] sql: introduce mem_is_*() functions() Mergen Imeev via Tarantool-patches 2021-04-11 17:59 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:09 ` Mergen Imeev via Tarantool-patches 2021-04-14 22:48 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:07 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 13/52] sql: introduce mem_copy() Mergen Imeev via Tarantool-patches 2021-04-11 18:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:18 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:36 ` [Tarantool-patches] [PATCH v5 14/52] sql: introduce mem_copy_as_ephemeral() Mergen Imeev via Tarantool-patches 2021-04-11 18:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:31 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:37 ` [Tarantool-patches] [PATCH v5 15/52] sql: rework mem_move() Mergen Imeev via Tarantool-patches 2021-04-11 18:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:38 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 16/52] sql: rework vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 17/52] sql: remove sql_column_to_messagepack() Mergen Imeev via Tarantool-patches 2021-04-14 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:14 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 18/52] sql: introduce mem_concat() Mergen Imeev via Tarantool-patches 2021-04-11 18:11 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 16:57 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:04 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:22 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 19/52] sql: introduce arithmetic operations for MEM Mergen Imeev via Tarantool-patches 2021-04-11 18:13 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 17:06 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:10 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:33 ` Mergen Imeev via Tarantool-patches 2021-04-09 17:57 ` [Tarantool-patches] [PATCH v5 20/52] sql: introduce mem_compare() Mergen Imeev via Tarantool-patches 2021-04-11 18:16 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 18:33 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:20 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-14 23:40 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 21/52] sql: introduce bitwise operations for MEM Mergen Imeev via Tarantool-patches 2021-04-12 23:31 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 20:49 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 22/52] sql: Initialize MEM in sqlVdbeAllocUnpackedRecord() Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` Mergen Imeev via Tarantool-patches [this message] 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 24/52] sql: introduce mem_set_int() Mergen Imeev via Tarantool-patches 2021-04-12 23:32 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 20:56 ` Mergen Imeev via Tarantool-patches 2021-04-09 18:11 ` [Tarantool-patches] [PATCH v5 25/52] sql: introduce mem_set_uint() Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 26/52] sql: move mem_set_bool() and mem_set_double() Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 27/52] sql: introduce mem_set_str_*() functions Mergen Imeev via Tarantool-patches 2021-04-12 23:34 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 21:36 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:49 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-15 1:25 ` Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 28/52] sql: introduce mem_copy_str() and mem_copy_str0() Mergen Imeev via Tarantool-patches 2021-04-12 23:35 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:00 ` Mergen Imeev via Tarantool-patches 2021-04-14 23:54 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-15 0:30 ` Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 29/52] sql: introduce mem_set_bin_*() functions Mergen Imeev via Tarantool-patches 2021-04-09 19:45 ` [Tarantool-patches] [PATCH v5 30/52] sql: introduce mem_copy_bin() Mergen Imeev via Tarantool-patches 2021-04-12 23:36 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:06 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 31/52] sql: introduce mem_set_zerobin() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 32/52] sql: introduce mem_set_*() for map and array Mergen Imeev via Tarantool-patches 2021-04-12 23:36 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:08 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 33/52] sql: introduce mem_set_invalid() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 34/52] sql: refactor mem_set_ptr() Mergen Imeev via Tarantool-patches 2021-04-09 20:05 ` [Tarantool-patches] [PATCH v5 35/52] sql: introduce mem_set_frame() Mergen Imeev via Tarantool-patches 2021-04-12 23:37 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:19 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 36/52] sql: introduce mem_set_agg() Mergen Imeev via Tarantool-patches 2021-04-12 23:37 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:46 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 37/52] sql: introduce mem_set_null_clear() Mergen Imeev via Tarantool-patches 2021-04-12 23:38 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:50 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 38/52] sql: move MEM flags to mem.c Mergen Imeev via Tarantool-patches 2021-04-13 20:42 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:25 ` [Tarantool-patches] [PATCH v5 39/52] sql: introduce mem_to_int*() functions Mergen Imeev via Tarantool-patches 2021-04-12 23:39 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-13 22:58 ` Mergen Imeev via Tarantool-patches 2021-04-13 23:10 ` Mergen Imeev via Tarantool-patches 2021-04-09 20:26 ` [Tarantool-patches] [PATCH v5 40/52] sql: introduce mem_to_double() Mergen Imeev via Tarantool-patches 2021-04-13 23:21 ` Mergen Imeev via Tarantool-patches 2021-04-15 0:39 ` [Tarantool-patches] [PATCH v5 00/52] Move mem-related functions to mem.c/mem.h Vladislav Shpilevoy via Tarantool-patches 2021-04-15 6:49 ` Kirill Yukhin via Tarantool-patches
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=58d128b714ab205f03d6508bd34623ecf4e825e2.1617984948.git.imeevma@gmail.com \ --to=tarantool-patches@dev.tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tsafin@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v5 23/52] sql: introduce mem_set_null()' \ /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