From f391c8476a32d994eeb8c016d5928411e6a7e9a1 Mon Sep 17 00:00:00 2001
From: Konstantin Osipov <kostja@tarantool.org>
Date: Tue, 27 Aug 2013 00:39:59 +0400
Subject: [PATCH] Make big/sql.test pass.

Still some issues with Lua console to fix, but transfer
big/sql.test to the new data dictionary at least.

Fix a bug found in the process that when altering an index
from unique to non unique the index is not rebuilt.

Remove 'lua ' prefix from schema_erase/schema_fill classes.
---
 extra/schema_erase.lua |  18 +-
 extra/schema_fill.lua  |  24 +--
 src/box/alter.cc       |   1 +
 test/big/sql.result    | 341 ++++++++++++++++++++----------------
 test/big/sql.test.py   | 237 +++++++++++++------------
 test/big/tarantool.cfg | 385 -----------------------------------------
 6 files changed, 342 insertions(+), 664 deletions(-)

diff --git a/extra/schema_erase.lua b/extra/schema_erase.lua
index eb8a1bf2d0..ce0d2f094a 100644
--- a/extra/schema_erase.lua
+++ b/extra/schema_erase.lua
@@ -1,11 +1,11 @@
-lua _schema = box.space[box.schema.SCHEMA_ID]
-lua _space = box.space[box.schema.SPACE_ID]
-lua _index = box.space[box.schema.INDEX_ID]
+_schema = box.space[box.schema.SCHEMA_ID]
+_space = box.space[box.schema.SPACE_ID]
+_index = box.space[box.schema.INDEX_ID]
 -- destroy everything - save snapshot produces an empty snapshot now
-lua _schema:run_triggers(false)
-lua _schema:truncate()
-lua _space:run_triggers(false)
-lua _space:truncate()
-lua _index:run_triggers(false)
-lua _index:truncate()
+_schema:run_triggers(false)
+_schema:truncate()
+_space:run_triggers(false)
+_space:truncate()
+_index:run_triggers(false)
+_index:truncate()
 
diff --git a/extra/schema_fill.lua b/extra/schema_fill.lua
index 8e357085b8..e44fccded5 100644
--- a/extra/schema_fill.lua
+++ b/extra/schema_fill.lua
@@ -1,20 +1,20 @@
-lua _schema = box.space[box.schema.SCHEMA_ID]
-lua _space = box.space[box.schema.SPACE_ID]
-lua _index = box.space[box.schema.INDEX_ID]
+_schema = box.space[box.schema.SCHEMA_ID]
+_space = box.space[box.schema.SPACE_ID]
+_index = box.space[box.schema.INDEX_ID]
 -- define schema version
-lua _schema:insert('version', 1, 6)
+_schema:insert('version', 1, 6)
 -- define system spaces
-lua _space:insert(_schema.n, 0, '_schema')
-lua _space:insert(_space.n, 0, '_space')
-lua _space:insert(_index.n, 0, '_index')
+_space:insert(_schema.n, 0, '_schema')
+_space:insert(_space.n, 0, '_space')
+_space:insert(_index.n, 0, '_index')
 -- define indexes
-lua _index:insert(_schema.n, 0, 'primary', 'tree', 1, 1, 0, 'str')
+_index:insert(_schema.n, 0, 'primary', 'tree', 1, 1, 0, 'str')
 
 -- space name is unique
-lua _index:insert(_space.n, 0, 'primary', 'tree', 1, 1, 0, 'num')
-lua _index:insert(_space.n, 1, 'name', 'tree', 1, 1, 2, 'str')
+_index:insert(_space.n, 0, 'primary', 'tree', 1, 1, 0, 'num')
+_index:insert(_space.n, 1, 'name', 'tree', 1, 1, 2, 'str')
 
 -- index name is unique within a space
-lua _index:insert(_index.n, 0, 'primary', 'tree', 1, 2, 0, 'num', 1, 'num')
-lua _index:insert(_index.n, 1, 'name', 'tree', 1, 2, 0, 'num', 2, 'str')
+_index:insert(_index.n, 0, 'primary', 'tree', 1, 2, 0, 'num', 1, 'num')
+_index:insert(_index.n, 1, 'name', 'tree', 1, 2, 0, 'num', 2, 'str')
 -- 
diff --git a/src/box/alter.cc b/src/box/alter.cc
index 9d1c39f764..0e28b964eb 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -604,6 +604,7 @@ AddIndex::prepare(struct alter_space *alter)
 
 	if (drop == NULL ||
 	    drop->old_key_def->type != new_key_def->type ||
+	    drop->old_key_def->is_unique != new_key_def->is_unique ||
 	    key_part_cmp(drop->old_key_def->parts,
 			 drop->old_key_def->part_count,
 			 new_key_def->parts,
diff --git a/test/big/sql.result b/test/big/sql.result
index a141cb16a4..a0d625e972 100644
--- a/test/big/sql.result
+++ b/test/big/sql.result
@@ -1,3 +1,12 @@
+box.insert(box.schema.SPACE_ID, 0, 0, 'tweedledum')
+--- '0: {0, ''tweedledum''}'
+...
+box.insert(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'str')
+--- '0: {0, ''primary'', 1752392040, 1, 1, 0, ''str''}'
+...
+box.insert(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 1, 1, 'str')
+--- '0: {1, ''secondary'', 1701147252, 0, 1, 1, ''str''}'
+...
 #
 # A test case for Bug#729758
 # "SELECT fails with a disjunct and small LIMIT"
@@ -27,16 +36,9 @@ Found 5 tuples:
 #
 select * from t0 where k1='Richard' or k1='Tomas' limit 0
 No match
-delete from t0 where k0='Doe'
-Delete OK, 1 row affected
-delete from t0 where k0='Roe'
-Delete OK, 1 row affected
-delete from t0 where k0='Woe'
-Delete OK, 1 row affected
-delete from t0 where k0='Major'
-Delete OK, 1 row affected
-delete from t0 where k0='Kytes'
-Delete OK, 1 row affected
+box.space[0]:truncate()
+---
+...
 #
 # A test case for Bug#730593
 # "Bad data if incomplete tuple"
@@ -71,157 +73,187 @@ Found 1 tuple:
 ['Spears', 'Britney']
 delete from t0 where k0='Spears'
 Delete OK, 1 row affected
+box.space[0]:truncate()
+---
+...
 #
 # Test composite keys with trees
 #
-insert into t1 values ('key1', 'part1', 'part2')
+box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 1, 2, 1, 'str', 2, 'str')
+--- '0: {1, ''secondary'', 1701147252, 1, 2, 1, ''str'', 2, ''str''}'
+...
+insert into t0 values ('key1', 'part1', 'part2')
 Insert OK, 1 row affected
-replace into t1 values ('key1', 'part1', 'part2')
+replace into t0 values ('key1', 'part1', 'part2')
 Replace OK, 1 row affected
-insert into t1 values ('key2', 'part1', 'part2_a')
+insert into t0 values ('key2', 'part1', 'part2_a')
 Insert OK, 1 row affected
-insert into t1 values ('key3', 'part1', 'part2_b')
+insert into t0 values ('key3', 'part1', 'part2_b')
 Insert OK, 1 row affected
-for k, v in box.space[1]:pairs() do print(v) end
+return { box.space[0]:select(1) }
 ---
-846816619: {'part1', 'part2_a'}
-863593835: {'part1', 'part2_b'}
-830039403: {'part1', 'part2'}
+- '830039403: {''part1'', ''part2''}'
+- '846816619: {''part1'', ''part2_a''}'
+- '863593835: {''part1'', ''part2_b''}'
 ...
-select * from t1 where k0='key1'
+select * from t0 where k0='key1'
 Found 1 tuple:
 [830039403, 'part1', 'part2']
-select * from t1 where k0='key2'
+select * from t0 where k0='key2'
 Found 1 tuple:
 [846816619, 'part1', 'part2_a']
-select * from t1 where k0='key3'
+select * from t0 where k0='key3'
 Found 1 tuple:
 [863593835, 'part1', 'part2_b']
-select * from t1 where k1='part1'
+select * from t0 where k1='part1'
 Found 3 tuples:
 [830039403, 'part1', 'part2']
 [846816619, 'part1', 'part2_a']
 [863593835, 'part1', 'part2_b']
-call box.select_range('1', '1', '100', 'part1')
+call box.select_range('0', '1', '100', 'part1')
 Found 3 tuples:
 [830039403, 'part1', 'part2']
 [846816619, 'part1', 'part2_a']
 [863593835, 'part1', 'part2_b']
-call box.select_range('1', '0', '100', 'key2')
+call box.select_range('0', '0', '100', 'key2')
 Found 3 tuples:
 [830039403, 'part1', 'part2']
 [846816619, 'part1', 'part2_a']
 [863593835, 'part1', 'part2_b']
-call box.select_range('1', '1', '100', 'part1', 'part2_a')
+call box.select_range('0', '1', '100', 'part1', 'part2_a')
 Found 2 tuples:
 [846816619, 'part1', 'part2_a']
 [863593835, 'part1', 'part2_b']
-insert into t5 values ('01234567', 'part1', 'part2')
+select * from t0 where k0='key1'
+Found 1 tuple:
+[830039403, 'part1', 'part2']
+select * from t0 where k0='key2'
+Found 1 tuple:
+[846816619, 'part1', 'part2_a']
+select * from t0 where k0='key3'
+Found 1 tuple:
+[863593835, 'part1', 'part2_b']
+select * from t0 where k1='part1'
+Found 3 tuples:
+[830039403, 'part1', 'part2']
+[846816619, 'part1', 'part2_a']
+[863593835, 'part1', 'part2_b']
+delete from t0 where k0='key1'
+Delete OK, 1 row affected
+delete from t0 where k0='key2'
+Delete OK, 1 row affected
+delete from t0 where k0='key3'
+Delete OK, 1 row affected
+box.space[0]:truncate()
+---
+...
+box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'tree', 1, 1, 0, 'num64')
+--- '0: {0, ''primary'', 1701147252, 1, 1, 0, ''num64''}'
+...
+box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 2, 1, 'str', 2, 'str')
+--- '0: {1, ''secondary'', 1701147252, 0, 2, 1, ''str'', 2, ''str''}'
+...
+insert into t0 values ('01234567', 'part1', 'part2')
 Insert OK, 1 row affected
-insert into t5 values ('11234567', 'part1', 'part2')
+insert into t0 values ('11234567', 'part1', 'part2')
 Insert OK, 1 row affected
-insert into t5 values ('21234567', 'part1', 'part2_a')
+insert into t0 values ('21234567', 'part1', 'part2_a')
 Insert OK, 1 row affected
-insert into t5 values ('31234567', 'part1_a', 'part2')
+insert into t0 values ('31234567', 'part1_a', 'part2')
 Insert OK, 1 row affected
-insert into t5 values ('41234567', 'part1_a', 'part2_a')
+insert into t0 values ('41234567', 'part1_a', 'part2_a')
 Insert OK, 1 row affected
-for k, v in box.space[5]:pairs() do print(v) end
+l = {}
 ---
-3978425819141910832: {'part1', 'part2'}
-3978425819141910833: {'part1', 'part2'}
-3978425819141910834: {'part1', 'part2_a'}
-3978425819141910835: {'part1_a', 'part2'}
-3978425819141910836: {'part1_a', 'part2_a'}
 ...
-select * from t5 where k0='01234567'
+for k, v in box.space[0]:pairs() do table.insert(l, v) end
+---
+...
+return l
+---
+- '3978425819141910832: {''part1'', ''part2''}'
+- '3978425819141910833: {''part1'', ''part2''}'
+- '3978425819141910834: {''part1'', ''part2_a''}'
+- '3978425819141910835: {''part1_a'', ''part2''}'
+- '3978425819141910836: {''part1_a'', ''part2_a''}'
+...
+select * from t0 where k0='01234567'
 Found 1 tuple:
 ['01234567', 'part1', 'part2']
-select * from t5 where k0='11234567'
+select * from t0 where k0='11234567'
 Found 1 tuple:
 ['11234567', 'part1', 'part2']
-select * from t5 where k0='21234567'
+select * from t0 where k0='21234567'
 Found 1 tuple:
 ['21234567', 'part1', 'part2_a']
-select * from t5 where k1='part1'
+select * from t0 where k1='part1'
 Found 3 tuples:
 ['01234567', 'part1', 'part2']
 ['11234567', 'part1', 'part2']
 ['21234567', 'part1', 'part2_a']
-select * from t5 where k1='part1_a'
+select * from t0 where k1='part1_a'
 Found 2 tuples:
 ['31234567', 'part1_a', 'part2']
 ['41234567', 'part1_a', 'part2_a']
-select * from t5 where k1='part_none'
+select * from t0 where k1='part_none'
 No match
-call box.select('5', '1', 'part1', 'part2')
+call box.select('0', '1', 'part1', 'part2')
 Found 2 tuples:
 ['01234567', 'part1', 'part2']
 ['11234567', 'part1', 'part2']
