diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c index 95a035fd4c76ac77b7188d664c40a320690c5551..a1c66a543fe8e34c8a3aa173a6e76f004898b33b 100644 --- a/src/box/sql/mem.c +++ b/src/box/sql/mem.c @@ -74,6 +74,25 @@ mem_str(const struct Mem *mem) } } +void +mem_create(struct Mem *mem) +{ + mem->flags = MEM_Null; + mem->subtype = SQL_SUBTYPE_NO; + mem->field_type = field_type_MAX; + mem->n = 0; + mem->z = NULL; + mem->zMalloc = NULL; + mem->szMalloc = 0; + mem->uTemp = 0; + mem->db = sql_get(); + mem->xDel = NULL; +#ifdef SQL_DEBUG + mem->pScopyFrom = NULL; + mem->pFiller = NULL; +#endif +} + static inline bool mem_has_msgpack_subtype(struct Mem *mem) { @@ -1300,21 +1319,6 @@ sqlVdbeMemSetStr(Mem * pMem, /* Memory cell to set to string value */ return 0; } -/* - * Initialize bulk memory to be a consistent Mem object. - * - * The minimum amount of initialization feasible is performed. - */ -void -sqlVdbeMemInit(Mem * pMem, sql * db, u32 flags) -{ - assert((flags & ~MEM_TypeMask) == 0); - pMem->flags = flags; - pMem->db = db; - pMem->szMalloc = 0; - pMem->field_type = field_type_MAX; -} - /* * Delete any previous value and set the value stored in *pMem to NULL. * @@ -1399,21 +1403,6 @@ sqlValueNew(sql * db) return p; } -void -initMemArray(Mem * p, int N, sql * db, u32 flags) -{ - while ((N--) > 0) { - p->db = db; - p->flags = flags; - p->szMalloc = 0; - p->field_type = field_type_MAX; -#ifdef SQL_DEBUG - p->pScopyFrom = 0; -#endif - p++; - } -} - void releaseMemArray(Mem * p, int N) { @@ -2374,7 +2363,7 @@ vdbemem_alloc_on_region(uint32_t count) } memset(ret, 0, count * sizeof(*ret)); for (uint32_t i = 0; i < count; i++) { - sqlVdbeMemInit(&ret[i], sql_get(), MEM_Null); + mem_create(&ret[i]); assert(memIsValid(&ret[i])); } return ret; diff --git a/src/box/sql/mem.h b/src/box/sql/mem.h index 7b945642611adccabec30963a89a7689fd029a0a..2a3d1078e58f5dd4e66327d0eccab6c9638877ce 100644 --- a/src/box/sql/mem.h +++ b/src/box/sql/mem.h @@ -94,6 +94,10 @@ struct Mem { const char * mem_str(const struct Mem *mem); +/** Initialize MEM and set NULL. */ +void +mem_create(struct Mem *mem); + /* One or more of the following flags are set to indicate the validOK * representations of the value stored in the Mem struct. * @@ -304,8 +308,6 @@ mem_set_double(struct Mem *mem, double value); int sqlVdbeMemSetStr(struct Mem *, const char *, int, u8, void (*)(void *)); void -sqlVdbeMemInit(struct Mem *, sql *, u32); -void sqlVdbeMemSetNull(struct Mem *); void sqlVdbeMemSetZeroBlob(struct Mem *, int); @@ -315,12 +317,6 @@ void sqlValueSetNull(struct Mem *); void sqlValueFree(struct Mem *); struct Mem *sqlValueNew(struct sql *); -/* - * Initialize an array of N Mem element. - */ -void -initMemArray(Mem * p, int N, sql * db, u32 flags); - /* * Release an array of N Mem elements */ diff --git a/src/box/sql/vdbe.c b/src/box/sql/vdbe.c index cfd694c2ad8a6102cfebc1bc538988428f630115..233f92fc677ad7c901694cc2769cd8ff92bea36c 100644 --- a/src/box/sql/vdbe.c +++ b/src/box/sql/vdbe.c @@ -4739,7 +4739,7 @@ case OP_AggStep: { #endif pMem->n++; - sqlVdbeMemInit(&t, db, MEM_Null); + mem_create(&t); pCtx->pOut = &t; pCtx->is_aborted = false; pCtx->skipFlag = 0; diff --git a/src/box/sql/vdbeaux.c b/src/box/sql/vdbeaux.c index 9ef0445bd74091f6d6a6c897caa6c5ccd6b5de13..b44f53a5531b6625364d7676d1abaf6cf2bc030f 100644 --- a/src/box/sql/vdbeaux.c +++ b/src/box/sql/vdbeaux.c @@ -1587,9 +1587,13 @@ sqlVdbeMakeReady(Vdbe * p, /* The VDBE */ } else { p->nCursor = nCursor; p->nVar = (ynVar) nVar; - initMemArray(p->aVar, nVar, db, MEM_Null); + for (int i = 0; i < nVar; ++i) + mem_create(&p->aVar[i]); p->nMem = nMem; - initMemArray(p->aMem, nMem, db, MEM_Undefined); + for (int i = 0; i < nMem; ++i) { + mem_create(&p->aMem[i]); + p->aMem[i].flags = MEM_Undefined; + } memset(p->apCsr, 0, nCursor * sizeof(VdbeCursor *)); } sqlVdbeRewind(p);