From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Chris Sosnin <k.sosnin@tarantool.org>,
tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] box: fix non-informative update() error message
Date: Tue, 26 Nov 2019 00:42:30 +0100 [thread overview]
Message-ID: <04465189-1892-fb77-d1ae-f1ef32b55581@tarantool.org> (raw)
In-Reply-To: <1574630112.698478354@f497.i.mail.ru>
Thanks for the patch!
See 3 comments below.
On 24/11/2019 22:15, Chris Sosnin wrote:
> Calling tuple_object:update() with invalid argument number
> yields 'Unknown UPDATE operation' error. Instead, we replace this
> error with explicit "Wrong argument number".
> Taking an actual issue into account, the problem is about
> nil - box.NULL confusion, maybe we could consider giving some
> kind of warning in this case.
>
> Fixes: #3884
> ---
1. All the same as for #4515 email.
> src/box/xrow_update_field.c | 4 +++-
> test/box/update.result | 4 ++--
> test/engine/upsert.result | 6 +++---
> test/vinyl/gh.result | 2 +-
> 4 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/src/box/xrow_update_field.c b/src/box/xrow_update_field.c
> index c694e17e9..6d1334e02 100644
> --- a/src/box/xrow_update_field.c
> +++ b/src/box/xrow_update_field.c
> @@ -625,7 +625,9 @@ xrow_update_op_decode(struct xrow_update_op *op, int index_base,
> if (op->meta == NULL)
> return -1;
> if (arg_count != op->meta->arg_count) {
> - diag_set(ClientError, ER_UNKNOWN_UPDATE_OP);
> + char s[10];
> + sprintf(s, "%u", op->meta->arg_count);
> + diag_set(ClientError, ER_FUNC_WRONG_ARG_COUNT, "update", s, arg_count);
2. Instead of allocating buffers on the stack you can use
static allocator. See static.h and tt_static.h for details.
Here you could do
const char* str = tt_sprintf(<your format>);
<use str>
3. Error codes usually are divided into groups,
related to a certain subsystem. For example,
ER_FUNC_WRONG_ARG_COUNT error code is related to stored
functions (lua, SQL). As a result, it does not contain
an updated field name, or its number.
Tuple:update() is not a stored function. It is a
tuple method. For this method we have a group of
error codes ER_UPDATE_*. They show field name or
number on which the error has happened.
Concretely for this place we don't have a ready to
use error code. I think, you need to extend
ER_UNKNOWN_UPDATE_OP's error message. It should
contain a reason why it is unknown. An update operation
is unknown like in xrow_update_op_by(); or it contains
a wrong number of arguments like here in the patch.
In both cases it would be nice to have an ordinal number
of the operation in the message.
prev parent reply other threads:[~2019-11-25 23:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-24 21:15 Chris Sosnin
2019-11-25 23:42 ` Vladislav Shpilevoy [this message]
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=04465189-1892-fb77-d1ae-f1ef32b55581@tarantool.org \
--to=v.shpilevoy@tarantool.org \
--cc=k.sosnin@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH] box: fix non-informative update() error message' \
/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