diff --git a/src/box/key_list.c b/src/box/key_list.c index 3d736b55f228a351268b6439a1eccd4d87d30be6..7c1fa70e33dfed60096c3fa6033179c8e852534d 100644 --- a/src/box/key_list.c +++ b/src/box/key_list.c @@ -63,9 +63,9 @@ key_list_iterator_create(struct key_list_iterator *it, struct tuple *tuple, if (rc != 0) { /* Can't evaluate function. */ struct space *space = space_by_id(index_def->space_id); - diag_set(ClientError, ER_FUNC_INDEX_FUNC, index_def->name, + diag_add(ClientError, ER_FUNC_INDEX_FUNC, index_def->name, space ? space_name(space) : "", - diag_last_error(diag_get())->errmsg); + "can't evaluate function"); return -1; } uint32_t key_data_sz; @@ -74,9 +74,9 @@ key_list_iterator_create(struct key_list_iterator *it, struct tuple *tuple, if (key_data == NULL) { struct space *space = space_by_id(index_def->space_id); /* Can't get a result returned by function . */ - diag_set(ClientError, ER_FUNC_INDEX_FUNC, index_def->name, + diag_add(ClientError, ER_FUNC_INDEX_FUNC, index_def->name, space ? space_name(space) : "", - diag_last_error(diag_get())->errmsg); + "can't get a value returned by function"); return -1; } @@ -170,9 +170,9 @@ key_list_iterator_next(struct key_list_iterator *it, const char **value) * The key doesn't follow functional index key * definition. */ - diag_set(ClientError, ER_FUNC_INDEX_FORMAT, it->index_def->name, + diag_add(ClientError, ER_FUNC_INDEX_FORMAT, it->index_def->name, space ? space_name(space) : "", - diag_last_error(diag_get())->errmsg); + "key does not follow functional index definition"); return -1; } diff --git a/src/box/lua/call.c b/src/box/lua/call.c index f1bbde7f001299724903f23cd1ab1df74bc22656..5d3579eff0ee53918af0cc7aef845e3477557ef3 100644 --- a/src/box/lua/call.c +++ b/src/box/lua/call.c @@ -687,9 +687,9 @@ func_persistent_lua_load(struct func_lua *func) if (func->base.def->is_sandboxed) { if (prepare_lua_sandbox(tarantool_L, default_sandbox_exports, nelem(default_sandbox_exports)) != 0) { - diag_set(ClientError, ER_LOAD_FUNCTION, - func->base.def->name, - diag_last_error(diag_get())->errmsg); + diag_add(ClientError, ER_LOAD_FUNCTION, + func->base.def->name, + "can't prepare a Lua sandbox"); goto end; } } else { diff --git a/test/engine/func_index.result b/test/engine/func_index.result index 84cb83022db789c7618d06da48580103974ed771..a827c929f0d10fa11a3bcee3d8313903a5e01926 100644 --- a/test/engine/func_index.result +++ b/test/engine/func_index.result @@ -5,6 +5,14 @@ test_run = require('test_run').new() engine = test_run:get_cfg('engine') | --- | ... +test_run:cmd("push filter \"file: .*\" to \"file: <filename>\"") + | --- + | - true + | ... +test_run:cmd("push filter \"line: .*\" to \"line: <line>\"") + | --- + | - true + | ... -- -- gh-1260: Func index. @@ -158,8 +166,7 @@ idx = s:create_index('idx', {func = box.func.invalidreturn1.id, parts = {{1, 'un s:insert({1}) | --- | - error: 'Key format doesn''t match one defined in functional index ''idx'' of space - | ''withdata'': Supplied key type of part 0 does not match index part type: expected - | unsigned' + | ''withdata'': key does not follow functional index definition' | ... idx:drop() | --- @@ -197,8 +204,7 @@ idx = s:create_index('idx', {func = box.func.invalidreturn3.id, parts = {{1, 'un s:insert({1}) | --- | - error: 'Key format doesn''t match one defined in functional index ''idx'' of space - | ''withdata'': Supplied key type of part 0 does not match index part type: expected - | unsigned' + | ''withdata'': key does not follow functional index definition' | ... idx:drop() | --- @@ -217,8 +223,7 @@ idx = s:create_index('idx', {func = box.func.invalidreturn4.id, parts = {{1, 'un s:insert({1}) | --- | - error: 'Key format doesn''t match one defined in functional index ''idx'' of space - | ''withdata'': Supplied key type of part 0 does not match index part type: expected - | unsigned' + | ''withdata'': key does not follow functional index definition' | ... idx:drop() | --- @@ -264,8 +269,41 @@ idx = s:create_index('idx', {func = box.func.runtimeerror.id, parts = {{1, 'stri s:insert({1}) | --- | - error: 'Failed to build a key for functional index ''idx'' of space ''withdata'': - | [string "return function(tuple) local ..."]:1: attempt to call - | global ''require'' (a nil value)' + | can''t evaluate function' + | ... +e = box.error.last() + | --- + | ... +e:unpack() + | --- + | - code: 198 + | trace: + | - file: <filename> + | line: <line> + | type: ClientError + | message: 'Failed to build a key for functional index ''idx'' of space ''withdata'': + | can''t evaluate function' + | prev: '[string "return function(tuple) local ..."]:1: attempt to + | call global ''require'' (a nil value)' + | ... +e = e.prev + | --- + | ... +e:unpack() + | --- + | - type: LuajitError + | message: '[string "return function(tuple) local ..."]:1: attempt + | to call global ''require'' (a nil value)' + | trace: + | - file: <filename> + | line: <line> + | ... +e = e.prev + | --- + | ... +e == nil + | --- + | - true | ... idx:drop() | --- diff --git a/test/engine/func_index.test.lua b/test/engine/func_index.test.lua index f31162c97c333452c79185251ba1d333886868a7..5db588c1fc094ca69f31c805768ce27d9b4eb6f2 100644 --- a/test/engine/func_index.test.lua +++ b/test/engine/func_index.test.lua @@ -1,5 +1,7 @@ test_run = require('test_run').new() engine = test_run:get_cfg('engine') +test_run:cmd("push filter \"file: .*\" to \"file: <filename>\"") +test_run:cmd("push filter \"line: .*\" to \"line: <line>\"") -- -- gh-1260: Func index. @@ -99,6 +101,12 @@ test_run:cmd("setopt delimiter ''"); box.schema.func.create('runtimeerror', {body = lua_code, is_deterministic = true, is_sandboxed = true}) idx = s:create_index('idx', {func = box.func.runtimeerror.id, parts = {{1, 'string'}}}) s:insert({1}) +e = box.error.last() +e:unpack() +e = e.prev +e:unpack() +e = e.prev +e == nil idx:drop() -- Remove old persistent functions