-insert into t7 values (1, 'hello')
+select * from t0 where k1='part1'
+Found 3 tuples:
+['01234567', 'part1', 'part2']
+['11234567', 'part1', 'part2']
+['21234567', 'part1', 'part2_a']
+select * from t0 where k1='part2'
+No match
+delete from t0 where k0='01234567'
+Delete OK, 1 row affected
+delete from t0 where k0='11234567'
+Delete OK, 1 row affected
+delete from t0 where k0='21234567'
+Delete OK, 1 row affected
+delete from t0 where k0='31234567'
+Delete OK, 1 row affected
+delete from t0 where k0='41234567'
+Delete OK, 1 row affected
+{ box.space[0]:select(0) }
+--- {}
+...
+box.space[0]:truncate()
+---
+...
+box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'num')
+--- '0: {0, ''primary'', 1752392040, 1, 1, 0, ''num''}'
+...
+box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'hash', 1, 1, 1, 'str')
+--- '0: {1, ''secondary'', 1752392040, 1, 1, 1, ''str''}'
+...
+insert into t0 values (1, 'hello')
 Insert OK, 1 row affected
-insert into t7 values (2, 'brave')
+insert into t0 values (2, 'brave')
 Insert OK, 1 row affected
-insert into t7 values (3, 'new')
+insert into t0 values (3, 'new')
 Insert OK, 1 row affected
-insert into t7 values (4, 'world')
+insert into t0 values (4, 'world')
 Insert OK, 1 row affected
 #
 # Bug#929654 - secondary hash index is not built with build_indexes()
 #
-select * from t7 where k1='hello'
+select * from t0 where k1='hello'
 Found 1 tuple:
 [1, 'hello']
-select * from t7 where k1='brave'
+select * from t0 where k1='brave'
 Found 1 tuple:
 [2, 'brave']
-select * from t7 where k1='new'
+select * from t0 where k1='new'
 Found 1 tuple:
 [3, 'new']
-select * from t7 where k1='world'
+select * from t0 where k1='world'
 Found 1 tuple:
 [4, 'world']
-box.space[7]:truncate()
----
-...
-select * from t1 where k0='key1'
-Found 1 tuple:
-[830039403, 'part1', 'part2']
-select * from t1 where k0='key2'
-Found 1 tuple:
-[846816619, 'part1', 'part2_a']
-select * from t1 where k0='key3'
-Found 1 tuple:
-[863593835, 'part1', 'part2_b']
-select * from t1 where k1='part1'
-Found 3 tuples:
-[830039403, 'part1', 'part2']
-[846816619, 'part1', 'part2_a']
-[863593835, 'part1', 'part2_b']
-delete from t1 where k0='key1'
-Delete OK, 1 row affected
-delete from t1 where k0='key2'
-Delete OK, 1 row affected
-delete from t1 where k0='key3'
-Delete OK, 1 row affected
-select * from t5 where k1='part1'
-Found 3 tuples:
-['01234567', 'part1', 'part2']
-['11234567', 'part1', 'part2']
-['21234567', 'part1', 'part2_a']
-select * from t5 where k1='part2'
-No match
-delete from t5 where k0='01234567'
-Delete OK, 1 row affected
-delete from t5 where k0='11234567'
-Delete OK, 1 row affected
-delete from t5 where k0='21234567'
-Delete OK, 1 row affected
-delete from t5 where k0='31234567'
-Delete OK, 1 row affected
-delete from t5 where k0='41234567'
-Delete OK, 1 row affected
-for k, v in box.space[5]:pairs() do print(v) end
+box.space[0]:truncate()
 ---
 ...
 
@@ -230,133 +262,140 @@ for k, v in box.space[5]:pairs() do print(v) end
 # Partial REPLACE corrupts index.
 #
 
-insert into t4 values ('Spears', 'Britney')
+box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'str')
+--- '0: {0, ''primary'', 1752392040, 1, 1, 0, ''str''}'
+...
+box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 1, 1, 'str')
+--- '0: {1, ''secondary'', 1701147252, 0, 1, 1, ''str''}'
+...
+insert into t0 values ('Spears', 'Britney')
 Insert OK, 1 row affected
-select * from t4 where k0='Spears'
+select * from t0 where k0='Spears'
 Found 1 tuple:
 ['Spears', 'Britney']
-select * from t4 where k1='Britney'
+select * from t0 where k1='Britney'
 Found 1 tuple:
 ['Spears', 'Britney']
-replace into t4 values ('Spears')
+replace into t0 values ('Spears')
 An error occurred: ER_ILLEGAL_PARAMS, 'Illegal parameters, tuple must have all indexed fields'
-select * from t4 where k0='Spears'
+select * from t0 where k0='Spears'
 Found 1 tuple:
 ['Spears', 'Britney']
-delete from t4 where k0='Spears'
+delete from t0 where k0='Spears'
 Delete OK, 1 row affected
-insert into t4 values (1, 'duplicate one')
+insert into t0 values (1, 'duplicate one')
 Insert OK, 1 row affected
-insert into t4 values (2, 'duplicate one')
+insert into t0 values (2, 'duplicate one')
 Insert OK, 1 row affected
-insert into t4 values (3, 'duplicate one')
+insert into t0 values (3, 'duplicate one')
 Insert OK, 1 row affected
-insert into t4 values (4, 'duplicate one')
+insert into t0 values (4, 'duplicate one')
 Insert OK, 1 row affected
-insert into t4 values (5, 'duplicate one')
+insert into t0 values (5, 'duplicate one')
 Insert OK, 1 row affected
-insert into t4 values (6, 'duplicate two')
+insert into t0 values (6, 'duplicate two')
 Insert OK, 1 row affected
-insert into t4 values (7, 'duplicate two')
+insert into t0 values (7, 'duplicate two')
 Insert OK, 1 row affected
-insert into t4 values (8, 'duplicate two')
+insert into t0 values (8, 'duplicate two')
 Insert OK, 1 row affected
-insert into t4 values (9, 'duplicate two')
+insert into t0 values (9, 'duplicate two')
 Insert OK, 1 row affected
-insert into t4 values (10, 'duplicate two')
+insert into t0 values (10, 'duplicate two')
 Insert OK, 1 row affected
-insert into t4 values (11, 'duplicate three')
+insert into t0 values (11, 'duplicate three')
 Insert OK, 1 row affected
-insert into t4 values (12, 'duplicate three')
+insert into t0 values (12, 'duplicate three')
 Insert OK, 1 row affected
-insert into t4 values (13, 'duplicate three')
+insert into t0 values (13, 'duplicate three')
 Insert OK, 1 row affected
-insert into t4 values (14, 'duplicate three')
+insert into t0 values (14, 'duplicate three')
 Insert OK, 1 row affected
-insert into t4 values (15, 'duplicate three')
+insert into t0 values (15, 'duplicate three')
 Insert OK, 1 row affected
