Skip to content
Snippets Groups Projects
Commit c15cef54 authored by Nikita Pettik's avatar Nikita Pettik Committed by Kirill Yukhin
Browse files

box: use stacked diagnostic area for functional indexes

Since we've introduced stacked diagnostic in previous commit, let's use
it in the code implementing functional indexes.

Part of #1148
parent 3b887d04
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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 {
......
......@@ -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()
| ---
......
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment