<HTML><BODY><p>Calling tuple_object:update() with invalid argument number<br>yields 'Unknown UPDATE operation' error. Instead, we replace this<br>error with explicit "Wrong argument number".<br>Taking an actual issue into account, the problem is about<br>nil - box.NULL confusion, maybe we could consider giving some<br>kind of warning in this case.</p><p>Fixes: #3884<br>---<br> src/box/xrow_update_field.c | 4 +++-<br> test/box/update.result | 4 ++--<br> test/engine/upsert.result | 6 +++---<br> test/vinyl/gh.result | 2 +-<br> 4 files changed, 9 insertions(+), 7 deletions(-)</p><p>diff --git a/src/box/xrow_update_field.c b/src/box/xrow_update_field.c<br>index c694e17e9..6d1334e02 100644<br>--- a/src/box/xrow_update_field.c<br>+++ b/src/box/xrow_update_field.c<br>@@ -625,7 +625,9 @@ xrow_update_op_decode(struct xrow_update_op *op, int index_base,<br> if (op->meta == NULL)<br> return -1;<br> if (arg_count != op->meta->arg_count) {<br>- diag_set(ClientError, ER_UNKNOWN_UPDATE_OP);<br>+ char s[10];<br>+ sprintf(s, "%u", op->meta->arg_count);<br>+ diag_set(ClientError, ER_FUNC_WRONG_ARG_COUNT, "update", s, arg_count);<br> return -1;<br> }<br> int32_t field_no = 0;<br>diff --git a/test/box/update.result b/test/box/update.result<br>index c6a5a25a7..b89b7124b 100644<br>--- a/test/box/update.result<br>+++ b/test/box/update.result<br>@@ -826,11 +826,11 @@ s:update({0}, {{}})<br> ...<br> s:update({0}, {{'+'}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 3, got 1'<br> ...<br> s:update({0}, {{'+', 0}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 3, got 2'<br> ...<br> s:update({0}, {{'+', '+', '+'}})<br> ---<br>diff --git a/test/engine/upsert.result b/test/engine/upsert.result<br>index 47da307fa..1e1441237 100644<br>--- a/test/engine/upsert.result<br>+++ b/test/engine/upsert.result<br>@@ -2117,15 +2117,15 @@ test(t, {{'+', 3, 3}, {'&', 3, 'a'}}, {{1, '1', 1, '1'}})<br> ...<br> test(t, {{'+', 3}, {'&', 3, 'a'}}, {{1, '1', 1, '1'}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 3, got 2'<br> ...<br> test(t, {{':', 3, 3}}, {{1, '1', 1, '1'}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 5, got 3'<br> ...<br> test(t, {{':', 3, 3, 3}}, {{1, '1', 1, '1'}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 5, got 4'<br> ...<br> test(t, {{'?', 3, 3}}, {{1, '1', 1, '1'}})<br> ---<br>diff --git a/test/vinyl/gh.result b/test/vinyl/gh.result<br>index 78cb2a28d..7985ac903 100644<br>--- a/test/vinyl/gh.result<br>+++ b/test/vinyl/gh.result<br>@@ -369,7 +369,7 @@ s:select()<br> ...<br> s:upsert({1, 'test', 'failed'}, {{'=', 3, 33}, {'=', 4, nil}})<br> ---<br>-- error: Unknown UPDATE operation<br>+- error: 'Wrong number of arguments is passed to update(): expected 3, got 2'<br> ...<br> s:select()<br> ---<br>-- <br>2.24.0</p><p> </p></BODY></HTML>