From: Vladislav Shpilevoy via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: imeevma@tarantool.org, tsafin@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH v4 30/53] sql: introduce mem_set_*_binary() Date: Tue, 30 Mar 2021 01:05:19 +0200 [thread overview] Message-ID: <cf14934d-336f-a0ff-6cec-a8083fbcd75d@tarantool.org> (raw) In-Reply-To: <ab0e4ce3403fbf1588ffbcb8c22265e5860f5ad2.1616491731.git.imeevma@gmail.com> Thanks for the patch! See 2 comments below. > diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c > index 59a378e1b..5ee49cdca 100644 > --- a/src/box/sql/mem.c > +++ b/src/box/sql/mem.c > @@ -410,6 +410,61 @@ mem_copy_string0(struct Mem *mem, const char *value) > return 0; > } > > +static inline void > +mem_set_const_bin(struct Mem *mem, char *value, uint32_t size, int alloc_type) > +{ > + assert((alloc_type & (MEM_Static | MEM_Ephem)) != 0); > + mem_clear(mem); > + mem->z = value; > + mem->n = size; > + mem->flags = MEM_Blob | alloc_type; > + mem->field_type = FIELD_TYPE_VARBINARY; > +} > + > +static inline void > +mem_set_dyn_bin(struct Mem *mem, char *value, uint32_t size, int alloc_type) > +{ > + assert((mem->flags & MEM_Dyn) == 0 || value != mem->z); > + assert(mem->szMalloc == 0 || value != mem->zMalloc); > + assert(alloc_type == MEM_Dyn || alloc_type == 0); > + mem_destroy(mem); 1. Why is it destroy here and clear above? > + mem->z = value; > + mem->n = size; > + mem->flags = MEM_Blob | alloc_type; > + mem->field_type = FIELD_TYPE_VARBINARY; > + if (alloc_type == MEM_Dyn) { > + mem->xDel = sql_free; > + } else { > + mem->xDel = NULL; > + mem->zMalloc = mem->z; > + mem->szMalloc = sqlDbMallocSize(mem->db, mem->zMalloc); > + } > +} > diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c > index 5b5e5b0c8..0e51e4809 100644 > --- a/src/box/sql/vdbeapi.c > +++ b/src/box/sql/vdbeapi.c > @@ -183,7 +182,13 @@ sql_result_blob(sql_context * pCtx, > ) > { > assert(n >= 0); > - if (sqlVdbeMemSetStr(pCtx->pOut, z, n, 0, xDel) != 0) > + if (xDel == SQL_STATIC) > + mem_set_static_binary(pCtx->pOut, (char *)z, n); > + else if (xDel == SQL_DYNAMIC) > + mem_set_allocated_binary(pCtx->pOut, (char *)z, n); > + else if (xDel != SQL_TRANSIENT) > + mem_set_dynamic_binary(pCtx->pOut, (char *)z, n); > + else if (sqlVdbeMemSetStr(pCtx->pOut, z, n, 0, xDel) != 0) > pCtx->is_aborted = true; 2. It seems to me you need to add a generic mem_set_binary which would take the xdel argument. Repeating this tree of ifs in each usage place is not any better. The same for the string API.
next prev parent reply other threads:[~2021-03-29 23:07 UTC|newest] Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-23 9:34 [Tarantool-patches] [PATCH v4 00/53] Move mem-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-03-23 9:34 ` [Tarantool-patches] [PATCH v4 01/53] sql: enchance vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-03-29 22:57 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:34 ` [Tarantool-patches] [PATCH v4 02/53] sql: disable unused code in sql/analyze.c Mergen Imeev via Tarantool-patches 2021-03-23 9:34 ` [Tarantool-patches] [PATCH v4 03/53] sql: disable unused code in sql/legacy.c Mergen Imeev via Tarantool-patches 2021-03-23 9:34 ` [Tarantool-patches] [PATCH v4 04/53] sql: remove NULL-termination in OP_ResultRow Mergen Imeev via Tarantool-patches 2021-03-23 9:34 ` [Tarantool-patches] [PATCH v4 05/53] sql: move MEM-related functions to mem.c/mem.h Mergen Imeev via Tarantool-patches 2021-03-29 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 06/53] sql: remove unused MEM-related functions Mergen Imeev via Tarantool-patches 2021-03-29 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 07/53] sql: disable unused code in sql/vdbemem.c Mergen Imeev via Tarantool-patches 2021-03-29 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 08/53] sql: introduce mem_str() Mergen Imeev via Tarantool-patches 2021-03-29 22:58 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 09/53] sql: introduce mem_create() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 10/53] sql: introduce mem_destroy() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 11/53] sql: introduce mem_is_*() functions() Mergen Imeev via Tarantool-patches 2021-03-29 23:01 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 12/53] sql: introduce mem_copy() Mergen Imeev via Tarantool-patches 2021-03-29 23:01 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 13/53] sql: introduce mem_copy_as_ephemeral() Mergen Imeev via Tarantool-patches 2021-03-29 23:01 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 14/53] sql: rework mem_move() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 15/53] sql: rework vdbe_decode_msgpack_into_mem() Mergen Imeev via Tarantool-patches 2021-03-29 23:02 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 16/53] sql: remove sql_column_to_messagepack() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 17/53] sql: introduce mem_concat() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 18/53] sql: introduce mem_arithmetic() Mergen Imeev via Tarantool-patches 2021-03-29 23:02 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 19/53] sql: introduce mem_compare() Mergen Imeev via Tarantool-patches 2021-03-29 23:03 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 20/53] sql: introduce mem_bitwise() Mergen Imeev via Tarantool-patches 2021-03-29 23:03 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 21/53] sql: introduce mem_bit_not() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 22/53] sql: Initialize MEM in sqlVdbeAllocUnpackedRecord() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 23/53] sql: introduce mem_set_null() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 24/53] sql: introduce mem_set_integer() Mergen Imeev via Tarantool-patches 2021-03-29 23:04 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 25/53] sql: introduce mem_set_unsigned() Mergen Imeev via Tarantool-patches 2021-03-29 23:04 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 26/53] sql: introduce mem_set_boolean() Mergen Imeev via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 27/53] sql: refactor mem_set_double() Mergen Imeev via Tarantool-patches 2021-03-29 23:04 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 28/53] sql: refactor mem_set_*_string() Mergen Imeev via Tarantool-patches 2021-03-29 23:05 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:35 ` [Tarantool-patches] [PATCH v4 29/53] sql: introduce mem_copy_string() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 30/53] sql: introduce mem_set_*_binary() Mergen Imeev via Tarantool-patches 2021-03-29 23:05 ` Vladislav Shpilevoy via Tarantool-patches [this message] 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 31/53] sql: introduce mem_copy_binary() Mergen Imeev via Tarantool-patches 2021-03-29 23:05 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 32/53] sql: introduce mem_set_zerobinary() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 33/53] sql: introduce mem_append_to_binary() Mergen Imeev via Tarantool-patches 2021-03-29 23:05 ` Vladislav Shpilevoy via Tarantool-patches 2021-04-09 19:52 ` Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 34/53] sql: introduce mem_set_*_map() and mem_set_*_array() Mergen Imeev via Tarantool-patches 2021-03-29 23:05 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 35/53] sql: introduce mem_set_undefined() Mergen Imeev via Tarantool-patches 2021-03-29 23:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 36/53] sql: introduce mem_set_pointer() Mergen Imeev via Tarantool-patches 2021-03-29 23:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 37/53] sql: introduce mem_set_frame() Mergen Imeev via Tarantool-patches 2021-03-29 23:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 38/53] sql: introduce mem_*_aggregate() Mergen Imeev via Tarantool-patches 2021-03-29 23:06 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 39/53] sql: introduce mem_set_cleared() Mergen Imeev via Tarantool-patches 2021-03-29 23:07 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 40/53] sql: move MEM flags to mem.c Mergen Imeev via Tarantool-patches 2021-03-29 23:07 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 41/53] sql: introduce mem_convert_to_integer() Mergen Imeev via Tarantool-patches 2021-03-29 23:07 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 42/53] sql: introduce mem_convert_to_double() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 43/53] sql: introduce mem_convert_to_number() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 44/53] sql: introduce mem_convert_to_string() Mergen Imeev via Tarantool-patches 2021-03-29 23:07 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 45/53] sql: introduce mem_explicit_cast() Mergen Imeev via Tarantool-patches 2021-03-29 23:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 46/53] sql: introduce mem_implicit_cast() Mergen Imeev via Tarantool-patches 2021-03-29 23:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 47/53] sql: introduce mem_get_integer() Mergen Imeev via Tarantool-patches 2021-03-29 23:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 48/53] sql: introduce mem_get_unsigned() Mergen Imeev via Tarantool-patches 2021-03-29 23:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 49/53] sql: introduce mem_get_double() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 50/53] sql: introduce mem_get_boolean() Mergen Imeev via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 51/53] sql: introduce mem_get_string0() Mergen Imeev via Tarantool-patches 2021-03-29 23:08 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 52/53] sql: introduce mem_get_binary() Mergen Imeev via Tarantool-patches 2021-03-29 23:09 ` Vladislav Shpilevoy via Tarantool-patches 2021-03-23 9:36 ` [Tarantool-patches] [PATCH v4 53/53] sql: introduce mem_get_length() Mergen Imeev via Tarantool-patches 2021-03-29 23:09 ` Vladislav Shpilevoy 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=cf14934d-336f-a0ff-6cec-a8083fbcd75d@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=imeevma@tarantool.org \ --cc=tsafin@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v4 30/53] sql: introduce mem_set_*_binary()' \ /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