box: support functional default field values
Now the default value of a tuple field can be computed as a result of a function call. Closes #8609 @TarantoolBot document Title: Document functional default field values Product: Tarantool Since: 3.0 Root document: https://www.tarantool.io/en/doc/latest/reference/reference_lua/box_space/format/ Depends on: tarantool/doc#3520 The format clause contains, for each field, a definition within braces: `{name='...',type='...'[,default=...][,default_func=...]}`, where: * (Optional) The `default_func` string value specifies the name of a function, that is used to generate a default value for the field. If `default_func` is set, the `default` value is used as the function argument. See [field default functions](https://www.tarantool.io/en/doc/latest/concepts/data_model/value_store/#field-default-functions). --- Root document: https://www.tarantool.io/en/doc/latest/concepts/data_model/value_store/#constraint-functions **Field default functions** Stored Lua function can be used to generate a default value for the tuple field. It can take one optional parameter, and must return exactly one value. To create a field default function, use func.create with function body. The function must not yield. Example: ```lua box.schema.func.create('random_point', { language = 'Lua', body = 'function(param) return math.random(param.min, param.max) end' }) box.schema.space.create('test') box.space.test:create_index('pk') box.space.test:format({ {name = 'id', type = 'integer'}, {name = 'latitude', type = 'number', default_func = 'random_point', default = {min = -90, max = 90}}, {name = 'longitude', type = 'number', default_func = 'random_point', default = {min = -180, max = 180}} }) ``` ```lua tarantool> math.randomseed(os.time()) --- ... tarantool> box.space.test:insert{1} --- - [1, 56, 38] ... ```
Showing
- changelogs/unreleased/gh-8609-functional-default-field-value.md 3 additions, 0 deletions...logs/unreleased/gh-8609-functional-default-field-value.md
- src/box/CMakeLists.txt 1 addition, 0 deletionssrc/box/CMakeLists.txt
- src/box/alter.cc 4 additions, 0 deletionssrc/box/alter.cc
- src/box/errcode.h 2 additions, 0 deletionssrc/box/errcode.h
- src/box/field_def.c 2 additions, 0 deletionssrc/box/field_def.c
- src/box/field_def.h 2 additions, 0 deletionssrc/box/field_def.h
- src/box/field_default_func.c 113 additions, 0 deletionssrc/box/field_default_func.c
- src/box/field_default_func.h 67 additions, 0 deletionssrc/box/field_default_func.h
- src/box/func_cache.c 1 addition, 0 deletionssrc/box/func_cache.c
- src/box/func_cache.h 1 addition, 0 deletionssrc/box/func_cache.h
- src/box/lua/schema.lua 19 additions, 0 deletionssrc/box/lua/schema.lua
- src/box/space.c 55 additions, 6 deletionssrc/box/space.c
- src/box/space.h 12 additions, 0 deletionssrc/box/space.h
- src/box/sql.c 1 addition, 0 deletionssrc/box/sql.c
- src/box/tuple_constraint_func.c 2 additions, 2 deletionssrc/box/tuple_constraint_func.c
- src/box/tuple_format.c 52 additions, 7 deletionssrc/box/tuple_format.c
- src/box/tuple_format.h 22 additions, 3 deletionssrc/box/tuple_format.h
- test/box-luatest/gh_4693_formats_for_standalone_tuples_test.lua 11 additions, 1 deletion...ox-luatest/gh_4693_formats_for_standalone_tuples_test.lua
- test/box/error.result 2 additions, 0 deletionstest/box/error.result
- test/engine-luatest/gh_8609_default_field_value_func_test.lua 230 additions, 0 deletions.../engine-luatest/gh_8609_default_field_value_func_test.lua
Loading
Please register or sign in to comment