-select * from t4 where k1='duplicate one'
+select * from t0 where k1='duplicate one'
 Found 5 tuples:
 [1, 'duplicate one']
 [2, 'duplicate one']
 [3, 'duplicate one']
 [4, 'duplicate one']
 [5, 'duplicate one']
-select * from t4 where k1='duplicate two'
+select * from t0 where k1='duplicate two'
 Found 5 tuples:
 [10, 'duplicate two']
 [6, 'duplicate two']
 [7, 'duplicate two']
 [8, 'duplicate two']
 [9, 'duplicate two']
-select * from t4 where k1='duplicate three'
+select * from t0 where k1='duplicate three'
 Found 5 tuples:
 [11, 'duplicate three']
 [12, 'duplicate three']
 [13, 'duplicate three']
 [14, 'duplicate three']
 [15, 'duplicate three']
-delete from t4 where k0=1
+delete from t0 where k0=1
 Delete OK, 1 row affected
-delete from t4 where k0=2
+delete from t0 where k0=2
 Delete OK, 1 row affected
-delete from t4 where k0=3
+delete from t0 where k0=3
 Delete OK, 1 row affected
-delete from t4 where k0=4
+delete from t0 where k0=4
 Delete OK, 1 row affected
-delete from t4 where k0=5
+delete from t0 where k0=5
 Delete OK, 1 row affected
-delete from t4 where k0=6
+delete from t0 where k0=6
 Delete OK, 1 row affected
-delete from t4 where k0=7
+delete from t0 where k0=7
 Delete OK, 1 row affected
-delete from t4 where k0=8
+delete from t0 where k0=8
 Delete OK, 1 row affected
-delete from t4 where k0=9
+delete from t0 where k0=9
 Delete OK, 1 row affected
-delete from t4 where k0=10
+delete from t0 where k0=10
 Delete OK, 1 row affected
-delete from t4 where k0=11
+delete from t0 where k0=11
 Delete OK, 1 row affected
-delete from t4 where k0=12
+delete from t0 where k0=12
 Delete OK, 1 row affected
-delete from t4 where k0=13
+delete from t0 where k0=13
 Delete OK, 1 row affected
-delete from t4 where k0=14
+delete from t0 where k0=14
 Delete OK, 1 row affected
-delete from t4 where k0=15
+delete from t0 where k0=15
 Delete OK, 1 row affected
-insert into t4 values(1, 'Aardvark ')
+insert into t0 values(1, 'Aardvark ')
 Insert OK, 1 row affected
-insert into t4 values(2, 'Bilimbi')
+insert into t0 values(2, 'Bilimbi')
 Insert OK, 1 row affected
-insert into t4 values(3, 'Creature ')
+insert into t0 values(3, 'Creature ')
 Insert OK, 1 row affected
-for k, v in box.space[4]:pairs() do print(v) end
+{ box.space[0]:select(1) }
 ---
-2: {'Bilimbi'}
-3: {'Creature '}
-1: {'Aardvark '}
+- '1: {''Aardvark ''}'
+- '2: {''Bilimbi''}'
+- '3: {''Creature ''}'
 ...
-box.space[4].index[0].idx:min()
+box.space[0].index[0].idx:min()
 ---
-error: 'HASH does not support min()'
+error: HASH does not support min()
 ...
-box.space[4].index[0].idx:max()
+box.space[0].index[0].idx:max()
 ---
-error: 'HASH does not support max()'
+error: HASH does not support max()
 ...
-box.space[4].index[1].idx:min()
----
- - 1: {'Aardvark '}
+box.space[0].index[1].idx:min()
+--- '1: {''Aardvark ''}'
 ...
-box.space[4].index[1].idx:max()
----
- - 3: {'Creature '}
+box.space[0].index[1].idx:max()
+--- '3: {''Creature ''}'
 ...
-delete from t4 where k0=1
+delete from t0 where k0=1
 Delete OK, 1 row affected
-delete from t4 where k0=2
+delete from t0 where k0=2
 Delete OK, 1 row affected
-delete from t4 where k0=3
+delete from t0 where k0=3
 Delete OK, 1 row affected
+box.space[0]:drop()
+---
+...
diff --git a/test/big/sql.test.py b/test/big/sql.test.py
index 07c52e97e3..08fe77d55c 100644
--- a/test/big/sql.test.py
+++ b/test/big/sql.test.py
@@ -2,6 +2,13 @@
 #
 sql.sort = True
 
+#
+# Prepare spaces
+#
+admin("box.insert(box.schema.SPACE_ID, 0, 0, 'tweedledum')")
+admin("box.insert(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'str')")
+admin("box.insert(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 1, 1, 'str')")
+
 print """#
 # A test case for Bug#729758
 # "SELECT fails with a disjunct and small LIMIT"
@@ -21,13 +28,7 @@ print """#
 # https://bugs.launchpad.net/tarantool/+bug/729879
 #"""
 sql("select * from t0 where k1='Richard' or k1='Tomas' limit 0")
-
-# Cleanup
-sql("delete from t0 where k0='Doe'")
-sql("delete from t0 where k0='Roe'")
-sql("delete from t0 where k0='Woe'")
-sql("delete from t0 where k0='Major'")
-sql("delete from t0 where k0='Kytes'")
+admin("box.space[0]:truncate()")
 
 print """#
 # A test case for Bug#730593
@@ -48,67 +49,86 @@ sql("select * from t0 where k1='Britney'")
 sql("call box.select_range('0', '0', '100', 'Spears')")
 sql("call box.select_range('0', '1', '100', 'Britney')")
 sql("delete from t0 where k0='Spears'")
+# Cleanup
+admin("box.space[0]:truncate()")
+
 print """#
 # Test composite keys with trees
 #"""
-sql("insert into t1 values ('key1', 'part1', 'part2')")
+# Redefine the second key to be composite
+admin("box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 1, 2, 1, 'str', 2, 'str')")
+
+sql("insert into t0 values ('key1', 'part1', 'part2')")
 # Test a duplicate insert on unique index that once resulted in a crash (bug #926080)
