Fixes #3256 --- Issue:  https://github.com/tarantool/tarantool/issues/3256 Branch:  https://github.com/tarantool/tarantool/compare/gh-3256-net-box-nullable-collation-options-output  src/box/lua/net_box.lua | 6 ++++-  test/box/net.box.result | 65 +++++++++++++++++++++++++++++++++++++++++++++++  test/box/net.box.test.lua | 24 +++++++++++++++++  3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/src/box/lua/net_box.lua b/src/box/lua/net_box.lua index a6a8648..d37032f 100644 --- a/src/box/lua/net_box.lua +++ b/src/box/lua/net_box.lua @@ -895,12 +895,16 @@ function remote_methods:_install_schema(schema_version, spaces, indices)              end          else              for k = 1, #index[PARTS] do + local pknullable = index[PARTS][k].is_nullable or false + local pkcollationid = index[PARTS][k].collation                  local pktype = index[PARTS][k][2] or index[PARTS][k].type                  local pkfield = index[PARTS][k][1] or index[PARTS][k].field                    local pk = {                      type = pktype, - fieldno = pkfield + 1 + fieldno = pkfield + 1, + collation_id = pkcollationid, + is_nullable = pknullable                  }                  idx.parts[k] = pk              end diff --git a/test/box/net.box.result b/test/box/net.box.result index 6150ad3..c423c13 100644 --- a/test/box/net.box.result +++ b/test/box/net.box.result @@ -1308,15 +1308,19 @@ c.space.test:select{}  c.space.test.index.primary.parts  ---  - - type: unsigned + is_nullable: false      fieldno: 1  ...  c.space.test.index.covering.parts  ---  - - type: unsigned + is_nullable: false      fieldno: 1    - type: string + is_nullable: false      fieldno: 3    - type: unsigned + is_nullable: false      fieldno: 2  ...  box.space.test:drop() @@ -1979,3 +1983,64 @@ box.schema.user.revoke('guest','read,write,execute','universe')  space:drop()  ---  ... +-- +-- gh-3256 net.box is_nullable and collation options output +-- +space = box.schema.create_space('test') +--- +... +box.schema.user.grant('guest','read,write,execute','space', 'test') +--- +... +pk = space:create_index('pk') +--- +... +sk = space:create_index('sk', {parts = {{2, 'unsigned', is_nullable = true}}}) +--- +... +c = net:connect(box.cfg.listen) +--- +... +c.space.test.index.sk.parts +--- +- - type: unsigned + is_nullable: true + fieldno: 2 +... +c:close() +--- +... +space:drop() +--- +... +space = box.schema.create_space('test') +--- +... +box.schema.user.grant('guest','read,write,execute','space', 'test') +--- +... +box.internal.collation.create('test', 'ICU', 'ru-RU') +--- +... +sk = space:create_index('sk', { type = 'tree', parts = {{1, 'str', collation = 'test'}}, unique = true }) +--- +... +c = net:connect(box.cfg.listen) +--- +... +c.space.test.index.sk.parts +--- +- - type: string + is_nullable: false + collation_id: 3 + fieldno: 1 +... +c:close() +--- +... +box.internal.collation.drop('test') +--- +... +space:drop() +--- +... diff --git a/test/box/net.box.test.lua b/test/box/net.box.test.lua index c7541ed..fe45721 100644 --- a/test/box/net.box.test.lua +++ b/test/box/net.box.test.lua @@ -798,3 +798,27 @@ c.space.test.index.test_index ~= nil  box.schema.user.revoke('guest','read,write,execute','universe')    space:drop() + + +-- +-- gh-3256 net.box is_nullable and collation options output +-- + +space = box.schema.create_space('test') +box.schema.user.grant('guest','read,write,execute','space', 'test') +pk = space:create_index('pk') +sk = space:create_index('sk', {parts = {{2, 'unsigned', is_nullable = true}}}) +c = net:connect(box.cfg.listen) +c.space.test.index.sk.parts +c:close() +space:drop() + +space = box.schema.create_space('test') +box.schema.user.grant('guest','read,write,execute','space', 'test') +box.internal.collation.create('test', 'ICU', 'ru-RU') +sk = space:create_index('sk', { type = 'tree', parts = {{1, 'str', collation = 'test'}}, unique = true }) +c = net:connect(box.cfg.listen) +c.space.test.index.sk.parts +c:close() +box.internal.collation.drop('test') +space:drop() \ No newline at end of file --  2.7.4