Tarantool development patches archive
 help / color / mirror / Atom feed
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 v4 53/53] sql: introduce mem_get_length()
Date: Tue, 23 Mar 2021 12:36:54 +0300	[thread overview]
Message-ID: <7248eed5fda1db86a8da5a01b5c8887adb8d4eb5.1616491731.git.imeevma@gmail.com> (raw)
In-Reply-To: <cover.1616491730.git.imeevma@gmail.com>

This patch introduces mem_get_length() which is used to receive length
of string or binary value of MEM.

Part of #5818
---
 src/box/sql/func.c    | 57 ++++++++++++++-------------
 src/box/sql/mem.c     | 92 +++++--------------------------------------
 src/box/sql/mem.h     | 15 ++-----
 src/box/sql/sqlInt.h  |  3 --
 src/box/sql/vdbeapi.c | 35 ----------------
 5 files changed, 42 insertions(+), 160 deletions(-)

diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index 199f3abef..6687fca3c 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -168,7 +168,7 @@ port_vdbemem_dump_lua(struct port *base, struct lua_State *L, bool is_flat)
 		case MP_ARRAY:
 		case MP_MAP:
 			lua_pushlstring(L, mem_get_blob(param),
-					(size_t) sql_value_bytes(param));
+					(size_t) mem_get_length(param));
 			break;
 		case MP_NIL:
 			lua_pushnil(L);
@@ -230,9 +230,9 @@ port_vdbemem_get_msgpack(struct port *base, uint32_t *size)
 		case MP_BIN:
 		case MP_ARRAY:
 		case MP_MAP: {
-			mpstream_encode_binl(&stream, sql_value_bytes(param));
+			mpstream_encode_binl(&stream, mem_get_length(param));
 			mpstream_memcpy(&stream, mem_get_blob(param),
-					sql_value_bytes(param));
+					mem_get_length(param));
 			break;
 		}
 		case MP_NIL: {
@@ -524,14 +524,15 @@ lengthFunc(sql_context * context, int argc, sql_value ** argv)
 	case MP_UINT:
 	case MP_BOOL:
 	case MP_DOUBLE:{
-			sql_result_uint(context, sql_value_bytes(argv[0]));
+			mem_get_blob(argv[0]);
+			sql_result_uint(context, mem_get_length(argv[0]));
 			break;
 		}
 	case MP_STR:{
 			const unsigned char *z = mem_get_ustr(argv[0]);
 			if (z == 0)
 				return;
-			len = sql_utf8_char_count(z, sql_value_bytes(argv[0]));
+			len = sql_utf8_char_count(z, mem_get_length(argv[0]));
 			sql_result_uint(context, len);
 			break;
 		}
@@ -647,8 +648,8 @@ position_func(struct sql_context *context, int argc, struct Mem **argv)
 		return;
 	}
 
