Tarantool development patches archive
 help / color / mirror / Atom feed
From: "n.pettik" <korablev@tarantool.org>
To: tarantool-patches@freelists.org
Cc: Imeev Mergen <imeevma@tarantool.org>
Subject: [tarantool-patches] Re: [PATCH v1 12/12] sql: use diag_set() to set an error in SQL functions
Date: Wed, 15 May 2019 17:12:09 +0300	[thread overview]
Message-ID: <80806CED-90B4-402B-9D0B-BDF141C7CDF0@tarantool.org> (raw)
In-Reply-To: <5af3532d78b6d509d8e76ff97e45a6e3b9eb2369.1557056617.git.imeevma@gmail.com>


> After this patch, all errors in the SQL functions will be set
> using diag_set().
> 
> Closes #4074
> ---
> src/box/lua/lua_sql.c |  13 +++--
> src/box/sql/analyze.c |   6 +--
> src/box/sql/func.c    | 104 ++++++++++++++++++----------------------
> src/box/sql/sqlInt.h  |  13 -----
> src/box/sql/vdbe.c    |  34 +++----------
> src/box/sql/vdbeInt.h |  28 ++---------
> src/box/sql/vdbeapi.c | 129 +++++---------------------------------------------
> src/box/sql/vdbeaux.c |  46 ------------------
> src/box/sql/vdbemem.c |   9 ++--
> 9 files changed, 84 insertions(+), 298 deletions(-)
> 
> diff --git a/src/box/lua/lua_sql.c b/src/box/lua/lua_sql.c
> index d28045a..afe4732 100644
> --- a/src/box/lua/lua_sql.c
> +++ b/src/box/lua/lua_sql.c
> @@ -77,13 +77,15 @@ lua_sql_call(sql_context *pCtx, int nVal, sql_value **apVal) {
> 			lua_pushboolean(L, sql_value_boolean(param));
> 			break;
> 		default:
> -			sql_result_error(pCtx, "Unsupported type passed "
> -					     "to Lua", -1);

Please, remove sql_result_error at all: I grepped several
usages among dead code.

> +			diag_set(ClientError, ER_SQL_EXECUTE, "Unsupported "\
> +				 "type passed to Lua");
> +			pCtx->is_error = true;
> 			goto error;
> 		}
> 
> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
> index bb7405e..16c02f1 100644
> --- a/src/box/sql/func.c
> +++ b/src/box/sql/func.c
> @@ -181,13 +181,9 @@ absFunc(sql_context * context, int argc, sql_value ** argv)
> 			i64 iVal = sql_value_int64(argv[0]);
> 			if (iVal < 0) {
> 				if (iVal == SMALLEST_INT64) {
> -					/* IMP: R-31676-45509 If X is the integer -9223372036854775808
> -					 * then abs(X) throws an integer overflow error since there is no
> -					 * equivalent positive 64-bit two complement value.
> -					 */
> -					sql_result_error(context,
> -							     "integer overflow",
> -							     -1);
> +					diag_set(ClientError, ER_SQL_EXECUTE,
> +						 "integer overflow”);

-> integer is overflowed.

> +					context->is_error = true;
> 					return;
> 				}
> 				iVal = -iVal;
> 
> 
> 
> @@ -591,11 +577,11 @@ case_type##ICUFunc(sql_context *context, int argc, sql_value **argv)   \
> 	 * does not invalidate the _text() pointer.                            \
> 	 */                                                                    \
> 	assert(z2 == (char *)sql_value_text(argv[0]));                     \
> -	if (!z2)                                                               \
> +	if (z2 == NULL)                                                        \
> 		return;                                                        \

Redundant diff.

> src/box/sql/vdbeInt.h b/src/box/sql/vdbeInt.h
> index 6aadca2..70a0bab 100644
> --- a/src/box/sql/vdbeInt.h
> +++ b/src/box/sql/vdbeInt.h
> 
> @@ -300,21 +296,6 @@ mem_apply_numeric_type(struct Mem *record);
> #endif
> 
> 
> -/*
>  * The "context" argument for an installable function.  A pointer to an
>  * instance of this structure is the first argument to the routines used
>  * implement the SQL functions.
> @@ -333,9 +314,12 @@ struct sql_context {
> 	Mem *pMem;		/* Memory cell used to store aggregate context */
> 	Vdbe *pVdbe;		/* The VM that owns this context */
> 	int iOp;		/* Instruction number of OP_Function */
> -	int isError;		/* Error code returned by the function. */
> +	/*
> +	 * True, if an error occurred during the execution of the
> +	 * function.
> +	 */
> +	bool is_error;

I’d better use is_abotred name.

> diff --git a/src/box/sql/vdbemem.c b/src/box/sql/vdbemem.c
> index f73ea0a..ce0c641 100644
> --- a/src/box/sql/vdbemem.c
> +++ b/src/box/sql/vdbemem.c
> @@ -321,7 +321,6 @@ sqlVdbeMemStringify(Mem * pMem, u8 bForce)
> int
> sqlVdbeMemFinalize(Mem * pMem, FuncDef * pFunc)
> {
> -	int rc = SQL_OK;
> 	if (ALWAYS(pFunc && pFunc->xFinalize)) {
> 		sql_context ctx;
> 		Mem t;
> @@ -338,9 +337,9 @@ sqlVdbeMemFinalize(Mem * pMem, FuncDef * pFunc)
> 		if (pMem->szMalloc > 0)
> 			sqlDbFree(pMem->db, pMem->zMalloc);
> 		memcpy(pMem, &t, sizeof(t));
> -		rc = ctx.isError;
> +		return ctx.is_error ? SQL_TARANTOOL_ERROR : SQL_OK;
> 	}
> -	return rc;
> +	return SQL_OK;

Return 0/-1

  reply	other threads:[~2019-05-15 14:12 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-05 12:17 [tarantool-patches] [PATCH v1 00/12] sql: set errors in VDBE using diag_set() imeevma
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 01/12] sql: remove errors SQL_TARANTOOL_*_FAIL imeevma
2019-05-15 13:18   ` [tarantool-patches] " n.pettik
2019-05-25  9:16     ` Imeev Mergen
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 02/12] sql: remove error ER_SQL imeevma
2019-05-15 13:18   ` [tarantool-patches] " n.pettik
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 03/12] sql: rework diag_set() in OP_Halt imeevma
2019-05-15 13:18   ` [tarantool-patches] " n.pettik
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 04/12] sql: make SQL_TARANTOOL_ERROR the only errcode of OP_Halt imeevma
2019-05-15 13:18   ` [tarantool-patches] " n.pettik
2019-05-25  9:18     ` Imeev Mergen
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 05/12] sql: remove error SQL_INTERRUPT imeevma
2019-05-15 13:18   ` [tarantool-patches] " n.pettik
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 06/12] sql: remove error SQL_MISMATCH imeevma
2019-05-15 13:19   ` [tarantool-patches] " n.pettik
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 07/12] sql: set errors in VDBE using diag_set() imeevma
2019-05-15 13:26   ` [tarantool-patches] " n.pettik
2019-05-25 10:24     ` Mergen Imeev
2019-05-25 10:36       ` Imeev Mergen
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 08/12] sql: remove field zErrMsg from struct Vdbe imeevma
2019-05-15 13:30   ` [tarantool-patches] " n.pettik
2019-05-25  9:25     ` Imeev Mergen
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 09/12] sql: remove field pErr from struct sql imeevma
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 10/12] sql: remove field errCode " imeevma
2019-05-15 13:32   ` [tarantool-patches] " n.pettik
2019-05-25  9:25     ` Imeev Mergen
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 11/12] sql: remove sqlError() and remove sqlErrorWithMsg() imeevma
2019-05-05 12:17 ` [tarantool-patches] [PATCH v1 12/12] sql: use diag_set() to set an error in SQL functions imeevma
2019-05-15 14:12   ` n.pettik [this message]
2019-05-25  9:45     ` [tarantool-patches] " Mergen Imeev
2019-05-25 10:36       ` Imeev Mergen

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=80806CED-90B4-402B-9D0B-BDF141C7CDF0@tarantool.org \
    --to=korablev@tarantool.org \
    --cc=imeevma@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH v1 12/12] sql: use diag_set() to set an error in SQL functions' \
    /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