-sql("replace into t1 values ('key1', 'part1', 'part2')")
-sql("insert into t1 values ('key2', 'part1', 'part2_a')")
-sql("insert into t1 values ('key3', 'part1', 'part2_b')")
-admin("for k, v in box.space[1]:pairs() do print(v) end")
-sql("select * from t1 where k0='key1'")
-sql("select * from t1 where k0='key2'")
-sql("select * from t1 where k0='key3'")
-sql("select * from t1 where k1='part1'")
-sql("call box.select_range('1', '1', '100', 'part1')")
-sql("call box.select_range('1', '0', '100', 'key2')")
-sql("call box.select_range('1', '1', '100', 'part1', 'part2_a')")
+sql("replace into t0 values ('key1', 'part1', 'part2')")
+sql("insert into t0 values ('key2', 'part1', 'part2_a')")
+sql("insert into t0 values ('key3', 'part1', 'part2_b')")
+admin("return { box.space[0]:select(1) }")
+sql("select * from t0 where k0='key1'")
+sql("select * from t0 where k0='key2'")
+sql("select * from t0 where k0='key3'")
+sql("select * from t0 where k1='part1'")
+sql("call box.select_range('0', '1', '100', 'part1')")
+sql("call box.select_range('0', '0', '100', 'key2')")
+sql("call box.select_range('0', '1', '100', 'part1', 'part2_a')")
+sql("select * from t0 where k0='key1'")
+sql("select * from t0 where k0='key2'")
+sql("select * from t0 where k0='key3'")
+sql("select * from t0 where k1='part1'")
+sql("delete from t0 where k0='key1'")
+sql("delete from t0 where k0='key2'")
+sql("delete from t0 where k0='key3'")
+admin("box.space[0]:truncate()")
 # check non-unique multipart keys
-sql("insert into t5 values ('01234567', 'part1', 'part2')")
-sql("insert into t5 values ('11234567', 'part1', 'part2')")
-sql("insert into t5 values ('21234567', 'part1', 'part2_a')")
-sql("insert into t5 values ('31234567', 'part1_a', 'part2')")
-sql("insert into t5 values ('41234567', 'part1_a', 'part2_a')")
-admin("for k, v in box.space[5]:pairs() do print(v) end")
-sql("select * from t5 where k0='01234567'")
-sql("select * from t5 where k0='11234567'")
-sql("select * from t5 where k0='21234567'")
-sql("select * from t5 where k1='part1'")
-sql("select * from t5 where k1='part1_a'")
-sql("select * from t5 where k1='part_none'")
-sql("call box.select('5', '1', 'part1', 'part2')")
-sql("insert into t7 values (1, 'hello')")
-sql("insert into t7 values (2, 'brave')")
-sql("insert into t7 values (3, 'new')")
-sql("insert into t7 values (4, 'world')")
+admin("box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'tree', 1, 1, 0, 'num64')")
+admin("box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 2, 1, 'str', 2, 'str')")
+
+sql("insert into t0 values ('01234567', 'part1', 'part2')")
+sql("insert into t0 values ('11234567', 'part1', 'part2')")
+sql("insert into t0 values ('21234567', 'part1', 'part2_a')")
+sql("insert into t0 values ('31234567', 'part1_a', 'part2')")
+sql("insert into t0 values ('41234567', 'part1_a', 'part2_a')")
+admin("l = {}")
+admin("for k, v in box.space[0]:pairs() do table.insert(l, v) end")
+admin("return l")
+sql("select * from t0 where k0='01234567'")
+sql("select * from t0 where k0='11234567'")
+sql("select * from t0 where k0='21234567'")
+sql("select * from t0 where k1='part1'")
+sql("select * from t0 where k1='part1_a'")
+sql("select * from t0 where k1='part_none'")
+sql("call box.select('0', '1', 'part1', 'part2')")
+sql("select * from t0 where k1='part1'")
+sql("select * from t0 where k1='part2'")
+# cleanup
+sql("delete from t0 where k0='01234567'")
+sql("delete from t0 where k0='11234567'")
+sql("delete from t0 where k0='21234567'")
+sql("delete from t0 where k0='31234567'")
+sql("delete from t0 where k0='41234567'")
+admin("{ box.space[0]:select(0) }")
+admin("box.space[0]:truncate()")
+
+admin("box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'num')")
+admin("box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'hash', 1, 1, 1, 'str')")
+
+sql("insert into t0 values (1, 'hello')")
+sql("insert into t0 values (2, 'brave')")
+sql("insert into t0 values (3, 'new')")
+sql("insert into t0 values (4, 'world')")
 # Check how build_idnexes() works
 server.stop()
 server.start()
 print """#
 # Bug#929654 - secondary hash index is not built with build_indexes()
 #"""