-	int n_needle_bytes = sql_value_bytes(needle);
-	int n_haystack_bytes = sql_value_bytes(haystack);
+	int n_needle_bytes = mem_get_length(needle);
+	int n_haystack_bytes = mem_get_length(haystack);
 	int position = 1;
 	if (n_needle_bytes > 0) {
 		const unsigned char *haystack_str;
@@ -797,18 +798,18 @@ substrFunc(sql_context * context, int argc, sql_value ** argv)
 	bool unused;
 	mem_get_integer(argv[1], &p1, &unused);
 	if (p0type == MP_BIN) {
-		len = sql_value_bytes(argv[0]);
+		len = mem_get_length(argv[0]);
 		z = mem_get_blob(argv[0]);
 		if (z == 0)
 			return;
-		assert(len == sql_value_bytes(argv[0]));
+		assert(len == mem_get_length(argv[0]));
 	} else {
 		z = mem_get_ustr(argv[0]);
 		if (z == 0)
 			return;
 		len = 0;
 		if (p1 < 0)
-			len = sql_utf8_char_count(z, sql_value_bytes(argv[0]));
+			len = sql_utf8_char_count(z, mem_get_length(argv[0]));
 	}
 	if (argc == 3) {
 		mem_get_integer(argv[2], &p2, &unused);
@@ -847,7 +848,7 @@ substrFunc(sql_context * context, int argc, sql_value ** argv)
 		 * used because '\0' is not supposed to be
 		 * end-of-string symbol.
 		 */
-		int byte_size = sql_value_bytes(argv[0]);
+		int byte_size = mem_get_length(argv[0]);
 		int n_chars = sql_utf8_char_count(z, byte_size);
 		int cnt = 0;
 		int i = 0;
@@ -967,7 +968,7 @@ case_type##ICUFunc(sql_context *context, int argc, sql_value **argv)   \
 		return;                                                        \
 	}                                                                      \
 	z2 = mem_get_str(argv[0]);                                            \
-	n = sql_value_bytes(argv[0]);                                      \
+	n = mem_get_length(argv[0]);                                      \
 	/*                                                                     \
 	 * Verify that the call to _bytes()                                    \
 	 * does not invalidate the _text() pointer.                            \
@@ -1305,15 +1306,15 @@ likeFunc(sql_context *context, int argc, sql_value **argv)
 	}
 	const char *zB = mem_get_str(argv[0]);
 	const char *zA = mem_get_str(argv[1]);
-	const char *zB_end = zB + sql_value_bytes(argv[0]);
-	const char *zA_end = zA + sql_value_bytes(argv[1]);
+	const char *zB_end = zB + mem_get_length(argv[0]);
+	const char *zA_end = zA + mem_get_length(argv[1]);
 
 	/*
 	 * Limit the length of the LIKE pattern to avoid problems
 	 * of deep recursion and N*N behavior in
 	 * sql_utf8_pattern_compare().
 	 */
-	nPat = sql_value_bytes(argv[0]);
+	nPat = mem_get_length(argv[0]);
 	testcase(nPat == db->aLimit[SQL_LIMIT_LIKE_PATTERN_LENGTH]);
 	testcase(nPat == db->aLimit[SQL_LIMIT_LIKE_PATTERN_LENGTH] + 1);
 	if (nPat > db->aLimit[SQL_LIMIT_LIKE_PATTERN_LENGTH]) {
@@ -1334,7 +1335,7 @@ likeFunc(sql_context *context, int argc, sql_value **argv)
 		const unsigned char *zEsc = mem_get_ustr(argv[2]);
 		if (zEsc == 0)
 			return;
-		if (sql_utf8_char_count(zEsc, sql_value_bytes(argv[2])) != 1) {
+		if (sql_utf8_char_count(zEsc, mem_get_length(argv[2])) != 1) {
 			diag_set(ClientError, ER_SQL_EXECUTE, "ESCAPE "\
 				 "expression must be a single character");
 			context->is_aborted = true;
@@ -1434,7 +1435,7 @@ quoteFunc(sql_context * context, int argc, sql_value ** argv)
 	case MP_MAP: {
 			char *zText = 0;
 			char const *zBlob = mem_get_blob(argv[0]);
-			int nBlob = sql_value_bytes(argv[0]);
+			int nBlob = mem_get_length(argv[0]);
 			assert(zBlob == mem_get_blob(argv[0]));	/* No encoding change */
 			zText =
 			    (char *)contextMalloc(context,
@@ -1570,7 +1571,7 @@ hexFunc(sql_context * context, int argc, sql_value ** argv)
 	assert(argc == 1);
 	UNUSED_PARAMETER(argc);
 	pBlob = mem_get_blob(argv[0]);
-	n = sql_value_bytes(argv[0]);
+	n = mem_get_length(argv[0]);
 	assert(pBlob == mem_get_blob(argv[0]));	/* No encoding change */
 	z = zHex = contextMalloc(context, ((i64) n) * 2 + 1);
 	if (zHex) {
@@ -1629,7 +1630,7 @@ replaceFunc(sql_context * context, int argc, sql_value ** argv)
 	zStr = mem_get_ustr(argv[0]);
 	if (zStr == 0)
 		return;
-	nStr = sql_value_bytes(argv[0]);
+	nStr = mem_get_length(argv[0]);
 	assert(zStr == mem_get_ustr(argv[0]));	/* No encoding change */
 	zPattern = mem_get_ustr(argv[1]);
 	if (zPattern == 0) {
@@ -1637,7 +1638,7 @@ replaceFunc(sql_context * context, int argc, sql_value ** argv)
 		       || sql_context_db_handle(context)->mallocFailed);
 		return;
 	}
-	nPattern = sql_value_bytes(argv[1]);
+	nPattern = mem_get_length(argv[1]);
 	if (nPattern == 0) {
 		assert(! mem_is_null(argv[1]));
 		sql_result_value(context, argv[0]);
@@ -1647,7 +1648,7 @@ replaceFunc(sql_context * context, int argc, sql_value ** argv)
 	zRep = mem_get_ustr(argv[2]);
 	if (zRep == 0)
 		return;
-	nRep = sql_value_bytes(argv[2]);
+	nRep = mem_get_length(argv[2]);
 	assert(zRep == mem_get_ustr(argv[2]));
 	nOut = nStr + 1;
 	assert(nOut < SQL_MAX_LENGTH);
@@ -1809,7 +1810,7 @@ trim_func_one_arg(struct sql_context *context, sql_value *arg)
 		default_trim = (const unsigned char *) "\0";
 	else
 		default_trim = (const unsigned char *) " ";
-	int input_str_sz = sql_value_bytes(arg);
+	int input_str_sz = mem_get_length(arg);
 	const unsigned char *input_str = mem_get_ustr(arg);
 	uint8_t trim_char_len[1] = { 1 };
 	trim_procedure(context, TRIM_BOTH, default_trim, trim_char_len, 1,
@@ -1835,7 +1836,7 @@ trim_func_two_args(struct sql_context *context, sql_value *arg1,
 	if ((input_str = mem_get_ustr(arg2)) == NULL)
 		return;
 
-	int input_str_sz = sql_value_bytes(arg2);
+	int input_str_sz = mem_get_length(arg2);
 	if (sql_value_type(arg1) == MP_INT || sql_value_type(arg1) == MP_UINT) {
 		uint8_t len_one = 1;
 		bool unused;
@@ -1844,7 +1845,7 @@ trim_func_two_args(struct sql_context *context, sql_value *arg1,
 		trim_procedure(context, n, (const unsigned char *) " ",
 			       &len_one, 1, input_str, input_str_sz);
 	} else if ((trim_set = mem_get_ustr(arg1)) != NULL) {
-		int trim_set_sz = sql_value_bytes(arg1);
+		int trim_set_sz = mem_get_length(arg1);
 		uint8_t *char_len;
 		int char_cnt = trim_prepare_char_len(context, trim_set,
 						     trim_set_sz, &char_len);
@@ -1873,8 +1874,8 @@ trim_func_three_args(struct sql_context *context, sql_value *arg1,
 	    (trim_set = mem_get_ustr(arg2)) == NULL)
 		return;
 
-	int trim_set_sz = sql_value_bytes(arg2);
-	int input_str_sz = sql_value_bytes(arg3);
+	int trim_set_sz = mem_get_length(arg2);
+	int input_str_sz = mem_get_length(arg3);
 	uint8_t *char_len;
 	int char_cnt = trim_prepare_char_len(context, trim_set, trim_set_sz,
 					     &char_len);
@@ -2196,7 +2197,7 @@ groupConcatStep(sql_context * context, int argc, sql_value ** argv)
 		if (!firstTerm) {
 			if (argc == 2) {
 				zSep = mem_get_str(argv[1]);
-				nSep = sql_value_bytes(argv[1]);
+				nSep = mem_get_length(argv[1]);
 			} else {
 				zSep = ",";
 				nSep = 1;
@@ -2205,7 +2206,7 @@ groupConcatStep(sql_context * context, int argc, sql_value ** argv)
 				sqlStrAccumAppend(pAccum, zSep, nSep);
 		}
 		zVal = mem_get_str(argv[0]);
-		nVal = sql_value_bytes(argv[0]);
+		nVal = mem_get_length(argv[0]);
 		if (zVal)
 			sqlStrAccumAppend(pAccum, zVal, nVal);
 	}
diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c
index bed9ae64a..83b0f4f7f 100644
--- a/src/box/sql/mem.c
+++ b/src/box/sql/mem.c
@@ -1341,6 +1341,16 @@ mem_get_binary(const struct Mem *mem, const char **s)
 	return 0;
 }
 
+int
+mem_get_length(const struct Mem *mem)
+{
+	if ((mem->flags & (MEM_Str | MEM_Blob)) == 0)
+		return 0;
+	if ((mem->flags & MEM_Blob) !=0 && (mem->flags & MEM_Zero) != 0)
+		return mem->n + mem->u.nZero;
+	return mem->n;
+}
+
 int
 mem_copy(struct Mem *to, const struct Mem *from)
 {
@@ -2051,41 +2061,6 @@ sql_value_type(sql_value *pVal)
 	return mem_mp_type(mem);
 }
 
-/*
- * The sqlValueBytes() routine returns the number of bytes in the
- * sql_value object assuming that it uses the encoding "enc".
- * The valueBytes() routine is a helper function.
- */
-static SQL_NOINLINE int
-valueBytes(sql_value * pVal)
-{
-	if (mem_convert_to_string(pVal) != 0)
-		return 0;
-	return pVal->n;
-}
-
-int
-sqlValueBytes(sql_value * pVal)
-{
-	Mem *p = (Mem *) pVal;
-	assert((p->flags & MEM_Null) == 0
-	       || (p->flags & (MEM_Str | MEM_Blob)) == 0);
-	if ((p->flags & MEM_Str) != 0) {
-		return p->n;
-	}
-	if ((p->flags & MEM_Blob) != 0) {
-		if (p->flags & MEM_Zero) {
-			return p->n + p->u.nZero;
-		} else {
-			return p->n;
-		}
-	}
-	if (p->flags & MEM_Null)
-		return 0;
-	return valueBytes(pVal);
-}
-
-
 #ifdef SQL_DEBUG
 /*
  * This routine prepares a memory cell for modification by breaking
@@ -2447,53 +2422,6 @@ releaseMemArray(Mem * p, int N)
 	}
 }
 
-int
-sql_value_bytes(sql_value * pVal)
-{
-	return sqlValueBytes(pVal);
-}
-
-/*
- * Return a pointer to static memory containing an SQL NULL value.
- */
-const Mem *
-columnNullValue(void)
-{
-	/* Even though the Mem structure contains an element
-	 * of type i64, on certain architectures (x86) with certain compiler
-	 * switches (-Os), gcc may align this Mem object on a 4-byte boundary
-	 * instead of an 8-byte one. This all works fine, except that when
-	 * running with SQL_DEBUG defined the sql code sometimes assert()s
-	 * that a Mem structure is located on an 8-byte boundary. To prevent
-	 * these assert()s from failing, when building with SQL_DEBUG defined
-	 * using gcc, we force nullMem to be 8-byte aligned using the magical
-	 * __attribute__((aligned(8))) macro.
-	 */
-	static const Mem nullMem
-#if defined(SQL_DEBUG) && defined(__GNUC__)
-	    __attribute__ ((aligned(8)))
-#endif
-	    = {
-		/* .u          = */  {
-		0},
-		    /* .flags      = */ (u16) MEM_Null,
-		    /* .eSubtype   = */ (u8) 0,
-		    /* .field_type = */ field_type_MAX,
-		    /* .n          = */ (int)0,
-		    /* .z          = */ (char *)0,
-		    /* .zMalloc    = */ (char *)0,
-		    /* .szMalloc   = */ (int)0,
-		    /* .uTemp      = */ (u32) 0,
-		    /* .db         = */ (sql *) 0,
-		    /* .xDel       = */ (void (*)(void *))0,
-#ifdef SQL_DEBUG
-		    /* .pScopyFrom = */ (Mem *) 0,
-		    /* .pFiller    = */ (void *)0,
-#endif
-	};
-	return &nullMem;
-}
-
 /*
  * Return true if the Mem object contains a TEXT or BLOB that is
  * too large - whose size exceeds SQL_MAX_LENGTH.
diff --git a/src/box/sql/mem.h b/src/box/sql/mem.h
index 8af924d43..b3f994d9d 100644
--- a/src/box/sql/mem.h
+++ b/src/box/sql/mem.h
@@ -363,6 +363,9 @@ mem_get_string0(const struct Mem *mem, const char **s);
 int
 mem_get_binary(const struct Mem *mem, const char **s);
 
+int
+mem_get_length(const struct Mem *mem);
+
 /**
  * Simple type to str convertor. It is used to simplify
  * error reporting.
@@ -381,8 +384,6 @@ mem_mp_type(struct Mem *mem);
 enum mp_type
 sql_value_type(struct Mem *);
 
-int sqlValueBytes(struct Mem *);
-
 #ifdef SQL_DEBUG
 void sqlVdbeMemAboutToChange(struct Vdbe *, struct Mem *);
 int sqlVdbeCheckMemInvariants(struct Mem *);
@@ -436,18 +437,8 @@ releaseMemArray(Mem * p, int N);
 #define MemSetTypeFlag(p, f) \
    ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
 
-/** Getters. */
-
-int
-sql_value_bytes(struct Mem *);
-
 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
 
-const Mem *
-columnNullValue(void);
-
-/** Checkers. */
-
 int sqlVdbeMemTooBig(Mem *);
 
 int sqlMemCompare(const Mem *, const Mem *, const struct coll *);
diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
index 9dfd0e4cc..7b909240f 100644
--- a/src/box/sql/sqlInt.h
+++ b/src/box/sql/sqlInt.h
@@ -433,9 +433,6 @@ sql_stmt_compile(const char *sql, int bytes_count, struct Vdbe *re_prepared,
 int
 sql_step(sql_stmt *);
 
-int
-sql_column_bytes(sql_stmt *, int iCol);
-
 int
 sql_column_bytes16(sql_stmt *, int iCol);
 
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index e76170965..c87b6bfaa 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -443,41 +443,6 @@ sql_data_count(sql_stmt * pStmt)
 	return pVm->nResColumn;
 }
 
-/*
- * Check to see if column iCol of the given statement is valid.  If
- * it is, return a pointer to the Mem for the value of that column.
- * If iCol is not valid, return a pointer to a Mem which has a value
- * of NULL.
- */
-static Mem *
-columnMem(sql_stmt * pStmt, int i)
-{
-	Vdbe *pVm;
-	Mem *pOut;
-
-	pVm = (Vdbe *) pStmt;
-	if (pVm == 0)
-		return (Mem *) columnNullValue();
-	assert(pVm->db);
-	if (pVm->pResultSet != 0 && i < pVm->nResColumn && i >= 0) {
-		pOut = &pVm->pResultSet[i];
-	} else {
-		pOut = (Mem *) columnNullValue();
-	}
-	return pOut;
-}
-
-/**************************** sql_column_  ******************************
- * The following routines are used to access elements of the current row
- * in the result set.
- */
-
-int
-sql_column_bytes(sql_stmt * pStmt, int i)
-{
-	return sql_value_bytes(columnMem(pStmt, i));
-}
-
 char *
 sql_result_to_msgpack(struct sql_stmt *stmt, uint32_t *tuple_size,
 		      struct region *region)
-- 
2.25.1


  parent reply	other threads:[~2021-03-23 10:01 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
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 ` Mergen Imeev via Tarantool-patches [this message]
2021-03-29 23:09   ` [Tarantool-patches] [PATCH v4 53/53] sql: introduce mem_get_length() 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=7248eed5fda1db86a8da5a01b5c8887adb8d4eb5.1616491731.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 v4 53/53] sql: introduce mem_get_length()' \
    /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