-sql("select * from t7 where k1='hello'")
-sql("select * from t7 where k1='brave'")
-sql("select * from t7 where k1='new'")
-sql("select * from t7 where k1='world'")
-admin("box.space[7]:truncate()")
-sql("select * from t1 where k0='key1'")
-sql("select * from t1 where k0='key2'")
-sql("select * from t1 where k0='key3'")
-sql("select * from t1 where k1='part1'")
-sql("delete from t1 where k0='key1'")
-sql("delete from t1 where k0='key2'")
-sql("delete from t1 where k0='key3'")
-sql("select * from t5 where k1='part1'")
-sql("select * from t5 where k1='part2'")
-# cleanup
-sql("delete from t5 where k0='01234567'")
-sql("delete from t5 where k0='11234567'")
-sql("delete from t5 where k0='21234567'")
-sql("delete from t5 where k0='31234567'")
-sql("delete from t5 where k0='41234567'")
-admin("for k, v in box.space[5]:pairs() do print(v) end")
+sql("select * from t0 where k1='hello'")
+sql("select * from t0 where k1='brave'")
+sql("select * from t0 where k1='new'")
+sql("select * from t0 where k1='world'")
+#
+admin("box.space[0]:truncate()")
+
 
 print """
 #
@@ -117,67 +137,70 @@ print """
 #
 """
 # clean data and restart with appropriate config
+admin("box.replace(box.schema.INDEX_ID, 0, 0, 'primary', 'hash', 1, 1, 0, 'str')")
+admin("box.replace(box.schema.INDEX_ID, 0, 1, 'secondary', 'tree', 0, 1, 1, 'str')")
 
-sql("insert into t4 values ('Spears', 'Britney')")
-sql("select * from t4 where k0='Spears'")
-sql("select * from t4 where k1='Britney'")
+sql("insert into t0 values ('Spears', 'Britney')")
+sql("select * from t0 where k0='Spears'")
+sql("select * from t0 where k1='Britney'")
 # try to insert the incoplete tuple
-sql("replace into t4 values ('Spears')")
+sql("replace into t0 values ('Spears')")
 # check that nothing has been updated
-sql("select * from t4 where k0='Spears'")
+sql("select * from t0 where k0='Spears'")
 # cleanup
-sql("delete from t4 where k0='Spears'")
+sql("delete from t0 where k0='Spears'")
 
 #
 # Test retrieval of duplicates via a secondary key
 #
-sql("insert into t4 values (1, 'duplicate one')")
-sql("insert into t4 values (2, 'duplicate one')")
-sql("insert into t4 values (3, 'duplicate one')")
-sql("insert into t4 values (4, 'duplicate one')")
-sql("insert into t4 values (5, 'duplicate one')")
-sql("insert into t4 values (6, 'duplicate two')")
-sql("insert into t4 values (7, 'duplicate two')")
-sql("insert into t4 values (8, 'duplicate two')")
-sql("insert into t4 values (9, 'duplicate two')")
-sql("insert into t4 values (10, 'duplicate two')")
-sql("insert into t4 values (11, 'duplicate three')")
-sql("insert into t4 values (12, 'duplicate three')")
-sql("insert into t4 values (13, 'duplicate three')")
-sql("insert into t4 values (14, 'duplicate three')")
-sql("insert into t4 values (15, 'duplicate three')")
-sql("select * from t4 where k1='duplicate one'")
-sql("select * from t4 where k1='duplicate two'")
-sql("select * from t4 where k1='duplicate three'")
-sql("delete from t4 where k0=1")
-sql("delete from t4 where k0=2")
-sql("delete from t4 where k0=3")
-sql("delete from t4 where k0=4")
-sql("delete from t4 where k0=5")
-sql("delete from t4 where k0=6")
-sql("delete from t4 where k0=7")
-sql("delete from t4 where k0=8")
-sql("delete from t4 where k0=9")
-sql("delete from t4 where k0=10")
-sql("delete from t4 where k0=11")
-sql("delete from t4 where k0=12")
-sql("delete from t4 where k0=13")
-sql("delete from t4 where k0=14")
-sql("delete from t4 where k0=15")
+sql("insert into t0 values (1, 'duplicate one')")
+sql("insert into t0 values (2, 'duplicate one')")
+sql("insert into t0 values (3, 'duplicate one')")
+sql("insert into t0 values (4, 'duplicate one')")
+sql("insert into t0 values (5, 'duplicate one')")
+sql("insert into t0 values (6, 'duplicate two')")
+sql("insert into t0 values (7, 'duplicate two')")
+sql("insert into t0 values (8, 'duplicate two')")
+sql("insert into t0 values (9, 'duplicate two')")
+sql("insert into t0 values (10, 'duplicate two')")
+sql("insert into t0 values (11, 'duplicate three')")
+sql("insert into t0 values (12, 'duplicate three')")
+sql("insert into t0 values (13, 'duplicate three')")
+sql("insert into t0 values (14, 'duplicate three')")
+sql("insert into t0 values (15, 'duplicate three')")
+sql("select * from t0 where k1='duplicate one'")
+sql("select * from t0 where k1='duplicate two'")
+sql("select * from t0 where k1='duplicate three'")
+sql("delete from t0 where k0=1")
+sql("delete from t0 where k0=2")
+sql("delete from t0 where k0=3")
+sql("delete from t0 where k0=4")
+sql("delete from t0 where k0=5")
+sql("delete from t0 where k0=6")
+sql("delete from t0 where k0=7")
+sql("delete from t0 where k0=8")
+sql("delete from t0 where k0=9")
+sql("delete from t0 where k0=10")
+sql("delete from t0 where k0=11")
+sql("delete from t0 where k0=12")
+sql("delete from t0 where k0=13")
+sql("delete from t0 where k0=14")
+sql("delete from t0 where k0=15")
 #
 # Check min() and max() functions
 #
-sql("insert into t4 values(1, 'Aardvark ')")
-sql("insert into t4 values(2, 'Bilimbi')")
-sql("insert into t4 values(3, 'Creature ')")
-admin("for k, v in box.space[4]:pairs() do print(v) end")
-admin("box.space[4].index[0].idx:min()")
-admin("box.space[4].index[0].idx:max()")
-admin("box.space[4].index[1].idx:min()")
-admin("box.space[4].index[1].idx:max()")
-sql("delete from t4 where k0=1")
-sql("delete from t4 where k0=2")
-sql("delete from t4 where k0=3")
+sql("insert into t0 values(1, 'Aardvark ')")
+sql("insert into t0 values(2, 'Bilimbi')")
+sql("insert into t0 values(3, 'Creature ')")
+admin("{ box.space[0]:select(1) }")
+admin("box.space[0].index[0].idx:min()")
+admin("box.space[0].index[0].idx:max()")
+admin("box.space[0].index[1].idx:min()")
+admin("box.space[0].index[1].idx:max()")
+sql("delete from t0 where k0=1")
+sql("delete from t0 where k0=2")
+sql("delete from t0 where k0=3")
+admin("box.space[0]:drop()")
 
 sql.sort = False
 # vim: syntax=python
diff --git a/test/big/tarantool.cfg b/test/big/tarantool.cfg
index 58def14511..5d669baffa 100644
--- a/test/big/tarantool.cfg
+++ b/test/big/tarantool.cfg
@@ -9,388 +9,3 @@ secondary_port = 33014
 admin_port = 33015
 
 rows_per_wal = 50
-
-space[0].enabled = 1
-space[0].index[0].type = "HASH"
-space[0].index[0].unique = 1
-space[0].index[0].key_field[0].fieldno = 0
-space[0].index[0].key_field[0].type = "STR"
-space[0].index[1].type = "TREE"
-space[0].index[1].unique = 0
-space[0].index[1].key_field[0].fieldno = 1
-space[0].index[1].key_field[0].type = "STR"
-
-space[1].enabled = 1
-space[1].index[0].type = "HASH"
-space[1].index[0].unique = 1
-space[1].index[0].key_field[0].fieldno = 0
-space[1].index[0].key_field[0].type = "STR"
-space[1].index[1].type = "TREE"
-space[1].index[1].unique = 1
-space[1].index[1].key_field[0].fieldno = 1
-space[1].index[1].key_field[0].type = "STR"
-space[1].index[1].key_field[1].fieldno = 2
-space[1].index[1].key_field[1].type = "STR"
-
-space[2].enabled = 1
-space[2].index[0].type = "TREE"
-space[2].index[0].unique = 1
-space[2].index[0].key_field[0].fieldno = 0
-space[2].index[0].key_field[0].type = "NUM"
-
-space[3].enabled = 1
-space[3].index[0].type = "TREE"
-space[3].index[0].unique = 1
-space[3].index[0].key_field[0].fieldno = 0
-space[3].index[0].key_field[0].type = "STR"
-
-space[4].enabled = 1
-space[4].index[0].type = "HASH"
-space[4].index[0].unique = 1
-space[4].index[0].key_field[0].fieldno = 0
-space[4].index[0].key_field[0].type = "STR"
-space[4].index[1].type = "TREE"
-space[4].index[1].unique = 0
-space[4].index[1].key_field[0].fieldno = 1
-space[4].index[1].key_field[0].type = "STR"
-
-space[5].enabled = 1
-space[5].index[0].type = "TREE"
-space[5].index[0].unique = 1
-space[5].index[0].key_field[0].fieldno = 0
-space[5].index[0].key_field[0].type = "NUM64"
-space[5].index[1].type = "TREE"
-space[5].index[1].unique = 0
-space[5].index[1].key_field[0].fieldno = 1
-space[5].index[1].key_field[0].type = "STR"
-space[5].index[1].key_field[1].fieldno = 2
-space[5].index[1].key_field[1].type = "STR"
-
-
-#
-# Tree index variants
-#
-#  Tuple fields:
-#
-#  0: NUM, 1: NUM64, 2: NUM64, 3: STR, 4: STR, 5: STR, 6: STR, 7: *, 8: NUM
-#
-
-space[6].enabled = 1
-
-space[6].index[0].type = "TREE"
-space[6].index[0].unique = 1
-space[6].index[0].key_field[0].fieldno = 0
-space[6].index[0].key_field[0].type = "NUM"
-
-space[6].index[1].type = "TREE"
-space[6].index[1].unique = 1
-space[6].index[1].key_field[0].fieldno = 1
-space[6].index[1].key_field[0].type = "NUM64"
-
-space[6].index[2].type = "TREE"
-space[6].index[2].unique = 0
-space[6].index[2].key_field[0].fieldno = 2
-space[6].index[2].key_field[0].type = "NUM64"
-
-space[6].index[3].type = "TREE"
-space[6].index[3].unique = 0
-space[6].index[3].key_field[0].fieldno = 3
-space[6].index[3].key_field[0].type = "STR"
-space[6].index[3].key_field[1].fieldno = 4
-space[6].index[3].key_field[1].type = "STR"
-
-space[6].index[4].type = "TREE"
-space[6].index[4].unique = 0
-space[6].index[4].key_field[0].fieldno = 6
-space[6].index[4].key_field[0].type = "STR"
-space[6].index[4].key_field[1].fieldno = 5
-space[6].index[4].key_field[1].type = "STR"
-
-space[6].index[5].type = "TREE"
-space[6].index[5].unique = 0
-space[6].index[5].key_field[0].fieldno = 8
-space[6].index[5].key_field[0].type = "NUM"
-
-space[6].index[6].type = "TREE"
-space[6].index[6].unique = 1
-space[6].index[6].key_field[0].fieldno = 6
-space[6].index[6].key_field[0].type = "STR"
-space[6].index[6].key_field[1].fieldno = 5
-space[6].index[6].key_field[1].type = "STR"
-space[6].index[6].key_field[2].fieldno = 3
-space[6].index[6].key_field[2].type = "STR"
-space[6].index[6].key_field[3].fieldno = 4
-space[6].index[6].key_field[3].type = "STR"
-space[6].index[6].key_field[4].fieldno = 8
-space[6].index[6].key_field[4].type = "NUM"
-
-# Space #7, https://bugs.launchpad.net/tarantool/+bug/929654
-space[7].enabled = true
-
-space[7].index[0].type = "HASH"
-space[7].index[0].unique = true
-space[7].index[0].key_field[0].fieldno = 0
-space[7].index[0].key_field[0].type = "NUM"
-
-space[7].index[1].type = "HASH"
-space[7].index[1].unique = true
-space[7].index[1].key_field[0].fieldno = 1
-space[7].index[1].key_field[0].type = "STR"
-
-# Lua 64bit numbers
-space[8].enabled = true
-space[8].index[0].type = "TREE"
-space[8].index[0].unique = 1
-space[8].index[0].key_field[0].fieldno = 0
-space[8].index[0].key_field[0].type = "NUM64"
-
-
-space[9].enabled = true
-# Multipart primary key (sender nickname, receiver nickname, message id)
-space[9].index[0].type = "TREE"
-space[9].index[0].unique = 1
-# Sender user nickname
-space[9].index[0].key_field[0].fieldno = 0
-space[9].index[0].key_field[0].type = "STR"
-# Receiver user nickname
-space[9].index[0].key_field[1].fieldno = 1
-space[9].index[0].key_field[1].type = "STR"
-# Message id
-space[9].index[0].key_field[2].fieldno = 2
-space[9].index[0].key_field[2].type = "NUM"
-
-# First space for hash_i32 tests
-space[10].enabled = 1
-space[10].index[0].type = "HASH"
-space[10].index[0].unique = 1
-space[10].index[0].key_field[0].fieldno = 0
-space[10].index[0].key_field[0].type = "NUM"
-
-# Second space for hash_i64 tests
-space[11].enabled = 1
-space[11].index[0].type = "HASH"
-space[11].index[0].unique = 1
-space[11].index[0].key_field[0].fieldno = 0
-space[11].index[0].key_field[0].type = "NUM64"
-
-# First space for hash_str tests
-space[12].enabled = 1
-space[12].index[0].type = "HASH"
-space[12].index[0].unique = 1
-space[12].index[0].key_field[0].fieldno = 0
-space[12].index[0].key_field[0].type = "STR"
-
-# lua select_reverse_range() testing
-# https://blueprints.launchpad.net/tarantool/+spec/backward-tree-index-iterator
-space[14].enabled = true
-space[14].index[0].type = "TREE"
-space[14].index[0].unique = 1
-space[14].index[0].key_field[0].fieldno = 0
-space[14].index[0].key_field[0].type = "NUM"
-space[14].index[1].type = "TREE"
-space[14].index[1].unique = 1
-space[14].index[1].key_field[0].fieldno = 1
-space[14].index[1].key_field[0].type = "NUM"
-space[14].index[1].key_field[1].fieldno = 0
-space[14].index[1].key_field[1].type = "NUM"
-
-space[15].enabled = true
-space[15].index[0].type = "TREE"
-space[15].index[0].unique = true
-space[15].index[0].key_field[0].fieldno = 0
-space[15].index[0].key_field[0].type = "STR"
-
-# Tests for box.index iterators (old)
-space[16].enabled = true
-space[16].index[0].type = "TREE"
-space[16].index[0].unique = 1
-space[16].index[0].key_field[0].fieldno = 0
-space[16].index[0].key_field[0].type = "STR"
-space[16].index[1].type = "TREE"
-space[16].index[1].unique = 1
-space[16].index[1].key_field[0].fieldno = 1
-space[16].index[1].key_field[0].type = "STR"
-space[16].index[1].key_field[1].fieldno = 2
-space[16].index[1].key_field[1].type = "STR"
-
-# lua index.idx:count() testing
-# https://blueprints.launchpad.net/tarantool/+spec/lua-builtin-size-of-subtree
-space[17].enabled = true
-space[17].index[0].type = "HASH"
-space[17].index[0].unique = 1
-space[17].index[0].key_field[0].fieldno = 0
-space[17].index[0].key_field[0].type = "NUM"
-space[17].index[1].type = "TREE"
-space[17].index[1].unique = 0
-space[17].index[1].key_field[0].fieldno = 1
-space[17].index[1].key_field[0].type = "NUM"
-space[17].index[1].key_field[1].fieldno = 2
-space[17].index[1].key_field[1].type = "NUM"
-
-# lua box.auto_increment() testing
-# http://bugs.launchpad.net/tarantool/+bug/1006354
-space[18].enabled = 1
-space[18].index[0].type = "TREE"
-space[18].index[0].unique = 1
-space[18].index[0].key_field[0].fieldno = 0
-space[18].index[0].key_field[0].type = "NUM"
-
-# Space #19, https://bugs.launchpad.net/tarantool/+bug/1082356
-space[19].enabled = 1
-space[19].index[0].type = "TREE"
-space[19].index[0].unique = 1
-space[19].index[0].key_field[0].fieldno = 0
-space[19].index[0].key_field[0].type = "NUM"
-space[19].index[0].key_field[1].fieldno = 2
-space[19].index[0].key_field[1].type = "NUM"
-
-#
-# Tests for box.index iterators (new)
-#
-
-# Tree single-part unique
-space[20].enabled = true
-space[20].index[0].type = "TREE"
-space[20].index[0].unique = 1
-space[20].index[0].key_field[0].fieldno = 0
-space[20].index[0].key_field[0].type = "STR"
-
-# Tree single-part non-unique
-space[20].index[1].type = "TREE"
-space[20].index[1].unique = 0
-space[20].index[1].key_field[0].fieldno = 1
-space[20].index[1].key_field[0].type = "STR"
-
-# Tree multi-part unique
-space[20].index[2].type = "TREE"
-space[20].index[2].unique = 1
-space[20].index[2].key_field[0].fieldno = 1
-space[20].index[2].key_field[0].type = "STR"
-space[20].index[2].key_field[1].fieldno = 2
-space[20].index[2].key_field[1].type = "STR"
-
-# Tree multi-part non-unique
-space[20].index[3].type = "TREE"
-space[20].index[3].unique = 0
-space[20].index[3].key_field[0].fieldno = 2
-space[20].index[3].key_field[0].type = "STR"
-space[20].index[3].key_field[1].fieldno = 3
-space[20].index[3].key_field[1].type = "STR"
-
-# Hash single-part unique
-space[20].index[4].type = "HASH"
-space[20].index[4].unique = 1
-space[20].index[4].key_field[0].fieldno = 0
-space[20].index[4].key_field[0].type = "STR"
-
-# Hash multi-part unique
-space[20].index[5].type = "HASH"
-space[20].index[5].unique = 1
-space[20].index[5].key_field[0].fieldno = 1
-space[20].index[5].key_field[0].type = "STR"
-space[20].index[5].key_field[1].fieldno = 2
-space[20].index[5].key_field[1].type = "STR"
-
-# hash::replace
-space[21].enabled = true
-
-space[21].index[0].type = "HASH"
-space[21].index[0].unique = true
-space[21].index[0].key_field[0].fieldno = 0
-space[21].index[0].key_field[0].type = "NUM"
-
-space[21].index[1].type = "HASH"
-space[21].index[1].unique = true
-space[21].index[1].key_field[0].fieldno = 1
-space[21].index[1].key_field[0].type = "NUM"
-
-space[21].index[2].type = "HASH"
-space[21].index[2].unique = true
-space[21].index[2].key_field[0].fieldno = 2
-space[21].index[2].key_field[0].type = "NUM"
-
-space[21].index[3].type = "HASH"
-space[21].index[3].unique = true
-space[21].index[3].key_field[0].fieldno = 3
-space[21].index[3].key_field[0].type = "NUM"
-
-# tree::replace test
-space[22].enabled = true
-
-space[22].index[0].type = "TREE"
-space[22].index[0].unique = true
-space[22].index[0].key_field[0].fieldno = 0
-space[22].index[0].key_field[0].type = "NUM"
-
-space[22].index[1].type = "TREE"
-space[22].index[1].unique = true
-space[22].index[1].key_field[0].fieldno = 1
-space[22].index[1].key_field[0].type = "NUM"
-
-space[22].index[2].type = "TREE"
-space[22].index[2].unique = false
-space[22].index[2].key_field[0].fieldno = 2
-space[22].index[2].key_field[0].type = "NUM"
-
-space[22].index[3].type = "TREE"
-space[22].index[3].unique = true
-space[22].index[3].key_field[0].fieldno = 3
-space[22].index[3].key_field[0].type = "NUM"
-
-# Space #23, https://bugs.launchpad.net/tarantool/+bug/1042798
-space[23].enabled = 1
-space[23].index[0].type = "TREE"
-space[23].index[0].unique = 1
-space[23].index[0].key_field[0].fieldno = 2
-space[23].index[0].key_field[0].type = "NUM"
-space[23].index[0].key_field[1].fieldno = 1
-space[23].index[0].key_field[1].type = "NUM"
-
-# bitset::replace test
-space[24].enabled = true
-space[24].index[0].type = "HASH"
-space[24].index[0].unique = true
-space[24].index[0].key_field[0].fieldno = 0
-space[24].index[0].key_field[0].type = "NUM"
-
-space[24].index[1].type = "BITSET"
-space[24].index[1].unique = false
-space[24].index[1].key_field[0].fieldno = 1
-space[24].index[1].key_field[0].type = "NUM"
-
-# lua box.auto_increment() with NUM64 keys testing
-space[25].enabled = 1
-space[25].index[0].type = "TREE"
-space[25].index[0].unique = 1
-space[25].index[0].key_field[0].fieldno = 0
-space[25].index[0].key_field[0].type = "NUM64"
-# index:random test
-space[26].enabled = true
-space[26].index[0].type = "TREE"
-space[26].index[0].unique = true
-space[26].index[0].key_field[0].fieldno = 0
-space[26].index[0].key_field[0].type = "NUM"
-
-space[26].index[1].type = "HASH"
-space[26].index[1].unique = true
-space[26].index[1].key_field[0].fieldno = 0
-space[26].index[1].key_field[0].type = "NUM"
-
-# Multi-part hash
-space[27].enabled = 1
-
-space[27].index[0].type = HASH
-space[27].index[0].unique = 1
-space[27].index[0].key_field[0].fieldno = 0
-space[27].index[0].key_field[0].type = NUM
-space[27].index[0].key_field[1].fieldno = 1
-space[27].index[0].key_field[1].type = STR
-space[27].index[0].key_field[2].fieldno = 2
-space[27].index[0].key_field[2].type = NUM
-
-space[27].index[1].type = HASH
-space[27].index[1].unique = 1
-space[27].index[1].key_field[0].fieldno = 2
-space[27].index[1].key_field[0].type = NUM
-space[27].index[1].key_field[1].fieldno = 4
-space[27].index[1].key_field[1].type = NUM
-- 
GitLab