Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
@ 2020-03-18 10:37 Alexander V. Tikhonov
  2020-03-18 12:06 ` Oleg Piskunov
  2020-04-15 15:26 ` Kirill Yukhin
  0 siblings, 2 replies; 6+ messages in thread
From: Alexander V. Tikhonov @ 2020-03-18 10:37 UTC (permalink / raw)
  To: Sergey Bronnikov; +Cc: Oleg Piskunov, tarantool-patches

Divided into tests:
- box/ddl_alter.test.lua
- box/ddl_collation.test.lua
- box/ddl_collation_types.test.lua
- box/ddl_collation_wrong_id.test.lua
- box/ddl_no_collation.test.lua
- box/ddl_parallel.test.lua
- box/ddl_tuple.test.lua
- box/gh-2336-ddl_call_twice.test.lua
- box/gh-2783-ddl_lock.test.lua
- box/gh-2839-ddl_custom_fields.test.lua
- box/gh-2937-ddl_collation_field_def.test.lua
- box/gh-3290-ddl_collation_deleted.test.lua
- box/gh-928-ddl_truncate.test.lua
---

Github: https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests

 test/box/ddl.result                           | 1210 -----------------
 test/box/ddl.test.lua                         |  272 ----
 test/box/ddl_alter.result                     |   30 +
 test/box/ddl_alter.test.lua                   |    9 +
 test/box/ddl_collation.result                 |  853 ++++++++++++
 test/box/ddl_collation.test.lua               |   90 ++
 test/box/ddl_collation_types.result           |   21 +
 test/box/ddl_collation_types.test.lua         |    6 +
 test/box/ddl_collation_wrong_id.result        |   21 +
 test/box/ddl_collation_wrong_id.test.lua      |    7 +
 test/box/ddl_no_collation.result              |   12 +
 test/box/ddl_no_collation.test.lua            |    4 +
 test/box/ddl_parallel.result                  |   61 +
 test/box/ddl_parallel.test.lua                |   30 +
 test/box/ddl_tuple.result                     |   67 +
 test/box/ddl_tuple.test.lua                   |   28 +
 test/box/gh-2336-ddl_call_twice.result        |   44 +
 test/box/gh-2336-ddl_call_twice.test.lua      |   16 +
 test/box/gh-2783-ddl_lock.result              |   62 +
 test/box/gh-2783-ddl_lock.test.lua            |   33 +
 test/box/gh-2839-ddl_custom_fields.result     |   26 +
 test/box/gh-2839-ddl_custom_fields.test.lua   |   10 +
 .../gh-2937-ddl_collation_field_def.result    |   27 +
 .../gh-2937-ddl_collation_field_def.test.lua  |   10 +
 test/box/gh-3290-ddl_collation_deleted.result |   16 +
 .../gh-3290-ddl_collation_deleted.test.lua    |    7 +
 test/box/gh-928-ddl_truncate.result           |   35 +
 test/box/gh-928-ddl_truncate.test.lua         |   14 +
 28 files changed, 1539 insertions(+), 1482 deletions(-)
 delete mode 100644 test/box/ddl.result
 delete mode 100644 test/box/ddl.test.lua
 create mode 100644 test/box/ddl_alter.result
 create mode 100644 test/box/ddl_alter.test.lua
 create mode 100644 test/box/ddl_collation.result
 create mode 100644 test/box/ddl_collation.test.lua
 create mode 100644 test/box/ddl_collation_types.result
 create mode 100644 test/box/ddl_collation_types.test.lua
 create mode 100644 test/box/ddl_collation_wrong_id.result
 create mode 100644 test/box/ddl_collation_wrong_id.test.lua
 create mode 100644 test/box/ddl_no_collation.result
 create mode 100644 test/box/ddl_no_collation.test.lua
 create mode 100644 test/box/ddl_parallel.result
 create mode 100644 test/box/ddl_parallel.test.lua
 create mode 100644 test/box/ddl_tuple.result
 create mode 100644 test/box/ddl_tuple.test.lua
 create mode 100644 test/box/gh-2336-ddl_call_twice.result
 create mode 100644 test/box/gh-2336-ddl_call_twice.test.lua
 create mode 100644 test/box/gh-2783-ddl_lock.result
 create mode 100644 test/box/gh-2783-ddl_lock.test.lua
 create mode 100644 test/box/gh-2839-ddl_custom_fields.result
 create mode 100644 test/box/gh-2839-ddl_custom_fields.test.lua
 create mode 100644 test/box/gh-2937-ddl_collation_field_def.result
 create mode 100644 test/box/gh-2937-ddl_collation_field_def.test.lua
 create mode 100644 test/box/gh-3290-ddl_collation_deleted.result
 create mode 100644 test/box/gh-3290-ddl_collation_deleted.test.lua
 create mode 100644 test/box/gh-928-ddl_truncate.result
 create mode 100644 test/box/gh-928-ddl_truncate.test.lua

diff --git a/test/box/ddl.result b/test/box/ddl.result
deleted file mode 100644
index b995b1493..000000000
--- a/test/box/ddl.result
+++ /dev/null
@@ -1,1210 +0,0 @@
-env = require('test_run')
----
-...
-test_run = env.new()
----
-...
-fiber = require'fiber'
----
-...
--- simple test for parallel ddl execution
-_ = box.schema.space.create('test'):create_index('pk')
----
-...
-ch = fiber.channel(2)
----
-...
-test_run:cmd("setopt delimiter ';'")
----
-- true
-...
-function f1()
-    box.space.test:create_index('sec', {parts = {2, 'num'}})
-    ch:put(true)
-end;
----
-...
-function f2()
-    box.space.test:create_index('third', {parts = {3, 'string'}})
-    ch:put(true)
-end;
----
-...
-test_run:cmd("setopt delimiter ''");
----
-- true
-...
-_ = {fiber.create(f1), fiber.create(f2)}
----
-...
-ch:get()
----
-- true
-...
-ch:get()
----
-- true
-...
-_ = box.space.test:drop()
----
-...
-test_run:cmd('restart server default')
-env = require('test_run')
----
-...
-test_run = env.new()
----
-...
-fiber = require'fiber'
----
-...
-ch = fiber.channel(2)
----
-...
---issue #928
-space = box.schema.space.create('test_trunc')
----
-...
-_ = space:create_index('pk')
----
-...
-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
----
-...
-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
----
-...
-function test_trunc() space:truncate() ch:put(true) end
----
-...
-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
----
-...
-_ = {ch:get(), ch:get()}
----
-...
-space:drop()
----
-...
--- index should not crash after alter
-space = box.schema.space.create('test_swap')
----
-...
-index = space:create_index('pk')
----
-...
-space:replace({1, 2, 3})
----
-- [1, 2, 3]
-...
-index:rename('primary')
----
-...
-index2 = space:create_index('sec')
----
-...
-space:replace({2, 3, 1})
----
-- [2, 3, 1]
-...
-space:select()
----
-- - [1, 2, 3]
-  - [2, 3, 1]
-...
-space:drop()
----
-...
-ch = fiber.channel(3)
----
-...
-_ = box.schema.space.create('test'):create_index('pk')
----
-...
-test_run:cmd("setopt delimiter ';'")
----
-- true
-...
-function add_index()
-    box.space.test:create_index('sec', {parts = {2, 'num'}})
-    ch:put(true)
-end;
----
-...
-function insert_tuple(tuple)
-    ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
-end;
----
-...
-test_run:cmd("setopt delimiter ''");
----
-- true
-...
-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
----
-...
-{ch:get(), ch:get(), ch:get()}
----
-- - - false
-    - 'Tuple field 2 type does not match one required by operation: expected unsigned'
-  - - true
-    - [1, 2, 'a']
-  - true
-...
-box.space.test:select()
----
-- - [1, 2, 'a']
-...
-test_run:cmd('restart server default')
-box.space.test:select()
----
-- - [1, 2, 'a']
-...
-box.space.test:drop()
----
-...
--- gh-2336 crash if format called twice during snapshot
-fiber = require'fiber'
----
-...
-space = box.schema.space.create('test_format')
----
-...
-_ = space:create_index('pk', { parts = { 1,'str' }})
----
-...
-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
----
-...
-str = string.rep("t",1024)
----
-...
-for i = 1, 10000 do space:insert{tostring(i), str} end
----
-...
-ch = fiber.channel(3)
----
-...
-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
----
-...
-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
----
-...
-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
----
-...
-{ch:get(), ch:get(), ch:get()}
----
-- - true
-  - true
-  - true
-...
-space:drop()
----
-...
--- collation
-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
----
-...
-box.internal.collation.create('test')
----
-- error: Illegal parameters, type (second arg) must be a string
-...
-box.internal.collation.create('test', 'ICU')
----
-- error: Illegal parameters, locale (third arg) must be a string
-...
-box.internal.collation.create(42, 'ICU', 'ru_RU')
----
-- error: Illegal parameters, name (first arg) must be a string
-...
-box.internal.collation.create('test', 42, 'ru_RU')
----
-- error: Illegal parameters, type (second arg) must be a string
-...
-box.internal.collation.create('test', 'ICU', 42)
----
-- error: Illegal parameters, locale (third arg) must be a string
-...
-box.internal.collation.create('test', 'nothing', 'ru_RU')
----
-- error: 'Failed to initialize collation: unknown collation type.'
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
----
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU')
----
-- error: Duplicate key exists in unique index 'name' in space '_collation'
-...
-box.internal.collation.drop('test')
----
-...
-box.internal.collation.drop('nothing') -- allowed
----
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
----
-- error: Illegal parameters, options (fourth arg) must be a table or nil
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
----
-- error: Illegal parameters, options (fourth arg) must be a table or nil
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
----
-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
----
-- error: 'Failed to initialize collation: ICU wrong french_collation option setting,
-    expected ON | OFF.'
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
----
-...
-box.internal.collation.drop('test') --ok
----
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
----
-- error: 'Failed to initialize collation: ICU wrong strength option setting, expected
-    PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
----
-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
----
-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
-...
-box.internal.collation.drop('test') --ok
----
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
----
-...
-box.internal.collation.drop('test') --ok
----
-...
-c = box.space._collation:get{1}:totable()
----
-...
-c[2] = 'unicode_test'
----
-...
-box.space._collation:replace(c)
----
-- error: collation does not support alter
-...
-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
----
-...
-box.internal.collation.create('test', 'ICU', 'ru_RU')
----
-...
-box.internal.collation.exists('test')
----
-- true
-...
-test_run:cmd('restart server default')
-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
----
-...
-box.internal.collation.exists('test')
----
-- true
-...
-box.internal.collation.drop('test')
----
-...
-box.space._collation:auto_increment{'test'}
----
-- error: Tuple field 3 required by space format is missing
-...
-box.space._collation:auto_increment{'test', 0, 'ICU'}
----
-- error: Tuple field 5 required by space format is missing
-...
-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
----
-- error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
-...
-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
----
-- error: 'Tuple field 2 type does not match one required by operation: expected string'
-...
-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
----
-- error: 'Tuple field 4 type does not match one required by operation: expected string'
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
----
-- error: 'Tuple field 5 type does not match one required by operation: expected string'
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
----
-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
----
-- error: Duplicate key exists in unique index 'name' in space '_collation'
-...
-box.space._collation.index.name:delete{'test'} -- ok
----
-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
-box.space._collation.index.name:delete{'nothing'} -- allowed
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
----
-- error: 'Tuple field 6 type does not match one required by operation: expected map'
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
----
-- error: 'Tuple field 6 type does not match one required by operation: expected map'
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
----
-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
-...
-opts = {normalization_mode='NORMAL'}
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
-    expected ON | OFF.'
-...
-opts.normalization_mode = 'OFF'
----
-...
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
----
-...
-_ = box.space._collation.index.name:delete{'test'} -- ok
----
-...
-opts.numeric_collation = 'PERL'
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
-    expected ON | OFF.'
-...
-opts.numeric_collation = 'ON'
----
-...
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
----
-...
-_ = box.space._collation.index.name:delete{'test'} -- ok
----
-...
-opts.alternate_handling1 = 'ON'
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
-...
-opts.alternate_handling1 = nil
----
-...
-opts.alternate_handling = 'ON'
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
-    expected NON_IGNORABLE | SHIFTED.'
-...
-opts.alternate_handling = 'SHIFTED'
----
-...
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
----
-...
-_ = box.space._collation.index.name:delete{'test'} -- ok
----
-...
-opts.case_first = 'ON'
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
-    OFF | UPPER_FIRST | LOWER_FIRST.'
-...
-opts.case_first = 'OFF'
----
-...
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
----
-...
-_ = box.space._collation.index.name:delete{'test'} -- ok
----
-...
-opts.case_level = 'UPPER'
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
----
-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
-    ON | OFF.'
-...
-opts.case_level = 'DEFAULT'
----
-...
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
----
-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
-    ON | OFF.'
-...
-_ = box.space._collation.index.name:delete{'test'} -- ok
----
-...
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
----
-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
-box.space._collation:select{}
----
-- - [0, 'none', 1, 'BINARY', '', {}]
-  - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
-  - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
-  - [3, 'binary', 1, 'BINARY', '', {}]
-  - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
-  - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
-  - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
-  - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
-  - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
-  - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
-  - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
-  - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
-  - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
-  - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
-  - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
-  - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
-  - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
-  - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
-  - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
-  - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
-  - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
-  - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
-  - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
-  - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
-  - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
-  - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
-  - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
-  - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
-  - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
-  - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
-  - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
-  - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
-  - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
-  - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
-  - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
-  - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
-  - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
-  - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
-  - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
-  - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
-  - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
-  - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
-  - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
-  - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
-  - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
-  - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
-  - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
-  - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
-  - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
-  - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
-  - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
-  - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
-  - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
-  - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
-  - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
-  - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
-  - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
-  - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
-  - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
-  - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
-  - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
-  - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
-  - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
-  - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
-  - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
-  - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
-  - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
-  - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
-  - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
-  - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
-  - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
-  - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
-  - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
-  - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
-  - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
-  - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
-  - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
-  - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
-  - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
-  - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
-  - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
-  - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
-  - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
-  - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
-  - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
-  - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
-  - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
-  - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
-  - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
-  - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
-  - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
-  - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
-  - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
-  - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
-  - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
-  - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
-  - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
-  - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
-  - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
-  - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
-  - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
-  - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
-  - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
-  - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
-  - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
-  - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
-  - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
-  - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
-  - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
-  - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
-  - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
-  - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
-  - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
-  - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
-  - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
-  - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
-  - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
-  - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
-  - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
-  - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
-  - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
-  - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
-  - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
-  - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
-  - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
-  - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
-  - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
-  - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
-  - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
-  - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
-  - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
-  - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
-  - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
-  - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
-  - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
-  - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
-  - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
-  - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
-  - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
-  - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
-  - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
-  - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
-  - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
-  - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
-  - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
-  - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
-  - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
-  - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
-  - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
-  - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
-  - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
-  - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
-  - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
-  - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
-  - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
-  - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
-  - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
-  - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
-  - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
-  - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
-  - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
-  - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
-  - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
-  - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
-  - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
-  - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
-  - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
-  - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
-  - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
-  - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
-  - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
-  - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
-  - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
-  - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
-  - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
-  - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
-  - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
-  - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
-  - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
-  - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
-  - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
-  - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
-  - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
-  - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
-  - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
-  - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
-  - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
-  - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
-  - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
-  - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
-  - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
-  - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
-  - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
-  - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
-  - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
-  - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
-  - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
-  - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
-  - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
-  - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
-  - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
-  - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
-  - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
-  - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
-  - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
-  - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
-  - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
-  - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
-  - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
-  - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
-  - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
-  - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
-  - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
-  - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
-  - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
-  - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
-  - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
-  - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
-  - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
-  - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
-  - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
-  - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
-  - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
-  - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
-  - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
-  - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
-  - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
-  - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
-  - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
-  - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
-  - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
-  - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
-  - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
-  - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
-  - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
-  - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
-  - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
-  - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
-  - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
-  - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
-  - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
-  - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
-  - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
-  - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
-  - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
-  - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
-  - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
-  - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
-  - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
-  - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
-  - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
-  - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
-  - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
-  - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
-  - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
-  - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
-  - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
-  - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
-  - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
-  - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
-  - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
-  - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
-  - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
-  - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
-  - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
-  - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
-  - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
-  - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
-  - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
-  - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
-  - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
-  - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
-  - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
-  - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
-  - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
-  - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
-  - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
-  - [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
-test_run:cmd('restart server default')
-box.space._collation:select{}
----
-- - [0, 'none', 1, 'BINARY', '', {}]
-  - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
-  - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
-  - [3, 'binary', 1, 'BINARY', '', {}]
-  - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
-  - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
-  - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
-  - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
-  - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
-  - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
-  - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
-  - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
-  - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
-  - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
-  - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
-  - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
-  - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
-  - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
-  - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
-  - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
-  - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
-  - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
-  - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
-  - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
-  - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
-  - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
-  - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
-  - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
-  - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
-  - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
-  - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
-  - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
-  - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
-  - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
-  - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
-  - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
-  - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
-  - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
-  - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
-  - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
-  - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
-  - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
-  - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
-  - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
-  - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
-  - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
-  - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
-  - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
-  - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
-  - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
-  - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
-  - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
-  - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
-  - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
-  - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
-  - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
-  - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
-  - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
-  - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
-  - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
-  - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
-  - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
-  - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
-  - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
-  - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
-  - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
-  - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
-  - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
-  - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
-  - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
-  - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
-  - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
-  - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
-  - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
-  - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
-  - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
-  - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
-  - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
-  - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
-  - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
-  - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
-  - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
-  - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
-  - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
-  - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
-  - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
-  - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
-  - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
-  - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
-  - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
-  - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
-  - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
-  - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
-  - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
-  - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
-  - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
-  - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
-  - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
-  - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
-  - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
-  - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
-  - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
-  - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
-  - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
-  - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
-  - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
-  - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
-  - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
-  - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
-  - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
-  - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
-  - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
-  - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
-  - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
-  - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
-  - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
-  - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
-  - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
-  - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
-  - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
-  - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
-  - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
-  - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
-  - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
-  - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
-  - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
-  - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
-  - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
-  - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
-  - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
-  - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
-  - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
-  - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
-  - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
-  - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
-  - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
-  - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
-  - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
-  - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
-  - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
-  - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
-  - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
-  - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
-  - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
-  - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
-  - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
-  - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
-  - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
-  - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
-  - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
-  - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
-  - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
-  - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
-  - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
-  - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
-  - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
-  - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
-  - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
-  - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
-  - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
-  - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
-  - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
-  - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
-  - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
-  - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
-  - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
-  - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
-  - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
-  - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
-  - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
-  - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
-  - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
-  - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
-  - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
-  - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
-  - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
-  - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
-  - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
-  - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
-  - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
-  - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
-  - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
-  - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
-  - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
-  - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
-  - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
-  - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
-  - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
-  - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
-  - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
-  - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
-  - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
-  - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
-  - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
-  - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
-  - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
-  - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
-  - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
-  - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
-  - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
-  - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
-  - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
-  - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
-  - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
-  - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
-  - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
-  - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
-  - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
-  - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
-  - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
-  - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
-  - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
-  - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
-  - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
-  - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
-  - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
-  - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
-  - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
-  - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
-  - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
-  - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
-  - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
-  - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
-  - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
-  - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
-  - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
-  - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
-  - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
-  - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
-  - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
-  - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
-  - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
-  - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
-  - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
-  - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
-  - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
-  - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
-  - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
-  - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
-  - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
-  - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
-  - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
-  - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
-  - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
-  - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
-  - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
-  - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
-  - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
-  - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
-  - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
-  - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
-  - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
-  - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
-  - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
-  - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
-  - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
-  - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
-  - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
-  - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
-  - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
-  - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
-  - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
-  - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
-  - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
-  - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
-  - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
-  - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
-  - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
-  - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
-  - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
-  - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
-  - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
-  - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
-  - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
-  - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
-  - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
-  - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
-  - [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
-box.space._collation.index.name:delete{'test'}
----
-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
-...
---
--- gh-3290: expose ICU into Lua. It uses built-in collations, that
--- must work even if a collation is deleted from _collation.
---
-t = box.space._collation:delete{1}
----
-...
-utf8.cmp('abc', 'def')
----
-- -1
-...
-box.space._collation:replace(t)
----
-- [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
-...
---
--- gh-2839: allow to store custom fields in field definition.
---
-format = {}
----
-...
-format[1] = {name = 'field1', type = 'unsigned'}
----
-...
-format[2] = {'field2', 'unsigned'}
----
-...
-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
----
-...
-s = box.schema.create_space('test', {format = format})
----
-...
-s:format()[3].custom_field
----
-- custom_value
-...
-s:drop()
----
-...
---
--- gh-2937: allow to specify collation in field definition.
---
-format = {}
----
-...
-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
----
-...
-format[2] = {'field2', 'any', collation = 'unicode_ci'}
----
-...
-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
----
-...
-s = box.schema.create_space('test', {format = format})
----
-...
-s:format()
----
-- [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
-    'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
-...
-s:drop()
----
-...
--- Check that collation is allowed only for stings, scalar and any types.
-format = {}
----
-...
-format[1] = {'field1', 'unsigned', collation = 'unicode'}
----
-...
-s = box.schema.create_space('test', {format = format})
----
-- error: 'Failed to create space ''test'': collation is reasonable only for string,
-    scalar and any fields'
-...
-format[1] = {'field2', 'array', collation = 'unicode_ci'}
----
-...
-s = box.schema.create_space('test', {format = format})
----
-- error: 'Failed to create space ''test'': collation is reasonable only for string,
-    scalar and any fields'
-...
--- Check that error is raised when collation doesn't exists.
-format = {}
----
-...
-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
----
-...
-s = box.schema.create_space('test', {format = format})
----
-- error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
-...
--- Check that error is raised when collation with wrong id is used.
-_space = box.space[box.schema.SPACE_ID]
----
-...
-utils = require('utils')
----
-...
-EMPTY_MAP = utils.setmap({})
----
-...
-format = {{name = 'field1', type = 'string', collation = 666}}
----
-...
-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
----
-...
-_space:insert(surrogate_space)
----
-- error: 'Wrong collation options (field 1): collation was not found by ID'
-...
---
--- gh-2783
--- A ddl operation shoud fail before trying to lock a ddl latch
--- in a multi-statement transaction.
--- If operation tries to lock already an locked latch then the
--- current transaction will be silently rolled back under our feet.
--- This is confusing. So check for multi-statement transaction
--- before locking the latch.
---
-test_latch = box.schema.space.create('test_latch')
----
-...
-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
----
-...
-fiber = require('fiber')
----
-...
-c = fiber.channel(1)
----
-...
-test_run:cmd("setopt delimiter ';'")
----
-- true
-...
-_ = fiber.create(function()
-    test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
-    c:put(true)
-end);
----
-...
--- Should be Ok for now
-box.begin()
-    test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
-box.commit();
----
-...
-test_run:cmd("setopt delimiter ''");
----
-- true
-...
--- Explicitly roll back the transaction in multi-statement,
--- which hasn't finished due to DDL error
-box.rollback()
----
-...
-_ = c:get()
----
-...
-test_latch:drop() -- this is where everything stops
----
-...
diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua
deleted file mode 100644
index 101bc6f9b..000000000
--- a/test/box/ddl.test.lua
+++ /dev/null
@@ -1,272 +0,0 @@
-env = require('test_run')
-test_run = env.new()
-
-fiber = require'fiber'
-
--- simple test for parallel ddl execution
-_ = box.schema.space.create('test'):create_index('pk')
-
-ch = fiber.channel(2)
-
-test_run:cmd("setopt delimiter ';'")
-
-function f1()
-    box.space.test:create_index('sec', {parts = {2, 'num'}})
-    ch:put(true)
-end;
-
-function f2()
-    box.space.test:create_index('third', {parts = {3, 'string'}})
-    ch:put(true)
-end;
-
-test_run:cmd("setopt delimiter ''");
-
-_ = {fiber.create(f1), fiber.create(f2)}
-
-ch:get()
-ch:get()
-
-_ = box.space.test:drop()
-
-test_run:cmd('restart server default')
-
-env = require('test_run')
-test_run = env.new()
-fiber = require'fiber'
-
-ch = fiber.channel(2)
-
---issue #928
-space = box.schema.space.create('test_trunc')
-_ = space:create_index('pk')
-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
-
-function test_trunc() space:truncate() ch:put(true) end
-
-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
-_ = {ch:get(), ch:get()}
-space:drop()
-
--- index should not crash after alter
-space = box.schema.space.create('test_swap')
-index = space:create_index('pk')
-space:replace({1, 2, 3})
-index:rename('primary')
-index2 = space:create_index('sec')
-space:replace({2, 3, 1})
-space:select()
-space:drop()
-
-
-ch = fiber.channel(3)
-
-_ = box.schema.space.create('test'):create_index('pk')
-
-test_run:cmd("setopt delimiter ';'")
-function add_index()
-    box.space.test:create_index('sec', {parts = {2, 'num'}})
-    ch:put(true)
-end;
-
-function insert_tuple(tuple)
-    ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
-end;
-test_run:cmd("setopt delimiter ''");
-
-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
-{ch:get(), ch:get(), ch:get()}
-
-box.space.test:select()
-
-test_run:cmd('restart server default')
-
-box.space.test:select()
-box.space.test:drop()
-
--- gh-2336 crash if format called twice during snapshot
-fiber = require'fiber'
-
-space = box.schema.space.create('test_format')
-_ = space:create_index('pk', { parts = { 1,'str' }})
-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
-str = string.rep("t",1024)
-for i = 1, 10000 do space:insert{tostring(i), str} end
-ch = fiber.channel(3)
-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
-
-{ch:get(), ch:get(), ch:get()}
-
-space:drop()
-
--- collation
-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
-
-box.internal.collation.create('test')
-box.internal.collation.create('test', 'ICU')
-box.internal.collation.create(42, 'ICU', 'ru_RU')
-box.internal.collation.create('test', 42, 'ru_RU')
-box.internal.collation.create('test', 'ICU', 42)
-box.internal.collation.create('test', 'nothing', 'ru_RU')
-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
-box.internal.collation.create('test', 'ICU', 'ru_RU')
-box.internal.collation.drop('test')
-box.internal.collation.drop('nothing') -- allowed
-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
-box.internal.collation.drop('test') --ok
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
-box.internal.collation.drop('test') --ok
-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
-box.internal.collation.drop('test') --ok
-c = box.space._collation:get{1}:totable()
-c[2] = 'unicode_test'
-box.space._collation:replace(c)
-
-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
-
-box.internal.collation.create('test', 'ICU', 'ru_RU')
-box.internal.collation.exists('test')
-
-test_run:cmd('restart server default')
-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
-
-box.internal.collation.exists('test')
-box.internal.collation.drop('test')
-
-box.space._collation:auto_increment{'test'}
-box.space._collation:auto_increment{'test', 0, 'ICU'}
-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
-box.space._collation.index.name:delete{'test'} -- ok
-box.space._collation.index.name:delete{'nothing'} -- allowed
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
-opts = {normalization_mode='NORMAL'}
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.normalization_mode = 'OFF'
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
-_ = box.space._collation.index.name:delete{'test'} -- ok
-opts.numeric_collation = 'PERL'
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.numeric_collation = 'ON'
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
-_ = box.space._collation.index.name:delete{'test'} -- ok
-opts.alternate_handling1 = 'ON'
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.alternate_handling1 = nil
-opts.alternate_handling = 'ON'
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.alternate_handling = 'SHIFTED'
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
-_ = box.space._collation.index.name:delete{'test'} -- ok
-opts.case_first = 'ON'
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.case_first = 'OFF'
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
-_ = box.space._collation.index.name:delete{'test'} -- ok
-opts.case_level = 'UPPER'
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
-opts.case_level = 'DEFAULT'
-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
-_ = box.space._collation.index.name:delete{'test'} -- ok
-
-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
-box.space._collation:select{}
-test_run:cmd('restart server default')
-box.space._collation:select{}
-box.space._collation.index.name:delete{'test'}
-
---
--- gh-3290: expose ICU into Lua. It uses built-in collations, that
--- must work even if a collation is deleted from _collation.
---
-t = box.space._collation:delete{1}
-utf8.cmp('abc', 'def')
-box.space._collation:replace(t)
-
---
--- gh-2839: allow to store custom fields in field definition.
---
-format = {}
-format[1] = {name = 'field1', type = 'unsigned'}
-format[2] = {'field2', 'unsigned'}
-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
-s = box.schema.create_space('test', {format = format})
-s:format()[3].custom_field
-s:drop()
-
---
--- gh-2937: allow to specify collation in field definition.
---
-format = {}
-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
-format[2] = {'field2', 'any', collation = 'unicode_ci'}
-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
-s = box.schema.create_space('test', {format = format})
-s:format()
-s:drop()
-
--- Check that collation is allowed only for stings, scalar and any types.
-format = {}
-format[1] = {'field1', 'unsigned', collation = 'unicode'}
-s = box.schema.create_space('test', {format = format})
-format[1] = {'field2', 'array', collation = 'unicode_ci'}
-s = box.schema.create_space('test', {format = format})
-
--- Check that error is raised when collation doesn't exists.
-format = {}
-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
-s = box.schema.create_space('test', {format = format})
-
--- Check that error is raised when collation with wrong id is used.
-_space = box.space[box.schema.SPACE_ID]
-utils = require('utils')
-EMPTY_MAP = utils.setmap({})
-format = {{name = 'field1', type = 'string', collation = 666}}
-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
-_space:insert(surrogate_space)
-
---
--- gh-2783
--- A ddl operation shoud fail before trying to lock a ddl latch
--- in a multi-statement transaction.
--- If operation tries to lock already an locked latch then the
--- current transaction will be silently rolled back under our feet.
--- This is confusing. So check for multi-statement transaction
--- before locking the latch.
---
-test_latch = box.schema.space.create('test_latch')
-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
-fiber = require('fiber')
-c = fiber.channel(1)
-test_run:cmd("setopt delimiter ';'")
-_ = fiber.create(function()
-    test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
-    c:put(true)
-end);
-
--- Should be Ok for now
-box.begin()
-    test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
-box.commit();
-test_run:cmd("setopt delimiter ''");
--- Explicitly roll back the transaction in multi-statement,
--- which hasn't finished due to DDL error
-box.rollback()
-
-_ = c:get()
-test_latch:drop() -- this is where everything stops
diff --git a/test/box/ddl_alter.result b/test/box/ddl_alter.result
new file mode 100644
index 000000000..ce4a6ee69
--- /dev/null
+++ b/test/box/ddl_alter.result
@@ -0,0 +1,30 @@
+-- test-run result file version 2
+-- index should not crash after alter
+space = box.schema.space.create('test_swap')
+ | ---
+ | ...
+index = space:create_index('pk')
+ | ---
+ | ...
+space:replace({1, 2, 3})
+ | ---
+ | - [1, 2, 3]
+ | ...
+index:rename('primary')
+ | ---
+ | ...
+index2 = space:create_index('sec')
+ | ---
+ | ...
+space:replace({2, 3, 1})
+ | ---
+ | - [2, 3, 1]
+ | ...
+space:select()
+ | ---
+ | - - [1, 2, 3]
+ |   - [2, 3, 1]
+ | ...
+space:drop()
+ | ---
+ | ...
diff --git a/test/box/ddl_alter.test.lua b/test/box/ddl_alter.test.lua
new file mode 100644
index 000000000..ab0263b78
--- /dev/null
+++ b/test/box/ddl_alter.test.lua
@@ -0,0 +1,9 @@
+-- index should not crash after alter
+space = box.schema.space.create('test_swap')
+index = space:create_index('pk')
+space:replace({1, 2, 3})
+index:rename('primary')
+index2 = space:create_index('sec')
+space:replace({2, 3, 1})
+space:select()
+space:drop()
diff --git a/test/box/ddl_collation.result b/test/box/ddl_collation.result
new file mode 100644
index 000000000..2571ad072
--- /dev/null
+++ b/test/box/ddl_collation.result
@@ -0,0 +1,853 @@
+-- test-run result file version 2
+env = require('test_run')
+ | ---
+ | ...
+test_run = env.new()
+ | ---
+ | ...
+
+-- collation
+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
+ | ---
+ | ...
+
+box.internal.collation.create('test')
+ | ---
+ | - error: Illegal parameters, type (second arg) must be a string
+ | ...
+box.internal.collation.create('test', 'ICU')
+ | ---
+ | - error: Illegal parameters, locale (third arg) must be a string
+ | ...
+box.internal.collation.create(42, 'ICU', 'ru_RU')
+ | ---
+ | - error: Illegal parameters, name (first arg) must be a string
+ | ...
+box.internal.collation.create('test', 42, 'ru_RU')
+ | ---
+ | - error: Illegal parameters, type (second arg) must be a string
+ | ...
+box.internal.collation.create('test', 'ICU', 42)
+ | ---
+ | - error: Illegal parameters, locale (third arg) must be a string
+ | ...
+box.internal.collation.create('test', 'nothing', 'ru_RU')
+ | ---
+ | - error: 'Failed to initialize collation: unknown collation type.'
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
+ | ---
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU')
+ | ---
+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
+ | ...
+box.internal.collation.drop('test')
+ | ---
+ | ...
+box.internal.collation.drop('nothing') -- allowed
+ | ---
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
+ | ---
+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
+ | ---
+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
+ | ---
+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong french_collation option setting,
+ |     expected ON | OFF.'
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
+ | ---
+ | ...
+box.internal.collation.drop('test') --ok
+ | ---
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong strength option setting, expected
+ |     PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
+ | ---
+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
+ | ---
+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
+ | ...
+box.internal.collation.drop('test') --ok
+ | ---
+ | ...
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
+ | ---
+ | ...
+box.internal.collation.drop('test') --ok
+ | ---
+ | ...
+c = box.space._collation:get{1}:totable()
+ | ---
+ | ...
+c[2] = 'unicode_test'
+ | ---
+ | ...
+box.space._collation:replace(c)
+ | ---
+ | - error: collation does not support alter
+ | ...
+
+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
+ | ---
+ | ...
+
+box.internal.collation.create('test', 'ICU', 'ru_RU')
+ | ---
+ | ...
+box.internal.collation.exists('test')
+ | ---
+ | - true
+ | ...
+
+test_run:cmd('restart server default')
+ | 
+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
+ | ---
+ | ...
+
+box.internal.collation.exists('test')
+ | ---
+ | - true
+ | ...
+box.internal.collation.drop('test')
+ | ---
+ | ...
+
+box.space._collation:auto_increment{'test'}
+ | ---
+ | - error: Tuple field 3 required by space format is missing
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU'}
+ | ---
+ | - error: Tuple field 5 required by space format is missing
+ | ...
+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
+ | ---
+ | - error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
+ | ...
+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
+ | ---
+ | - error: 'Tuple field 2 type does not match one required by operation: expected string'
+ | ...
+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
+ | ---
+ | - error: 'Tuple field 4 type does not match one required by operation: expected string'
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
+ | ---
+ | - error: 'Tuple field 5 type does not match one required by operation: expected string'
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
+ | ---
+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
+ | ---
+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
+ | ...
+box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
+box.space._collation.index.name:delete{'nothing'} -- allowed
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
+ | ---
+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
+ | ---
+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
+ | ---
+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
+ | ...
+opts = {normalization_mode='NORMAL'}
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
+ |     expected ON | OFF.'
+ | ...
+opts.normalization_mode = 'OFF'
+ | ---
+ | ...
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
+ | ---
+ | ...
+_ = box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | ...
+opts.numeric_collation = 'PERL'
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
+ |     expected ON | OFF.'
+ | ...
+opts.numeric_collation = 'ON'
+ | ---
+ | ...
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+ | ---
+ | ...
+_ = box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | ...
+opts.alternate_handling1 = 'ON'
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
+ | ...
+opts.alternate_handling1 = nil
+ | ---
+ | ...
+opts.alternate_handling = 'ON'
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
+ |     expected NON_IGNORABLE | SHIFTED.'
+ | ...
+opts.alternate_handling = 'SHIFTED'
+ | ---
+ | ...
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+ | ---
+ | ...
+_ = box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | ...
+opts.case_first = 'ON'
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
+ |     OFF | UPPER_FIRST | LOWER_FIRST.'
+ | ...
+opts.case_first = 'OFF'
+ | ---
+ | ...
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+ | ---
+ | ...
+_ = box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | ...
+opts.case_level = 'UPPER'
+ | ---
+ | ...
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
+ |     ON | OFF.'
+ | ...
+opts.case_level = 'DEFAULT'
+ | ---
+ | ...
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+ | ---
+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
+ |     ON | OFF.'
+ | ...
+_ = box.space._collation.index.name:delete{'test'} -- ok
+ | ---
+ | ...
+
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
+ | ---
+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
+box.space._collation:select{}
+ | ---
+ | - - [0, 'none', 1, 'BINARY', '', {}]
+ |   - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
+ |   - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
+ |   - [3, 'binary', 1, 'BINARY', '', {}]
+ |   - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
+ |   - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
+ |   - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
+ |   - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
+ |   - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
+ |   - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
+ |   - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
+ |   - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
+ |   - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
+ |   - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
+ |   - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
+ |   - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
+ |   - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
+ |   - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
+ |   - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
+ |   - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
+ |   - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
+ |   - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
+ |   - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
+ |   - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
+ |   - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
+ |   - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
+ |   - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
+ |   - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
+ |   - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
+ |   - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
+ |   - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
+ |   - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
+ |   - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
+ |   - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
+ |   - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
+ |   - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
+ |   - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
+ |   - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
+ |   - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
+ |   - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
+ |   - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
+ |   - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
+ |   - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
+ |   - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
+ |   - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
+ |   - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
+ |   - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
+ |   - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
+ |   - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
+ |   - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
+ |   - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
+ |   - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
+ |   - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
+ |   - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
+ |   - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
+ |   - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
+ |   - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
+ |   - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
+ |   - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
+ |   - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
+ |   - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
+ |   - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
+ |   - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
+ |   - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
+ |   - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
+ |   - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
+ |   - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
+ |   - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
+ |   - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
+ |   - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
+ |   - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
+ |   - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
+ |   - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
+ |   - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
+ |   - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
+ |   - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
+ |   - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
+ |   - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
+ |   - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
+ |   - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
+ |   - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
+ |   - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
+ |   - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
+ |   - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
+ |   - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
+ |   - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
+ |   - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
+ |   - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
+ |   - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
+ |   - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
+ |   - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
+ |   - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
+ |   - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
+ |   - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
+ |   - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
+ |   - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
+ |   - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
+ |   - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
+ |   - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
+ |   - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
+ |   - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
+ |   - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
+ |   - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
+ |   - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
+ |   - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
+ |   - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
+ |   - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
+ |   - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
+ |   - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
+ |   - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
+ |   - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
+ |   - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
+ |   - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
+ |   - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
+ |   - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
+ |   - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
+ |   - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
+ |   - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
+ |   - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
+ |   - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
+ |   - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
+ |   - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
+ |   - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
+ |   - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
+ |   - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
+ |   - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
+ |   - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
+ |   - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
+ |   - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
+ |   - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
+ |   - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
+ |   - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
+ |   - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
+ |   - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
+ |   - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
+ |   - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
+ |   - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
+ |   - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
+ |   - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
+ |   - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
+ |   - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
+ |   - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
+ |   - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
+ |   - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
+ |   - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
+ |   - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
+ |   - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
+ |   - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
+ |   - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
+ |   - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
+ |   - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
+ |   - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
+ |   - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
+ |   - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
+ |   - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
+ |   - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
+ |   - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
+ |   - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
+ |   - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
+ |   - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
+ |   - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
+ |   - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
+ |   - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
+ |   - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
+ |   - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
+ |   - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
+ |   - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
+ |   - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
+ |   - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
+ |   - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
+ |   - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
+ |   - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
+ |   - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
+ |   - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
+ |   - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
+ |   - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
+ |   - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
+ |   - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
+ |   - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
+ |   - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
+ |   - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
+ |   - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
+ |   - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
+ |   - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
+ |   - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
+ |   - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
+ |   - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
+ |   - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
+ |   - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
+ |   - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
+ |   - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
+ |   - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
+ |   - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
+ |   - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
+ |   - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
+ |   - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
+ |   - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
+ |   - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
+ |   - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
+ |   - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
+ |   - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
+ |   - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
+ |   - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
+ |   - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
+ |   - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
+ |   - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
+ |   - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
+ |   - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
+ |   - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
+ |   - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
+ |   - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
+ |   - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
+ |   - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
+ |   - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
+ |   - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
+ |   - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
+ |   - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
+ |   - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
+ |   - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
+ |   - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
+ |   - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
+ |   - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
+ |   - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
+ |   - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
+ |   - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
+ |   - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
+ |   - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
+ |   - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
+ |   - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
+ |   - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
+ |   - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
+ |   - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
+ |   - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
+ |   - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
+ |   - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
+ |   - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
+ |   - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
+ |   - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
+ |   - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
+ |   - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
+ |   - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
+ |   - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
+ |   - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
+ |   - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
+ |   - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
+ |   - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
+ |   - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
+ |   - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
+ |   - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
+ |   - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
+ |   - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
+ |   - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
+ |   - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
+ |   - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
+ |   - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
+ |   - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
+ |   - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
+ |   - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
+ |   - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
+ |   - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
+ |   - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
+ |   - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
+ |   - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
+ |   - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
+ |   - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
+ |   - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
+ |   - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
+ |   - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
+ |   - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
+ |   - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
+ |   - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
+ |   - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
+test_run:cmd('restart server default')
+ | 
+box.space._collation:select{}
+ | ---
+ | - - [0, 'none', 1, 'BINARY', '', {}]
+ |   - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
+ |   - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
+ |   - [3, 'binary', 1, 'BINARY', '', {}]
+ |   - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
+ |   - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
+ |   - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
+ |   - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
+ |   - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
+ |   - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
+ |   - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
+ |   - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
+ |   - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
+ |   - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
+ |   - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
+ |   - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
+ |   - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
+ |   - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
+ |   - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
+ |   - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
+ |   - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
+ |   - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
+ |   - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
+ |   - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
+ |   - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
+ |   - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
+ |   - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
+ |   - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
+ |   - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
+ |   - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
+ |   - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
+ |   - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
+ |   - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
+ |   - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
+ |   - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
+ |   - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
+ |   - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
+ |   - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
+ |   - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
+ |   - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
+ |   - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
+ |   - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
+ |   - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
+ |   - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
+ |   - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
+ |   - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
+ |   - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
+ |   - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
+ |   - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
+ |   - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
+ |   - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
+ |   - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
+ |   - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
+ |   - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
+ |   - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
+ |   - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
+ |   - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
+ |   - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
+ |   - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
+ |   - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
+ |   - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
+ |   - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
+ |   - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
+ |   - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
+ |   - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
+ |   - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
+ |   - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
+ |   - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
+ |   - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
+ |   - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
+ |   - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
+ |   - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
+ |   - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
+ |   - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
+ |   - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
+ |   - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
+ |   - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
+ |   - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
+ |   - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
+ |   - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
+ |   - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
+ |   - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
+ |   - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
+ |   - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
+ |   - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
+ |   - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
+ |   - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
+ |   - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
+ |   - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
+ |   - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
+ |   - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
+ |   - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
+ |   - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
+ |   - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
+ |   - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
+ |   - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
+ |   - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
+ |   - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
+ |   - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
+ |   - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
+ |   - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
+ |   - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
+ |   - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
+ |   - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
+ |   - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
+ |   - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
+ |   - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
+ |   - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
+ |   - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
+ |   - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
+ |   - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
+ |   - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
+ |   - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
+ |   - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
+ |   - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
+ |   - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
+ |   - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
+ |   - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
+ |   - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
+ |   - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
+ |   - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
+ |   - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
+ |   - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
+ |   - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
+ |   - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
+ |   - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
+ |   - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
+ |   - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
+ |   - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
+ |   - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
+ |   - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
+ |   - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
+ |   - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
+ |   - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
+ |   - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
+ |   - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
+ |   - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
+ |   - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
+ |   - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
+ |   - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
+ |   - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
+ |   - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
+ |   - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
+ |   - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
+ |   - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
+ |   - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
+ |   - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
+ |   - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
+ |   - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
+ |   - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
+ |   - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
+ |   - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
+ |   - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
+ |   - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
+ |   - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
+ |   - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
+ |   - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
+ |   - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
+ |   - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
+ |   - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
+ |   - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
+ |   - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
+ |   - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
+ |   - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
+ |   - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
+ |   - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
+ |   - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
+ |   - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
+ |   - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
+ |   - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
+ |   - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
+ |   - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
+ |   - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
+ |   - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
+ |   - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
+ |   - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
+ |   - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
+ |   - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
+ |   - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
+ |   - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
+ |   - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
+ |   - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
+ |   - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
+ |   - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
+ |   - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
+ |   - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
+ |   - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
+ |   - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
+ |   - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
+ |   - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
+ |   - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
+ |   - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
+ |   - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
+ |   - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
+ |   - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
+ |   - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
+ |   - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
+ |   - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
+ |   - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
+ |   - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
+ |   - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
+ |   - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
+ |   - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
+ |   - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
+ |   - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
+ |   - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
+ |   - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
+ |   - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
+ |   - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
+ |   - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
+ |   - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
+ |   - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
+ |   - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
+ |   - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
+ |   - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
+ |   - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
+ |   - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
+ |   - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
+ |   - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
+ |   - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
+ |   - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
+ |   - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
+ |   - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
+ |   - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
+ |   - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
+ |   - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
+ |   - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
+ |   - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
+ |   - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
+ |   - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
+ |   - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
+ |   - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
+ |   - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
+ |   - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
+ |   - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
+ |   - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
+ |   - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
+ |   - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
+ |   - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
+ |   - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
+ |   - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
+ |   - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
+ |   - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
+ |   - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
+ |   - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
+ |   - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
+ |   - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
+ |   - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
+ |   - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
+ |   - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
+ |   - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
+ |   - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
+ |   - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
+ |   - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
+ |   - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
+ |   - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
+ |   - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
+ |   - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
+ |   - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
+ |   - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
+ |   - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
+ |   - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
+ |   - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
+ |   - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
+ |   - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
+ |   - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
+ |   - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
+ |   - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
+ |   - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
+ |   - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
+ |   - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
+ |   - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
+ |   - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
+ |   - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
+box.space._collation.index.name:delete{'test'}
+ | ---
+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
+ | ...
diff --git a/test/box/ddl_collation.test.lua b/test/box/ddl_collation.test.lua
new file mode 100644
index 000000000..ee26af9c6
--- /dev/null
+++ b/test/box/ddl_collation.test.lua
@@ -0,0 +1,90 @@
+env = require('test_run')
+test_run = env.new()
+
+-- collation
+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
+
+box.internal.collation.create('test')
+box.internal.collation.create('test', 'ICU')
+box.internal.collation.create(42, 'ICU', 'ru_RU')
+box.internal.collation.create('test', 42, 'ru_RU')
+box.internal.collation.create('test', 'ICU', 42)
+box.internal.collation.create('test', 'nothing', 'ru_RU')
+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
+box.internal.collation.create('test', 'ICU', 'ru_RU')
+box.internal.collation.drop('test')
+box.internal.collation.drop('nothing') -- allowed
+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
+box.internal.collation.drop('test') --ok
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
+box.internal.collation.drop('test') --ok
+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
+box.internal.collation.drop('test') --ok
+c = box.space._collation:get{1}:totable()
+c[2] = 'unicode_test'
+box.space._collation:replace(c)
+
+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
+
+box.internal.collation.create('test', 'ICU', 'ru_RU')
+box.internal.collation.exists('test')
+
+test_run:cmd('restart server default')
+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
+
+box.internal.collation.exists('test')
+box.internal.collation.drop('test')
+
+box.space._collation:auto_increment{'test'}
+box.space._collation:auto_increment{'test', 0, 'ICU'}
+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
+box.space._collation.index.name:delete{'test'} -- ok
+box.space._collation.index.name:delete{'nothing'} -- allowed
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
+opts = {normalization_mode='NORMAL'}
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.normalization_mode = 'OFF'
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
+_ = box.space._collation.index.name:delete{'test'} -- ok
+opts.numeric_collation = 'PERL'
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.numeric_collation = 'ON'
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+_ = box.space._collation.index.name:delete{'test'} -- ok
+opts.alternate_handling1 = 'ON'
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.alternate_handling1 = nil
+opts.alternate_handling = 'ON'
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.alternate_handling = 'SHIFTED'
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+_ = box.space._collation.index.name:delete{'test'} -- ok
+opts.case_first = 'ON'
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.case_first = 'OFF'
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+_ = box.space._collation.index.name:delete{'test'} -- ok
+opts.case_level = 'UPPER'
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
+opts.case_level = 'DEFAULT'
+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
+_ = box.space._collation.index.name:delete{'test'} -- ok
+
+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
+box.space._collation:select{}
+test_run:cmd('restart server default')
+box.space._collation:select{}
+box.space._collation.index.name:delete{'test'}
diff --git a/test/box/ddl_collation_types.result b/test/box/ddl_collation_types.result
new file mode 100644
index 000000000..7eaef62c0
--- /dev/null
+++ b/test/box/ddl_collation_types.result
@@ -0,0 +1,21 @@
+-- test-run result file version 2
+-- Check that collation is allowed only for strings, scalar and any types.
+format = {}
+ | ---
+ | ...
+format[1] = {'field1', 'unsigned', collation = 'unicode'}
+ | ---
+ | ...
+s = box.schema.create_space('test', {format = format})
+ | ---
+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
+ |     scalar and any fields'
+ | ...
+format[1] = {'field2', 'array', collation = 'unicode_ci'}
+ | ---
+ | ...
+s = box.schema.create_space('test', {format = format})
+ | ---
+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
+ |     scalar and any fields'
+ | ...
diff --git a/test/box/ddl_collation_types.test.lua b/test/box/ddl_collation_types.test.lua
new file mode 100644
index 000000000..5930d54b0
--- /dev/null
+++ b/test/box/ddl_collation_types.test.lua
@@ -0,0 +1,6 @@
+-- Check that collation is allowed only for strings, scalar and any types.
+format = {}
+format[1] = {'field1', 'unsigned', collation = 'unicode'}
+s = box.schema.create_space('test', {format = format})
+format[1] = {'field2', 'array', collation = 'unicode_ci'}
+s = box.schema.create_space('test', {format = format})
diff --git a/test/box/ddl_collation_wrong_id.result b/test/box/ddl_collation_wrong_id.result
new file mode 100644
index 000000000..c6cf058b1
--- /dev/null
+++ b/test/box/ddl_collation_wrong_id.result
@@ -0,0 +1,21 @@
+-- test-run result file version 2
+-- Check that error is raised when collation with wrong id is used.
+_space = box.space[box.schema.SPACE_ID]
+ | ---
+ | ...
+utils = require('utils')
+ | ---
+ | ...
+EMPTY_MAP = utils.setmap({})
+ | ---
+ | ...
+format = {{name = 'field1', type = 'string', collation = 666}}
+ | ---
+ | ...
+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
+ | ---
+ | ...
+_space:insert(surrogate_space)
+ | ---
+ | - error: 'Wrong collation options (field 1): collation was not found by ID'
+ | ...
diff --git a/test/box/ddl_collation_wrong_id.test.lua b/test/box/ddl_collation_wrong_id.test.lua
new file mode 100644
index 000000000..8d28d3ee1
--- /dev/null
+++ b/test/box/ddl_collation_wrong_id.test.lua
@@ -0,0 +1,7 @@
+-- Check that error is raised when collation with wrong id is used.
+_space = box.space[box.schema.SPACE_ID]
+utils = require('utils')
+EMPTY_MAP = utils.setmap({})
+format = {{name = 'field1', type = 'string', collation = 666}}
+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
+_space:insert(surrogate_space)
diff --git a/test/box/ddl_no_collation.result b/test/box/ddl_no_collation.result
new file mode 100644
index 000000000..6f4e8fa0b
--- /dev/null
+++ b/test/box/ddl_no_collation.result
@@ -0,0 +1,12 @@
+-- test-run result file version 2
+-- Check that error is raised when collation doesn't exists.
+format = {}
+ | ---
+ | ...
+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
+ | ---
+ | ...
+s = box.schema.create_space('test', {format = format})
+ | ---
+ | - error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
+ | ...
diff --git a/test/box/ddl_no_collation.test.lua b/test/box/ddl_no_collation.test.lua
new file mode 100644
index 000000000..3e411373b
--- /dev/null
+++ b/test/box/ddl_no_collation.test.lua
@@ -0,0 +1,4 @@
+-- Check that error is raised when collation doesn't exists.
+format = {}
+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
+s = box.schema.create_space('test', {format = format})
diff --git a/test/box/ddl_parallel.result b/test/box/ddl_parallel.result
new file mode 100644
index 000000000..dfa4a1422
--- /dev/null
+++ b/test/box/ddl_parallel.result
@@ -0,0 +1,61 @@
+-- test-run result file version 2
+env = require('test_run')
+ | ---
+ | ...
+test_run = env.new()
+ | ---
+ | ...
+
+fiber = require'fiber'
+ | ---
+ | ...
+
+-- simple test for parallel ddl execution
+_ = box.schema.space.create('test'):create_index('pk')
+ | ---
+ | ...
+
+ch = fiber.channel(2)
+ | ---
+ | ...
+
+test_run:cmd("setopt delimiter ';'")
+ | ---
+ | - true
+ | ...
+
+function f1()
+    box.space.test:create_index('sec', {parts = {2, 'num'}})
+    ch:put(true)
+end;
+ | ---
+ | ...
+
+function f2()
+    box.space.test:create_index('third', {parts = {3, 'string'}})
+    ch:put(true)
+end;
+ | ---
+ | ...
+
+test_run:cmd("setopt delimiter ''");
+ | ---
+ | - true
+ | ...
+
+_ = {fiber.create(f1), fiber.create(f2)}
+ | ---
+ | ...
+
+ch:get()
+ | ---
+ | - true
+ | ...
+ch:get()
+ | ---
+ | - true
+ | ...
+
+_ = box.space.test:drop()
+ | ---
+ | ...
diff --git a/test/box/ddl_parallel.test.lua b/test/box/ddl_parallel.test.lua
new file mode 100644
index 000000000..99c3bfdcc
--- /dev/null
+++ b/test/box/ddl_parallel.test.lua
@@ -0,0 +1,30 @@
+env = require('test_run')
+test_run = env.new()
+
+fiber = require'fiber'
+
+-- simple test for parallel ddl execution
+_ = box.schema.space.create('test'):create_index('pk')
+
+ch = fiber.channel(2)
+
+test_run:cmd("setopt delimiter ';'")
+
+function f1()
+    box.space.test:create_index('sec', {parts = {2, 'num'}})
+    ch:put(true)
+end;
+
+function f2()
+    box.space.test:create_index('third', {parts = {3, 'string'}})
+    ch:put(true)
+end;
+
+test_run:cmd("setopt delimiter ''");
+
+_ = {fiber.create(f1), fiber.create(f2)}
+
+ch:get()
+ch:get()
+
+_ = box.space.test:drop()
diff --git a/test/box/ddl_tuple.result b/test/box/ddl_tuple.result
new file mode 100644
index 000000000..6a024a833
--- /dev/null
+++ b/test/box/ddl_tuple.result
@@ -0,0 +1,67 @@
+-- test-run result file version 2
+env = require('test_run')
+ | ---
+ | ...
+test_run = env.new()
+ | ---
+ | ...
+
+fiber = require'fiber'
+ | ---
+ | ...
+ch = fiber.channel(3)
+ | ---
+ | ...
+
+_ = box.schema.space.create('test'):create_index('pk')
+ | ---
+ | ...
+
+test_run:cmd("setopt delimiter ';'")
+ | ---
+ | - true
+ | ...
+function add_index()
+    box.space.test:create_index('sec', {parts = {2, 'num'}})
+    ch:put(true)
+end;
+ | ---
+ | ...
+
+function insert_tuple(tuple)
+    ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
+end;
+ | ---
+ | ...
+test_run:cmd("setopt delimiter ''");
+ | ---
+ | - true
+ | ...
+
+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
+ | ---
+ | ...
+{ch:get(), ch:get(), ch:get()}
+ | ---
+ | - - - false
+ |     - 'Tuple field 2 type does not match one required by operation: expected unsigned'
+ |   - - true
+ |     - [1, 2, 'a']
+ |   - true
+ | ...
+
+box.space.test:select()
+ | ---
+ | - - [1, 2, 'a']
+ | ...
+
+test_run:cmd('restart server default')
+ | 
+
+box.space.test:select()
+ | ---
+ | - - [1, 2, 'a']
+ | ...
+box.space.test:drop()
+ | ---
+ | ...
diff --git a/test/box/ddl_tuple.test.lua b/test/box/ddl_tuple.test.lua
new file mode 100644
index 000000000..1c78a00e4
--- /dev/null
+++ b/test/box/ddl_tuple.test.lua
@@ -0,0 +1,28 @@
+env = require('test_run')
+test_run = env.new()
+
+fiber = require'fiber'
+ch = fiber.channel(3)
+
+_ = box.schema.space.create('test'):create_index('pk')
+
+test_run:cmd("setopt delimiter ';'")
+function add_index()
+    box.space.test:create_index('sec', {parts = {2, 'num'}})
+    ch:put(true)
+end;
+
+function insert_tuple(tuple)
+    ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
+end;
+test_run:cmd("setopt delimiter ''");
+
+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
+{ch:get(), ch:get(), ch:get()}
+
+box.space.test:select()
+
+test_run:cmd('restart server default')
+
+box.space.test:select()
+box.space.test:drop()
diff --git a/test/box/gh-2336-ddl_call_twice.result b/test/box/gh-2336-ddl_call_twice.result
new file mode 100644
index 000000000..0f55c9c09
--- /dev/null
+++ b/test/box/gh-2336-ddl_call_twice.result
@@ -0,0 +1,44 @@
+-- test-run result file version 2
+-- gh-2336 crash if format called twice during snapshot
+fiber = require'fiber'
+ | ---
+ | ...
+
+space = box.schema.space.create('test_format')
+ | ---
+ | ...
+_ = space:create_index('pk', { parts = { 1,'str' }})
+ | ---
+ | ...
+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
+ | ---
+ | ...
+str = string.rep("t",1024)
+ | ---
+ | ...
+for i = 1, 10000 do space:insert{tostring(i), str} end
+ | ---
+ | ...
+ch = fiber.channel(3)
+ | ---
+ | ...
+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
+ | ---
+ | ...
+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
+ | ---
+ | ...
+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
+ | ---
+ | ...
+
+{ch:get(), ch:get(), ch:get()}
+ | ---
+ | - - true
+ |   - true
+ |   - true
+ | ...
+
+space:drop()
+ | ---
+ | ...
diff --git a/test/box/gh-2336-ddl_call_twice.test.lua b/test/box/gh-2336-ddl_call_twice.test.lua
new file mode 100644
index 000000000..f92afc211
--- /dev/null
+++ b/test/box/gh-2336-ddl_call_twice.test.lua
@@ -0,0 +1,16 @@
+-- gh-2336 crash if format called twice during snapshot
+fiber = require'fiber'
+
+space = box.schema.space.create('test_format')
+_ = space:create_index('pk', { parts = { 1,'str' }})
+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
+str = string.rep("t",1024)
+for i = 1, 10000 do space:insert{tostring(i), str} end
+ch = fiber.channel(3)
+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
+
+{ch:get(), ch:get(), ch:get()}
+
+space:drop()
diff --git a/test/box/gh-2783-ddl_lock.result b/test/box/gh-2783-ddl_lock.result
new file mode 100644
index 000000000..7b3ba3444
--- /dev/null
+++ b/test/box/gh-2783-ddl_lock.result
@@ -0,0 +1,62 @@
+-- test-run result file version 2
+env = require('test_run')
+ | ---
+ | ...
+test_run = env.new()
+ | ---
+ | ...
+
+--
+-- gh-2783
+-- A ddl operation shoud fail before trying to lock a ddl latch
+-- in a multi-statement transaction.
+-- If operation tries to lock already an locked latch then the
+-- current transaction will be silently rolled back under our feet.
+-- This is confusing. So check for multi-statement transaction
+-- before locking the latch.
+--
+test_latch = box.schema.space.create('test_latch')
+ | ---
+ | ...
+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
+ | ---
+ | ...
+fiber = require('fiber')
+ | ---
+ | ...
+c = fiber.channel(1)
+ | ---
+ | ...
+test_run:cmd("setopt delimiter ';'")
+ | ---
+ | - true
+ | ...
+_ = fiber.create(function()
+    test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
+    c:put(true)
+end);
+ | ---
+ | ...
+
+-- Should be Ok for now
+box.begin()
+    test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
+box.commit();
+ | ---
+ | ...
+test_run:cmd("setopt delimiter ''");
+ | ---
+ | - true
+ | ...
+-- Explicitly roll back the transaction in multi-statement,
+-- which hasn't finished due to DDL error
+box.rollback()
+ | ---
+ | ...
+
+_ = c:get()
+ | ---
+ | ...
+test_latch:drop() -- this is where everything stops
+ | ---
+ | ...
diff --git a/test/box/gh-2783-ddl_lock.test.lua b/test/box/gh-2783-ddl_lock.test.lua
new file mode 100644
index 000000000..953e177a7
--- /dev/null
+++ b/test/box/gh-2783-ddl_lock.test.lua
@@ -0,0 +1,33 @@
+env = require('test_run')
+test_run = env.new()
+
+--
+-- gh-2783
+-- A ddl operation shoud fail before trying to lock a ddl latch
+-- in a multi-statement transaction.
+-- If operation tries to lock already an locked latch then the
+-- current transaction will be silently rolled back under our feet.
+-- This is confusing. So check for multi-statement transaction
+-- before locking the latch.
+--
+test_latch = box.schema.space.create('test_latch')
+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
+fiber = require('fiber')
+c = fiber.channel(1)
+test_run:cmd("setopt delimiter ';'")
+_ = fiber.create(function()
+    test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
+    c:put(true)
+end);
+
+-- Should be Ok for now
+box.begin()
+    test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
+box.commit();
+test_run:cmd("setopt delimiter ''");
+-- Explicitly roll back the transaction in multi-statement,
+-- which hasn't finished due to DDL error
+box.rollback()
+
+_ = c:get()
+test_latch:drop() -- this is where everything stops
diff --git a/test/box/gh-2839-ddl_custom_fields.result b/test/box/gh-2839-ddl_custom_fields.result
new file mode 100644
index 000000000..3846fe08e
--- /dev/null
+++ b/test/box/gh-2839-ddl_custom_fields.result
@@ -0,0 +1,26 @@
+-- test-run result file version 2
+--
+-- gh-2839: allow to store custom fields in field definition.
+--
+format = {}
+ | ---
+ | ...
+format[1] = {name = 'field1', type = 'unsigned'}
+ | ---
+ | ...
+format[2] = {'field2', 'unsigned'}
+ | ---
+ | ...
+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
+ | ---
+ | ...
+s = box.schema.create_space('test', {format = format})
+ | ---
+ | ...
+s:format()[3].custom_field
+ | ---
+ | - custom_value
+ | ...
+s:drop()
+ | ---
+ | ...
diff --git a/test/box/gh-2839-ddl_custom_fields.test.lua b/test/box/gh-2839-ddl_custom_fields.test.lua
new file mode 100644
index 000000000..e1c0e2a0b
--- /dev/null
+++ b/test/box/gh-2839-ddl_custom_fields.test.lua
@@ -0,0 +1,10 @@
+--
+-- gh-2839: allow to store custom fields in field definition.
+--
+format = {}
+format[1] = {name = 'field1', type = 'unsigned'}
+format[2] = {'field2', 'unsigned'}
+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
+s = box.schema.create_space('test', {format = format})
+s:format()[3].custom_field
+s:drop()
diff --git a/test/box/gh-2937-ddl_collation_field_def.result b/test/box/gh-2937-ddl_collation_field_def.result
new file mode 100644
index 000000000..8b3de607e
--- /dev/null
+++ b/test/box/gh-2937-ddl_collation_field_def.result
@@ -0,0 +1,27 @@
+-- test-run result file version 2
+--
+-- gh-2937: allow to specify collation in field definition.
+--
+format = {}
+ | ---
+ | ...
+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
+ | ---
+ | ...
+format[2] = {'field2', 'any', collation = 'unicode_ci'}
+ | ---
+ | ...
+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
+ | ---
+ | ...
+s = box.schema.create_space('test', {format = format})
+ | ---
+ | ...
+s:format()
+ | ---
+ | - [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
+ |     'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
+ | ...
+s:drop()
+ | ---
+ | ...
diff --git a/test/box/gh-2937-ddl_collation_field_def.test.lua b/test/box/gh-2937-ddl_collation_field_def.test.lua
new file mode 100644
index 000000000..1ddfa7246
--- /dev/null
+++ b/test/box/gh-2937-ddl_collation_field_def.test.lua
@@ -0,0 +1,10 @@
+--
+-- gh-2937: allow to specify collation in field definition.
+--
+format = {}
+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
+format[2] = {'field2', 'any', collation = 'unicode_ci'}
+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
+s = box.schema.create_space('test', {format = format})
+s:format()
+s:drop()
diff --git a/test/box/gh-3290-ddl_collation_deleted.result b/test/box/gh-3290-ddl_collation_deleted.result
new file mode 100644
index 000000000..eb59b6c1d
--- /dev/null
+++ b/test/box/gh-3290-ddl_collation_deleted.result
@@ -0,0 +1,16 @@
+-- test-run result file version 2
+--
+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
+-- must work even if a collation is deleted from _collation.
+--
+t = box.space._collation:delete{1}
+ | ---
+ | ...
+utf8.cmp('abc', 'def')
+ | ---
+ | - -1
+ | ...
+box.space._collation:replace(t)
+ | ---
+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
+ | ...
diff --git a/test/box/gh-3290-ddl_collation_deleted.test.lua b/test/box/gh-3290-ddl_collation_deleted.test.lua
new file mode 100644
index 000000000..5fd3d7e1a
--- /dev/null
+++ b/test/box/gh-3290-ddl_collation_deleted.test.lua
@@ -0,0 +1,7 @@
+--
+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
+-- must work even if a collation is deleted from _collation.
+--
+t = box.space._collation:delete{1}
+utf8.cmp('abc', 'def')
+box.space._collation:replace(t)
diff --git a/test/box/gh-928-ddl_truncate.result b/test/box/gh-928-ddl_truncate.result
new file mode 100644
index 000000000..f244e07f1
--- /dev/null
+++ b/test/box/gh-928-ddl_truncate.result
@@ -0,0 +1,35 @@
+-- test-run result file version 2
+fiber = require'fiber'
+ | ---
+ | ...
+ch = fiber.channel(2)
+ | ---
+ | ...
+
+--issue #928
+space = box.schema.space.create('test_trunc')
+ | ---
+ | ...
+_ = space:create_index('pk')
+ | ---
+ | ...
+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
+ | ---
+ | ...
+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
+ | ---
+ | ...
+
+function test_trunc() space:truncate() ch:put(true) end
+ | ---
+ | ...
+
+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
+ | ---
+ | ...
+_ = {ch:get(), ch:get()}
+ | ---
+ | ...
+space:drop()
+ | ---
+ | ...
diff --git a/test/box/gh-928-ddl_truncate.test.lua b/test/box/gh-928-ddl_truncate.test.lua
new file mode 100644
index 000000000..10be8c361
--- /dev/null
+++ b/test/box/gh-928-ddl_truncate.test.lua
@@ -0,0 +1,14 @@
+fiber = require'fiber'
+ch = fiber.channel(2)
+
+--issue #928
+space = box.schema.space.create('test_trunc')
+_ = space:create_index('pk')
+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
+
+function test_trunc() space:truncate() ch:put(true) end
+
+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
+_ = {ch:get(), ch:get()}
+space:drop()
-- 
2.17.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
  2020-03-18 10:37 [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test Alexander V. Tikhonov
@ 2020-03-18 12:06 ` Oleg Piskunov
  2020-03-19 13:50   ` Alexander Tikhonov
  2020-04-15 15:26 ` Kirill Yukhin
  1 sibling, 1 reply; 6+ messages in thread
From: Oleg Piskunov @ 2020-03-18 12:06 UTC (permalink / raw)
  To: Alexander V. Tikhonov; +Cc: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 146445 bytes --]



Hi,
 
Sasha, need to cleanup fibers in next tests:
 
test/box/ddl_parallel.test.lua 
test/box/ddl_tuple.test.lua
test/box/gh-2336-ddl_call_twice.test.lua 
test/box/gh-2783-ddl_lock.test.lua
test/box/gh-928-ddl_truncate.test.lua
 
Unused fibers in next tests:
 
test/box/gh-822_net.box.test.lua 
 
  
>Среда, 18 марта 2020, 13:37 +03:00 от Alexander V. Tikhonov <avtikhon@tarantool.org>:
> 
>Divided into tests:
>- box/ddl_alter.test.lua
>- box/ddl_collation.test.lua
>- box/ddl_collation_types.test.lua
>- box/ddl_collation_wrong_id.test.lua
>- box/ddl_no_collation.test.lua
>- box/ddl_parallel.test.lua
>- box/ddl_tuple.test.lua
>- box/gh-2336-ddl_call_twice.test.lua
>- box/gh-2783-ddl_lock.test.lua
>- box/gh-2839-ddl_custom_fields.test.lua
>- box/gh-2937-ddl_collation_field_def.test.lua
>- box/gh-3290-ddl_collation_deleted.test.lua
>- box/gh-928-ddl_truncate.test.lua
>---
>
>Github:  https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests
>
> test/box/ddl.result | 1210 -----------------
> test/box/ddl.test.lua | 272 ----
> test/box/ddl_alter.result | 30 +
> test/box/ddl_alter.test.lua | 9 +
> test/box/ddl_collation.result | 853 ++++++++++++
> test/box/ddl_collation.test.lua | 90 ++
> test/box/ddl_collation_types.result | 21 +
> test/box/ddl_collation_types.test.lua | 6 +
> test/box/ddl_collation_wrong_id.result | 21 +
> test/box/ddl_collation_wrong_id.test.lua | 7 +
> test/box/ddl_no_collation.result | 12 +
> test/box/ddl_no_collation.test.lua | 4 +
> test/box/ddl_parallel.result | 61 +
> test/box/ddl_parallel.test.lua | 30 +
> test/box/ddl_tuple.result | 67 +
> test/box/ddl_tuple.test.lua | 28 +
> test/box/gh-2336-ddl_call_twice.result | 44 +
> test/box/gh-2336-ddl_call_twice.test.lua | 16 +
> test/box/gh-2783-ddl_lock.result | 62 +
> test/box/gh-2783-ddl_lock.test.lua | 33 +
> test/box/gh-2839-ddl_custom_fields.result | 26 +
> test/box/gh-2839-ddl_custom_fields.test.lua | 10 +
> .../gh-2937-ddl_collation_field_def.result | 27 +
> .../gh-2937-ddl_collation_field_def.test.lua | 10 +
> test/box/gh-3290-ddl_collation_deleted.result | 16 +
> .../gh-3290-ddl_collation_deleted.test.lua | 7 +
> test/box/gh-928-ddl_truncate.result | 35 +
> test/box/gh-928-ddl_truncate.test.lua | 14 +
> 28 files changed, 1539 insertions(+), 1482 deletions(-)
> delete mode 100644 test/box/ddl.result
> delete mode 100644 test/box/ddl.test.lua
> create mode 100644 test/box/ddl_alter.result
> create mode 100644 test/box/ddl_alter.test.lua
> create mode 100644 test/box/ddl_collation.result
> create mode 100644 test/box/ddl_collation.test.lua
> create mode 100644 test/box/ddl_collation_types.result
> create mode 100644 test/box/ddl_collation_types.test.lua
> create mode 100644 test/box/ddl_collation_wrong_id.result
> create mode 100644 test/box/ddl_collation_wrong_id.test.lua
> create mode 100644 test/box/ddl_no_collation.result
> create mode 100644 test/box/ddl_no_collation.test.lua
> create mode 100644 test/box/ddl_parallel.result
> create mode 100644 test/box/ddl_parallel.test.lua
> create mode 100644 test/box/ddl_tuple.result
> create mode 100644 test/box/ddl_tuple.test.lua
> create mode 100644 test/box/gh-2336-ddl_call_twice.result
> create mode 100644 test/box/gh-2336-ddl_call_twice.test.lua
> create mode 100644 test/box/gh-2783-ddl_lock.result
> create mode 100644 test/box/gh-2783-ddl_lock.test.lua
> create mode 100644 test/box/gh-2839-ddl_custom_fields.result
> create mode 100644 test/box/gh-2839-ddl_custom_fields.test.lua
> create mode 100644 test/box/gh-2937-ddl_collation_field_def.result
> create mode 100644 test/box/gh-2937-ddl_collation_field_def.test.lua
> create mode 100644 test/box/gh-3290-ddl_collation_deleted.result
> create mode 100644 test/box/gh-3290-ddl_collation_deleted.test.lua
> create mode 100644 test/box/gh-928-ddl_truncate.result
> create mode 100644 test/box/gh-928-ddl_truncate.test.lua
>
>diff --git a/test/box/ddl.result b/test/box/ddl.result
>deleted file mode 100644
>index b995b1493..000000000
>--- a/test/box/ddl.result
>+++ /dev/null
>@@ -1,1210 +0,0 @@
>-env = require('test_run')
>----
>-...
>-test_run = env.new()
>----
>-...
>-fiber = require'fiber'
>----
>-...
>--- simple test for parallel ddl execution
>-_ = box.schema.space.create('test'):create_index('pk')
>----
>-...
>-ch = fiber.channel(2)
>----
>-...
>-test_run:cmd("setopt delimiter ';'")
>----
>-- true
>-...
>-function f1()
>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>- ch:put(true)
>-end;
>----
>-...
>-function f2()
>- box.space.test:create_index('third', {parts = {3, 'string'}})
>- ch:put(true)
>-end;
>----
>-...
>-test_run:cmd("setopt delimiter ''");
>----
>-- true
>-...
>-_ = {fiber.create(f1), fiber.create(f2)}
>----
>-...
>-ch:get()
>----
>-- true
>-...
>-ch:get()
>----
>-- true
>-...
>-_ = box.space.test:drop()
>----
>-...
>-test_run:cmd('restart server default')
>-env = require('test_run')
>----
>-...
>-test_run = env.new()
>----
>-...
>-fiber = require'fiber'
>----
>-...
>-ch = fiber.channel(2)
>----
>-...
>---issue #928
>-space = box.schema.space.create('test_trunc')
>----
>-...
>-_ = space:create_index('pk')
>----
>-...
>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>----
>-...
>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>----
>-...
>-function test_trunc() space:truncate() ch:put(true) end
>----
>-...
>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>----
>-...
>-_ = {ch:get(), ch:get()}
>----
>-...
>-space:drop()
>----
>-...
>--- index should not crash after alter
>-space = box.schema.space.create('test_swap')
>----
>-...
>-index = space:create_index('pk')
>----
>-...
>-space:replace({1, 2, 3})
>----
>-- [1, 2, 3]
>-...
>-index:rename('primary')
>----
>-...
>-index2 = space:create_index('sec')
>----
>-...
>-space:replace({2, 3, 1})
>----
>-- [2, 3, 1]
>-...
>-space:select()
>----
>-- - [1, 2, 3]
>- - [2, 3, 1]
>-...
>-space:drop()
>----
>-...
>-ch = fiber.channel(3)
>----
>-...
>-_ = box.schema.space.create('test'):create_index('pk')
>----
>-...
>-test_run:cmd("setopt delimiter ';'")
>----
>-- true
>-...
>-function add_index()
>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>- ch:put(true)
>-end;
>----
>-...
>-function insert_tuple(tuple)
>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>-end;
>----
>-...
>-test_run:cmd("setopt delimiter ''");
>----
>-- true
>-...
>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>----
>-...
>-{ch:get(), ch:get(), ch:get()}
>----
>-- - - false
>- - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>- - - true
>- - [1, 2, 'a']
>- - true
>-...
>-box.space.test:select()
>----
>-- - [1, 2, 'a']
>-...
>-test_run:cmd('restart server default')
>-box.space.test:select()
>----
>-- - [1, 2, 'a']
>-...
>-box.space.test:drop()
>----
>-...
>--- gh-2336 crash if format called twice during snapshot
>-fiber = require'fiber'
>----
>-...
>-space = box.schema.space.create('test_format')
>----
>-...
>-_ = space:create_index('pk', { parts = { 1,'str' }})
>----
>-...
>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>----
>-...
>-str = string.rep("t",1024)
>----
>-...
>-for i = 1, 10000 do space:insert{tostring(i), str} end
>----
>-...
>-ch = fiber.channel(3)
>----
>-...
>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>----
>-...
>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>----
>-...
>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>----
>-...
>-{ch:get(), ch:get(), ch:get()}
>----
>-- - true
>- - true
>- - true
>-...
>-space:drop()
>----
>-...
>--- collation
>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>----
>-...
>-box.internal.collation.create('test')
>----
>-- error: Illegal parameters, type (second arg) must be a string
>-...
>-box.internal.collation.create('test', 'ICU')
>----
>-- error: Illegal parameters, locale (third arg) must be a string
>-...
>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>----
>-- error: Illegal parameters, name (first arg) must be a string
>-...
>-box.internal.collation.create('test', 42, 'ru_RU')
>----
>-- error: Illegal parameters, type (second arg) must be a string
>-...
>-box.internal.collation.create('test', 'ICU', 42)
>----
>-- error: Illegal parameters, locale (third arg) must be a string
>-...
>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>----
>-- error: 'Failed to initialize collation: unknown collation type.'
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>----
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>----
>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>-...
>-box.internal.collation.drop('test')
>----
>-...
>-box.internal.collation.drop('nothing') -- allowed
>----
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>----
>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>----
>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>----
>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>----
>-- error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>- expected ON | OFF.'
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>----
>-...
>-box.internal.collation.drop('test') --ok
>----
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>----
>-- error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>- PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>----
>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>----
>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>-...
>-box.internal.collation.drop('test') --ok
>----
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>----
>-...
>-box.internal.collation.drop('test') --ok
>----
>-...
>-c = box.space._collation:get{1}:totable()
>----
>-...
>-c[2] = 'unicode_test'
>----
>-...
>-box.space._collation:replace(c)
>----
>-- error: collation does not support alter
>-...
>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>----
>-...
>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>----
>-...
>-box.internal.collation.exists('test')
>----
>-- true
>-...
>-test_run:cmd('restart server default')
>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>----
>-...
>-box.internal.collation.exists('test')
>----
>-- true
>-...
>-box.internal.collation.drop('test')
>----
>-...
>-box.space._collation:auto_increment{'test'}
>----
>-- error: Tuple field 3 required by space format is missing
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>----
>-- error: Tuple field 5 required by space format is missing
>-...
>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>----
>-- error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>-...
>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>----
>-- error: 'Tuple field 2 type does not match one required by operation: expected string'
>-...
>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>----
>-- error: 'Tuple field 4 type does not match one required by operation: expected string'
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>----
>-- error: 'Tuple field 5 type does not match one required by operation: expected string'
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>----
>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>----
>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>-...
>-box.space._collation.index.name:delete{'test'} -- ok
>----
>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>-box.space._collation.index.name:delete{'nothing'} -- allowed
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>----
>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>----
>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>----
>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>-...
>-opts = {normalization_mode='NORMAL'}
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>- expected ON | OFF.'
>-...
>-opts.normalization_mode = 'OFF'
>----
>-...
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>----
>-...
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>----
>-...
>-opts.numeric_collation = 'PERL'
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>- expected ON | OFF.'
>-...
>-opts.numeric_collation = 'ON'
>----
>-...
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>----
>-...
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>----
>-...
>-opts.alternate_handling1 = 'ON'
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>-...
>-opts.alternate_handling1 = nil
>----
>-...
>-opts.alternate_handling = 'ON'
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>- expected NON_IGNORABLE | SHIFTED.'
>-...
>-opts.alternate_handling = 'SHIFTED'
>----
>-...
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>----
>-...
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>----
>-...
>-opts.case_first = 'ON'
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>- OFF | UPPER_FIRST | LOWER_FIRST.'
>-...
>-opts.case_first = 'OFF'
>----
>-...
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>----
>-...
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>----
>-...
>-opts.case_level = 'UPPER'
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>----
>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>- ON | OFF.'
>-...
>-opts.case_level = 'DEFAULT'
>----
>-...
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>----
>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>- ON | OFF.'
>-...
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>----
>-...
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>----
>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>-box.space._collation:select{}
>----
>-- - [0, 'none', 1, 'BINARY', '', {}]
>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>- - [3, 'binary', 1, 'BINARY', '', {}]
>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>-test_run:cmd('restart server default')
>-box.space._collation:select{}
>----
>-- - [0, 'none', 1, 'BINARY', '', {}]
>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>- - [3, 'binary', 1, 'BINARY', '', {}]
>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>-box.space._collation.index.name:delete{'test'}
>----
>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>-...
>---
>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>--- must work even if a collation is deleted from _collation.
>---
>-t = box.space._collation:delete{1}
>----
>-...
>-utf8.cmp('abc', 'def')
>----
>-- -1
>-...
>-box.space._collation:replace(t)
>----
>-- [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>-...
>---
>--- gh-2839: allow to store custom fields in field definition.
>---
>-format = {}
>----
>-...
>-format[1] = {name = 'field1', type = 'unsigned'}
>----
>-...
>-format[2] = {'field2', 'unsigned'}
>----
>-...
>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>----
>-...
>-s = box.schema.create_space('test', {format = format})
>----
>-...
>-s:format()[3].custom_field
>----
>-- custom_value
>-...
>-s:drop()
>----
>-...
>---
>--- gh-2937: allow to specify collation in field definition.
>---
>-format = {}
>----
>-...
>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>----
>-...
>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>----
>-...
>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>----
>-...
>-s = box.schema.create_space('test', {format = format})
>----
>-...
>-s:format()
>----
>-- [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>- 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>-...
>-s:drop()
>----
>-...
>--- Check that collation is allowed only for stings, scalar and any types.
>-format = {}
>----
>-...
>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>----
>-...
>-s = box.schema.create_space('test', {format = format})
>----
>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>- scalar and any fields'
>-...
>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>----
>-...
>-s = box.schema.create_space('test', {format = format})
>----
>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>- scalar and any fields'
>-...
>--- Check that error is raised when collation doesn't exists.
>-format = {}
>----
>-...
>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>----
>-...
>-s = box.schema.create_space('test', {format = format})
>----
>-- error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>-...
>--- Check that error is raised when collation with wrong id is used.
>-_space = box.space[box.schema.SPACE_ID]
>----
>-...
>-utils = require('utils')
>----
>-...
>-EMPTY_MAP = utils.setmap({})
>----
>-...
>-format = {{name = 'field1', type = 'string', collation = 666}}
>----
>-...
>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>----
>-...
>-_space:insert(surrogate_space)
>----
>-- error: 'Wrong collation options (field 1): collation was not found by ID'
>-...
>---
>--- gh-2783
>--- A ddl operation shoud fail before trying to lock a ddl latch
>--- in a multi-statement transaction.
>--- If operation tries to lock already an locked latch then the
>--- current transaction will be silently rolled back under our feet.
>--- This is confusing. So check for multi-statement transaction
>--- before locking the latch.
>---
>-test_latch = box.schema.space.create('test_latch')
>----
>-...
>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>----
>-...
>-fiber = require('fiber')
>----
>-...
>-c = fiber.channel(1)
>----
>-...
>-test_run:cmd("setopt delimiter ';'")
>----
>-- true
>-...
>-_ = fiber.create(function()
>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>- c:put(true)
>-end);
>----
>-...
>--- Should be Ok for now
>-box.begin()
>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>-box.commit();
>----
>-...
>-test_run:cmd("setopt delimiter ''");
>----
>-- true
>-...
>--- Explicitly roll back the transaction in multi-statement,
>--- which hasn't finished due to DDL error
>-box.rollback()
>----
>-...
>-_ = c:get()
>----
>-...
>-test_latch:drop() -- this is where everything stops
>----
>-...
>diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua
>deleted file mode 100644
>index 101bc6f9b..000000000
>--- a/test/box/ddl.test.lua
>+++ /dev/null
>@@ -1,272 +0,0 @@
>-env = require('test_run')
>-test_run = env.new()
>-
>-fiber = require'fiber'
>-
>--- simple test for parallel ddl execution
>-_ = box.schema.space.create('test'):create_index('pk')
>-
>-ch = fiber.channel(2)
>-
>-test_run:cmd("setopt delimiter ';'")
>-
>-function f1()
>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>- ch:put(true)
>-end;
>-
>-function f2()
>- box.space.test:create_index('third', {parts = {3, 'string'}})
>- ch:put(true)
>-end;
>-
>-test_run:cmd("setopt delimiter ''");
>-
>-_ = {fiber.create(f1), fiber.create(f2)}
>-
>-ch:get()
>-ch:get()
>-
>-_ = box.space.test:drop()
>-
>-test_run:cmd('restart server default')
>-
>-env = require('test_run')
>-test_run = env.new()
>-fiber = require'fiber'
>-
>-ch = fiber.channel(2)
>-
>---issue #928
>-space = box.schema.space.create('test_trunc')
>-_ = space:create_index('pk')
>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>-
>-function test_trunc() space:truncate() ch:put(true) end
>-
>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>-_ = {ch:get(), ch:get()}
>-space:drop()
>-
>--- index should not crash after alter
>-space = box.schema.space.create('test_swap')
>-index = space:create_index('pk')
>-space:replace({1, 2, 3})
>-index:rename('primary')
>-index2 = space:create_index('sec')
>-space:replace({2, 3, 1})
>-space:select()
>-space:drop()
>-
>-
>-ch = fiber.channel(3)
>-
>-_ = box.schema.space.create('test'):create_index('pk')
>-
>-test_run:cmd("setopt delimiter ';'")
>-function add_index()
>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>- ch:put(true)
>-end;
>-
>-function insert_tuple(tuple)
>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>-end;
>-test_run:cmd("setopt delimiter ''");
>-
>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>-{ch:get(), ch:get(), ch:get()}
>-
>-box.space.test:select()
>-
>-test_run:cmd('restart server default')
>-
>-box.space.test:select()
>-box.space.test:drop()
>-
>--- gh-2336 crash if format called twice during snapshot
>-fiber = require'fiber'
>-
>-space = box.schema.space.create('test_format')
>-_ = space:create_index('pk', { parts = { 1,'str' }})
>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>-str = string.rep("t",1024)
>-for i = 1, 10000 do space:insert{tostring(i), str} end
>-ch = fiber.channel(3)
>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>-
>-{ch:get(), ch:get(), ch:get()}
>-
>-space:drop()
>-
>--- collation
>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>-
>-box.internal.collation.create('test')
>-box.internal.collation.create('test', 'ICU')
>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>-box.internal.collation.create('test', 42, 'ru_RU')
>-box.internal.collation.create('test', 'ICU', 42)
>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>-box.internal.collation.drop('test')
>-box.internal.collation.drop('nothing') -- allowed
>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>-box.internal.collation.drop('test') --ok
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>-box.internal.collation.drop('test') --ok
>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>-box.internal.collation.drop('test') --ok
>-c = box.space._collation:get{1}:totable()
>-c[2] = 'unicode_test'
>-box.space._collation:replace(c)
>-
>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>-
>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>-box.internal.collation.exists('test')
>-
>-test_run:cmd('restart server default')
>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>-
>-box.internal.collation.exists('test')
>-box.internal.collation.drop('test')
>-
>-box.space._collation:auto_increment{'test'}
>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>-box.space._collation.index.name:delete{'test'} -- ok
>-box.space._collation.index.name:delete{'nothing'} -- allowed
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>-opts = {normalization_mode='NORMAL'}
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.normalization_mode = 'OFF'
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>-opts.numeric_collation = 'PERL'
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.numeric_collation = 'ON'
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>-opts.alternate_handling1 = 'ON'
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.alternate_handling1 = nil
>-opts.alternate_handling = 'ON'
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.alternate_handling = 'SHIFTED'
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>-opts.case_first = 'ON'
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.case_first = 'OFF'
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>-opts.case_level = 'UPPER'
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>-opts.case_level = 'DEFAULT'
>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>-_ = box.space._collation.index.name:delete{'test'} -- ok
>-
>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>-box.space._collation:select{}
>-test_run:cmd('restart server default')
>-box.space._collation:select{}
>-box.space._collation.index.name:delete{'test'}
>-
>---
>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>--- must work even if a collation is deleted from _collation.
>---
>-t = box.space._collation:delete{1}
>-utf8.cmp('abc', 'def')
>-box.space._collation:replace(t)
>-
>---
>--- gh-2839: allow to store custom fields in field definition.
>---
>-format = {}
>-format[1] = {name = 'field1', type = 'unsigned'}
>-format[2] = {'field2', 'unsigned'}
>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>-s = box.schema.create_space('test', {format = format})
>-s:format()[3].custom_field
>-s:drop()
>-
>---
>--- gh-2937: allow to specify collation in field definition.
>---
>-format = {}
>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>-s = box.schema.create_space('test', {format = format})
>-s:format()
>-s:drop()
>-
>--- Check that collation is allowed only for stings, scalar and any types.
>-format = {}
>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>-s = box.schema.create_space('test', {format = format})
>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>-s = box.schema.create_space('test', {format = format})
>-
>--- Check that error is raised when collation doesn't exists.
>-format = {}
>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>-s = box.schema.create_space('test', {format = format})
>-
>--- Check that error is raised when collation with wrong id is used.
>-_space = box.space[box.schema.SPACE_ID]
>-utils = require('utils')
>-EMPTY_MAP = utils.setmap({})
>-format = {{name = 'field1', type = 'string', collation = 666}}
>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>-_space:insert(surrogate_space)
>-
>---
>--- gh-2783
>--- A ddl operation shoud fail before trying to lock a ddl latch
>--- in a multi-statement transaction.
>--- If operation tries to lock already an locked latch then the
>--- current transaction will be silently rolled back under our feet.
>--- This is confusing. So check for multi-statement transaction
>--- before locking the latch.
>---
>-test_latch = box.schema.space.create('test_latch')
>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>-fiber = require('fiber')
>-c = fiber.channel(1)
>-test_run:cmd("setopt delimiter ';'")
>-_ = fiber.create(function()
>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>- c:put(true)
>-end);
>-
>--- Should be Ok for now
>-box.begin()
>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>-box.commit();
>-test_run:cmd("setopt delimiter ''");
>--- Explicitly roll back the transaction in multi-statement,
>--- which hasn't finished due to DDL error
>-box.rollback()
>-
>-_ = c:get()
>-test_latch:drop() -- this is where everything stops
>diff --git a/test/box/ddl_alter.result b/test/box/ddl_alter.result
>new file mode 100644
>index 000000000..ce4a6ee69
>--- /dev/null
>+++ b/test/box/ddl_alter.result
>@@ -0,0 +1,30 @@
>+-- test-run result file version 2
>+-- index should not crash after alter
>+space = box.schema.space.create('test_swap')
>+ | ---
>+ | ...
>+index = space:create_index('pk')
>+ | ---
>+ | ...
>+space:replace({1, 2, 3})
>+ | ---
>+ | - [1, 2, 3]
>+ | ...
>+index:rename('primary')
>+ | ---
>+ | ...
>+index2 = space:create_index('sec')
>+ | ---
>+ | ...
>+space:replace({2, 3, 1})
>+ | ---
>+ | - [2, 3, 1]
>+ | ...
>+space:select()
>+ | ---
>+ | - - [1, 2, 3]
>+ | - [2, 3, 1]
>+ | ...
>+space:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/ddl_alter.test.lua b/test/box/ddl_alter.test.lua
>new file mode 100644
>index 000000000..ab0263b78
>--- /dev/null
>+++ b/test/box/ddl_alter.test.lua
>@@ -0,0 +1,9 @@
>+-- index should not crash after alter
>+space = box.schema.space.create('test_swap')
>+index = space:create_index('pk')
>+space:replace({1, 2, 3})
>+index:rename('primary')
>+index2 = space:create_index('sec')
>+space:replace({2, 3, 1})
>+space:select()
>+space:drop()
>diff --git a/test/box/ddl_collation.result b/test/box/ddl_collation.result
>new file mode 100644
>index 000000000..2571ad072
>--- /dev/null
>+++ b/test/box/ddl_collation.result
>@@ -0,0 +1,853 @@
>+-- test-run result file version 2
>+env = require('test_run')
>+ | ---
>+ | ...
>+test_run = env.new()
>+ | ---
>+ | ...
>+
>+-- collation
>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>+ | ---
>+ | ...
>+
>+box.internal.collation.create('test')
>+ | ---
>+ | - error: Illegal parameters, type (second arg) must be a string
>+ | ...
>+box.internal.collation.create('test', 'ICU')
>+ | ---
>+ | - error: Illegal parameters, locale (third arg) must be a string
>+ | ...
>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>+ | ---
>+ | - error: Illegal parameters, name (first arg) must be a string
>+ | ...
>+box.internal.collation.create('test', 42, 'ru_RU')
>+ | ---
>+ | - error: Illegal parameters, type (second arg) must be a string
>+ | ...
>+box.internal.collation.create('test', 'ICU', 42)
>+ | ---
>+ | - error: Illegal parameters, locale (third arg) must be a string
>+ | ...
>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>+ | ---
>+ | - error: 'Failed to initialize collation: unknown collation type.'
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>+ | ---
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>+ | ---
>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>+ | ...
>+box.internal.collation.drop('test')
>+ | ---
>+ | ...
>+box.internal.collation.drop('nothing') -- allowed
>+ | ---
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>+ | ---
>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>+ | ---
>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>+ | ---
>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>+ | expected ON | OFF.'
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>+ | ---
>+ | ...
>+box.internal.collation.drop('test') --ok
>+ | ---
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>+ | PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>+ | ---
>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>+ | ---
>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>+ | ...
>+box.internal.collation.drop('test') --ok
>+ | ---
>+ | ...
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>+ | ---
>+ | ...
>+box.internal.collation.drop('test') --ok
>+ | ---
>+ | ...
>+c = box.space._collation:get{1}:totable()
>+ | ---
>+ | ...
>+c[2] = 'unicode_test'
>+ | ---
>+ | ...
>+box.space._collation:replace(c)
>+ | ---
>+ | - error: collation does not support alter
>+ | ...
>+
>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>+ | ---
>+ | ...
>+
>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>+ | ---
>+ | ...
>+box.internal.collation.exists('test')
>+ | ---
>+ | - true
>+ | ...
>+
>+test_run:cmd('restart server default')
>+ |
>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>+ | ---
>+ | ...
>+
>+box.internal.collation.exists('test')
>+ | ---
>+ | - true
>+ | ...
>+box.internal.collation.drop('test')
>+ | ---
>+ | ...
>+
>+box.space._collation:auto_increment{'test'}
>+ | ---
>+ | - error: Tuple field 3 required by space format is missing
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>+ | ---
>+ | - error: Tuple field 5 required by space format is missing
>+ | ...
>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>+ | ---
>+ | - error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>+ | ...
>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>+ | ---
>+ | - error: 'Tuple field 2 type does not match one required by operation: expected string'
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>+ | ---
>+ | - error: 'Tuple field 4 type does not match one required by operation: expected string'
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>+ | ---
>+ | - error: 'Tuple field 5 type does not match one required by operation: expected string'
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>+ | ---
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>+ | ---
>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>+ | ...
>+box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>+box.space._collation.index.name:delete{'nothing'} -- allowed
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>+ | ---
>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>+ | ---
>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>+ | ---
>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>+ | ...
>+opts = {normalization_mode='NORMAL'}
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>+ | expected ON | OFF.'
>+ | ...
>+opts.normalization_mode = 'OFF'
>+ | ---
>+ | ...
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>+ | ---
>+ | ...
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | ...
>+opts.numeric_collation = 'PERL'
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>+ | expected ON | OFF.'
>+ | ...
>+opts.numeric_collation = 'ON'
>+ | ---
>+ | ...
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+ | ---
>+ | ...
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | ...
>+opts.alternate_handling1 = 'ON'
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>+ | ...
>+opts.alternate_handling1 = nil
>+ | ---
>+ | ...
>+opts.alternate_handling = 'ON'
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>+ | expected NON_IGNORABLE | SHIFTED.'
>+ | ...
>+opts.alternate_handling = 'SHIFTED'
>+ | ---
>+ | ...
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+ | ---
>+ | ...
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | ...
>+opts.case_first = 'ON'
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>+ | OFF | UPPER_FIRST | LOWER_FIRST.'
>+ | ...
>+opts.case_first = 'OFF'
>+ | ---
>+ | ...
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+ | ---
>+ | ...
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | ...
>+opts.case_level = 'UPPER'
>+ | ---
>+ | ...
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>+ | ON | OFF.'
>+ | ...
>+opts.case_level = 'DEFAULT'
>+ | ---
>+ | ...
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+ | ---
>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>+ | ON | OFF.'
>+ | ...
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+ | ---
>+ | ...
>+
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>+ | ---
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>+box.space._collation:select{}
>+ | ---
>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>+test_run:cmd('restart server default')
>+ |
>+box.space._collation:select{}
>+ | ---
>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>+box.space._collation.index.name:delete{'test'}
>+ | ---
>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>+ | ...
>diff --git a/test/box/ddl_collation.test.lua b/test/box/ddl_collation.test.lua
>new file mode 100644
>index 000000000..ee26af9c6
>--- /dev/null
>+++ b/test/box/ddl_collation.test.lua
>@@ -0,0 +1,90 @@
>+env = require('test_run')
>+test_run = env.new()
>+
>+-- collation
>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>+
>+box.internal.collation.create('test')
>+box.internal.collation.create('test', 'ICU')
>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>+box.internal.collation.create('test', 42, 'ru_RU')
>+box.internal.collation.create('test', 'ICU', 42)
>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>+box.internal.collation.drop('test')
>+box.internal.collation.drop('nothing') -- allowed
>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>+box.internal.collation.drop('test') --ok
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>+box.internal.collation.drop('test') --ok
>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>+box.internal.collation.drop('test') --ok
>+c = box.space._collation:get{1}:totable()
>+c[2] = 'unicode_test'
>+box.space._collation:replace(c)
>+
>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>+
>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>+box.internal.collation.exists('test')
>+
>+test_run:cmd('restart server default')
>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>+
>+box.internal.collation.exists('test')
>+box.internal.collation.drop('test')
>+
>+box.space._collation:auto_increment{'test'}
>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>+box.space._collation.index.name:delete{'test'} -- ok
>+box.space._collation.index.name:delete{'nothing'} -- allowed
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>+opts = {normalization_mode='NORMAL'}
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.normalization_mode = 'OFF'
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+opts.numeric_collation = 'PERL'
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.numeric_collation = 'ON'
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+opts.alternate_handling1 = 'ON'
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.alternate_handling1 = nil
>+opts.alternate_handling = 'ON'
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.alternate_handling = 'SHIFTED'
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+opts.case_first = 'ON'
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.case_first = 'OFF'
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+opts.case_level = 'UPPER'
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>+opts.case_level = 'DEFAULT'
>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>+_ = box.space._collation.index.name:delete{'test'} -- ok
>+
>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>+box.space._collation:select{}
>+test_run:cmd('restart server default')
>+box.space._collation:select{}
>+box.space._collation.index.name:delete{'test'}
>diff --git a/test/box/ddl_collation_types.result b/test/box/ddl_collation_types.result
>new file mode 100644
>index 000000000..7eaef62c0
>--- /dev/null
>+++ b/test/box/ddl_collation_types.result
>@@ -0,0 +1,21 @@
>+-- test-run result file version 2
>+-- Check that collation is allowed only for strings, scalar and any types.
>+format = {}
>+ | ---
>+ | ...
>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>+ | ---
>+ | ...
>+s = box.schema.create_space('test', {format = format})
>+ | ---
>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>+ | scalar and any fields'
>+ | ...
>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>+ | ---
>+ | ...
>+s = box.schema.create_space('test', {format = format})
>+ | ---
>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>+ | scalar and any fields'
>+ | ...
>diff --git a/test/box/ddl_collation_types.test.lua b/test/box/ddl_collation_types.test.lua
>new file mode 100644
>index 000000000..5930d54b0
>--- /dev/null
>+++ b/test/box/ddl_collation_types.test.lua
>@@ -0,0 +1,6 @@
>+-- Check that collation is allowed only for strings, scalar and any types.
>+format = {}
>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>+s = box.schema.create_space('test', {format = format})
>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>+s = box.schema.create_space('test', {format = format})
>diff --git a/test/box/ddl_collation_wrong_id.result b/test/box/ddl_collation_wrong_id.result
>new file mode 100644
>index 000000000..c6cf058b1
>--- /dev/null
>+++ b/test/box/ddl_collation_wrong_id.result
>@@ -0,0 +1,21 @@
>+-- test-run result file version 2
>+-- Check that error is raised when collation with wrong id is used.
>+_space = box.space[box.schema.SPACE_ID]
>+ | ---
>+ | ...
>+utils = require('utils')
>+ | ---
>+ | ...
>+EMPTY_MAP = utils.setmap({})
>+ | ---
>+ | ...
>+format = {{name = 'field1', type = 'string', collation = 666}}
>+ | ---
>+ | ...
>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>+ | ---
>+ | ...
>+_space:insert(surrogate_space)
>+ | ---
>+ | - error: 'Wrong collation options (field 1): collation was not found by ID'
>+ | ...
>diff --git a/test/box/ddl_collation_wrong_id.test.lua b/test/box/ddl_collation_wrong_id.test.lua
>new file mode 100644
>index 000000000..8d28d3ee1
>--- /dev/null
>+++ b/test/box/ddl_collation_wrong_id.test.lua
>@@ -0,0 +1,7 @@
>+-- Check that error is raised when collation with wrong id is used.
>+_space = box.space[box.schema.SPACE_ID]
>+utils = require('utils')
>+EMPTY_MAP = utils.setmap({})
>+format = {{name = 'field1', type = 'string', collation = 666}}
>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>+_space:insert(surrogate_space)
>diff --git a/test/box/ddl_no_collation.result b/test/box/ddl_no_collation.result
>new file mode 100644
>index 000000000..6f4e8fa0b
>--- /dev/null
>+++ b/test/box/ddl_no_collation.result
>@@ -0,0 +1,12 @@
>+-- test-run result file version 2
>+-- Check that error is raised when collation doesn't exists.
>+format = {}
>+ | ---
>+ | ...
>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>+ | ---
>+ | ...
>+s = box.schema.create_space('test', {format = format})
>+ | ---
>+ | - error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>+ | ...
>diff --git a/test/box/ddl_no_collation.test.lua b/test/box/ddl_no_collation.test.lua
>new file mode 100644
>index 000000000..3e411373b
>--- /dev/null
>+++ b/test/box/ddl_no_collation.test.lua
>@@ -0,0 +1,4 @@
>+-- Check that error is raised when collation doesn't exists.
>+format = {}
>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>+s = box.schema.create_space('test', {format = format})
>diff --git a/test/box/ddl_parallel.result b/test/box/ddl_parallel.result
>new file mode 100644
>index 000000000..dfa4a1422
>--- /dev/null
>+++ b/test/box/ddl_parallel.result
>@@ -0,0 +1,61 @@
>+-- test-run result file version 2
>+env = require('test_run')
>+ | ---
>+ | ...
>+test_run = env.new()
>+ | ---
>+ | ...
>+
>+fiber = require'fiber'
>+ | ---
>+ | ...
>+
>+-- simple test for parallel ddl execution
>+_ = box.schema.space.create('test'):create_index('pk')
>+ | ---
>+ | ...
>+
>+ch = fiber.channel(2)
>+ | ---
>+ | ...
>+
>+test_run:cmd("setopt delimiter ';'")
>+ | ---
>+ | - true
>+ | ...
>+
>+function f1()
>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>+ ch:put(true)
>+end;
>+ | ---
>+ | ...
>+
>+function f2()
>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>+ ch:put(true)
>+end;
>+ | ---
>+ | ...
>+
>+test_run:cmd("setopt delimiter ''");
>+ | ---
>+ | - true
>+ | ...
>+
>+_ = {fiber.create(f1), fiber.create(f2)}
>+ | ---
>+ | ...
>+
>+ch:get()
>+ | ---
>+ | - true
>+ | ...
>+ch:get()
>+ | ---
>+ | - true
>+ | ...
>+
>+_ = box.space.test:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/ddl_parallel.test.lua b/test/box/ddl_parallel.test.lua
>new file mode 100644
>index 000000000..99c3bfdcc
>--- /dev/null
>+++ b/test/box/ddl_parallel.test.lua
>@@ -0,0 +1,30 @@
>+env = require('test_run')
>+test_run = env.new()
>+
>+fiber = require'fiber'
>+
>+-- simple test for parallel ddl execution
>+_ = box.schema.space.create('test'):create_index('pk')
>+
>+ch = fiber.channel(2)
>+
>+test_run:cmd("setopt delimiter ';'")
>+
>+function f1()
>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>+ ch:put(true)
>+end;
>+
>+function f2()
>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>+ ch:put(true)
>+end;
>+
>+test_run:cmd("setopt delimiter ''");
>+
>+_ = {fiber.create(f1), fiber.create(f2)}
>+
>+ch:get()
>+ch:get()
>+
>+_ = box.space.test:drop()
>diff --git a/test/box/ddl_tuple.result b/test/box/ddl_tuple.result
>new file mode 100644
>index 000000000..6a024a833
>--- /dev/null
>+++ b/test/box/ddl_tuple.result
>@@ -0,0 +1,67 @@
>+-- test-run result file version 2
>+env = require('test_run')
>+ | ---
>+ | ...
>+test_run = env.new()
>+ | ---
>+ | ...
>+
>+fiber = require'fiber'
>+ | ---
>+ | ...
>+ch = fiber.channel(3)
>+ | ---
>+ | ...
>+
>+_ = box.schema.space.create('test'):create_index('pk')
>+ | ---
>+ | ...
>+
>+test_run:cmd("setopt delimiter ';'")
>+ | ---
>+ | - true
>+ | ...
>+function add_index()
>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>+ ch:put(true)
>+end;
>+ | ---
>+ | ...
>+
>+function insert_tuple(tuple)
>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>+end;
>+ | ---
>+ | ...
>+test_run:cmd("setopt delimiter ''");
>+ | ---
>+ | - true
>+ | ...
>+
>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>+ | ---
>+ | ...
>+{ch:get(), ch:get(), ch:get()}
>+ | ---
>+ | - - - false
>+ | - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>+ | - - true
>+ | - [1, 2, 'a']
>+ | - true
>+ | ...
>+
>+box.space.test:select()
>+ | ---
>+ | - - [1, 2, 'a']
>+ | ...
>+
>+test_run:cmd('restart server default')
>+ |
>+
>+box.space.test:select()
>+ | ---
>+ | - - [1, 2, 'a']
>+ | ...
>+box.space.test:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/ddl_tuple.test.lua b/test/box/ddl_tuple.test.lua
>new file mode 100644
>index 000000000..1c78a00e4
>--- /dev/null
>+++ b/test/box/ddl_tuple.test.lua
>@@ -0,0 +1,28 @@
>+env = require('test_run')
>+test_run = env.new()
>+
>+fiber = require'fiber'
>+ch = fiber.channel(3)
>+
>+_ = box.schema.space.create('test'):create_index('pk')
>+
>+test_run:cmd("setopt delimiter ';'")
>+function add_index()
>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>+ ch:put(true)
>+end;
>+
>+function insert_tuple(tuple)
>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>+end;
>+test_run:cmd("setopt delimiter ''");
>+
>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>+{ch:get(), ch:get(), ch:get()}
>+
>+box.space.test:select()
>+
>+test_run:cmd('restart server default')
>+
>+box.space.test:select()
>+box.space.test:drop()
>diff --git a/test/box/gh-2336-ddl_call_twice.result b/test/box/gh-2336-ddl_call_twice.result
>new file mode 100644
>index 000000000..0f55c9c09
>--- /dev/null
>+++ b/test/box/gh-2336-ddl_call_twice.result
>@@ -0,0 +1,44 @@
>+-- test-run result file version 2
>+-- gh-2336 crash if format called twice during snapshot
>+fiber = require'fiber'
>+ | ---
>+ | ...
>+
>+space = box.schema.space.create('test_format')
>+ | ---
>+ | ...
>+_ = space:create_index('pk', { parts = { 1,'str' }})
>+ | ---
>+ | ...
>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>+ | ---
>+ | ...
>+str = string.rep("t",1024)
>+ | ---
>+ | ...
>+for i = 1, 10000 do space:insert{tostring(i), str} end
>+ | ---
>+ | ...
>+ch = fiber.channel(3)
>+ | ---
>+ | ...
>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>+ | ---
>+ | ...
>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>+ | ---
>+ | ...
>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>+ | ---
>+ | ...
>+
>+{ch:get(), ch:get(), ch:get()}
>+ | ---
>+ | - - true
>+ | - true
>+ | - true
>+ | ...
>+
>+space:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/gh-2336-ddl_call_twice.test.lua b/test/box/gh-2336-ddl_call_twice.test.lua
>new file mode 100644
>index 000000000..f92afc211
>--- /dev/null
>+++ b/test/box/gh-2336-ddl_call_twice.test.lua
>@@ -0,0 +1,16 @@
>+-- gh-2336 crash if format called twice during snapshot
>+fiber = require'fiber'
>+
>+space = box.schema.space.create('test_format')
>+_ = space:create_index('pk', { parts = { 1,'str' }})
>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>+str = string.rep("t",1024)
>+for i = 1, 10000 do space:insert{tostring(i), str} end
>+ch = fiber.channel(3)
>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>+
>+{ch:get(), ch:get(), ch:get()}
>+
>+space:drop()
>diff --git a/test/box/gh-2783-ddl_lock.result b/test/box/gh-2783-ddl_lock.result
>new file mode 100644
>index 000000000..7b3ba3444
>--- /dev/null
>+++ b/test/box/gh-2783-ddl_lock.result
>@@ -0,0 +1,62 @@
>+-- test-run result file version 2
>+env = require('test_run')
>+ | ---
>+ | ...
>+test_run = env.new()
>+ | ---
>+ | ...
>+
>+--
>+-- gh-2783
>+-- A ddl operation shoud fail before trying to lock a ddl latch
>+-- in a multi-statement transaction.
>+-- If operation tries to lock already an locked latch then the
>+-- current transaction will be silently rolled back under our feet.
>+-- This is confusing. So check for multi-statement transaction
>+-- before locking the latch.
>+--
>+test_latch = box.schema.space.create('test_latch')
>+ | ---
>+ | ...
>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>+ | ---
>+ | ...
>+fiber = require('fiber')
>+ | ---
>+ | ...
>+c = fiber.channel(1)
>+ | ---
>+ | ...
>+test_run:cmd("setopt delimiter ';'")
>+ | ---
>+ | - true
>+ | ...
>+_ = fiber.create(function()
>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>+ c:put(true)
>+end);
>+ | ---
>+ | ...
>+
>+-- Should be Ok for now
>+box.begin()
>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>+box.commit();
>+ | ---
>+ | ...
>+test_run:cmd("setopt delimiter ''");
>+ | ---
>+ | - true
>+ | ...
>+-- Explicitly roll back the transaction in multi-statement,
>+-- which hasn't finished due to DDL error
>+box.rollback()
>+ | ---
>+ | ...
>+
>+_ = c:get()
>+ | ---
>+ | ...
>+test_latch:drop() -- this is where everything stops
>+ | ---
>+ | ...
>diff --git a/test/box/gh-2783-ddl_lock.test.lua b/test/box/gh-2783-ddl_lock.test.lua
>new file mode 100644
>index 000000000..953e177a7
>--- /dev/null
>+++ b/test/box/gh-2783-ddl_lock.test.lua
>@@ -0,0 +1,33 @@
>+env = require('test_run')
>+test_run = env.new()
>+
>+--
>+-- gh-2783
>+-- A ddl operation shoud fail before trying to lock a ddl latch
>+-- in a multi-statement transaction.
>+-- If operation tries to lock already an locked latch then the
>+-- current transaction will be silently rolled back under our feet.
>+-- This is confusing. So check for multi-statement transaction
>+-- before locking the latch.
>+--
>+test_latch = box.schema.space.create('test_latch')
>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>+fiber = require('fiber')
>+c = fiber.channel(1)
>+test_run:cmd("setopt delimiter ';'")
>+_ = fiber.create(function()
>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>+ c:put(true)
>+end);
>+
>+-- Should be Ok for now
>+box.begin()
>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>+box.commit();
>+test_run:cmd("setopt delimiter ''");
>+-- Explicitly roll back the transaction in multi-statement,
>+-- which hasn't finished due to DDL error
>+box.rollback()
>+
>+_ = c:get()
>+test_latch:drop() -- this is where everything stops
>diff --git a/test/box/gh-2839-ddl_custom_fields.result b/test/box/gh-2839-ddl_custom_fields.result
>new file mode 100644
>index 000000000..3846fe08e
>--- /dev/null
>+++ b/test/box/gh-2839-ddl_custom_fields.result
>@@ -0,0 +1,26 @@
>+-- test-run result file version 2
>+--
>+-- gh-2839: allow to store custom fields in field definition.
>+--
>+format = {}
>+ | ---
>+ | ...
>+format[1] = {name = 'field1', type = 'unsigned'}
>+ | ---
>+ | ...
>+format[2] = {'field2', 'unsigned'}
>+ | ---
>+ | ...
>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>+ | ---
>+ | ...
>+s = box.schema.create_space('test', {format = format})
>+ | ---
>+ | ...
>+s:format()[3].custom_field
>+ | ---
>+ | - custom_value
>+ | ...
>+s:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/gh-2839-ddl_custom_fields.test.lua b/test/box/gh-2839-ddl_custom_fields.test.lua
>new file mode 100644
>index 000000000..e1c0e2a0b
>--- /dev/null
>+++ b/test/box/gh-2839-ddl_custom_fields.test.lua
>@@ -0,0 +1,10 @@
>+--
>+-- gh-2839: allow to store custom fields in field definition.
>+--
>+format = {}
>+format[1] = {name = 'field1', type = 'unsigned'}
>+format[2] = {'field2', 'unsigned'}
>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>+s = box.schema.create_space('test', {format = format})
>+s:format()[3].custom_field
>+s:drop()
>diff --git a/test/box/gh-2937-ddl_collation_field_def.result b/test/box/gh-2937-ddl_collation_field_def.result
>new file mode 100644
>index 000000000..8b3de607e
>--- /dev/null
>+++ b/test/box/gh-2937-ddl_collation_field_def.result
>@@ -0,0 +1,27 @@
>+-- test-run result file version 2
>+--
>+-- gh-2937: allow to specify collation in field definition.
>+--
>+format = {}
>+ | ---
>+ | ...
>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>+ | ---
>+ | ...
>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>+ | ---
>+ | ...
>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>+ | ---
>+ | ...
>+s = box.schema.create_space('test', {format = format})
>+ | ---
>+ | ...
>+s:format()
>+ | ---
>+ | - [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>+ | 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>+ | ...
>+s:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/gh-2937-ddl_collation_field_def.test.lua b/test/box/gh-2937-ddl_collation_field_def.test.lua
>new file mode 100644
>index 000000000..1ddfa7246
>--- /dev/null
>+++ b/test/box/gh-2937-ddl_collation_field_def.test.lua
>@@ -0,0 +1,10 @@
>+--
>+-- gh-2937: allow to specify collation in field definition.
>+--
>+format = {}
>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>+s = box.schema.create_space('test', {format = format})
>+s:format()
>+s:drop()
>diff --git a/test/box/gh-3290-ddl_collation_deleted.result b/test/box/gh-3290-ddl_collation_deleted.result
>new file mode 100644
>index 000000000..eb59b6c1d
>--- /dev/null
>+++ b/test/box/gh-3290-ddl_collation_deleted.result
>@@ -0,0 +1,16 @@
>+-- test-run result file version 2
>+--
>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>+-- must work even if a collation is deleted from _collation.
>+--
>+t = box.space._collation:delete{1}
>+ | ---
>+ | ...
>+utf8.cmp('abc', 'def')
>+ | ---
>+ | - -1
>+ | ...
>+box.space._collation:replace(t)
>+ | ---
>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>+ | ...
>diff --git a/test/box/gh-3290-ddl_collation_deleted.test.lua b/test/box/gh-3290-ddl_collation_deleted.test.lua
>new file mode 100644
>index 000000000..5fd3d7e1a
>--- /dev/null
>+++ b/test/box/gh-3290-ddl_collation_deleted.test.lua
>@@ -0,0 +1,7 @@
>+--
>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>+-- must work even if a collation is deleted from _collation.
>+--
>+t = box.space._collation:delete{1}
>+utf8.cmp('abc', 'def')
>+box.space._collation:replace(t)
>diff --git a/test/box/gh-928-ddl_truncate.result b/test/box/gh-928-ddl_truncate.result
>new file mode 100644
>index 000000000..f244e07f1
>--- /dev/null
>+++ b/test/box/gh-928-ddl_truncate.result
>@@ -0,0 +1,35 @@
>+-- test-run result file version 2
>+fiber = require'fiber'
>+ | ---
>+ | ...
>+ch = fiber.channel(2)
>+ | ---
>+ | ...
>+
>+--issue #928
>+space = box.schema.space.create('test_trunc')
>+ | ---
>+ | ...
>+_ = space:create_index('pk')
>+ | ---
>+ | ...
>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>+ | ---
>+ | ...
>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>+ | ---
>+ | ...
>+
>+function test_trunc() space:truncate() ch:put(true) end
>+ | ---
>+ | ...
>+
>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>+ | ---
>+ | ...
>+_ = {ch:get(), ch:get()}
>+ | ---
>+ | ...
>+space:drop()
>+ | ---
>+ | ...
>diff --git a/test/box/gh-928-ddl_truncate.test.lua b/test/box/gh-928-ddl_truncate.test.lua
>new file mode 100644
>index 000000000..10be8c361
>--- /dev/null
>+++ b/test/box/gh-928-ddl_truncate.test.lua
>@@ -0,0 +1,14 @@
>+fiber = require'fiber'
>+ch = fiber.channel(2)
>+
>+--issue #928
>+space = box.schema.space.create('test_trunc')
>+_ = space:create_index('pk')
>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>+
>+function test_trunc() space:truncate() ch:put(true) end
>+
>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>+_ = {ch:get(), ch:get()}
>+space:drop()
>--
>2.17.1
>  
 
 
--
Oleg Piskunov
 

[-- Attachment #2: Type: text/html, Size: 153920 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
  2020-03-18 12:06 ` Oleg Piskunov
@ 2020-03-19 13:50   ` Alexander Tikhonov
  2020-03-20  8:40     ` Oleg Piskunov
  2020-03-24  8:02     ` Sergey Bronnikov
  0 siblings, 2 replies; 6+ messages in thread
From: Alexander Tikhonov @ 2020-03-19 13:50 UTC (permalink / raw)
  To: Oleg Piskunov; +Cc: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 150190 bytes --]



Hi, Oleg, I’ve rechecked all the tests and didn’t find any used way to cleanup the fibers at the tests finish. I’ll suggest to discuss it in the future changes, but not mess with the current tests splitting.
  
>Среда, 18 марта 2020, 15:06 +03:00 от Oleg Piskunov <o.piskunov@tarantool.org>:
> 
>
>Hi,
> 
>Sasha, need to cleanup fibers in next tests:
> 
>test/box/ddl_parallel.test.lua 
>test/box/ddl_tuple.test.lua
>test/box/gh-2336-ddl_call_twice.test.lua 
>test/box/gh-2783-ddl_lock.test.lua
>test/box/gh-928-ddl_truncate.test.lua
Not needed in the current patch.
> 
>Unused fibers in next tests:
> 
>test/box/gh-822_net.box.test.lua 
> 
Was already removed in V2, please check if you mentioned correct test.
> 
>>Среда, 18 марта 2020, 13:37 +03:00 от Alexander V. Tikhonov < avtikhon@tarantool.org >:
>> 
>>Divided into tests:
>>- box/ddl_alter.test.lua
>>- box/ddl_collation.test.lua
>>- box/ddl_collation_types.test.lua
>>- box/ddl_collation_wrong_id.test.lua
>>- box/ddl_no_collation.test.lua
>>- box/ddl_parallel.test.lua
>>- box/ddl_tuple.test.lua
>>- box/gh-2336-ddl_call_twice.test.lua
>>- box/gh-2783-ddl_lock.test.lua
>>- box/gh-2839-ddl_custom_fields.test.lua
>>- box/gh-2937-ddl_collation_field_def.test.lua
>>- box/gh-3290-ddl_collation_deleted.test.lua
>>- box/gh-928-ddl_truncate.test.lua
>>---
>>
>>Github:  https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests
>>
>> test/box/ddl.result | 1210 -----------------
>> test/box/ddl.test.lua | 272 ----
>> test/box/ddl_alter.result | 30 +
>> test/box/ddl_alter.test.lua | 9 +
>> test/box/ddl_collation.result | 853 ++++++++++++
>> test/box/ddl_collation.test.lua | 90 ++
>> test/box/ddl_collation_types.result | 21 +
>> test/box/ddl_collation_types.test.lua | 6 +
>> test/box/ddl_collation_wrong_id.result | 21 +
>> test/box/ddl_collation_wrong_id.test.lua | 7 +
>> test/box/ddl_no_collation.result | 12 +
>> test/box/ddl_no_collation.test.lua | 4 +
>> test/box/ddl_parallel.result | 61 +
>> test/box/ddl_parallel.test.lua | 30 +
>> test/box/ddl_tuple.result | 67 +
>> test/box/ddl_tuple.test.lua | 28 +
>> test/box/gh-2336-ddl_call_twice.result | 44 +
>> test/box/gh-2336-ddl_call_twice.test.lua | 16 +
>> test/box/gh-2783-ddl_lock.result | 62 +
>> test/box/gh-2783-ddl_lock.test.lua | 33 +
>> test/box/gh-2839-ddl_custom_fields.result | 26 +
>> test/box/gh-2839-ddl_custom_fields.test.lua | 10 +
>> .../gh-2937-ddl_collation_field_def.result | 27 +
>> .../gh-2937-ddl_collation_field_def.test.lua | 10 +
>> test/box/gh-3290-ddl_collation_deleted.result | 16 +
>> .../gh-3290-ddl_collation_deleted.test.lua | 7 +
>> test/box/gh-928-ddl_truncate.result | 35 +
>> test/box/gh-928-ddl_truncate.test.lua | 14 +
>> 28 files changed, 1539 insertions(+), 1482 deletions(-)
>> delete mode 100644 test/box/ddl.result
>> delete mode 100644 test/box/ddl.test.lua
>> create mode 100644 test/box/ddl_alter.result
>> create mode 100644 test/box/ddl_alter.test.lua
>> create mode 100644 test/box/ddl_collation.result
>> create mode 100644 test/box/ddl_collation.test.lua
>> create mode 100644 test/box/ddl_collation_types.result
>> create mode 100644 test/box/ddl_collation_types.test.lua
>> create mode 100644 test/box/ddl_collation_wrong_id.result
>> create mode 100644 test/box/ddl_collation_wrong_id.test.lua
>> create mode 100644 test/box/ddl_no_collation.result
>> create mode 100644 test/box/ddl_no_collation.test.lua
>> create mode 100644 test/box/ddl_parallel.result
>> create mode 100644 test/box/ddl_parallel.test.lua
>> create mode 100644 test/box/ddl_tuple.result
>> create mode 100644 test/box/ddl_tuple.test.lua
>> create mode 100644 test/box/gh-2336-ddl_call_twice.result
>> create mode 100644 test/box/gh-2336-ddl_call_twice.test.lua
>> create mode 100644 test/box/gh-2783-ddl_lock.result
>> create mode 100644 test/box/gh-2783-ddl_lock.test.lua
>> create mode 100644 test/box/gh-2839-ddl_custom_fields.result
>> create mode 100644 test/box/gh-2839-ddl_custom_fields.test.lua
>> create mode 100644 test/box/gh-2937-ddl_collation_field_def.result
>> create mode 100644 test/box/gh-2937-ddl_collation_field_def.test.lua
>> create mode 100644 test/box/gh-3290-ddl_collation_deleted.result
>> create mode 100644 test/box/gh-3290-ddl_collation_deleted.test.lua
>> create mode 100644 test/box/gh-928-ddl_truncate.result
>> create mode 100644 test/box/gh-928-ddl_truncate.test.lua
>>
>>diff --git a/test/box/ddl.result b/test/box/ddl.result
>>deleted file mode 100644
>>index b995b1493..000000000
>>--- a/test/box/ddl.result
>>+++ /dev/null
>>@@ -1,1210 +0,0 @@
>>-env = require('test_run')
>>----
>>-...
>>-test_run = env.new()
>>----
>>-...
>>-fiber = require'fiber'
>>----
>>-...
>>--- simple test for parallel ddl execution
>>-_ = box.schema.space.create('test'):create_index('pk')
>>----
>>-...
>>-ch = fiber.channel(2)
>>----
>>-...
>>-test_run:cmd("setopt delimiter ';'")
>>----
>>-- true
>>-...
>>-function f1()
>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>- ch:put(true)
>>-end;
>>----
>>-...
>>-function f2()
>>- box.space.test:create_index('third', {parts = {3, 'string'}})
>>- ch:put(true)
>>-end;
>>----
>>-...
>>-test_run:cmd("setopt delimiter ''");
>>----
>>-- true
>>-...
>>-_ = {fiber.create(f1), fiber.create(f2)}
>>----
>>-...
>>-ch:get()
>>----
>>-- true
>>-...
>>-ch:get()
>>----
>>-- true
>>-...
>>-_ = box.space.test:drop()
>>----
>>-...
>>-test_run:cmd('restart server default')
>>-env = require('test_run')
>>----
>>-...
>>-test_run = env.new()
>>----
>>-...
>>-fiber = require'fiber'
>>----
>>-...
>>-ch = fiber.channel(2)
>>----
>>-...
>>---issue #928
>>-space = box.schema.space.create('test_trunc')
>>----
>>-...
>>-_ = space:create_index('pk')
>>----
>>-...
>>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>----
>>-...
>>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>----
>>-...
>>-function test_trunc() space:truncate() ch:put(true) end
>>----
>>-...
>>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>----
>>-...
>>-_ = {ch:get(), ch:get()}
>>----
>>-...
>>-space:drop()
>>----
>>-...
>>--- index should not crash after alter
>>-space = box.schema.space.create('test_swap')
>>----
>>-...
>>-index = space:create_index('pk')
>>----
>>-...
>>-space:replace({1, 2, 3})
>>----
>>-- [1, 2, 3]
>>-...
>>-index:rename('primary')
>>----
>>-...
>>-index2 = space:create_index('sec')
>>----
>>-...
>>-space:replace({2, 3, 1})
>>----
>>-- [2, 3, 1]
>>-...
>>-space:select()
>>----
>>-- - [1, 2, 3]
>>- - [2, 3, 1]
>>-...
>>-space:drop()
>>----
>>-...
>>-ch = fiber.channel(3)
>>----
>>-...
>>-_ = box.schema.space.create('test'):create_index('pk')
>>----
>>-...
>>-test_run:cmd("setopt delimiter ';'")
>>----
>>-- true
>>-...
>>-function add_index()
>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>- ch:put(true)
>>-end;
>>----
>>-...
>>-function insert_tuple(tuple)
>>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>-end;
>>----
>>-...
>>-test_run:cmd("setopt delimiter ''");
>>----
>>-- true
>>-...
>>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>----
>>-...
>>-{ch:get(), ch:get(), ch:get()}
>>----
>>-- - - false
>>- - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>>- - - true
>>- - [1, 2, 'a']
>>- - true
>>-...
>>-box.space.test:select()
>>----
>>-- - [1, 2, 'a']
>>-...
>>-test_run:cmd('restart server default')
>>-box.space.test:select()
>>----
>>-- - [1, 2, 'a']
>>-...
>>-box.space.test:drop()
>>----
>>-...
>>--- gh-2336 crash if format called twice during snapshot
>>-fiber = require'fiber'
>>----
>>-...
>>-space = box.schema.space.create('test_format')
>>----
>>-...
>>-_ = space:create_index('pk', { parts = { 1,'str' }})
>>----
>>-...
>>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>----
>>-...
>>-str = string.rep("t",1024)
>>----
>>-...
>>-for i = 1, 10000 do space:insert{tostring(i), str} end
>>----
>>-...
>>-ch = fiber.channel(3)
>>----
>>-...
>>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>----
>>-...
>>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>----
>>-...
>>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>----
>>-...
>>-{ch:get(), ch:get(), ch:get()}
>>----
>>-- - true
>>- - true
>>- - true
>>-...
>>-space:drop()
>>----
>>-...
>>--- collation
>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>----
>>-...
>>-box.internal.collation.create('test')
>>----
>>-- error: Illegal parameters, type (second arg) must be a string
>>-...
>>-box.internal.collation.create('test', 'ICU')
>>----
>>-- error: Illegal parameters, locale (third arg) must be a string
>>-...
>>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>>----
>>-- error: Illegal parameters, name (first arg) must be a string
>>-...
>>-box.internal.collation.create('test', 42, 'ru_RU')
>>----
>>-- error: Illegal parameters, type (second arg) must be a string
>>-...
>>-box.internal.collation.create('test', 'ICU', 42)
>>----
>>-- error: Illegal parameters, locale (third arg) must be a string
>>-...
>>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>>----
>>-- error: 'Failed to initialize collation: unknown collation type.'
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>----
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>----
>>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>>-...
>>-box.internal.collation.drop('test')
>>----
>>-...
>>-box.internal.collation.drop('nothing') -- allowed
>>----
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>----
>>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>----
>>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>----
>>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>----
>>-- error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>>- expected ON | OFF.'
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>----
>>-...
>>-box.internal.collation.drop('test') --ok
>>----
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>----
>>-- error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>>- PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>----
>>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>----
>>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>-...
>>-box.internal.collation.drop('test') --ok
>>----
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>----
>>-...
>>-box.internal.collation.drop('test') --ok
>>----
>>-...
>>-c = box.space._collation:get{1}:totable()
>>----
>>-...
>>-c[2] = 'unicode_test'
>>----
>>-...
>>-box.space._collation:replace(c)
>>----
>>-- error: collation does not support alter
>>-...
>>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>----
>>-...
>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>----
>>-...
>>-box.internal.collation.exists('test')
>>----
>>-- true
>>-...
>>-test_run:cmd('restart server default')
>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>----
>>-...
>>-box.internal.collation.exists('test')
>>----
>>-- true
>>-...
>>-box.internal.collation.drop('test')
>>----
>>-...
>>-box.space._collation:auto_increment{'test'}
>>----
>>-- error: Tuple field 3 required by space format is missing
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>>----
>>-- error: Tuple field 5 required by space format is missing
>>-...
>>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>----
>>-- error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>>-...
>>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>----
>>-- error: 'Tuple field 2 type does not match one required by operation: expected string'
>>-...
>>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>----
>>-- error: 'Tuple field 4 type does not match one required by operation: expected string'
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>----
>>-- error: 'Tuple field 5 type does not match one required by operation: expected string'
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>----
>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>----
>>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>>-...
>>-box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>-box.space._collation.index.name:delete{'nothing'} -- allowed
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>----
>>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>----
>>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>----
>>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>-...
>>-opts = {normalization_mode='NORMAL'}
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>>- expected ON | OFF.'
>>-...
>>-opts.normalization_mode = 'OFF'
>>----
>>-...
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>----
>>-...
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-...
>>-opts.numeric_collation = 'PERL'
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>>- expected ON | OFF.'
>>-...
>>-opts.numeric_collation = 'ON'
>>----
>>-...
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>----
>>-...
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-...
>>-opts.alternate_handling1 = 'ON'
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>>-...
>>-opts.alternate_handling1 = nil
>>----
>>-...
>>-opts.alternate_handling = 'ON'
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>>- expected NON_IGNORABLE | SHIFTED.'
>>-...
>>-opts.alternate_handling = 'SHIFTED'
>>----
>>-...
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>----
>>-...
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-...
>>-opts.case_first = 'ON'
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>>- OFF | UPPER_FIRST | LOWER_FIRST.'
>>-...
>>-opts.case_first = 'OFF'
>>----
>>-...
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>----
>>-...
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-...
>>-opts.case_level = 'UPPER'
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>----
>>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>- ON | OFF.'
>>-...
>>-opts.case_level = 'DEFAULT'
>>----
>>-...
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>----
>>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>- ON | OFF.'
>>-...
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>----
>>-...
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>----
>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>-box.space._collation:select{}
>>----
>>-- - [0, 'none', 1, 'BINARY', '', {}]
>>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>- - [3, 'binary', 1, 'BINARY', '', {}]
>>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>-test_run:cmd('restart server default')
>>-box.space._collation:select{}
>>----
>>-- - [0, 'none', 1, 'BINARY', '', {}]
>>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>- - [3, 'binary', 1, 'BINARY', '', {}]
>>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>-box.space._collation.index.name:delete{'test'}
>>----
>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>-...
>>---
>>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>--- must work even if a collation is deleted from _collation.
>>---
>>-t = box.space._collation:delete{1}
>>----
>>-...
>>-utf8.cmp('abc', 'def')
>>----
>>-- -1
>>-...
>>-box.space._collation:replace(t)
>>----
>>-- [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>-...
>>---
>>--- gh-2839: allow to store custom fields in field definition.
>>---
>>-format = {}
>>----
>>-...
>>-format[1] = {name = 'field1', type = 'unsigned'}
>>----
>>-...
>>-format[2] = {'field2', 'unsigned'}
>>----
>>-...
>>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>----
>>-...
>>-s = box.schema.create_space('test', {format = format})
>>----
>>-...
>>-s:format()[3].custom_field
>>----
>>-- custom_value
>>-...
>>-s:drop()
>>----
>>-...
>>---
>>--- gh-2937: allow to specify collation in field definition.
>>---
>>-format = {}
>>----
>>-...
>>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>----
>>-...
>>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>----
>>-...
>>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>----
>>-...
>>-s = box.schema.create_space('test', {format = format})
>>----
>>-...
>>-s:format()
>>----
>>-- [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>>- 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>>-...
>>-s:drop()
>>----
>>-...
>>--- Check that collation is allowed only for stings, scalar and any types.
>>-format = {}
>>----
>>-...
>>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>----
>>-...
>>-s = box.schema.create_space('test', {format = format})
>>----
>>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>>- scalar and any fields'
>>-...
>>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>----
>>-...
>>-s = box.schema.create_space('test', {format = format})
>>----
>>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>>- scalar and any fields'
>>-...
>>--- Check that error is raised when collation doesn't exists.
>>-format = {}
>>----
>>-...
>>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>----
>>-...
>>-s = box.schema.create_space('test', {format = format})
>>----
>>-- error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>>-...
>>--- Check that error is raised when collation with wrong id is used.
>>-_space = box.space[box.schema.SPACE_ID]
>>----
>>-...
>>-utils = require('utils')
>>----
>>-...
>>-EMPTY_MAP = utils.setmap({})
>>----
>>-...
>>-format = {{name = 'field1', type = 'string', collation = 666}}
>>----
>>-...
>>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>----
>>-...
>>-_space:insert(surrogate_space)
>>----
>>-- error: 'Wrong collation options (field 1): collation was not found by ID'
>>-...
>>---
>>--- gh-2783
>>--- A ddl operation shoud fail before trying to lock a ddl latch
>>--- in a multi-statement transaction.
>>--- If operation tries to lock already an locked latch then the
>>--- current transaction will be silently rolled back under our feet.
>>--- This is confusing. So check for multi-statement transaction
>>--- before locking the latch.
>>---
>>-test_latch = box.schema.space.create('test_latch')
>>----
>>-...
>>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>----
>>-...
>>-fiber = require('fiber')
>>----
>>-...
>>-c = fiber.channel(1)
>>----
>>-...
>>-test_run:cmd("setopt delimiter ';'")
>>----
>>-- true
>>-...
>>-_ = fiber.create(function()
>>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>- c:put(true)
>>-end);
>>----
>>-...
>>--- Should be Ok for now
>>-box.begin()
>>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>-box.commit();
>>----
>>-...
>>-test_run:cmd("setopt delimiter ''");
>>----
>>-- true
>>-...
>>--- Explicitly roll back the transaction in multi-statement,
>>--- which hasn't finished due to DDL error
>>-box.rollback()
>>----
>>-...
>>-_ = c:get()
>>----
>>-...
>>-test_latch:drop() -- this is where everything stops
>>----
>>-...
>>diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua
>>deleted file mode 100644
>>index 101bc6f9b..000000000
>>--- a/test/box/ddl.test.lua
>>+++ /dev/null
>>@@ -1,272 +0,0 @@
>>-env = require('test_run')
>>-test_run = env.new()
>>-
>>-fiber = require'fiber'
>>-
>>--- simple test for parallel ddl execution
>>-_ = box.schema.space.create('test'):create_index('pk')
>>-
>>-ch = fiber.channel(2)
>>-
>>-test_run:cmd("setopt delimiter ';'")
>>-
>>-function f1()
>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>- ch:put(true)
>>-end;
>>-
>>-function f2()
>>- box.space.test:create_index('third', {parts = {3, 'string'}})
>>- ch:put(true)
>>-end;
>>-
>>-test_run:cmd("setopt delimiter ''");
>>-
>>-_ = {fiber.create(f1), fiber.create(f2)}
>>-
>>-ch:get()
>>-ch:get()
>>-
>>-_ = box.space.test:drop()
>>-
>>-test_run:cmd('restart server default')
>>-
>>-env = require('test_run')
>>-test_run = env.new()
>>-fiber = require'fiber'
>>-
>>-ch = fiber.channel(2)
>>-
>>---issue #928
>>-space = box.schema.space.create('test_trunc')
>>-_ = space:create_index('pk')
>>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>-
>>-function test_trunc() space:truncate() ch:put(true) end
>>-
>>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>-_ = {ch:get(), ch:get()}
>>-space:drop()
>>-
>>--- index should not crash after alter
>>-space = box.schema.space.create('test_swap')
>>-index = space:create_index('pk')
>>-space:replace({1, 2, 3})
>>-index:rename('primary')
>>-index2 = space:create_index('sec')
>>-space:replace({2, 3, 1})
>>-space:select()
>>-space:drop()
>>-
>>-
>>-ch = fiber.channel(3)
>>-
>>-_ = box.schema.space.create('test'):create_index('pk')
>>-
>>-test_run:cmd("setopt delimiter ';'")
>>-function add_index()
>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>- ch:put(true)
>>-end;
>>-
>>-function insert_tuple(tuple)
>>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>-end;
>>-test_run:cmd("setopt delimiter ''");
>>-
>>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>-{ch:get(), ch:get(), ch:get()}
>>-
>>-box.space.test:select()
>>-
>>-test_run:cmd('restart server default')
>>-
>>-box.space.test:select()
>>-box.space.test:drop()
>>-
>>--- gh-2336 crash if format called twice during snapshot
>>-fiber = require'fiber'
>>-
>>-space = box.schema.space.create('test_format')
>>-_ = space:create_index('pk', { parts = { 1,'str' }})
>>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>-str = string.rep("t",1024)
>>-for i = 1, 10000 do space:insert{tostring(i), str} end
>>-ch = fiber.channel(3)
>>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>-
>>-{ch:get(), ch:get(), ch:get()}
>>-
>>-space:drop()
>>-
>>--- collation
>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>-
>>-box.internal.collation.create('test')
>>-box.internal.collation.create('test', 'ICU')
>>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>>-box.internal.collation.create('test', 42, 'ru_RU')
>>-box.internal.collation.create('test', 'ICU', 42)
>>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>-box.internal.collation.drop('test')
>>-box.internal.collation.drop('nothing') -- allowed
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>-box.internal.collation.drop('test') --ok
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>-box.internal.collation.drop('test') --ok
>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>-box.internal.collation.drop('test') --ok
>>-c = box.space._collation:get{1}:totable()
>>-c[2] = 'unicode_test'
>>-box.space._collation:replace(c)
>>-
>>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>-
>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>-box.internal.collation.exists('test')
>>-
>>-test_run:cmd('restart server default')
>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>-
>>-box.internal.collation.exists('test')
>>-box.internal.collation.drop('test')
>>-
>>-box.space._collation:auto_increment{'test'}
>>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>-box.space._collation.index.name:delete{'test'} -- ok
>>-box.space._collation.index.name:delete{'nothing'} -- allowed
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>-opts = {normalization_mode='NORMAL'}
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.normalization_mode = 'OFF'
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>-opts.numeric_collation = 'PERL'
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.numeric_collation = 'ON'
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>-opts.alternate_handling1 = 'ON'
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.alternate_handling1 = nil
>>-opts.alternate_handling = 'ON'
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.alternate_handling = 'SHIFTED'
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>-opts.case_first = 'ON'
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.case_first = 'OFF'
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>-opts.case_level = 'UPPER'
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>-opts.case_level = 'DEFAULT'
>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>-
>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>-box.space._collation:select{}
>>-test_run:cmd('restart server default')
>>-box.space._collation:select{}
>>-box.space._collation.index.name:delete{'test'}
>>-
>>---
>>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>--- must work even if a collation is deleted from _collation.
>>---
>>-t = box.space._collation:delete{1}
>>-utf8.cmp('abc', 'def')
>>-box.space._collation:replace(t)
>>-
>>---
>>--- gh-2839: allow to store custom fields in field definition.
>>---
>>-format = {}
>>-format[1] = {name = 'field1', type = 'unsigned'}
>>-format[2] = {'field2', 'unsigned'}
>>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>-s = box.schema.create_space('test', {format = format})
>>-s:format()[3].custom_field
>>-s:drop()
>>-
>>---
>>--- gh-2937: allow to specify collation in field definition.
>>---
>>-format = {}
>>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>-s = box.schema.create_space('test', {format = format})
>>-s:format()
>>-s:drop()
>>-
>>--- Check that collation is allowed only for stings, scalar and any types.
>>-format = {}
>>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>-s = box.schema.create_space('test', {format = format})
>>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>-s = box.schema.create_space('test', {format = format})
>>-
>>--- Check that error is raised when collation doesn't exists.
>>-format = {}
>>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>-s = box.schema.create_space('test', {format = format})
>>-
>>--- Check that error is raised when collation with wrong id is used.
>>-_space = box.space[box.schema.SPACE_ID]
>>-utils = require('utils')
>>-EMPTY_MAP = utils.setmap({})
>>-format = {{name = 'field1', type = 'string', collation = 666}}
>>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>-_space:insert(surrogate_space)
>>-
>>---
>>--- gh-2783
>>--- A ddl operation shoud fail before trying to lock a ddl latch
>>--- in a multi-statement transaction.
>>--- If operation tries to lock already an locked latch then the
>>--- current transaction will be silently rolled back under our feet.
>>--- This is confusing. So check for multi-statement transaction
>>--- before locking the latch.
>>---
>>-test_latch = box.schema.space.create('test_latch')
>>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>-fiber = require('fiber')
>>-c = fiber.channel(1)
>>-test_run:cmd("setopt delimiter ';'")
>>-_ = fiber.create(function()
>>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>- c:put(true)
>>-end);
>>-
>>--- Should be Ok for now
>>-box.begin()
>>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>-box.commit();
>>-test_run:cmd("setopt delimiter ''");
>>--- Explicitly roll back the transaction in multi-statement,
>>--- which hasn't finished due to DDL error
>>-box.rollback()
>>-
>>-_ = c:get()
>>-test_latch:drop() -- this is where everything stops
>>diff --git a/test/box/ddl_alter.result b/test/box/ddl_alter.result
>>new file mode 100644
>>index 000000000..ce4a6ee69
>>--- /dev/null
>>+++ b/test/box/ddl_alter.result
>>@@ -0,0 +1,30 @@
>>+-- test-run result file version 2
>>+-- index should not crash after alter
>>+space = box.schema.space.create('test_swap')
>>+ | ---
>>+ | ...
>>+index = space:create_index('pk')
>>+ | ---
>>+ | ...
>>+space:replace({1, 2, 3})
>>+ | ---
>>+ | - [1, 2, 3]
>>+ | ...
>>+index:rename('primary')
>>+ | ---
>>+ | ...
>>+index2 = space:create_index('sec')
>>+ | ---
>>+ | ...
>>+space:replace({2, 3, 1})
>>+ | ---
>>+ | - [2, 3, 1]
>>+ | ...
>>+space:select()
>>+ | ---
>>+ | - - [1, 2, 3]
>>+ | - [2, 3, 1]
>>+ | ...
>>+space:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/ddl_alter.test.lua b/test/box/ddl_alter.test.lua
>>new file mode 100644
>>index 000000000..ab0263b78
>>--- /dev/null
>>+++ b/test/box/ddl_alter.test.lua
>>@@ -0,0 +1,9 @@
>>+-- index should not crash after alter
>>+space = box.schema.space.create('test_swap')
>>+index = space:create_index('pk')
>>+space:replace({1, 2, 3})
>>+index:rename('primary')
>>+index2 = space:create_index('sec')
>>+space:replace({2, 3, 1})
>>+space:select()
>>+space:drop()
>>diff --git a/test/box/ddl_collation.result b/test/box/ddl_collation.result
>>new file mode 100644
>>index 000000000..2571ad072
>>--- /dev/null
>>+++ b/test/box/ddl_collation.result
>>@@ -0,0 +1,853 @@
>>+-- test-run result file version 2
>>+env = require('test_run')
>>+ | ---
>>+ | ...
>>+test_run = env.new()
>>+ | ---
>>+ | ...
>>+
>>+-- collation
>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>+ | ---
>>+ | ...
>>+
>>+box.internal.collation.create('test')
>>+ | ---
>>+ | - error: Illegal parameters, type (second arg) must be a string
>>+ | ...
>>+box.internal.collation.create('test', 'ICU')
>>+ | ---
>>+ | - error: Illegal parameters, locale (third arg) must be a string
>>+ | ...
>>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>>+ | ---
>>+ | - error: Illegal parameters, name (first arg) must be a string
>>+ | ...
>>+box.internal.collation.create('test', 42, 'ru_RU')
>>+ | ---
>>+ | - error: Illegal parameters, type (second arg) must be a string
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 42)
>>+ | ---
>>+ | - error: Illegal parameters, locale (third arg) must be a string
>>+ | ...
>>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>>+ | ---
>>+ | - error: 'Failed to initialize collation: unknown collation type.'
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>+ | ---
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>+ | ---
>>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>>+ | ...
>>+box.internal.collation.drop('test')
>>+ | ---
>>+ | ...
>>+box.internal.collation.drop('nothing') -- allowed
>>+ | ---
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>+ | ---
>>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>+ | ---
>>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>+ | ---
>>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>>+ | expected ON | OFF.'
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>+ | ---
>>+ | ...
>>+box.internal.collation.drop('test') --ok
>>+ | ---
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>>+ | PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>+ | ---
>>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>+ | ---
>>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>+ | ...
>>+box.internal.collation.drop('test') --ok
>>+ | ---
>>+ | ...
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>+ | ---
>>+ | ...
>>+box.internal.collation.drop('test') --ok
>>+ | ---
>>+ | ...
>>+c = box.space._collation:get{1}:totable()
>>+ | ---
>>+ | ...
>>+c[2] = 'unicode_test'
>>+ | ---
>>+ | ...
>>+box.space._collation:replace(c)
>>+ | ---
>>+ | - error: collation does not support alter
>>+ | ...
>>+
>>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>+ | ---
>>+ | ...
>>+
>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>+ | ---
>>+ | ...
>>+box.internal.collation.exists('test')
>>+ | ---
>>+ | - true
>>+ | ...
>>+
>>+test_run:cmd('restart server default')
>>+ |
>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>+ | ---
>>+ | ...
>>+
>>+box.internal.collation.exists('test')
>>+ | ---
>>+ | - true
>>+ | ...
>>+box.internal.collation.drop('test')
>>+ | ---
>>+ | ...
>>+
>>+box.space._collation:auto_increment{'test'}
>>+ | ---
>>+ | - error: Tuple field 3 required by space format is missing
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>>+ | ---
>>+ | - error: Tuple field 5 required by space format is missing
>>+ | ...
>>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>+ | ---
>>+ | - error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>>+ | ...
>>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>+ | ---
>>+ | - error: 'Tuple field 2 type does not match one required by operation: expected string'
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>+ | ---
>>+ | - error: 'Tuple field 4 type does not match one required by operation: expected string'
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>+ | ---
>>+ | - error: 'Tuple field 5 type does not match one required by operation: expected string'
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>+ | ---
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>+ | ---
>>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>>+ | ...
>>+box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>+box.space._collation.index.name:delete{'nothing'} -- allowed
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>+ | ---
>>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>+ | ---
>>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>+ | ---
>>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>+ | ...
>>+opts = {normalization_mode='NORMAL'}
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>>+ | expected ON | OFF.'
>>+ | ...
>>+opts.normalization_mode = 'OFF'
>>+ | ---
>>+ | ...
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>+ | ---
>>+ | ...
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | ...
>>+opts.numeric_collation = 'PERL'
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>>+ | expected ON | OFF.'
>>+ | ...
>>+opts.numeric_collation = 'ON'
>>+ | ---
>>+ | ...
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+ | ---
>>+ | ...
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | ...
>>+opts.alternate_handling1 = 'ON'
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>>+ | ...
>>+opts.alternate_handling1 = nil
>>+ | ---
>>+ | ...
>>+opts.alternate_handling = 'ON'
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>>+ | expected NON_IGNORABLE | SHIFTED.'
>>+ | ...
>>+opts.alternate_handling = 'SHIFTED'
>>+ | ---
>>+ | ...
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+ | ---
>>+ | ...
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | ...
>>+opts.case_first = 'ON'
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>>+ | OFF | UPPER_FIRST | LOWER_FIRST.'
>>+ | ...
>>+opts.case_first = 'OFF'
>>+ | ---
>>+ | ...
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+ | ---
>>+ | ...
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | ...
>>+opts.case_level = 'UPPER'
>>+ | ---
>>+ | ...
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>+ | ON | OFF.'
>>+ | ...
>>+opts.case_level = 'DEFAULT'
>>+ | ---
>>+ | ...
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+ | ---
>>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>+ | ON | OFF.'
>>+ | ...
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+ | ---
>>+ | ...
>>+
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>+ | ---
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>+box.space._collation:select{}
>>+ | ---
>>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>+test_run:cmd('restart server default')
>>+ |
>>+box.space._collation:select{}
>>+ | ---
>>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>+box.space._collation.index.name:delete{'test'}
>>+ | ---
>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>+ | ...
>>diff --git a/test/box/ddl_collation.test.lua b/test/box/ddl_collation.test.lua
>>new file mode 100644
>>index 000000000..ee26af9c6
>>--- /dev/null
>>+++ b/test/box/ddl_collation.test.lua
>>@@ -0,0 +1,90 @@
>>+env = require('test_run')
>>+test_run = env.new()
>>+
>>+-- collation
>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>+
>>+box.internal.collation.create('test')
>>+box.internal.collation.create('test', 'ICU')
>>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>>+box.internal.collation.create('test', 42, 'ru_RU')
>>+box.internal.collation.create('test', 'ICU', 42)
>>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>+box.internal.collation.drop('test')
>>+box.internal.collation.drop('nothing') -- allowed
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>+box.internal.collation.drop('test') --ok
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>+box.internal.collation.drop('test') --ok
>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>+box.internal.collation.drop('test') --ok
>>+c = box.space._collation:get{1}:totable()
>>+c[2] = 'unicode_test'
>>+box.space._collation:replace(c)
>>+
>>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>+
>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>+box.internal.collation.exists('test')
>>+
>>+test_run:cmd('restart server default')
>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>+
>>+box.internal.collation.exists('test')
>>+box.internal.collation.drop('test')
>>+
>>+box.space._collation:auto_increment{'test'}
>>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>+box.space._collation.index.name:delete{'test'} -- ok
>>+box.space._collation.index.name:delete{'nothing'} -- allowed
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>+opts = {normalization_mode='NORMAL'}
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.normalization_mode = 'OFF'
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+opts.numeric_collation = 'PERL'
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.numeric_collation = 'ON'
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+opts.alternate_handling1 = 'ON'
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.alternate_handling1 = nil
>>+opts.alternate_handling = 'ON'
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.alternate_handling = 'SHIFTED'
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+opts.case_first = 'ON'
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.case_first = 'OFF'
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+opts.case_level = 'UPPER'
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>+opts.case_level = 'DEFAULT'
>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>+
>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>+box.space._collation:select{}
>>+test_run:cmd('restart server default')
>>+box.space._collation:select{}
>>+box.space._collation.index.name:delete{'test'}
>>diff --git a/test/box/ddl_collation_types.result b/test/box/ddl_collation_types.result
>>new file mode 100644
>>index 000000000..7eaef62c0
>>--- /dev/null
>>+++ b/test/box/ddl_collation_types.result
>>@@ -0,0 +1,21 @@
>>+-- test-run result file version 2
>>+-- Check that collation is allowed only for strings, scalar and any types.
>>+format = {}
>>+ | ---
>>+ | ...
>>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>+ | ---
>>+ | ...
>>+s = box.schema.create_space('test', {format = format})
>>+ | ---
>>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>>+ | scalar and any fields'
>>+ | ...
>>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>+ | ---
>>+ | ...
>>+s = box.schema.create_space('test', {format = format})
>>+ | ---
>>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>>+ | scalar and any fields'
>>+ | ...
>>diff --git a/test/box/ddl_collation_types.test.lua b/test/box/ddl_collation_types.test.lua
>>new file mode 100644
>>index 000000000..5930d54b0
>>--- /dev/null
>>+++ b/test/box/ddl_collation_types.test.lua
>>@@ -0,0 +1,6 @@
>>+-- Check that collation is allowed only for strings, scalar and any types.
>>+format = {}
>>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>+s = box.schema.create_space('test', {format = format})
>>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>+s = box.schema.create_space('test', {format = format})
>>diff --git a/test/box/ddl_collation_wrong_id.result b/test/box/ddl_collation_wrong_id.result
>>new file mode 100644
>>index 000000000..c6cf058b1
>>--- /dev/null
>>+++ b/test/box/ddl_collation_wrong_id.result
>>@@ -0,0 +1,21 @@
>>+-- test-run result file version 2
>>+-- Check that error is raised when collation with wrong id is used.
>>+_space = box.space[box.schema.SPACE_ID]
>>+ | ---
>>+ | ...
>>+utils = require('utils')
>>+ | ---
>>+ | ...
>>+EMPTY_MAP = utils.setmap({})
>>+ | ---
>>+ | ...
>>+format = {{name = 'field1', type = 'string', collation = 666}}
>>+ | ---
>>+ | ...
>>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>+ | ---
>>+ | ...
>>+_space:insert(surrogate_space)
>>+ | ---
>>+ | - error: 'Wrong collation options (field 1): collation was not found by ID'
>>+ | ...
>>diff --git a/test/box/ddl_collation_wrong_id.test.lua b/test/box/ddl_collation_wrong_id.test.lua
>>new file mode 100644
>>index 000000000..8d28d3ee1
>>--- /dev/null
>>+++ b/test/box/ddl_collation_wrong_id.test.lua
>>@@ -0,0 +1,7 @@
>>+-- Check that error is raised when collation with wrong id is used.
>>+_space = box.space[box.schema.SPACE_ID]
>>+utils = require('utils')
>>+EMPTY_MAP = utils.setmap({})
>>+format = {{name = 'field1', type = 'string', collation = 666}}
>>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>+_space:insert(surrogate_space)
>>diff --git a/test/box/ddl_no_collation.result b/test/box/ddl_no_collation.result
>>new file mode 100644
>>index 000000000..6f4e8fa0b
>>--- /dev/null
>>+++ b/test/box/ddl_no_collation.result
>>@@ -0,0 +1,12 @@
>>+-- test-run result file version 2
>>+-- Check that error is raised when collation doesn't exists.
>>+format = {}
>>+ | ---
>>+ | ...
>>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>+ | ---
>>+ | ...
>>+s = box.schema.create_space('test', {format = format})
>>+ | ---
>>+ | - error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>>+ | ...
>>diff --git a/test/box/ddl_no_collation.test.lua b/test/box/ddl_no_collation.test.lua
>>new file mode 100644
>>index 000000000..3e411373b
>>--- /dev/null
>>+++ b/test/box/ddl_no_collation.test.lua
>>@@ -0,0 +1,4 @@
>>+-- Check that error is raised when collation doesn't exists.
>>+format = {}
>>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>+s = box.schema.create_space('test', {format = format})
>>diff --git a/test/box/ddl_parallel.result b/test/box/ddl_parallel.result
>>new file mode 100644
>>index 000000000..dfa4a1422
>>--- /dev/null
>>+++ b/test/box/ddl_parallel.result
>>@@ -0,0 +1,61 @@
>>+-- test-run result file version 2
>>+env = require('test_run')
>>+ | ---
>>+ | ...
>>+test_run = env.new()
>>+ | ---
>>+ | ...
>>+
>>+fiber = require'fiber'
>>+ | ---
>>+ | ...
>>+
>>+-- simple test for parallel ddl execution
>>+_ = box.schema.space.create('test'):create_index('pk')
>>+ | ---
>>+ | ...
>>+
>>+ch = fiber.channel(2)
>>+ | ---
>>+ | ...
>>+
>>+test_run:cmd("setopt delimiter ';'")
>>+ | ---
>>+ | - true
>>+ | ...
>>+
>>+function f1()
>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>+ ch:put(true)
>>+end;
>>+ | ---
>>+ | ...
>>+
>>+function f2()
>>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>>+ ch:put(true)
>>+end;
>>+ | ---
>>+ | ...
>>+
>>+test_run:cmd("setopt delimiter ''");
>>+ | ---
>>+ | - true
>>+ | ...
>>+
>>+_ = {fiber.create(f1), fiber.create(f2)}
>>+ | ---
>>+ | ...
>>+
>>+ch:get()
>>+ | ---
>>+ | - true
>>+ | ...
>>+ch:get()
>>+ | ---
>>+ | - true
>>+ | ...
>>+
>>+_ = box.space.test:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/ddl_parallel.test.lua b/test/box/ddl_parallel.test.lua
>>new file mode 100644
>>index 000000000..99c3bfdcc
>>--- /dev/null
>>+++ b/test/box/ddl_parallel.test.lua
>>@@ -0,0 +1,30 @@
>>+env = require('test_run')
>>+test_run = env.new()
>>+
>>+fiber = require'fiber'
>>+
>>+-- simple test for parallel ddl execution
>>+_ = box.schema.space.create('test'):create_index('pk')
>>+
>>+ch = fiber.channel(2)
>>+
>>+test_run:cmd("setopt delimiter ';'")
>>+
>>+function f1()
>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>+ ch:put(true)
>>+end;
>>+
>>+function f2()
>>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>>+ ch:put(true)
>>+end;
>>+
>>+test_run:cmd("setopt delimiter ''");
>>+
>>+_ = {fiber.create(f1), fiber.create(f2)}
>>+
>>+ch:get()
>>+ch:get()
>>+
>>+_ = box.space.test:drop()
>>diff --git a/test/box/ddl_tuple.result b/test/box/ddl_tuple.result
>>new file mode 100644
>>index 000000000..6a024a833
>>--- /dev/null
>>+++ b/test/box/ddl_tuple.result
>>@@ -0,0 +1,67 @@
>>+-- test-run result file version 2
>>+env = require('test_run')
>>+ | ---
>>+ | ...
>>+test_run = env.new()
>>+ | ---
>>+ | ...
>>+
>>+fiber = require'fiber'
>>+ | ---
>>+ | ...
>>+ch = fiber.channel(3)
>>+ | ---
>>+ | ...
>>+
>>+_ = box.schema.space.create('test'):create_index('pk')
>>+ | ---
>>+ | ...
>>+
>>+test_run:cmd("setopt delimiter ';'")
>>+ | ---
>>+ | - true
>>+ | ...
>>+function add_index()
>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>+ ch:put(true)
>>+end;
>>+ | ---
>>+ | ...
>>+
>>+function insert_tuple(tuple)
>>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>+end;
>>+ | ---
>>+ | ...
>>+test_run:cmd("setopt delimiter ''");
>>+ | ---
>>+ | - true
>>+ | ...
>>+
>>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>+ | ---
>>+ | ...
>>+{ch:get(), ch:get(), ch:get()}
>>+ | ---
>>+ | - - - false
>>+ | - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>>+ | - - true
>>+ | - [1, 2, 'a']
>>+ | - true
>>+ | ...
>>+
>>+box.space.test:select()
>>+ | ---
>>+ | - - [1, 2, 'a']
>>+ | ...
>>+
>>+test_run:cmd('restart server default')
>>+ |
>>+
>>+box.space.test:select()
>>+ | ---
>>+ | - - [1, 2, 'a']
>>+ | ...
>>+box.space.test:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/ddl_tuple.test.lua b/test/box/ddl_tuple.test.lua
>>new file mode 100644
>>index 000000000..1c78a00e4
>>--- /dev/null
>>+++ b/test/box/ddl_tuple.test.lua
>>@@ -0,0 +1,28 @@
>>+env = require('test_run')
>>+test_run = env.new()
>>+
>>+fiber = require'fiber'
>>+ch = fiber.channel(3)
>>+
>>+_ = box.schema.space.create('test'):create_index('pk')
>>+
>>+test_run:cmd("setopt delimiter ';'")
>>+function add_index()
>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>+ ch:put(true)
>>+end;
>>+
>>+function insert_tuple(tuple)
>>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>+end;
>>+test_run:cmd("setopt delimiter ''");
>>+
>>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>+{ch:get(), ch:get(), ch:get()}
>>+
>>+box.space.test:select()
>>+
>>+test_run:cmd('restart server default')
>>+
>>+box.space.test:select()
>>+box.space.test:drop()
>>diff --git a/test/box/gh-2336-ddl_call_twice.result b/test/box/gh-2336-ddl_call_twice.result
>>new file mode 100644
>>index 000000000..0f55c9c09
>>--- /dev/null
>>+++ b/test/box/gh-2336-ddl_call_twice.result
>>@@ -0,0 +1,44 @@
>>+-- test-run result file version 2
>>+-- gh-2336 crash if format called twice during snapshot
>>+fiber = require'fiber'
>>+ | ---
>>+ | ...
>>+
>>+space = box.schema.space.create('test_format')
>>+ | ---
>>+ | ...
>>+_ = space:create_index('pk', { parts = { 1,'str' }})
>>+ | ---
>>+ | ...
>>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>+ | ---
>>+ | ...
>>+str = string.rep("t",1024)
>>+ | ---
>>+ | ...
>>+for i = 1, 10000 do space:insert{tostring(i), str} end
>>+ | ---
>>+ | ...
>>+ch = fiber.channel(3)
>>+ | ---
>>+ | ...
>>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>+ | ---
>>+ | ...
>>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>+ | ---
>>+ | ...
>>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>+ | ---
>>+ | ...
>>+
>>+{ch:get(), ch:get(), ch:get()}
>>+ | ---
>>+ | - - true
>>+ | - true
>>+ | - true
>>+ | ...
>>+
>>+space:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/gh-2336-ddl_call_twice.test.lua b/test/box/gh-2336-ddl_call_twice.test.lua
>>new file mode 100644
>>index 000000000..f92afc211
>>--- /dev/null
>>+++ b/test/box/gh-2336-ddl_call_twice.test.lua
>>@@ -0,0 +1,16 @@
>>+-- gh-2336 crash if format called twice during snapshot
>>+fiber = require'fiber'
>>+
>>+space = box.schema.space.create('test_format')
>>+_ = space:create_index('pk', { parts = { 1,'str' }})
>>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>+str = string.rep("t",1024)
>>+for i = 1, 10000 do space:insert{tostring(i), str} end
>>+ch = fiber.channel(3)
>>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>+
>>+{ch:get(), ch:get(), ch:get()}
>>+
>>+space:drop()
>>diff --git a/test/box/gh-2783-ddl_lock.result b/test/box/gh-2783-ddl_lock.result
>>new file mode 100644
>>index 000000000..7b3ba3444
>>--- /dev/null
>>+++ b/test/box/gh-2783-ddl_lock.result
>>@@ -0,0 +1,62 @@
>>+-- test-run result file version 2
>>+env = require('test_run')
>>+ | ---
>>+ | ...
>>+test_run = env.new()
>>+ | ---
>>+ | ...
>>+
>>+--
>>+-- gh-2783
>>+-- A ddl operation shoud fail before trying to lock a ddl latch
>>+-- in a multi-statement transaction.
>>+-- If operation tries to lock already an locked latch then the
>>+-- current transaction will be silently rolled back under our feet.
>>+-- This is confusing. So check for multi-statement transaction
>>+-- before locking the latch.
>>+--
>>+test_latch = box.schema.space.create('test_latch')
>>+ | ---
>>+ | ...
>>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>+ | ---
>>+ | ...
>>+fiber = require('fiber')
>>+ | ---
>>+ | ...
>>+c = fiber.channel(1)
>>+ | ---
>>+ | ...
>>+test_run:cmd("setopt delimiter ';'")
>>+ | ---
>>+ | - true
>>+ | ...
>>+_ = fiber.create(function()
>>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>+ c:put(true)
>>+end);
>>+ | ---
>>+ | ...
>>+
>>+-- Should be Ok for now
>>+box.begin()
>>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>+box.commit();
>>+ | ---
>>+ | ...
>>+test_run:cmd("setopt delimiter ''");
>>+ | ---
>>+ | - true
>>+ | ...
>>+-- Explicitly roll back the transaction in multi-statement,
>>+-- which hasn't finished due to DDL error
>>+box.rollback()
>>+ | ---
>>+ | ...
>>+
>>+_ = c:get()
>>+ | ---
>>+ | ...
>>+test_latch:drop() -- this is where everything stops
>>+ | ---
>>+ | ...
>>diff --git a/test/box/gh-2783-ddl_lock.test.lua b/test/box/gh-2783-ddl_lock.test.lua
>>new file mode 100644
>>index 000000000..953e177a7
>>--- /dev/null
>>+++ b/test/box/gh-2783-ddl_lock.test.lua
>>@@ -0,0 +1,33 @@
>>+env = require('test_run')
>>+test_run = env.new()
>>+
>>+--
>>+-- gh-2783
>>+-- A ddl operation shoud fail before trying to lock a ddl latch
>>+-- in a multi-statement transaction.
>>+-- If operation tries to lock already an locked latch then the
>>+-- current transaction will be silently rolled back under our feet.
>>+-- This is confusing. So check for multi-statement transaction
>>+-- before locking the latch.
>>+--
>>+test_latch = box.schema.space.create('test_latch')
>>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>+fiber = require('fiber')
>>+c = fiber.channel(1)
>>+test_run:cmd("setopt delimiter ';'")
>>+_ = fiber.create(function()
>>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>+ c:put(true)
>>+end);
>>+
>>+-- Should be Ok for now
>>+box.begin()
>>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>+box.commit();
>>+test_run:cmd("setopt delimiter ''");
>>+-- Explicitly roll back the transaction in multi-statement,
>>+-- which hasn't finished due to DDL error
>>+box.rollback()
>>+
>>+_ = c:get()
>>+test_latch:drop() -- this is where everything stops
>>diff --git a/test/box/gh-2839-ddl_custom_fields.result b/test/box/gh-2839-ddl_custom_fields.result
>>new file mode 100644
>>index 000000000..3846fe08e
>>--- /dev/null
>>+++ b/test/box/gh-2839-ddl_custom_fields.result
>>@@ -0,0 +1,26 @@
>>+-- test-run result file version 2
>>+--
>>+-- gh-2839: allow to store custom fields in field definition.
>>+--
>>+format = {}
>>+ | ---
>>+ | ...
>>+format[1] = {name = 'field1', type = 'unsigned'}
>>+ | ---
>>+ | ...
>>+format[2] = {'field2', 'unsigned'}
>>+ | ---
>>+ | ...
>>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>+ | ---
>>+ | ...
>>+s = box.schema.create_space('test', {format = format})
>>+ | ---
>>+ | ...
>>+s:format()[3].custom_field
>>+ | ---
>>+ | - custom_value
>>+ | ...
>>+s:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/gh-2839-ddl_custom_fields.test.lua b/test/box/gh-2839-ddl_custom_fields.test.lua
>>new file mode 100644
>>index 000000000..e1c0e2a0b
>>--- /dev/null
>>+++ b/test/box/gh-2839-ddl_custom_fields.test.lua
>>@@ -0,0 +1,10 @@
>>+--
>>+-- gh-2839: allow to store custom fields in field definition.
>>+--
>>+format = {}
>>+format[1] = {name = 'field1', type = 'unsigned'}
>>+format[2] = {'field2', 'unsigned'}
>>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>+s = box.schema.create_space('test', {format = format})
>>+s:format()[3].custom_field
>>+s:drop()
>>diff --git a/test/box/gh-2937-ddl_collation_field_def.result b/test/box/gh-2937-ddl_collation_field_def.result
>>new file mode 100644
>>index 000000000..8b3de607e
>>--- /dev/null
>>+++ b/test/box/gh-2937-ddl_collation_field_def.result
>>@@ -0,0 +1,27 @@
>>+-- test-run result file version 2
>>+--
>>+-- gh-2937: allow to specify collation in field definition.
>>+--
>>+format = {}
>>+ | ---
>>+ | ...
>>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>+ | ---
>>+ | ...
>>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>+ | ---
>>+ | ...
>>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>+ | ---
>>+ | ...
>>+s = box.schema.create_space('test', {format = format})
>>+ | ---
>>+ | ...
>>+s:format()
>>+ | ---
>>+ | - [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>>+ | 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>>+ | ...
>>+s:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/gh-2937-ddl_collation_field_def.test.lua b/test/box/gh-2937-ddl_collation_field_def.test.lua
>>new file mode 100644
>>index 000000000..1ddfa7246
>>--- /dev/null
>>+++ b/test/box/gh-2937-ddl_collation_field_def.test.lua
>>@@ -0,0 +1,10 @@
>>+--
>>+-- gh-2937: allow to specify collation in field definition.
>>+--
>>+format = {}
>>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>+s = box.schema.create_space('test', {format = format})
>>+s:format()
>>+s:drop()
>>diff --git a/test/box/gh-3290-ddl_collation_deleted.result b/test/box/gh-3290-ddl_collation_deleted.result
>>new file mode 100644
>>index 000000000..eb59b6c1d
>>--- /dev/null
>>+++ b/test/box/gh-3290-ddl_collation_deleted.result
>>@@ -0,0 +1,16 @@
>>+-- test-run result file version 2
>>+--
>>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>+-- must work even if a collation is deleted from _collation.
>>+--
>>+t = box.space._collation:delete{1}
>>+ | ---
>>+ | ...
>>+utf8.cmp('abc', 'def')
>>+ | ---
>>+ | - -1
>>+ | ...
>>+box.space._collation:replace(t)
>>+ | ---
>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>+ | ...
>>diff --git a/test/box/gh-3290-ddl_collation_deleted.test.lua b/test/box/gh-3290-ddl_collation_deleted.test.lua
>>new file mode 100644
>>index 000000000..5fd3d7e1a
>>--- /dev/null
>>+++ b/test/box/gh-3290-ddl_collation_deleted.test.lua
>>@@ -0,0 +1,7 @@
>>+--
>>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>+-- must work even if a collation is deleted from _collation.
>>+--
>>+t = box.space._collation:delete{1}
>>+utf8.cmp('abc', 'def')
>>+box.space._collation:replace(t)
>>diff --git a/test/box/gh-928-ddl_truncate.result b/test/box/gh-928-ddl_truncate.result
>>new file mode 100644
>>index 000000000..f244e07f1
>>--- /dev/null
>>+++ b/test/box/gh-928-ddl_truncate.result
>>@@ -0,0 +1,35 @@
>>+-- test-run result file version 2
>>+fiber = require'fiber'
>>+ | ---
>>+ | ...
>>+ch = fiber.channel(2)
>>+ | ---
>>+ | ...
>>+
>>+--issue #928
>>+space = box.schema.space.create('test_trunc')
>>+ | ---
>>+ | ...
>>+_ = space:create_index('pk')
>>+ | ---
>>+ | ...
>>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>+ | ---
>>+ | ...
>>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>+ | ---
>>+ | ...
>>+
>>+function test_trunc() space:truncate() ch:put(true) end
>>+ | ---
>>+ | ...
>>+
>>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>+ | ---
>>+ | ...
>>+_ = {ch:get(), ch:get()}
>>+ | ---
>>+ | ...
>>+space:drop()
>>+ | ---
>>+ | ...
>>diff --git a/test/box/gh-928-ddl_truncate.test.lua b/test/box/gh-928-ddl_truncate.test.lua
>>new file mode 100644
>>index 000000000..10be8c361
>>--- /dev/null
>>+++ b/test/box/gh-928-ddl_truncate.test.lua
>>@@ -0,0 +1,14 @@
>>+fiber = require'fiber'
>>+ch = fiber.channel(2)
>>+
>>+--issue #928
>>+space = box.schema.space.create('test_trunc')
>>+_ = space:create_index('pk')
>>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>+
>>+function test_trunc() space:truncate() ch:put(true) end
>>+
>>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>+_ = {ch:get(), ch:get()}
>>+space:drop()
>>--
>>2.17.1
>>  
> 
> 
>--
>Oleg Piskunov
>  
 
 
--
Alexander Tikhonov
 

[-- Attachment #2: Type: text/html, Size: 155734 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
  2020-03-19 13:50   ` Alexander Tikhonov
@ 2020-03-20  8:40     ` Oleg Piskunov
  2020-03-24  8:02     ` Sergey Bronnikov
  1 sibling, 0 replies; 6+ messages in thread
From: Oleg Piskunov @ 2020-03-20  8:40 UTC (permalink / raw)
  To: Alexander Tikhonov; +Cc: tarantool-patches

[-- Attachment #1: Type: text/plain, Size: 153731 bytes --]


LGTM.

Was confused that you work with different tests in one branch resulting my review messed up.
  
>Четверг, 19 марта 2020, 16:50 +03:00 от Alexander Tikhonov <avtikhon@tarantool.org>:
> 
>
>Hi, Oleg, I’ve rechecked all the tests and didn’t find any used way to cleanup the fibers at the tests finish. I’ll suggest to discuss it in the future changes, but not mess with the current tests splitting.
>  
>>Среда, 18 марта 2020, 15:06 +03:00 от Oleg Piskunov < o.piskunov@tarantool.org >:
>> 
>>
>>Hi,
>> 
>>Sasha, need to cleanup fibers in next tests:
>> 
>>test/box/ddl_parallel.test.lua 
>>test/box/ddl_tuple.test.lua
>>test/box/gh-2336-ddl_call_twice.test.lua 
>>test/box/gh-2783-ddl_lock.test.lua
>>test/box/gh-928-ddl_truncate.test.lua
>Not needed in the current patch.
>> 
>>Unused fibers in next tests:
>> 
>>test/box/gh-822_net.box.test.lua 
>> 
>Was already removed in V2, please check if you mentioned correct test.
>> 
>>>Среда, 18 марта 2020, 13:37 +03:00 от Alexander V. Tikhonov < avtikhon@tarantool.org >:
>>> 
>>>Divided into tests:
>>>- box/ddl_alter.test.lua
>>>- box/ddl_collation.test.lua
>>>- box/ddl_collation_types.test.lua
>>>- box/ddl_collation_wrong_id.test.lua
>>>- box/ddl_no_collation.test.lua
>>>- box/ddl_parallel.test.lua
>>>- box/ddl_tuple.test.lua
>>>- box/gh-2336-ddl_call_twice.test.lua
>>>- box/gh-2783-ddl_lock.test.lua
>>>- box/gh-2839-ddl_custom_fields.test.lua
>>>- box/gh-2937-ddl_collation_field_def.test.lua
>>>- box/gh-3290-ddl_collation_deleted.test.lua
>>>- box/gh-928-ddl_truncate.test.lua
>>>---
>>>
>>>Github:  https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests
>>>
>>> test/box/ddl.result | 1210 -----------------
>>> test/box/ddl.test.lua | 272 ----
>>> test/box/ddl_alter.result | 30 +
>>> test/box/ddl_alter.test.lua | 9 +
>>> test/box/ddl_collation.result | 853 ++++++++++++
>>> test/box/ddl_collation.test.lua | 90 ++
>>> test/box/ddl_collation_types.result | 21 +
>>> test/box/ddl_collation_types.test.lua | 6 +
>>> test/box/ddl_collation_wrong_id.result | 21 +
>>> test/box/ddl_collation_wrong_id.test.lua | 7 +
>>> test/box/ddl_no_collation.result | 12 +
>>> test/box/ddl_no_collation.test.lua | 4 +
>>> test/box/ddl_parallel.result | 61 +
>>> test/box/ddl_parallel.test.lua | 30 +
>>> test/box/ddl_tuple.result | 67 +
>>> test/box/ddl_tuple.test.lua | 28 +
>>> test/box/gh-2336-ddl_call_twice.result | 44 +
>>> test/box/gh-2336-ddl_call_twice.test.lua | 16 +
>>> test/box/gh-2783-ddl_lock.result | 62 +
>>> test/box/gh-2783-ddl_lock.test.lua | 33 +
>>> test/box/gh-2839-ddl_custom_fields.result | 26 +
>>> test/box/gh-2839-ddl_custom_fields.test.lua | 10 +
>>> .../gh-2937-ddl_collation_field_def.result | 27 +
>>> .../gh-2937-ddl_collation_field_def.test.lua | 10 +
>>> test/box/gh-3290-ddl_collation_deleted.result | 16 +
>>> .../gh-3290-ddl_collation_deleted.test.lua | 7 +
>>> test/box/gh-928-ddl_truncate.result | 35 +
>>> test/box/gh-928-ddl_truncate.test.lua | 14 +
>>> 28 files changed, 1539 insertions(+), 1482 deletions(-)
>>> delete mode 100644 test/box/ddl.result
>>> delete mode 100644 test/box/ddl.test.lua
>>> create mode 100644 test/box/ddl_alter.result
>>> create mode 100644 test/box/ddl_alter.test.lua
>>> create mode 100644 test/box/ddl_collation.result
>>> create mode 100644 test/box/ddl_collation.test.lua
>>> create mode 100644 test/box/ddl_collation_types.result
>>> create mode 100644 test/box/ddl_collation_types.test.lua
>>> create mode 100644 test/box/ddl_collation_wrong_id.result
>>> create mode 100644 test/box/ddl_collation_wrong_id.test.lua
>>> create mode 100644 test/box/ddl_no_collation.result
>>> create mode 100644 test/box/ddl_no_collation.test.lua
>>> create mode 100644 test/box/ddl_parallel.result
>>> create mode 100644 test/box/ddl_parallel.test.lua
>>> create mode 100644 test/box/ddl_tuple.result
>>> create mode 100644 test/box/ddl_tuple.test.lua
>>> create mode 100644 test/box/gh-2336-ddl_call_twice.result
>>> create mode 100644 test/box/gh-2336-ddl_call_twice.test.lua
>>> create mode 100644 test/box/gh-2783-ddl_lock.result
>>> create mode 100644 test/box/gh-2783-ddl_lock.test.lua
>>> create mode 100644 test/box/gh-2839-ddl_custom_fields.result
>>> create mode 100644 test/box/gh-2839-ddl_custom_fields.test.lua
>>> create mode 100644 test/box/gh-2937-ddl_collation_field_def.result
>>> create mode 100644 test/box/gh-2937-ddl_collation_field_def.test.lua
>>> create mode 100644 test/box/gh-3290-ddl_collation_deleted.result
>>> create mode 100644 test/box/gh-3290-ddl_collation_deleted.test.lua
>>> create mode 100644 test/box/gh-928-ddl_truncate.result
>>> create mode 100644 test/box/gh-928-ddl_truncate.test.lua
>>>
>>>diff --git a/test/box/ddl.result b/test/box/ddl.result
>>>deleted file mode 100644
>>>index b995b1493..000000000
>>>--- a/test/box/ddl.result
>>>+++ /dev/null
>>>@@ -1,1210 +0,0 @@
>>>-env = require('test_run')
>>>----
>>>-...
>>>-test_run = env.new()
>>>----
>>>-...
>>>-fiber = require'fiber'
>>>----
>>>-...
>>>--- simple test for parallel ddl execution
>>>-_ = box.schema.space.create('test'):create_index('pk')
>>>----
>>>-...
>>>-ch = fiber.channel(2)
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ';'")
>>>----
>>>-- true
>>>-...
>>>-function f1()
>>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>- ch:put(true)
>>>-end;
>>>----
>>>-...
>>>-function f2()
>>>- box.space.test:create_index('third', {parts = {3, 'string'}})
>>>- ch:put(true)
>>>-end;
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ''");
>>>----
>>>-- true
>>>-...
>>>-_ = {fiber.create(f1), fiber.create(f2)}
>>>----
>>>-...
>>>-ch:get()
>>>----
>>>-- true
>>>-...
>>>-ch:get()
>>>----
>>>-- true
>>>-...
>>>-_ = box.space.test:drop()
>>>----
>>>-...
>>>-test_run:cmd('restart server default')
>>>-env = require('test_run')
>>>----
>>>-...
>>>-test_run = env.new()
>>>----
>>>-...
>>>-fiber = require'fiber'
>>>----
>>>-...
>>>-ch = fiber.channel(2)
>>>----
>>>-...
>>>---issue #928
>>>-space = box.schema.space.create('test_trunc')
>>>----
>>>-...
>>>-_ = space:create_index('pk')
>>>----
>>>-...
>>>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>>----
>>>-...
>>>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>>----
>>>-...
>>>-function test_trunc() space:truncate() ch:put(true) end
>>>----
>>>-...
>>>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>>----
>>>-...
>>>-_ = {ch:get(), ch:get()}
>>>----
>>>-...
>>>-space:drop()
>>>----
>>>-...
>>>--- index should not crash after alter
>>>-space = box.schema.space.create('test_swap')
>>>----
>>>-...
>>>-index = space:create_index('pk')
>>>----
>>>-...
>>>-space:replace({1, 2, 3})
>>>----
>>>-- [1, 2, 3]
>>>-...
>>>-index:rename('primary')
>>>----
>>>-...
>>>-index2 = space:create_index('sec')
>>>----
>>>-...
>>>-space:replace({2, 3, 1})
>>>----
>>>-- [2, 3, 1]
>>>-...
>>>-space:select()
>>>----
>>>-- - [1, 2, 3]
>>>- - [2, 3, 1]
>>>-...
>>>-space:drop()
>>>----
>>>-...
>>>-ch = fiber.channel(3)
>>>----
>>>-...
>>>-_ = box.schema.space.create('test'):create_index('pk')
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ';'")
>>>----
>>>-- true
>>>-...
>>>-function add_index()
>>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>- ch:put(true)
>>>-end;
>>>----
>>>-...
>>>-function insert_tuple(tuple)
>>>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>>-end;
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ''");
>>>----
>>>-- true
>>>-...
>>>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>>----
>>>-...
>>>-{ch:get(), ch:get(), ch:get()}
>>>----
>>>-- - - false
>>>- - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>>>- - - true
>>>- - [1, 2, 'a']
>>>- - true
>>>-...
>>>-box.space.test:select()
>>>----
>>>-- - [1, 2, 'a']
>>>-...
>>>-test_run:cmd('restart server default')
>>>-box.space.test:select()
>>>----
>>>-- - [1, 2, 'a']
>>>-...
>>>-box.space.test:drop()
>>>----
>>>-...
>>>--- gh-2336 crash if format called twice during snapshot
>>>-fiber = require'fiber'
>>>----
>>>-...
>>>-space = box.schema.space.create('test_format')
>>>----
>>>-...
>>>-_ = space:create_index('pk', { parts = { 1,'str' }})
>>>----
>>>-...
>>>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>>----
>>>-...
>>>-str = string.rep("t",1024)
>>>----
>>>-...
>>>-for i = 1, 10000 do space:insert{tostring(i), str} end
>>>----
>>>-...
>>>-ch = fiber.channel(3)
>>>----
>>>-...
>>>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>>----
>>>-...
>>>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>>----
>>>-...
>>>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>>----
>>>-...
>>>-{ch:get(), ch:get(), ch:get()}
>>>----
>>>-- - true
>>>- - true
>>>- - true
>>>-...
>>>-space:drop()
>>>----
>>>-...
>>>--- collation
>>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>----
>>>-...
>>>-box.internal.collation.create('test')
>>>----
>>>-- error: Illegal parameters, type (second arg) must be a string
>>>-...
>>>-box.internal.collation.create('test', 'ICU')
>>>----
>>>-- error: Illegal parameters, locale (third arg) must be a string
>>>-...
>>>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>>>----
>>>-- error: Illegal parameters, name (first arg) must be a string
>>>-...
>>>-box.internal.collation.create('test', 42, 'ru_RU')
>>>----
>>>-- error: Illegal parameters, type (second arg) must be a string
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 42)
>>>----
>>>-- error: Illegal parameters, locale (third arg) must be a string
>>>-...
>>>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>>>----
>>>-- error: 'Failed to initialize collation: unknown collation type.'
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>>----
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>----
>>>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>>>-...
>>>-box.internal.collation.drop('test')
>>>----
>>>-...
>>>-box.internal.collation.drop('nothing') -- allowed
>>>----
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>>----
>>>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>>----
>>>-- error: Illegal parameters, options (fourth arg) must be a table or nil
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>>----
>>>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>>>- expected ON | OFF.'
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>>----
>>>-...
>>>-box.internal.collation.drop('test') --ok
>>>----
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>>>- PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>>----
>>>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>>----
>>>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>>-...
>>>-box.internal.collation.drop('test') --ok
>>>----
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>>----
>>>-...
>>>-box.internal.collation.drop('test') --ok
>>>----
>>>-...
>>>-c = box.space._collation:get{1}:totable()
>>>----
>>>-...
>>>-c[2] = 'unicode_test'
>>>----
>>>-...
>>>-box.space._collation:replace(c)
>>>----
>>>-- error: collation does not support alter
>>>-...
>>>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>>----
>>>-...
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>----
>>>-...
>>>-box.internal.collation.exists('test')
>>>----
>>>-- true
>>>-...
>>>-test_run:cmd('restart server default')
>>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>----
>>>-...
>>>-box.internal.collation.exists('test')
>>>----
>>>-- true
>>>-...
>>>-box.internal.collation.drop('test')
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test'}
>>>----
>>>-- error: Tuple field 3 required by space format is missing
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>>>----
>>>-- error: Tuple field 5 required by space format is missing
>>>-...
>>>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>>----
>>>-- error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>>>-...
>>>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>>----
>>>-- error: 'Tuple field 2 type does not match one required by operation: expected string'
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>>----
>>>-- error: 'Tuple field 4 type does not match one required by operation: expected string'
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>>----
>>>-- error: 'Tuple field 5 type does not match one required by operation: expected string'
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>>----
>>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>----
>>>-- error: Duplicate key exists in unique index 'name' in space '_collation'
>>>-...
>>>-box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>-box.space._collation.index.name:delete{'nothing'} -- allowed
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>>----
>>>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>>----
>>>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>>----
>>>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>>-...
>>>-opts = {normalization_mode='NORMAL'}
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>>>- expected ON | OFF.'
>>>-...
>>>-opts.normalization_mode = 'OFF'
>>>----
>>>-...
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>>----
>>>-...
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-...
>>>-opts.numeric_collation = 'PERL'
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>>>- expected ON | OFF.'
>>>-...
>>>-opts.numeric_collation = 'ON'
>>>----
>>>-...
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>----
>>>-...
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-...
>>>-opts.alternate_handling1 = 'ON'
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>>>-...
>>>-opts.alternate_handling1 = nil
>>>----
>>>-...
>>>-opts.alternate_handling = 'ON'
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>>>- expected NON_IGNORABLE | SHIFTED.'
>>>-...
>>>-opts.alternate_handling = 'SHIFTED'
>>>----
>>>-...
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>----
>>>-...
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-...
>>>-opts.case_first = 'ON'
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>>>- OFF | UPPER_FIRST | LOWER_FIRST.'
>>>-...
>>>-opts.case_first = 'OFF'
>>>----
>>>-...
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>----
>>>-...
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-...
>>>-opts.case_level = 'UPPER'
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>>- ON | OFF.'
>>>-...
>>>-opts.case_level = 'DEFAULT'
>>>----
>>>-...
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>----
>>>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>>- ON | OFF.'
>>>-...
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>----
>>>-...
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>----
>>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>-box.space._collation:select{}
>>>----
>>>-- - [0, 'none', 1, 'BINARY', '', {}]
>>>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>>- - [3, 'binary', 1, 'BINARY', '', {}]
>>>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>-test_run:cmd('restart server default')
>>>-box.space._collation:select{}
>>>----
>>>-- - [0, 'none', 1, 'BINARY', '', {}]
>>>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>>- - [3, 'binary', 1, 'BINARY', '', {}]
>>>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>-box.space._collation.index.name:delete{'test'}
>>>----
>>>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>-...
>>>---
>>>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>>--- must work even if a collation is deleted from _collation.
>>>---
>>>-t = box.space._collation:delete{1}
>>>----
>>>-...
>>>-utf8.cmp('abc', 'def')
>>>----
>>>-- -1
>>>-...
>>>-box.space._collation:replace(t)
>>>----
>>>-- [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>-...
>>>---
>>>--- gh-2839: allow to store custom fields in field definition.
>>>---
>>>-format = {}
>>>----
>>>-...
>>>-format[1] = {name = 'field1', type = 'unsigned'}
>>>----
>>>-...
>>>-format[2] = {'field2', 'unsigned'}
>>>----
>>>-...
>>>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>>----
>>>-...
>>>-s = box.schema.create_space('test', {format = format})
>>>----
>>>-...
>>>-s:format()[3].custom_field
>>>----
>>>-- custom_value
>>>-...
>>>-s:drop()
>>>----
>>>-...
>>>---
>>>--- gh-2937: allow to specify collation in field definition.
>>>---
>>>-format = {}
>>>----
>>>-...
>>>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>>----
>>>-...
>>>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>>----
>>>-...
>>>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>>----
>>>-...
>>>-s = box.schema.create_space('test', {format = format})
>>>----
>>>-...
>>>-s:format()
>>>----
>>>-- [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>>>- 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>>>-...
>>>-s:drop()
>>>----
>>>-...
>>>--- Check that collation is allowed only for stings, scalar and any types.
>>>-format = {}
>>>----
>>>-...
>>>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>>----
>>>-...
>>>-s = box.schema.create_space('test', {format = format})
>>>----
>>>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>>>- scalar and any fields'
>>>-...
>>>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>>----
>>>-...
>>>-s = box.schema.create_space('test', {format = format})
>>>----
>>>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
>>>- scalar and any fields'
>>>-...
>>>--- Check that error is raised when collation doesn't exists.
>>>-format = {}
>>>----
>>>-...
>>>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>>----
>>>-...
>>>-s = box.schema.create_space('test', {format = format})
>>>----
>>>-- error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>>>-...
>>>--- Check that error is raised when collation with wrong id is used.
>>>-_space = box.space[box.schema.SPACE_ID]
>>>----
>>>-...
>>>-utils = require('utils')
>>>----
>>>-...
>>>-EMPTY_MAP = utils.setmap({})
>>>----
>>>-...
>>>-format = {{name = 'field1', type = 'string', collation = 666}}
>>>----
>>>-...
>>>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>>----
>>>-...
>>>-_space:insert(surrogate_space)
>>>----
>>>-- error: 'Wrong collation options (field 1): collation was not found by ID'
>>>-...
>>>---
>>>--- gh-2783
>>>--- A ddl operation shoud fail before trying to lock a ddl latch
>>>--- in a multi-statement transaction.
>>>--- If operation tries to lock already an locked latch then the
>>>--- current transaction will be silently rolled back under our feet.
>>>--- This is confusing. So check for multi-statement transaction
>>>--- before locking the latch.
>>>---
>>>-test_latch = box.schema.space.create('test_latch')
>>>----
>>>-...
>>>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>>----
>>>-...
>>>-fiber = require('fiber')
>>>----
>>>-...
>>>-c = fiber.channel(1)
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ';'")
>>>----
>>>-- true
>>>-...
>>>-_ = fiber.create(function()
>>>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>>- c:put(true)
>>>-end);
>>>----
>>>-...
>>>--- Should be Ok for now
>>>-box.begin()
>>>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>>-box.commit();
>>>----
>>>-...
>>>-test_run:cmd("setopt delimiter ''");
>>>----
>>>-- true
>>>-...
>>>--- Explicitly roll back the transaction in multi-statement,
>>>--- which hasn't finished due to DDL error
>>>-box.rollback()
>>>----
>>>-...
>>>-_ = c:get()
>>>----
>>>-...
>>>-test_latch:drop() -- this is where everything stops
>>>----
>>>-...
>>>diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua
>>>deleted file mode 100644
>>>index 101bc6f9b..000000000
>>>--- a/test/box/ddl.test.lua
>>>+++ /dev/null
>>>@@ -1,272 +0,0 @@
>>>-env = require('test_run')
>>>-test_run = env.new()
>>>-
>>>-fiber = require'fiber'
>>>-
>>>--- simple test for parallel ddl execution
>>>-_ = box.schema.space.create('test'):create_index('pk')
>>>-
>>>-ch = fiber.channel(2)
>>>-
>>>-test_run:cmd("setopt delimiter ';'")
>>>-
>>>-function f1()
>>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>- ch:put(true)
>>>-end;
>>>-
>>>-function f2()
>>>- box.space.test:create_index('third', {parts = {3, 'string'}})
>>>- ch:put(true)
>>>-end;
>>>-
>>>-test_run:cmd("setopt delimiter ''");
>>>-
>>>-_ = {fiber.create(f1), fiber.create(f2)}
>>>-
>>>-ch:get()
>>>-ch:get()
>>>-
>>>-_ = box.space.test:drop()
>>>-
>>>-test_run:cmd('restart server default')
>>>-
>>>-env = require('test_run')
>>>-test_run = env.new()
>>>-fiber = require'fiber'
>>>-
>>>-ch = fiber.channel(2)
>>>-
>>>---issue #928
>>>-space = box.schema.space.create('test_trunc')
>>>-_ = space:create_index('pk')
>>>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>>-
>>>-function test_trunc() space:truncate() ch:put(true) end
>>>-
>>>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>>-_ = {ch:get(), ch:get()}
>>>-space:drop()
>>>-
>>>--- index should not crash after alter
>>>-space = box.schema.space.create('test_swap')
>>>-index = space:create_index('pk')
>>>-space:replace({1, 2, 3})
>>>-index:rename('primary')
>>>-index2 = space:create_index('sec')
>>>-space:replace({2, 3, 1})
>>>-space:select()
>>>-space:drop()
>>>-
>>>-
>>>-ch = fiber.channel(3)
>>>-
>>>-_ = box.schema.space.create('test'):create_index('pk')
>>>-
>>>-test_run:cmd("setopt delimiter ';'")
>>>-function add_index()
>>>- box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>- ch:put(true)
>>>-end;
>>>-
>>>-function insert_tuple(tuple)
>>>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>>-end;
>>>-test_run:cmd("setopt delimiter ''");
>>>-
>>>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>>-{ch:get(), ch:get(), ch:get()}
>>>-
>>>-box.space.test:select()
>>>-
>>>-test_run:cmd('restart server default')
>>>-
>>>-box.space.test:select()
>>>-box.space.test:drop()
>>>-
>>>--- gh-2336 crash if format called twice during snapshot
>>>-fiber = require'fiber'
>>>-
>>>-space = box.schema.space.create('test_format')
>>>-_ = space:create_index('pk', { parts = { 1,'str' }})
>>>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>>-str = string.rep("t",1024)
>>>-for i = 1, 10000 do space:insert{tostring(i), str} end
>>>-ch = fiber.channel(3)
>>>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>>-
>>>-{ch:get(), ch:get(), ch:get()}
>>>-
>>>-space:drop()
>>>-
>>>--- collation
>>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>-
>>>-box.internal.collation.create('test')
>>>-box.internal.collation.create('test', 'ICU')
>>>-box.internal.collation.create(42, 'ICU', 'ru_RU')
>>>-box.internal.collation.create('test', 42, 'ru_RU')
>>>-box.internal.collation.create('test', 'ICU', 42)
>>>-box.internal.collation.create('test', 'nothing', 'ru_RU')
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>-box.internal.collation.drop('test')
>>>-box.internal.collation.drop('nothing') -- allowed
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>>-box.internal.collation.drop('test') --ok
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>>-box.internal.collation.drop('test') --ok
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>>-box.internal.collation.drop('test') --ok
>>>-c = box.space._collation:get{1}:totable()
>>>-c[2] = 'unicode_test'
>>>-box.space._collation:replace(c)
>>>-
>>>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>>-
>>>-box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>-box.internal.collation.exists('test')
>>>-
>>>-test_run:cmd('restart server default')
>>>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>-
>>>-box.internal.collation.exists('test')
>>>-box.internal.collation.drop('test')
>>>-
>>>-box.space._collation:auto_increment{'test'}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU'}
>>>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>-box.space._collation.index.name:delete{'test'} -- ok
>>>-box.space._collation.index.name:delete{'nothing'} -- allowed
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>>-opts = {normalization_mode='NORMAL'}
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.normalization_mode = 'OFF'
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>-opts.numeric_collation = 'PERL'
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.numeric_collation = 'ON'
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>-opts.alternate_handling1 = 'ON'
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.alternate_handling1 = nil
>>>-opts.alternate_handling = 'ON'
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.alternate_handling = 'SHIFTED'
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>-opts.case_first = 'ON'
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.case_first = 'OFF'
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>-opts.case_level = 'UPPER'
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>-opts.case_level = 'DEFAULT'
>>>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>-_ = box.space._collation.index.name:delete{'test'} -- ok
>>>-
>>>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>-box.space._collation:select{}
>>>-test_run:cmd('restart server default')
>>>-box.space._collation:select{}
>>>-box.space._collation.index.name:delete{'test'}
>>>-
>>>---
>>>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>>--- must work even if a collation is deleted from _collation.
>>>---
>>>-t = box.space._collation:delete{1}
>>>-utf8.cmp('abc', 'def')
>>>-box.space._collation:replace(t)
>>>-
>>>---
>>>--- gh-2839: allow to store custom fields in field definition.
>>>---
>>>-format = {}
>>>-format[1] = {name = 'field1', type = 'unsigned'}
>>>-format[2] = {'field2', 'unsigned'}
>>>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>>-s = box.schema.create_space('test', {format = format})
>>>-s:format()[3].custom_field
>>>-s:drop()
>>>-
>>>---
>>>--- gh-2937: allow to specify collation in field definition.
>>>---
>>>-format = {}
>>>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>>-s = box.schema.create_space('test', {format = format})
>>>-s:format()
>>>-s:drop()
>>>-
>>>--- Check that collation is allowed only for stings, scalar and any types.
>>>-format = {}
>>>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>>-s = box.schema.create_space('test', {format = format})
>>>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>>-s = box.schema.create_space('test', {format = format})
>>>-
>>>--- Check that error is raised when collation doesn't exists.
>>>-format = {}
>>>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>>-s = box.schema.create_space('test', {format = format})
>>>-
>>>--- Check that error is raised when collation with wrong id is used.
>>>-_space = box.space[box.schema.SPACE_ID]
>>>-utils = require('utils')
>>>-EMPTY_MAP = utils.setmap({})
>>>-format = {{name = 'field1', type = 'string', collation = 666}}
>>>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>>-_space:insert(surrogate_space)
>>>-
>>>---
>>>--- gh-2783
>>>--- A ddl operation shoud fail before trying to lock a ddl latch
>>>--- in a multi-statement transaction.
>>>--- If operation tries to lock already an locked latch then the
>>>--- current transaction will be silently rolled back under our feet.
>>>--- This is confusing. So check for multi-statement transaction
>>>--- before locking the latch.
>>>---
>>>-test_latch = box.schema.space.create('test_latch')
>>>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>>-fiber = require('fiber')
>>>-c = fiber.channel(1)
>>>-test_run:cmd("setopt delimiter ';'")
>>>-_ = fiber.create(function()
>>>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>>- c:put(true)
>>>-end);
>>>-
>>>--- Should be Ok for now
>>>-box.begin()
>>>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>>-box.commit();
>>>-test_run:cmd("setopt delimiter ''");
>>>--- Explicitly roll back the transaction in multi-statement,
>>>--- which hasn't finished due to DDL error
>>>-box.rollback()
>>>-
>>>-_ = c:get()
>>>-test_latch:drop() -- this is where everything stops
>>>diff --git a/test/box/ddl_alter.result b/test/box/ddl_alter.result
>>>new file mode 100644
>>>index 000000000..ce4a6ee69
>>>--- /dev/null
>>>+++ b/test/box/ddl_alter.result
>>>@@ -0,0 +1,30 @@
>>>+-- test-run result file version 2
>>>+-- index should not crash after alter
>>>+space = box.schema.space.create('test_swap')
>>>+ | ---
>>>+ | ...
>>>+index = space:create_index('pk')
>>>+ | ---
>>>+ | ...
>>>+space:replace({1, 2, 3})
>>>+ | ---
>>>+ | - [1, 2, 3]
>>>+ | ...
>>>+index:rename('primary')
>>>+ | ---
>>>+ | ...
>>>+index2 = space:create_index('sec')
>>>+ | ---
>>>+ | ...
>>>+space:replace({2, 3, 1})
>>>+ | ---
>>>+ | - [2, 3, 1]
>>>+ | ...
>>>+space:select()
>>>+ | ---
>>>+ | - - [1, 2, 3]
>>>+ | - [2, 3, 1]
>>>+ | ...
>>>+space:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/ddl_alter.test.lua b/test/box/ddl_alter.test.lua
>>>new file mode 100644
>>>index 000000000..ab0263b78
>>>--- /dev/null
>>>+++ b/test/box/ddl_alter.test.lua
>>>@@ -0,0 +1,9 @@
>>>+-- index should not crash after alter
>>>+space = box.schema.space.create('test_swap')
>>>+index = space:create_index('pk')
>>>+space:replace({1, 2, 3})
>>>+index:rename('primary')
>>>+index2 = space:create_index('sec')
>>>+space:replace({2, 3, 1})
>>>+space:select()
>>>+space:drop()
>>>diff --git a/test/box/ddl_collation.result b/test/box/ddl_collation.result
>>>new file mode 100644
>>>index 000000000..2571ad072
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation.result
>>>@@ -0,0 +1,853 @@
>>>+-- test-run result file version 2
>>>+env = require('test_run')
>>>+ | ---
>>>+ | ...
>>>+test_run = env.new()
>>>+ | ---
>>>+ | ...
>>>+
>>>+-- collation
>>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>+ | ---
>>>+ | ...
>>>+
>>>+box.internal.collation.create('test')
>>>+ | ---
>>>+ | - error: Illegal parameters, type (second arg) must be a string
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU')
>>>+ | ---
>>>+ | - error: Illegal parameters, locale (third arg) must be a string
>>>+ | ...
>>>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>>>+ | ---
>>>+ | - error: Illegal parameters, name (first arg) must be a string
>>>+ | ...
>>>+box.internal.collation.create('test', 42, 'ru_RU')
>>>+ | ---
>>>+ | - error: Illegal parameters, type (second arg) must be a string
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 42)
>>>+ | ---
>>>+ | - error: Illegal parameters, locale (third arg) must be a string
>>>+ | ...
>>>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: unknown collation type.'
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>+ | ---
>>>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>>>+ | ...
>>>+box.internal.collation.drop('test')
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.drop('nothing') -- allowed
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>>+ | ---
>>>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>>+ | ---
>>>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong french_collation option setting,
>>>+ | expected ON | OFF.'
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.drop('test') --ok
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong strength option setting, expected
>>>+ | PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
>>>+ | ...
>>>+box.internal.collation.drop('test') --ok
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.drop('test') --ok
>>>+ | ---
>>>+ | ...
>>>+c = box.space._collation:get{1}:totable()
>>>+ | ---
>>>+ | ...
>>>+c[2] = 'unicode_test'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:replace(c)
>>>+ | ---
>>>+ | - error: collation does not support alter
>>>+ | ...
>>>+
>>>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>>+ | ---
>>>+ | ...
>>>+
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>+ | ---
>>>+ | ...
>>>+box.internal.collation.exists('test')
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+
>>>+test_run:cmd('restart server default')
>>>+ |
>>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>+ | ---
>>>+ | ...
>>>+
>>>+box.internal.collation.exists('test')
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+box.internal.collation.drop('test')
>>>+ | ---
>>>+ | ...
>>>+
>>>+box.space._collation:auto_increment{'test'}
>>>+ | ---
>>>+ | - error: Tuple field 3 required by space format is missing
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>>>+ | ---
>>>+ | - error: Tuple field 5 required by space format is missing
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>>+ | ---
>>>+ | - error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
>>>+ | ...
>>>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>>+ | ---
>>>+ | - error: 'Tuple field 2 type does not match one required by operation: expected string'
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>>+ | ---
>>>+ | - error: 'Tuple field 4 type does not match one required by operation: expected string'
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>>+ | ---
>>>+ | - error: 'Tuple field 5 type does not match one required by operation: expected string'
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>>+ | ---
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>+ | ---
>>>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
>>>+ | ...
>>>+box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>+box.space._collation.index.name:delete{'nothing'} -- allowed
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>>+ | ---
>>>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>>+ | ---
>>>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
>>>+ | ...
>>>+opts = {normalization_mode='NORMAL'}
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
>>>+ | expected ON | OFF.'
>>>+ | ...
>>>+opts.normalization_mode = 'OFF'
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | ...
>>>+opts.numeric_collation = 'PERL'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
>>>+ | expected ON | OFF.'
>>>+ | ...
>>>+opts.numeric_collation = 'ON'
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | ...
>>>+opts.alternate_handling1 = 'ON'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
>>>+ | ...
>>>+opts.alternate_handling1 = nil
>>>+ | ---
>>>+ | ...
>>>+opts.alternate_handling = 'ON'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
>>>+ | expected NON_IGNORABLE | SHIFTED.'
>>>+ | ...
>>>+opts.alternate_handling = 'SHIFTED'
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | ...
>>>+opts.case_first = 'ON'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
>>>+ | OFF | UPPER_FIRST | LOWER_FIRST.'
>>>+ | ...
>>>+opts.case_first = 'OFF'
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | ...
>>>+opts.case_level = 'UPPER'
>>>+ | ---
>>>+ | ...
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>>+ | ON | OFF.'
>>>+ | ...
>>>+opts.case_level = 'DEFAULT'
>>>+ | ---
>>>+ | ...
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+ | ---
>>>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
>>>+ | ON | OFF.'
>>>+ | ...
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+ | ---
>>>+ | ...
>>>+
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>+ | ---
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>+box.space._collation:select{}
>>>+ | ---
>>>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>>>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>+test_run:cmd('restart server default')
>>>+ |
>>>+box.space._collation:select{}
>>>+ | ---
>>>+ | - - [0, 'none', 1, 'BINARY', '', {}]
>>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
>>>+ | - [3, 'binary', 1, 'BINARY', '', {}]
>>>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
>>>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
>>>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
>>>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
>>>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
>>>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
>>>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
>>>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
>>>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
>>>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
>>>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
>>>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
>>>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
>>>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
>>>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
>>>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
>>>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
>>>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
>>>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
>>>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
>>>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
>>>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
>>>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
>>>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
>>>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
>>>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
>>>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
>>>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
>>>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
>>>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
>>>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
>>>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
>>>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
>>>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
>>>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
>>>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
>>>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
>>>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
>>>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
>>>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
>>>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
>>>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
>>>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
>>>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
>>>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
>>>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
>>>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
>>>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
>>>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
>>>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
>>>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
>>>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
>>>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
>>>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
>>>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
>>>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
>>>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
>>>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
>>>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
>>>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
>>>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
>>>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
>>>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
>>>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
>>>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
>>>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
>>>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
>>>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
>>>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
>>>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
>>>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
>>>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
>>>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
>>>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
>>>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
>>>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
>>>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
>>>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
>>>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
>>>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
>>>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
>>>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
>>>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
>>>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
>>>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
>>>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
>>>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
>>>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
>>>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
>>>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
>>>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
>>>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
>>>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
>>>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
>>>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
>>>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
>>>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
>>>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
>>>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
>>>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
>>>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
>>>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
>>>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
>>>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
>>>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
>>>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
>>>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
>>>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
>>>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
>>>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
>>>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
>>>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
>>>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
>>>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
>>>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
>>>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
>>>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
>>>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
>>>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
>>>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
>>>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
>>>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
>>>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
>>>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
>>>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
>>>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
>>>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
>>>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
>>>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
>>>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
>>>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
>>>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
>>>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
>>>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
>>>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
>>>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
>>>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
>>>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
>>>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
>>>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
>>>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
>>>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
>>>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
>>>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
>>>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
>>>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
>>>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
>>>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
>>>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
>>>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
>>>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
>>>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
>>>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
>>>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
>>>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
>>>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
>>>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
>>>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
>>>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
>>>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
>>>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
>>>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
>>>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
>>>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
>>>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
>>>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
>>>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
>>>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
>>>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
>>>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
>>>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
>>>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
>>>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
>>>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
>>>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
>>>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
>>>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
>>>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
>>>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
>>>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
>>>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
>>>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
>>>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
>>>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
>>>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
>>>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
>>>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
>>>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
>>>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
>>>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
>>>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
>>>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
>>>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
>>>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
>>>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
>>>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
>>>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
>>>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
>>>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
>>>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
>>>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
>>>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
>>>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
>>>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
>>>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
>>>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
>>>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
>>>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
>>>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
>>>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
>>>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
>>>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
>>>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
>>>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
>>>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
>>>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
>>>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
>>>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
>>>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
>>>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
>>>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
>>>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
>>>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
>>>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
>>>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
>>>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
>>>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
>>>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
>>>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
>>>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
>>>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
>>>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
>>>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
>>>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
>>>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
>>>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
>>>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
>>>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
>>>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
>>>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
>>>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
>>>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
>>>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
>>>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
>>>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
>>>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
>>>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
>>>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
>>>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
>>>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
>>>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
>>>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
>>>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
>>>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
>>>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
>>>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
>>>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
>>>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
>>>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
>>>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
>>>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
>>>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
>>>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
>>>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
>>>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
>>>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
>>>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>+box.space._collation.index.name:delete{'test'}
>>>+ | ---
>>>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
>>>+ | ...
>>>diff --git a/test/box/ddl_collation.test.lua b/test/box/ddl_collation.test.lua
>>>new file mode 100644
>>>index 000000000..ee26af9c6
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation.test.lua
>>>@@ -0,0 +1,90 @@
>>>+env = require('test_run')
>>>+test_run = env.new()
>>>+
>>>+-- collation
>>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>+
>>>+box.internal.collation.create('test')
>>>+box.internal.collation.create('test', 'ICU')
>>>+box.internal.collation.create(42, 'ICU', 'ru_RU')
>>>+box.internal.collation.create('test', 42, 'ru_RU')
>>>+box.internal.collation.create('test', 'ICU', 42)
>>>+box.internal.collation.create('test', 'nothing', 'ru_RU')
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>+box.internal.collation.drop('test')
>>>+box.internal.collation.drop('nothing') -- allowed
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
>>>+box.internal.collation.drop('test') --ok
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
>>>+box.internal.collation.drop('test') --ok
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
>>>+box.internal.collation.drop('test') --ok
>>>+c = box.space._collation:get{1}:totable()
>>>+c[2] = 'unicode_test'
>>>+box.space._collation:replace(c)
>>>+
>>>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
>>>+
>>>+box.internal.collation.create('test', 'ICU', 'ru_RU')
>>>+box.internal.collation.exists('test')
>>>+
>>>+test_run:cmd('restart server default')
>>>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
>>>+
>>>+box.internal.collation.exists('test')
>>>+box.internal.collation.drop('test')
>>>+
>>>+box.space._collation:auto_increment{'test'}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU'}
>>>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
>>>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
>>>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>+box.space._collation.index.name:delete{'test'} -- ok
>>>+box.space._collation.index.name:delete{'nothing'} -- allowed
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
>>>+opts = {normalization_mode='NORMAL'}
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.normalization_mode = 'OFF'
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+opts.numeric_collation = 'PERL'
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.numeric_collation = 'ON'
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+opts.alternate_handling1 = 'ON'
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.alternate_handling1 = nil
>>>+opts.alternate_handling = 'ON'
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.alternate_handling = 'SHIFTED'
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+opts.case_first = 'ON'
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.case_first = 'OFF'
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+opts.case_level = 'UPPER'
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
>>>+opts.case_level = 'DEFAULT'
>>>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
>>>+_ = box.space._collation.index.name:delete{'test'} -- ok
>>>+
>>>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
>>>+box.space._collation:select{}
>>>+test_run:cmd('restart server default')
>>>+box.space._collation:select{}
>>>+box.space._collation.index.name:delete{'test'}
>>>diff --git a/test/box/ddl_collation_types.result b/test/box/ddl_collation_types.result
>>>new file mode 100644
>>>index 000000000..7eaef62c0
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation_types.result
>>>@@ -0,0 +1,21 @@
>>>+-- test-run result file version 2
>>>+-- Check that collation is allowed only for strings, scalar and any types.
>>>+format = {}
>>>+ | ---
>>>+ | ...
>>>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>>+ | ---
>>>+ | ...
>>>+s = box.schema.create_space('test', {format = format})
>>>+ | ---
>>>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>>>+ | scalar and any fields'
>>>+ | ...
>>>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>>+ | ---
>>>+ | ...
>>>+s = box.schema.create_space('test', {format = format})
>>>+ | ---
>>>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
>>>+ | scalar and any fields'
>>>+ | ...
>>>diff --git a/test/box/ddl_collation_types.test.lua b/test/box/ddl_collation_types.test.lua
>>>new file mode 100644
>>>index 000000000..5930d54b0
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation_types.test.lua
>>>@@ -0,0 +1,6 @@
>>>+-- Check that collation is allowed only for strings, scalar and any types.
>>>+format = {}
>>>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
>>>+s = box.schema.create_space('test', {format = format})
>>>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
>>>+s = box.schema.create_space('test', {format = format})
>>>diff --git a/test/box/ddl_collation_wrong_id.result b/test/box/ddl_collation_wrong_id.result
>>>new file mode 100644
>>>index 000000000..c6cf058b1
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation_wrong_id.result
>>>@@ -0,0 +1,21 @@
>>>+-- test-run result file version 2
>>>+-- Check that error is raised when collation with wrong id is used.
>>>+_space = box.space[box.schema.SPACE_ID]
>>>+ | ---
>>>+ | ...
>>>+utils = require('utils')
>>>+ | ---
>>>+ | ...
>>>+EMPTY_MAP = utils.setmap({})
>>>+ | ---
>>>+ | ...
>>>+format = {{name = 'field1', type = 'string', collation = 666}}
>>>+ | ---
>>>+ | ...
>>>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>>+ | ---
>>>+ | ...
>>>+_space:insert(surrogate_space)
>>>+ | ---
>>>+ | - error: 'Wrong collation options (field 1): collation was not found by ID'
>>>+ | ...
>>>diff --git a/test/box/ddl_collation_wrong_id.test.lua b/test/box/ddl_collation_wrong_id.test.lua
>>>new file mode 100644
>>>index 000000000..8d28d3ee1
>>>--- /dev/null
>>>+++ b/test/box/ddl_collation_wrong_id.test.lua
>>>@@ -0,0 +1,7 @@
>>>+-- Check that error is raised when collation with wrong id is used.
>>>+_space = box.space[box.schema.SPACE_ID]
>>>+utils = require('utils')
>>>+EMPTY_MAP = utils.setmap({})
>>>+format = {{name = 'field1', type = 'string', collation = 666}}
>>>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
>>>+_space:insert(surrogate_space)
>>>diff --git a/test/box/ddl_no_collation.result b/test/box/ddl_no_collation.result
>>>new file mode 100644
>>>index 000000000..6f4e8fa0b
>>>--- /dev/null
>>>+++ b/test/box/ddl_no_collation.result
>>>@@ -0,0 +1,12 @@
>>>+-- test-run result file version 2
>>>+-- Check that error is raised when collation doesn't exists.
>>>+format = {}
>>>+ | ---
>>>+ | ...
>>>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>>+ | ---
>>>+ | ...
>>>+s = box.schema.create_space('test', {format = format})
>>>+ | ---
>>>+ | - error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
>>>+ | ...
>>>diff --git a/test/box/ddl_no_collation.test.lua b/test/box/ddl_no_collation.test.lua
>>>new file mode 100644
>>>index 000000000..3e411373b
>>>--- /dev/null
>>>+++ b/test/box/ddl_no_collation.test.lua
>>>@@ -0,0 +1,4 @@
>>>+-- Check that error is raised when collation doesn't exists.
>>>+format = {}
>>>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
>>>+s = box.schema.create_space('test', {format = format})
>>>diff --git a/test/box/ddl_parallel.result b/test/box/ddl_parallel.result
>>>new file mode 100644
>>>index 000000000..dfa4a1422
>>>--- /dev/null
>>>+++ b/test/box/ddl_parallel.result
>>>@@ -0,0 +1,61 @@
>>>+-- test-run result file version 2
>>>+env = require('test_run')
>>>+ | ---
>>>+ | ...
>>>+test_run = env.new()
>>>+ | ---
>>>+ | ...
>>>+
>>>+fiber = require'fiber'
>>>+ | ---
>>>+ | ...
>>>+
>>>+-- simple test for parallel ddl execution
>>>+_ = box.schema.space.create('test'):create_index('pk')
>>>+ | ---
>>>+ | ...
>>>+
>>>+ch = fiber.channel(2)
>>>+ | ---
>>>+ | ...
>>>+
>>>+test_run:cmd("setopt delimiter ';'")
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+
>>>+function f1()
>>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>+ ch:put(true)
>>>+end;
>>>+ | ---
>>>+ | ...
>>>+
>>>+function f2()
>>>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>>>+ ch:put(true)
>>>+end;
>>>+ | ---
>>>+ | ...
>>>+
>>>+test_run:cmd("setopt delimiter ''");
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+
>>>+_ = {fiber.create(f1), fiber.create(f2)}
>>>+ | ---
>>>+ | ...
>>>+
>>>+ch:get()
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+ch:get()
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+
>>>+_ = box.space.test:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/ddl_parallel.test.lua b/test/box/ddl_parallel.test.lua
>>>new file mode 100644
>>>index 000000000..99c3bfdcc
>>>--- /dev/null
>>>+++ b/test/box/ddl_parallel.test.lua
>>>@@ -0,0 +1,30 @@
>>>+env = require('test_run')
>>>+test_run = env.new()
>>>+
>>>+fiber = require'fiber'
>>>+
>>>+-- simple test for parallel ddl execution
>>>+_ = box.schema.space.create('test'):create_index('pk')
>>>+
>>>+ch = fiber.channel(2)
>>>+
>>>+test_run:cmd("setopt delimiter ';'")
>>>+
>>>+function f1()
>>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>+ ch:put(true)
>>>+end;
>>>+
>>>+function f2()
>>>+ box.space.test:create_index('third', {parts = {3, 'string'}})
>>>+ ch:put(true)
>>>+end;
>>>+
>>>+test_run:cmd("setopt delimiter ''");
>>>+
>>>+_ = {fiber.create(f1), fiber.create(f2)}
>>>+
>>>+ch:get()
>>>+ch:get()
>>>+
>>>+_ = box.space.test:drop()
>>>diff --git a/test/box/ddl_tuple.result b/test/box/ddl_tuple.result
>>>new file mode 100644
>>>index 000000000..6a024a833
>>>--- /dev/null
>>>+++ b/test/box/ddl_tuple.result
>>>@@ -0,0 +1,67 @@
>>>+-- test-run result file version 2
>>>+env = require('test_run')
>>>+ | ---
>>>+ | ...
>>>+test_run = env.new()
>>>+ | ---
>>>+ | ...
>>>+
>>>+fiber = require'fiber'
>>>+ | ---
>>>+ | ...
>>>+ch = fiber.channel(3)
>>>+ | ---
>>>+ | ...
>>>+
>>>+_ = box.schema.space.create('test'):create_index('pk')
>>>+ | ---
>>>+ | ...
>>>+
>>>+test_run:cmd("setopt delimiter ';'")
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+function add_index()
>>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>+ ch:put(true)
>>>+end;
>>>+ | ---
>>>+ | ...
>>>+
>>>+function insert_tuple(tuple)
>>>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>>+end;
>>>+ | ---
>>>+ | ...
>>>+test_run:cmd("setopt delimiter ''");
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+
>>>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>>+ | ---
>>>+ | ...
>>>+{ch:get(), ch:get(), ch:get()}
>>>+ | ---
>>>+ | - - - false
>>>+ | - 'Tuple field 2 type does not match one required by operation: expected unsigned'
>>>+ | - - true
>>>+ | - [1, 2, 'a']
>>>+ | - true
>>>+ | ...
>>>+
>>>+box.space.test:select()
>>>+ | ---
>>>+ | - - [1, 2, 'a']
>>>+ | ...
>>>+
>>>+test_run:cmd('restart server default')
>>>+ |
>>>+
>>>+box.space.test:select()
>>>+ | ---
>>>+ | - - [1, 2, 'a']
>>>+ | ...
>>>+box.space.test:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/ddl_tuple.test.lua b/test/box/ddl_tuple.test.lua
>>>new file mode 100644
>>>index 000000000..1c78a00e4
>>>--- /dev/null
>>>+++ b/test/box/ddl_tuple.test.lua
>>>@@ -0,0 +1,28 @@
>>>+env = require('test_run')
>>>+test_run = env.new()
>>>+
>>>+fiber = require'fiber'
>>>+ch = fiber.channel(3)
>>>+
>>>+_ = box.schema.space.create('test'):create_index('pk')
>>>+
>>>+test_run:cmd("setopt delimiter ';'")
>>>+function add_index()
>>>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
>>>+ ch:put(true)
>>>+end;
>>>+
>>>+function insert_tuple(tuple)
>>>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
>>>+end;
>>>+test_run:cmd("setopt delimiter ''");
>>>+
>>>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
>>>+{ch:get(), ch:get(), ch:get()}
>>>+
>>>+box.space.test:select()
>>>+
>>>+test_run:cmd('restart server default')
>>>+
>>>+box.space.test:select()
>>>+box.space.test:drop()
>>>diff --git a/test/box/gh-2336-ddl_call_twice.result b/test/box/gh-2336-ddl_call_twice.result
>>>new file mode 100644
>>>index 000000000..0f55c9c09
>>>--- /dev/null
>>>+++ b/test/box/gh-2336-ddl_call_twice.result
>>>@@ -0,0 +1,44 @@
>>>+-- test-run result file version 2
>>>+-- gh-2336 crash if format called twice during snapshot
>>>+fiber = require'fiber'
>>>+ | ---
>>>+ | ...
>>>+
>>>+space = box.schema.space.create('test_format')
>>>+ | ---
>>>+ | ...
>>>+_ = space:create_index('pk', { parts = { 1,'str' }})
>>>+ | ---
>>>+ | ...
>>>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>>+ | ---
>>>+ | ...
>>>+str = string.rep("t",1024)
>>>+ | ---
>>>+ | ...
>>>+for i = 1, 10000 do space:insert{tostring(i), str} end
>>>+ | ---
>>>+ | ...
>>>+ch = fiber.channel(3)
>>>+ | ---
>>>+ | ...
>>>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>>+ | ---
>>>+ | ...
>>>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>>+ | ---
>>>+ | ...
>>>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>>+ | ---
>>>+ | ...
>>>+
>>>+{ch:get(), ch:get(), ch:get()}
>>>+ | ---
>>>+ | - - true
>>>+ | - true
>>>+ | - true
>>>+ | ...
>>>+
>>>+space:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/gh-2336-ddl_call_twice.test.lua b/test/box/gh-2336-ddl_call_twice.test.lua
>>>new file mode 100644
>>>index 000000000..f92afc211
>>>--- /dev/null
>>>+++ b/test/box/gh-2336-ddl_call_twice.test.lua
>>>@@ -0,0 +1,16 @@
>>>+-- gh-2336 crash if format called twice during snapshot
>>>+fiber = require'fiber'
>>>+
>>>+space = box.schema.space.create('test_format')
>>>+_ = space:create_index('pk', { parts = { 1,'str' }})
>>>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
>>>+str = string.rep("t",1024)
>>>+for i = 1, 10000 do space:insert{tostring(i), str} end
>>>+ch = fiber.channel(3)
>>>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
>>>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
>>>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
>>>+
>>>+{ch:get(), ch:get(), ch:get()}
>>>+
>>>+space:drop()
>>>diff --git a/test/box/gh-2783-ddl_lock.result b/test/box/gh-2783-ddl_lock.result
>>>new file mode 100644
>>>index 000000000..7b3ba3444
>>>--- /dev/null
>>>+++ b/test/box/gh-2783-ddl_lock.result
>>>@@ -0,0 +1,62 @@
>>>+-- test-run result file version 2
>>>+env = require('test_run')
>>>+ | ---
>>>+ | ...
>>>+test_run = env.new()
>>>+ | ---
>>>+ | ...
>>>+
>>>+--
>>>+-- gh-2783
>>>+-- A ddl operation shoud fail before trying to lock a ddl latch
>>>+-- in a multi-statement transaction.
>>>+-- If operation tries to lock already an locked latch then the
>>>+-- current transaction will be silently rolled back under our feet.
>>>+-- This is confusing. So check for multi-statement transaction
>>>+-- before locking the latch.
>>>+--
>>>+test_latch = box.schema.space.create('test_latch')
>>>+ | ---
>>>+ | ...
>>>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>>+ | ---
>>>+ | ...
>>>+fiber = require('fiber')
>>>+ | ---
>>>+ | ...
>>>+c = fiber.channel(1)
>>>+ | ---
>>>+ | ...
>>>+test_run:cmd("setopt delimiter ';'")
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+_ = fiber.create(function()
>>>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>>+ c:put(true)
>>>+end);
>>>+ | ---
>>>+ | ...
>>>+
>>>+-- Should be Ok for now
>>>+box.begin()
>>>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>>+box.commit();
>>>+ | ---
>>>+ | ...
>>>+test_run:cmd("setopt delimiter ''");
>>>+ | ---
>>>+ | - true
>>>+ | ...
>>>+-- Explicitly roll back the transaction in multi-statement,
>>>+-- which hasn't finished due to DDL error
>>>+box.rollback()
>>>+ | ---
>>>+ | ...
>>>+
>>>+_ = c:get()
>>>+ | ---
>>>+ | ...
>>>+test_latch:drop() -- this is where everything stops
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/gh-2783-ddl_lock.test.lua b/test/box/gh-2783-ddl_lock.test.lua
>>>new file mode 100644
>>>index 000000000..953e177a7
>>>--- /dev/null
>>>+++ b/test/box/gh-2783-ddl_lock.test.lua
>>>@@ -0,0 +1,33 @@
>>>+env = require('test_run')
>>>+test_run = env.new()
>>>+
>>>+--
>>>+-- gh-2783
>>>+-- A ddl operation shoud fail before trying to lock a ddl latch
>>>+-- in a multi-statement transaction.
>>>+-- If operation tries to lock already an locked latch then the
>>>+-- current transaction will be silently rolled back under our feet.
>>>+-- This is confusing. So check for multi-statement transaction
>>>+-- before locking the latch.
>>>+--
>>>+test_latch = box.schema.space.create('test_latch')
>>>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
>>>+fiber = require('fiber')
>>>+c = fiber.channel(1)
>>>+test_run:cmd("setopt delimiter ';'")
>>>+_ = fiber.create(function()
>>>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
>>>+ c:put(true)
>>>+end);
>>>+
>>>+-- Should be Ok for now
>>>+box.begin()
>>>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
>>>+box.commit();
>>>+test_run:cmd("setopt delimiter ''");
>>>+-- Explicitly roll back the transaction in multi-statement,
>>>+-- which hasn't finished due to DDL error
>>>+box.rollback()
>>>+
>>>+_ = c:get()
>>>+test_latch:drop() -- this is where everything stops
>>>diff --git a/test/box/gh-2839-ddl_custom_fields.result b/test/box/gh-2839-ddl_custom_fields.result
>>>new file mode 100644
>>>index 000000000..3846fe08e
>>>--- /dev/null
>>>+++ b/test/box/gh-2839-ddl_custom_fields.result
>>>@@ -0,0 +1,26 @@
>>>+-- test-run result file version 2
>>>+--
>>>+-- gh-2839: allow to store custom fields in field definition.
>>>+--
>>>+format = {}
>>>+ | ---
>>>+ | ...
>>>+format[1] = {name = 'field1', type = 'unsigned'}
>>>+ | ---
>>>+ | ...
>>>+format[2] = {'field2', 'unsigned'}
>>>+ | ---
>>>+ | ...
>>>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>>+ | ---
>>>+ | ...
>>>+s = box.schema.create_space('test', {format = format})
>>>+ | ---
>>>+ | ...
>>>+s:format()[3].custom_field
>>>+ | ---
>>>+ | - custom_value
>>>+ | ...
>>>+s:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/gh-2839-ddl_custom_fields.test.lua b/test/box/gh-2839-ddl_custom_fields.test.lua
>>>new file mode 100644
>>>index 000000000..e1c0e2a0b
>>>--- /dev/null
>>>+++ b/test/box/gh-2839-ddl_custom_fields.test.lua
>>>@@ -0,0 +1,10 @@
>>>+--
>>>+-- gh-2839: allow to store custom fields in field definition.
>>>+--
>>>+format = {}
>>>+format[1] = {name = 'field1', type = 'unsigned'}
>>>+format[2] = {'field2', 'unsigned'}
>>>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
>>>+s = box.schema.create_space('test', {format = format})
>>>+s:format()[3].custom_field
>>>+s:drop()
>>>diff --git a/test/box/gh-2937-ddl_collation_field_def.result b/test/box/gh-2937-ddl_collation_field_def.result
>>>new file mode 100644
>>>index 000000000..8b3de607e
>>>--- /dev/null
>>>+++ b/test/box/gh-2937-ddl_collation_field_def.result
>>>@@ -0,0 +1,27 @@
>>>+-- test-run result file version 2
>>>+--
>>>+-- gh-2937: allow to specify collation in field definition.
>>>+--
>>>+format = {}
>>>+ | ---
>>>+ | ...
>>>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>>+ | ---
>>>+ | ...
>>>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>>+ | ---
>>>+ | ...
>>>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>>+ | ---
>>>+ | ...
>>>+s = box.schema.create_space('test', {format = format})
>>>+ | ---
>>>+ | ...
>>>+s:format()
>>>+ | ---
>>>+ | - [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
>>>+ | 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
>>>+ | ...
>>>+s:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/gh-2937-ddl_collation_field_def.test.lua b/test/box/gh-2937-ddl_collation_field_def.test.lua
>>>new file mode 100644
>>>index 000000000..1ddfa7246
>>>--- /dev/null
>>>+++ b/test/box/gh-2937-ddl_collation_field_def.test.lua
>>>@@ -0,0 +1,10 @@
>>>+--
>>>+-- gh-2937: allow to specify collation in field definition.
>>>+--
>>>+format = {}
>>>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
>>>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
>>>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
>>>+s = box.schema.create_space('test', {format = format})
>>>+s:format()
>>>+s:drop()
>>>diff --git a/test/box/gh-3290-ddl_collation_deleted.result b/test/box/gh-3290-ddl_collation_deleted.result
>>>new file mode 100644
>>>index 000000000..eb59b6c1d
>>>--- /dev/null
>>>+++ b/test/box/gh-3290-ddl_collation_deleted.result
>>>@@ -0,0 +1,16 @@
>>>+-- test-run result file version 2
>>>+--
>>>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>>+-- must work even if a collation is deleted from _collation.
>>>+--
>>>+t = box.space._collation:delete{1}
>>>+ | ---
>>>+ | ...
>>>+utf8.cmp('abc', 'def')
>>>+ | ---
>>>+ | - -1
>>>+ | ...
>>>+box.space._collation:replace(t)
>>>+ | ---
>>>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
>>>+ | ...
>>>diff --git a/test/box/gh-3290-ddl_collation_deleted.test.lua b/test/box/gh-3290-ddl_collation_deleted.test.lua
>>>new file mode 100644
>>>index 000000000..5fd3d7e1a
>>>--- /dev/null
>>>+++ b/test/box/gh-3290-ddl_collation_deleted.test.lua
>>>@@ -0,0 +1,7 @@
>>>+--
>>>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
>>>+-- must work even if a collation is deleted from _collation.
>>>+--
>>>+t = box.space._collation:delete{1}
>>>+utf8.cmp('abc', 'def')
>>>+box.space._collation:replace(t)
>>>diff --git a/test/box/gh-928-ddl_truncate.result b/test/box/gh-928-ddl_truncate.result
>>>new file mode 100644
>>>index 000000000..f244e07f1
>>>--- /dev/null
>>>+++ b/test/box/gh-928-ddl_truncate.result
>>>@@ -0,0 +1,35 @@
>>>+-- test-run result file version 2
>>>+fiber = require'fiber'
>>>+ | ---
>>>+ | ...
>>>+ch = fiber.channel(2)
>>>+ | ---
>>>+ | ...
>>>+
>>>+--issue #928
>>>+space = box.schema.space.create('test_trunc')
>>>+ | ---
>>>+ | ...
>>>+_ = space:create_index('pk')
>>>+ | ---
>>>+ | ...
>>>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>>+ | ---
>>>+ | ...
>>>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>>+ | ---
>>>+ | ...
>>>+
>>>+function test_trunc() space:truncate() ch:put(true) end
>>>+ | ---
>>>+ | ...
>>>+
>>>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>>+ | ---
>>>+ | ...
>>>+_ = {ch:get(), ch:get()}
>>>+ | ---
>>>+ | ...
>>>+space:drop()
>>>+ | ---
>>>+ | ...
>>>diff --git a/test/box/gh-928-ddl_truncate.test.lua b/test/box/gh-928-ddl_truncate.test.lua
>>>new file mode 100644
>>>index 000000000..10be8c361
>>>--- /dev/null
>>>+++ b/test/box/gh-928-ddl_truncate.test.lua
>>>@@ -0,0 +1,14 @@
>>>+fiber = require'fiber'
>>>+ch = fiber.channel(2)
>>>+
>>>+--issue #928
>>>+space = box.schema.space.create('test_trunc')
>>>+_ = space:create_index('pk')
>>>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
>>>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
>>>+
>>>+function test_trunc() space:truncate() ch:put(true) end
>>>+
>>>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
>>>+_ = {ch:get(), ch:get()}
>>>+space:drop()
>>>--
>>>2.17.1
>>>  
>> 
>> 
>>--
>>Oleg Piskunov
>>  
> 
> 
>--
>Alexander Tikhonov
>  
 
 
--
Oleg Piskunov
 

[-- Attachment #2: Type: text/html, Size: 156646 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
  2020-03-19 13:50   ` Alexander Tikhonov
  2020-03-20  8:40     ` Oleg Piskunov
@ 2020-03-24  8:02     ` Sergey Bronnikov
  1 sibling, 0 replies; 6+ messages in thread
From: Sergey Bronnikov @ 2020-03-24  8:02 UTC (permalink / raw)
  To: Alexander Tikhonov; +Cc: Oleg Piskunov, tarantool-patches

LGTM.

On 16:50 Thu 19 Mar , Alexander Tikhonov wrote:
> 
> 
> Hi, Oleg, I’ve rechecked all the tests and didn’t find any used way to
> cleanup the fibers at the tests finish. I’ll suggest to discuss it in
> the future changes, but not mess with the current tests splitting.
>   
> >Среда, 18 марта 2020, 15:06 +03:00 от Oleg Piskunov <o.piskunov@tarantool.org>:
> > 
> >
> >Hi,
> > 
> >Sasha, need to cleanup fibers in next tests:
> > 
> >test/box/ddl_parallel.test.lua 
> >test/box/ddl_tuple.test.lua
> >test/box/gh-2336-ddl_call_twice.test.lua 
> >test/box/gh-2783-ddl_lock.test.lua
> >test/box/gh-928-ddl_truncate.test.lua
> Not needed in the current patch.
> > 
> >Unused fibers in next tests:
> > 
> >test/box/gh-822_net.box.test.lua 
> > 
> Was already removed in V2, please check if you mentioned correct test.
> > 
> >>Среда, 18 марта 2020, 13:37 +03:00 от Alexander V. Tikhonov < avtikhon@tarantool.org >:
> >> 
> >>Divided into tests:
> >>- box/ddl_alter.test.lua
> >>- box/ddl_collation.test.lua
> >>- box/ddl_collation_types.test.lua
> >>- box/ddl_collation_wrong_id.test.lua
> >>- box/ddl_no_collation.test.lua
> >>- box/ddl_parallel.test.lua
> >>- box/ddl_tuple.test.lua
> >>- box/gh-2336-ddl_call_twice.test.lua
> >>- box/gh-2783-ddl_lock.test.lua
> >>- box/gh-2839-ddl_custom_fields.test.lua
> >>- box/gh-2937-ddl_collation_field_def.test.lua
> >>- box/gh-3290-ddl_collation_deleted.test.lua
> >>- box/gh-928-ddl_truncate.test.lua
> >>---
> >>
> >>Github:  https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests
> >>
> >> test/box/ddl.result | 1210 -----------------
> >> test/box/ddl.test.lua | 272 ----
> >> test/box/ddl_alter.result | 30 +
> >> test/box/ddl_alter.test.lua | 9 +
> >> test/box/ddl_collation.result | 853 ++++++++++++
> >> test/box/ddl_collation.test.lua | 90 ++
> >> test/box/ddl_collation_types.result | 21 +
> >> test/box/ddl_collation_types.test.lua | 6 +
> >> test/box/ddl_collation_wrong_id.result | 21 +
> >> test/box/ddl_collation_wrong_id.test.lua | 7 +
> >> test/box/ddl_no_collation.result | 12 +
> >> test/box/ddl_no_collation.test.lua | 4 +
> >> test/box/ddl_parallel.result | 61 +
> >> test/box/ddl_parallel.test.lua | 30 +
> >> test/box/ddl_tuple.result | 67 +
> >> test/box/ddl_tuple.test.lua | 28 +
> >> test/box/gh-2336-ddl_call_twice.result | 44 +
> >> test/box/gh-2336-ddl_call_twice.test.lua | 16 +
> >> test/box/gh-2783-ddl_lock.result | 62 +
> >> test/box/gh-2783-ddl_lock.test.lua | 33 +
> >> test/box/gh-2839-ddl_custom_fields.result | 26 +
> >> test/box/gh-2839-ddl_custom_fields.test.lua | 10 +
> >> .../gh-2937-ddl_collation_field_def.result | 27 +
> >> .../gh-2937-ddl_collation_field_def.test.lua | 10 +
> >> test/box/gh-3290-ddl_collation_deleted.result | 16 +
> >> .../gh-3290-ddl_collation_deleted.test.lua | 7 +
> >> test/box/gh-928-ddl_truncate.result | 35 +
> >> test/box/gh-928-ddl_truncate.test.lua | 14 +
> >> 28 files changed, 1539 insertions(+), 1482 deletions(-)
> >> delete mode 100644 test/box/ddl.result
> >> delete mode 100644 test/box/ddl.test.lua
> >> create mode 100644 test/box/ddl_alter.result
> >> create mode 100644 test/box/ddl_alter.test.lua
> >> create mode 100644 test/box/ddl_collation.result
> >> create mode 100644 test/box/ddl_collation.test.lua
> >> create mode 100644 test/box/ddl_collation_types.result
> >> create mode 100644 test/box/ddl_collation_types.test.lua
> >> create mode 100644 test/box/ddl_collation_wrong_id.result
> >> create mode 100644 test/box/ddl_collation_wrong_id.test.lua
> >> create mode 100644 test/box/ddl_no_collation.result
> >> create mode 100644 test/box/ddl_no_collation.test.lua
> >> create mode 100644 test/box/ddl_parallel.result
> >> create mode 100644 test/box/ddl_parallel.test.lua
> >> create mode 100644 test/box/ddl_tuple.result
> >> create mode 100644 test/box/ddl_tuple.test.lua
> >> create mode 100644 test/box/gh-2336-ddl_call_twice.result
> >> create mode 100644 test/box/gh-2336-ddl_call_twice.test.lua
> >> create mode 100644 test/box/gh-2783-ddl_lock.result
> >> create mode 100644 test/box/gh-2783-ddl_lock.test.lua
> >> create mode 100644 test/box/gh-2839-ddl_custom_fields.result
> >> create mode 100644 test/box/gh-2839-ddl_custom_fields.test.lua
> >> create mode 100644 test/box/gh-2937-ddl_collation_field_def.result
> >> create mode 100644 test/box/gh-2937-ddl_collation_field_def.test.lua
> >> create mode 100644 test/box/gh-3290-ddl_collation_deleted.result
> >> create mode 100644 test/box/gh-3290-ddl_collation_deleted.test.lua
> >> create mode 100644 test/box/gh-928-ddl_truncate.result
> >> create mode 100644 test/box/gh-928-ddl_truncate.test.lua
> >>
> >>diff --git a/test/box/ddl.result b/test/box/ddl.result
> >>deleted file mode 100644
> >>index b995b1493..000000000
> >>--- a/test/box/ddl.result
> >>+++ /dev/null
> >>@@ -1,1210 +0,0 @@
> >>-env = require('test_run')
> >>----
> >>-...
> >>-test_run = env.new()
> >>----
> >>-...
> >>-fiber = require'fiber'
> >>----
> >>-...
> >>--- simple test for parallel ddl execution
> >>-_ = box.schema.space.create('test'):create_index('pk')
> >>----
> >>-...
> >>-ch = fiber.channel(2)
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ';'")
> >>----
> >>-- true
> >>-...
> >>-function f1()
> >>- box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>- ch:put(true)
> >>-end;
> >>----
> >>-...
> >>-function f2()
> >>- box.space.test:create_index('third', {parts = {3, 'string'}})
> >>- ch:put(true)
> >>-end;
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ''");
> >>----
> >>-- true
> >>-...
> >>-_ = {fiber.create(f1), fiber.create(f2)}
> >>----
> >>-...
> >>-ch:get()
> >>----
> >>-- true
> >>-...
> >>-ch:get()
> >>----
> >>-- true
> >>-...
> >>-_ = box.space.test:drop()
> >>----
> >>-...
> >>-test_run:cmd('restart server default')
> >>-env = require('test_run')
> >>----
> >>-...
> >>-test_run = env.new()
> >>----
> >>-...
> >>-fiber = require'fiber'
> >>----
> >>-...
> >>-ch = fiber.channel(2)
> >>----
> >>-...
> >>---issue #928
> >>-space = box.schema.space.create('test_trunc')
> >>----
> >>-...
> >>-_ = space:create_index('pk')
> >>----
> >>-...
> >>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
> >>----
> >>-...
> >>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
> >>----
> >>-...
> >>-function test_trunc() space:truncate() ch:put(true) end
> >>----
> >>-...
> >>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
> >>----
> >>-...
> >>-_ = {ch:get(), ch:get()}
> >>----
> >>-...
> >>-space:drop()
> >>----
> >>-...
> >>--- index should not crash after alter
> >>-space = box.schema.space.create('test_swap')
> >>----
> >>-...
> >>-index = space:create_index('pk')
> >>----
> >>-...
> >>-space:replace({1, 2, 3})
> >>----
> >>-- [1, 2, 3]
> >>-...
> >>-index:rename('primary')
> >>----
> >>-...
> >>-index2 = space:create_index('sec')
> >>----
> >>-...
> >>-space:replace({2, 3, 1})
> >>----
> >>-- [2, 3, 1]
> >>-...
> >>-space:select()
> >>----
> >>-- - [1, 2, 3]
> >>- - [2, 3, 1]
> >>-...
> >>-space:drop()
> >>----
> >>-...
> >>-ch = fiber.channel(3)
> >>----
> >>-...
> >>-_ = box.schema.space.create('test'):create_index('pk')
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ';'")
> >>----
> >>-- true
> >>-...
> >>-function add_index()
> >>- box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>- ch:put(true)
> >>-end;
> >>----
> >>-...
> >>-function insert_tuple(tuple)
> >>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
> >>-end;
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ''");
> >>----
> >>-- true
> >>-...
> >>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
> >>----
> >>-...
> >>-{ch:get(), ch:get(), ch:get()}
> >>----
> >>-- - - false
> >>- - 'Tuple field 2 type does not match one required by operation: expected unsigned'
> >>- - - true
> >>- - [1, 2, 'a']
> >>- - true
> >>-...
> >>-box.space.test:select()
> >>----
> >>-- - [1, 2, 'a']
> >>-...
> >>-test_run:cmd('restart server default')
> >>-box.space.test:select()
> >>----
> >>-- - [1, 2, 'a']
> >>-...
> >>-box.space.test:drop()
> >>----
> >>-...
> >>--- gh-2336 crash if format called twice during snapshot
> >>-fiber = require'fiber'
> >>----
> >>-...
> >>-space = box.schema.space.create('test_format')
> >>----
> >>-...
> >>-_ = space:create_index('pk', { parts = { 1,'str' }})
> >>----
> >>-...
> >>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
> >>----
> >>-...
> >>-str = string.rep("t",1024)
> >>----
> >>-...
> >>-for i = 1, 10000 do space:insert{tostring(i), str} end
> >>----
> >>-...
> >>-ch = fiber.channel(3)
> >>----
> >>-...
> >>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
> >>----
> >>-...
> >>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
> >>----
> >>-...
> >>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
> >>----
> >>-...
> >>-{ch:get(), ch:get(), ch:get()}
> >>----
> >>-- - true
> >>- - true
> >>- - true
> >>-...
> >>-space:drop()
> >>----
> >>-...
> >>--- collation
> >>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>----
> >>-...
> >>-box.internal.collation.create('test')
> >>----
> >>-- error: Illegal parameters, type (second arg) must be a string
> >>-...
> >>-box.internal.collation.create('test', 'ICU')
> >>----
> >>-- error: Illegal parameters, locale (third arg) must be a string
> >>-...
> >>-box.internal.collation.create(42, 'ICU', 'ru_RU')
> >>----
> >>-- error: Illegal parameters, name (first arg) must be a string
> >>-...
> >>-box.internal.collation.create('test', 42, 'ru_RU')
> >>----
> >>-- error: Illegal parameters, type (second arg) must be a string
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 42)
> >>----
> >>-- error: Illegal parameters, locale (third arg) must be a string
> >>-...
> >>-box.internal.collation.create('test', 'nothing', 'ru_RU')
> >>----
> >>-- error: 'Failed to initialize collation: unknown collation type.'
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
> >>----
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>----
> >>-- error: Duplicate key exists in unique index 'name' in space '_collation'
> >>-...
> >>-box.internal.collation.drop('test')
> >>----
> >>-...
> >>-box.internal.collation.drop('nothing') -- allowed
> >>----
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
> >>----
> >>-- error: Illegal parameters, options (fourth arg) must be a table or nil
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
> >>----
> >>-- error: Illegal parameters, options (fourth arg) must be a table or nil
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
> >>----
> >>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong french_collation option setting,
> >>- expected ON | OFF.'
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
> >>----
> >>-...
> >>-box.internal.collation.drop('test') --ok
> >>----
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong strength option setting, expected
> >>- PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
> >>----
> >>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
> >>----
> >>-- error: 'Wrong collation options (field 5): ''strength'' must be enum'
> >>-...
> >>-box.internal.collation.drop('test') --ok
> >>----
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
> >>----
> >>-...
> >>-box.internal.collation.drop('test') --ok
> >>----
> >>-...
> >>-c = box.space._collation:get{1}:totable()
> >>----
> >>-...
> >>-c[2] = 'unicode_test'
> >>----
> >>-...
> >>-box.space._collation:replace(c)
> >>----
> >>-- error: collation does not support alter
> >>-...
> >>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
> >>----
> >>-...
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>----
> >>-...
> >>-box.internal.collation.exists('test')
> >>----
> >>-- true
> >>-...
> >>-test_run:cmd('restart server default')
> >>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>----
> >>-...
> >>-box.internal.collation.exists('test')
> >>----
> >>-- true
> >>-...
> >>-box.internal.collation.drop('test')
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test'}
> >>----
> >>-- error: Tuple field 3 required by space format is missing
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU'}
> >>----
> >>-- error: Tuple field 5 required by space format is missing
> >>-...
> >>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
> >>----
> >>-- error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
> >>-...
> >>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
> >>----
> >>-- error: 'Tuple field 2 type does not match one required by operation: expected string'
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
> >>----
> >>-- error: 'Tuple field 4 type does not match one required by operation: expected string'
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
> >>----
> >>-- error: 'Tuple field 5 type does not match one required by operation: expected string'
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
> >>----
> >>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>----
> >>-- error: Duplicate key exists in unique index 'name' in space '_collation'
> >>-...
> >>-box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>-box.space._collation.index.name:delete{'nothing'} -- allowed
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
> >>----
> >>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
> >>----
> >>-- error: 'Tuple field 6 type does not match one required by operation: expected map'
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
> >>----
> >>-- error: 'Wrong collation options (field 5): unexpected option ''ping'''
> >>-...
> >>-opts = {normalization_mode='NORMAL'}
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
> >>- expected ON | OFF.'
> >>-...
> >>-opts.normalization_mode = 'OFF'
> >>----
> >>-...
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
> >>----
> >>-...
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-...
> >>-opts.numeric_collation = 'PERL'
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
> >>- expected ON | OFF.'
> >>-...
> >>-opts.numeric_collation = 'ON'
> >>----
> >>-...
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>----
> >>-...
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-...
> >>-opts.alternate_handling1 = 'ON'
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
> >>-...
> >>-opts.alternate_handling1 = nil
> >>----
> >>-...
> >>-opts.alternate_handling = 'ON'
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
> >>- expected NON_IGNORABLE | SHIFTED.'
> >>-...
> >>-opts.alternate_handling = 'SHIFTED'
> >>----
> >>-...
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>----
> >>-...
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-...
> >>-opts.case_first = 'ON'
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
> >>- OFF | UPPER_FIRST | LOWER_FIRST.'
> >>-...
> >>-opts.case_first = 'OFF'
> >>----
> >>-...
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>----
> >>-...
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-...
> >>-opts.case_level = 'UPPER'
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
> >>- ON | OFF.'
> >>-...
> >>-opts.case_level = 'DEFAULT'
> >>----
> >>-...
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>----
> >>-- error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
> >>- ON | OFF.'
> >>-...
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>----
> >>-...
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>----
> >>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>-box.space._collation:select{}
> >>----
> >>-- - [0, 'none', 1, 'BINARY', '', {}]
> >>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
> >>- - [3, 'binary', 1, 'BINARY', '', {}]
> >>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
> >>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
> >>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
> >>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
> >>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
> >>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
> >>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
> >>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
> >>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
> >>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
> >>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
> >>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
> >>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
> >>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
> >>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
> >>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
> >>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
> >>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
> >>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
> >>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
> >>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
> >>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
> >>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
> >>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
> >>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
> >>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
> >>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
> >>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
> >>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
> >>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
> >>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
> >>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
> >>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
> >>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
> >>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
> >>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
> >>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
> >>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
> >>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
> >>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
> >>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
> >>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
> >>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
> >>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
> >>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
> >>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
> >>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
> >>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
> >>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
> >>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
> >>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
> >>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
> >>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
> >>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
> >>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
> >>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
> >>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
> >>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
> >>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
> >>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
> >>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
> >>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
> >>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
> >>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
> >>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
> >>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
> >>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
> >>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
> >>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
> >>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
> >>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
> >>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
> >>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
> >>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
> >>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
> >>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
> >>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
> >>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
> >>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
> >>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
> >>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
> >>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
> >>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
> >>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
> >>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
> >>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
> >>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
> >>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
> >>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
> >>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
> >>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
> >>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
> >>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
> >>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
> >>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
> >>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
> >>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
> >>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
> >>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
> >>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
> >>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
> >>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
> >>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
> >>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
> >>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
> >>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
> >>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
> >>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
> >>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
> >>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
> >>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
> >>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
> >>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
> >>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
> >>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
> >>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
> >>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
> >>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
> >>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
> >>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
> >>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
> >>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
> >>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
> >>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
> >>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
> >>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
> >>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
> >>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
> >>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
> >>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
> >>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
> >>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
> >>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
> >>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
> >>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
> >>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
> >>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
> >>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
> >>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
> >>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
> >>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
> >>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
> >>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
> >>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
> >>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
> >>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
> >>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
> >>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
> >>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
> >>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
> >>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
> >>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
> >>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
> >>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
> >>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
> >>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
> >>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
> >>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
> >>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
> >>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
> >>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
> >>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
> >>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
> >>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
> >>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
> >>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
> >>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
> >>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
> >>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
> >>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
> >>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
> >>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
> >>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
> >>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
> >>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
> >>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
> >>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
> >>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
> >>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
> >>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
> >>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
> >>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
> >>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
> >>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
> >>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
> >>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
> >>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
> >>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
> >>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
> >>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
> >>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
> >>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
> >>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
> >>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
> >>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
> >>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
> >>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
> >>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
> >>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
> >>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
> >>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
> >>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
> >>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
> >>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
> >>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
> >>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
> >>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
> >>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
> >>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
> >>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
> >>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
> >>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
> >>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
> >>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
> >>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
> >>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
> >>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
> >>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
> >>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
> >>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
> >>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
> >>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
> >>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
> >>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
> >>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
> >>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
> >>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
> >>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
> >>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
> >>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
> >>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
> >>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
> >>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
> >>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
> >>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
> >>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
> >>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
> >>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
> >>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
> >>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
> >>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
> >>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
> >>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
> >>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
> >>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
> >>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
> >>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
> >>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
> >>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
> >>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
> >>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
> >>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
> >>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
> >>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
> >>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
> >>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
> >>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
> >>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
> >>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
> >>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
> >>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
> >>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
> >>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
> >>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
> >>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
> >>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
> >>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
> >>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>-test_run:cmd('restart server default')
> >>-box.space._collation:select{}
> >>----
> >>-- - [0, 'none', 1, 'BINARY', '', {}]
> >>- - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
> >>- - [3, 'binary', 1, 'BINARY', '', {}]
> >>- - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
> >>- - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
> >>- - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
> >>- - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
> >>- - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
> >>- - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
> >>- - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
> >>- - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
> >>- - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
> >>- - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
> >>- - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
> >>- - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
> >>- - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
> >>- - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
> >>- - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
> >>- - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
> >>- - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
> >>- - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
> >>- - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
> >>- - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
> >>- - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
> >>- - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
> >>- - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
> >>- - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
> >>- - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
> >>- - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
> >>- - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
> >>- - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
> >>- - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
> >>- - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
> >>- - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
> >>- - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
> >>- - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
> >>- - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
> >>- - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
> >>- - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
> >>- - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
> >>- - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
> >>- - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
> >>- - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
> >>- - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
> >>- - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
> >>- - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
> >>- - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
> >>- - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
> >>- - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
> >>- - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
> >>- - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
> >>- - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
> >>- - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
> >>- - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
> >>- - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
> >>- - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
> >>- - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
> >>- - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
> >>- - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
> >>- - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
> >>- - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
> >>- - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
> >>- - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
> >>- - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
> >>- - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
> >>- - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
> >>- - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
> >>- - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
> >>- - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
> >>- - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
> >>- - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
> >>- - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
> >>- - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
> >>- - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
> >>- - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
> >>- - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
> >>- - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
> >>- - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
> >>- - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
> >>- - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
> >>- - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
> >>- - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
> >>- - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
> >>- - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
> >>- - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
> >>- - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
> >>- - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
> >>- - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
> >>- - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
> >>- - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
> >>- - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
> >>- - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
> >>- - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
> >>- - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
> >>- - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
> >>- - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
> >>- - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
> >>- - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
> >>- - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
> >>- - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
> >>- - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
> >>- - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
> >>- - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
> >>- - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
> >>- - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
> >>- - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
> >>- - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
> >>- - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
> >>- - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
> >>- - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
> >>- - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
> >>- - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
> >>- - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
> >>- - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
> >>- - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
> >>- - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
> >>- - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
> >>- - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
> >>- - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
> >>- - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
> >>- - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
> >>- - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
> >>- - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
> >>- - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
> >>- - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
> >>- - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
> >>- - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
> >>- - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
> >>- - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
> >>- - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
> >>- - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
> >>- - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
> >>- - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
> >>- - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
> >>- - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
> >>- - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
> >>- - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
> >>- - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
> >>- - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
> >>- - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
> >>- - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
> >>- - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
> >>- - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
> >>- - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
> >>- - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
> >>- - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
> >>- - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
> >>- - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
> >>- - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
> >>- - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
> >>- - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
> >>- - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
> >>- - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
> >>- - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
> >>- - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
> >>- - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
> >>- - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
> >>- - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
> >>- - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
> >>- - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
> >>- - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
> >>- - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
> >>- - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
> >>- - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
> >>- - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
> >>- - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
> >>- - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
> >>- - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
> >>- - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
> >>- - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
> >>- - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
> >>- - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
> >>- - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
> >>- - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
> >>- - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
> >>- - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
> >>- - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
> >>- - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
> >>- - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
> >>- - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
> >>- - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
> >>- - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
> >>- - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
> >>- - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
> >>- - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
> >>- - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
> >>- - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
> >>- - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
> >>- - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
> >>- - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
> >>- - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
> >>- - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
> >>- - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
> >>- - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
> >>- - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
> >>- - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
> >>- - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
> >>- - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
> >>- - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
> >>- - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
> >>- - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
> >>- - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
> >>- - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
> >>- - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
> >>- - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
> >>- - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
> >>- - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
> >>- - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
> >>- - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
> >>- - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
> >>- - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
> >>- - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
> >>- - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
> >>- - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
> >>- - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
> >>- - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
> >>- - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
> >>- - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
> >>- - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
> >>- - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
> >>- - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
> >>- - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
> >>- - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
> >>- - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
> >>- - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
> >>- - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
> >>- - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
> >>- - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
> >>- - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
> >>- - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
> >>- - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
> >>- - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
> >>- - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
> >>- - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
> >>- - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
> >>- - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
> >>- - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
> >>- - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
> >>- - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
> >>- - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
> >>- - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
> >>- - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
> >>- - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
> >>- - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
> >>- - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
> >>- - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
> >>- - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
> >>- - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
> >>- - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
> >>- - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
> >>- - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
> >>- - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
> >>- - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
> >>- - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
> >>- - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
> >>- - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
> >>- - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
> >>- - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
> >>- - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
> >>- - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
> >>- - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
> >>- - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
> >>- - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
> >>- - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
> >>- - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
> >>- - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
> >>- - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
> >>- - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
> >>- - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
> >>- - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
> >>- - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
> >>- - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
> >>- - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>-box.space._collation.index.name:delete{'test'}
> >>----
> >>-- [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>-...
> >>---
> >>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
> >>--- must work even if a collation is deleted from _collation.
> >>---
> >>-t = box.space._collation:delete{1}
> >>----
> >>-...
> >>-utf8.cmp('abc', 'def')
> >>----
> >>-- -1
> >>-...
> >>-box.space._collation:replace(t)
> >>----
> >>-- [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>-...
> >>---
> >>--- gh-2839: allow to store custom fields in field definition.
> >>---
> >>-format = {}
> >>----
> >>-...
> >>-format[1] = {name = 'field1', type = 'unsigned'}
> >>----
> >>-...
> >>-format[2] = {'field2', 'unsigned'}
> >>----
> >>-...
> >>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
> >>----
> >>-...
> >>-s = box.schema.create_space('test', {format = format})
> >>----
> >>-...
> >>-s:format()[3].custom_field
> >>----
> >>-- custom_value
> >>-...
> >>-s:drop()
> >>----
> >>-...
> >>---
> >>--- gh-2937: allow to specify collation in field definition.
> >>---
> >>-format = {}
> >>----
> >>-...
> >>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
> >>----
> >>-...
> >>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
> >>----
> >>-...
> >>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
> >>----
> >>-...
> >>-s = box.schema.create_space('test', {format = format})
> >>----
> >>-...
> >>-s:format()
> >>----
> >>-- [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
> >>- 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
> >>-...
> >>-s:drop()
> >>----
> >>-...
> >>--- Check that collation is allowed only for stings, scalar and any types.
> >>-format = {}
> >>----
> >>-...
> >>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
> >>----
> >>-...
> >>-s = box.schema.create_space('test', {format = format})
> >>----
> >>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
> >>- scalar and any fields'
> >>-...
> >>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
> >>----
> >>-...
> >>-s = box.schema.create_space('test', {format = format})
> >>----
> >>-- error: 'Failed to create space ''test'': collation is reasonable only for string,
> >>- scalar and any fields'
> >>-...
> >>--- Check that error is raised when collation doesn't exists.
> >>-format = {}
> >>----
> >>-...
> >>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
> >>----
> >>-...
> >>-s = box.schema.create_space('test', {format = format})
> >>----
> >>-- error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
> >>-...
> >>--- Check that error is raised when collation with wrong id is used.
> >>-_space = box.space[box.schema.SPACE_ID]
> >>----
> >>-...
> >>-utils = require('utils')
> >>----
> >>-...
> >>-EMPTY_MAP = utils.setmap({})
> >>----
> >>-...
> >>-format = {{name = 'field1', type = 'string', collation = 666}}
> >>----
> >>-...
> >>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
> >>----
> >>-...
> >>-_space:insert(surrogate_space)
> >>----
> >>-- error: 'Wrong collation options (field 1): collation was not found by ID'
> >>-...
> >>---
> >>--- gh-2783
> >>--- A ddl operation shoud fail before trying to lock a ddl latch
> >>--- in a multi-statement transaction.
> >>--- If operation tries to lock already an locked latch then the
> >>--- current transaction will be silently rolled back under our feet.
> >>--- This is confusing. So check for multi-statement transaction
> >>--- before locking the latch.
> >>---
> >>-test_latch = box.schema.space.create('test_latch')
> >>----
> >>-...
> >>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
> >>----
> >>-...
> >>-fiber = require('fiber')
> >>----
> >>-...
> >>-c = fiber.channel(1)
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ';'")
> >>----
> >>-- true
> >>-...
> >>-_ = fiber.create(function()
> >>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
> >>- c:put(true)
> >>-end);
> >>----
> >>-...
> >>--- Should be Ok for now
> >>-box.begin()
> >>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
> >>-box.commit();
> >>----
> >>-...
> >>-test_run:cmd("setopt delimiter ''");
> >>----
> >>-- true
> >>-...
> >>--- Explicitly roll back the transaction in multi-statement,
> >>--- which hasn't finished due to DDL error
> >>-box.rollback()
> >>----
> >>-...
> >>-_ = c:get()
> >>----
> >>-...
> >>-test_latch:drop() -- this is where everything stops
> >>----
> >>-...
> >>diff --git a/test/box/ddl.test.lua b/test/box/ddl.test.lua
> >>deleted file mode 100644
> >>index 101bc6f9b..000000000
> >>--- a/test/box/ddl.test.lua
> >>+++ /dev/null
> >>@@ -1,272 +0,0 @@
> >>-env = require('test_run')
> >>-test_run = env.new()
> >>-
> >>-fiber = require'fiber'
> >>-
> >>--- simple test for parallel ddl execution
> >>-_ = box.schema.space.create('test'):create_index('pk')
> >>-
> >>-ch = fiber.channel(2)
> >>-
> >>-test_run:cmd("setopt delimiter ';'")
> >>-
> >>-function f1()
> >>- box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>- ch:put(true)
> >>-end;
> >>-
> >>-function f2()
> >>- box.space.test:create_index('third', {parts = {3, 'string'}})
> >>- ch:put(true)
> >>-end;
> >>-
> >>-test_run:cmd("setopt delimiter ''");
> >>-
> >>-_ = {fiber.create(f1), fiber.create(f2)}
> >>-
> >>-ch:get()
> >>-ch:get()
> >>-
> >>-_ = box.space.test:drop()
> >>-
> >>-test_run:cmd('restart server default')
> >>-
> >>-env = require('test_run')
> >>-test_run = env.new()
> >>-fiber = require'fiber'
> >>-
> >>-ch = fiber.channel(2)
> >>-
> >>---issue #928
> >>-space = box.schema.space.create('test_trunc')
> >>-_ = space:create_index('pk')
> >>-_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
> >>-_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
> >>-
> >>-function test_trunc() space:truncate() ch:put(true) end
> >>-
> >>-_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
> >>-_ = {ch:get(), ch:get()}
> >>-space:drop()
> >>-
> >>--- index should not crash after alter
> >>-space = box.schema.space.create('test_swap')
> >>-index = space:create_index('pk')
> >>-space:replace({1, 2, 3})
> >>-index:rename('primary')
> >>-index2 = space:create_index('sec')
> >>-space:replace({2, 3, 1})
> >>-space:select()
> >>-space:drop()
> >>-
> >>-
> >>-ch = fiber.channel(3)
> >>-
> >>-_ = box.schema.space.create('test'):create_index('pk')
> >>-
> >>-test_run:cmd("setopt delimiter ';'")
> >>-function add_index()
> >>- box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>- ch:put(true)
> >>-end;
> >>-
> >>-function insert_tuple(tuple)
> >>- ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
> >>-end;
> >>-test_run:cmd("setopt delimiter ''");
> >>-
> >>-_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
> >>-{ch:get(), ch:get(), ch:get()}
> >>-
> >>-box.space.test:select()
> >>-
> >>-test_run:cmd('restart server default')
> >>-
> >>-box.space.test:select()
> >>-box.space.test:drop()
> >>-
> >>--- gh-2336 crash if format called twice during snapshot
> >>-fiber = require'fiber'
> >>-
> >>-space = box.schema.space.create('test_format')
> >>-_ = space:create_index('pk', { parts = { 1,'str' }})
> >>-space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
> >>-str = string.rep("t",1024)
> >>-for i = 1, 10000 do space:insert{tostring(i), str} end
> >>-ch = fiber.channel(3)
> >>-_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
> >>-format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
> >>-for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
> >>-
> >>-{ch:get(), ch:get(), ch:get()}
> >>-
> >>-space:drop()
> >>-
> >>--- collation
> >>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>-
> >>-box.internal.collation.create('test')
> >>-box.internal.collation.create('test', 'ICU')
> >>-box.internal.collation.create(42, 'ICU', 'ru_RU')
> >>-box.internal.collation.create('test', 42, 'ru_RU')
> >>-box.internal.collation.create('test', 'ICU', 42)
> >>-box.internal.collation.create('test', 'nothing', 'ru_RU')
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>-box.internal.collation.drop('test')
> >>-box.internal.collation.drop('nothing') -- allowed
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
> >>-box.internal.collation.drop('test') --ok
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
> >>-box.internal.collation.drop('test') --ok
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
> >>-box.internal.collation.drop('test') --ok
> >>-c = box.space._collation:get{1}:totable()
> >>-c[2] = 'unicode_test'
> >>-box.space._collation:replace(c)
> >>-
> >>-box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
> >>-
> >>-box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>-box.internal.collation.exists('test')
> >>-
> >>-test_run:cmd('restart server default')
> >>-function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>-
> >>-box.internal.collation.exists('test')
> >>-box.internal.collation.drop('test')
> >>-
> >>-box.space._collation:auto_increment{'test'}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU'}
> >>-box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
> >>-box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
> >>-box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 42}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>-box.space._collation.index.name:delete{'test'} -- ok
> >>-box.space._collation.index.name:delete{'nothing'} -- allowed
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
> >>-opts = {normalization_mode='NORMAL'}
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.normalization_mode = 'OFF'
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>-opts.numeric_collation = 'PERL'
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.numeric_collation = 'ON'
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>-opts.alternate_handling1 = 'ON'
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.alternate_handling1 = nil
> >>-opts.alternate_handling = 'ON'
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.alternate_handling = 'SHIFTED'
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>-opts.case_first = 'ON'
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.case_first = 'OFF'
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>-opts.case_level = 'UPPER'
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>-opts.case_level = 'DEFAULT'
> >>-_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>-_ = box.space._collation.index.name:delete{'test'} -- ok
> >>-
> >>-box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>-box.space._collation:select{}
> >>-test_run:cmd('restart server default')
> >>-box.space._collation:select{}
> >>-box.space._collation.index.name:delete{'test'}
> >>-
> >>---
> >>--- gh-3290: expose ICU into Lua. It uses built-in collations, that
> >>--- must work even if a collation is deleted from _collation.
> >>---
> >>-t = box.space._collation:delete{1}
> >>-utf8.cmp('abc', 'def')
> >>-box.space._collation:replace(t)
> >>-
> >>---
> >>--- gh-2839: allow to store custom fields in field definition.
> >>---
> >>-format = {}
> >>-format[1] = {name = 'field1', type = 'unsigned'}
> >>-format[2] = {'field2', 'unsigned'}
> >>-format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
> >>-s = box.schema.create_space('test', {format = format})
> >>-s:format()[3].custom_field
> >>-s:drop()
> >>-
> >>---
> >>--- gh-2937: allow to specify collation in field definition.
> >>---
> >>-format = {}
> >>-format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
> >>-format[2] = {'field2', 'any', collation = 'unicode_ci'}
> >>-format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
> >>-s = box.schema.create_space('test', {format = format})
> >>-s:format()
> >>-s:drop()
> >>-
> >>--- Check that collation is allowed only for stings, scalar and any types.
> >>-format = {}
> >>-format[1] = {'field1', 'unsigned', collation = 'unicode'}
> >>-s = box.schema.create_space('test', {format = format})
> >>-format[1] = {'field2', 'array', collation = 'unicode_ci'}
> >>-s = box.schema.create_space('test', {format = format})
> >>-
> >>--- Check that error is raised when collation doesn't exists.
> >>-format = {}
> >>-format[1] = {'field1', 'unsigend', collation = 'test_coll'}
> >>-s = box.schema.create_space('test', {format = format})
> >>-
> >>--- Check that error is raised when collation with wrong id is used.
> >>-_space = box.space[box.schema.SPACE_ID]
> >>-utils = require('utils')
> >>-EMPTY_MAP = utils.setmap({})
> >>-format = {{name = 'field1', type = 'string', collation = 666}}
> >>-surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
> >>-_space:insert(surrogate_space)
> >>-
> >>---
> >>--- gh-2783
> >>--- A ddl operation shoud fail before trying to lock a ddl latch
> >>--- in a multi-statement transaction.
> >>--- If operation tries to lock already an locked latch then the
> >>--- current transaction will be silently rolled back under our feet.
> >>--- This is confusing. So check for multi-statement transaction
> >>--- before locking the latch.
> >>---
> >>-test_latch = box.schema.space.create('test_latch')
> >>-_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
> >>-fiber = require('fiber')
> >>-c = fiber.channel(1)
> >>-test_run:cmd("setopt delimiter ';'")
> >>-_ = fiber.create(function()
> >>- test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
> >>- c:put(true)
> >>-end);
> >>-
> >>--- Should be Ok for now
> >>-box.begin()
> >>- test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
> >>-box.commit();
> >>-test_run:cmd("setopt delimiter ''");
> >>--- Explicitly roll back the transaction in multi-statement,
> >>--- which hasn't finished due to DDL error
> >>-box.rollback()
> >>-
> >>-_ = c:get()
> >>-test_latch:drop() -- this is where everything stops
> >>diff --git a/test/box/ddl_alter.result b/test/box/ddl_alter.result
> >>new file mode 100644
> >>index 000000000..ce4a6ee69
> >>--- /dev/null
> >>+++ b/test/box/ddl_alter.result
> >>@@ -0,0 +1,30 @@
> >>+-- test-run result file version 2
> >>+-- index should not crash after alter
> >>+space = box.schema.space.create('test_swap')
> >>+ | ---
> >>+ | ...
> >>+index = space:create_index('pk')
> >>+ | ---
> >>+ | ...
> >>+space:replace({1, 2, 3})
> >>+ | ---
> >>+ | - [1, 2, 3]
> >>+ | ...
> >>+index:rename('primary')
> >>+ | ---
> >>+ | ...
> >>+index2 = space:create_index('sec')
> >>+ | ---
> >>+ | ...
> >>+space:replace({2, 3, 1})
> >>+ | ---
> >>+ | - [2, 3, 1]
> >>+ | ...
> >>+space:select()
> >>+ | ---
> >>+ | - - [1, 2, 3]
> >>+ | - [2, 3, 1]
> >>+ | ...
> >>+space:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/ddl_alter.test.lua b/test/box/ddl_alter.test.lua
> >>new file mode 100644
> >>index 000000000..ab0263b78
> >>--- /dev/null
> >>+++ b/test/box/ddl_alter.test.lua
> >>@@ -0,0 +1,9 @@
> >>+-- index should not crash after alter
> >>+space = box.schema.space.create('test_swap')
> >>+index = space:create_index('pk')
> >>+space:replace({1, 2, 3})
> >>+index:rename('primary')
> >>+index2 = space:create_index('sec')
> >>+space:replace({2, 3, 1})
> >>+space:select()
> >>+space:drop()
> >>diff --git a/test/box/ddl_collation.result b/test/box/ddl_collation.result
> >>new file mode 100644
> >>index 000000000..2571ad072
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation.result
> >>@@ -0,0 +1,853 @@
> >>+-- test-run result file version 2
> >>+env = require('test_run')
> >>+ | ---
> >>+ | ...
> >>+test_run = env.new()
> >>+ | ---
> >>+ | ...
> >>+
> >>+-- collation
> >>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>+ | ---
> >>+ | ...
> >>+
> >>+box.internal.collation.create('test')
> >>+ | ---
> >>+ | - error: Illegal parameters, type (second arg) must be a string
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU')
> >>+ | ---
> >>+ | - error: Illegal parameters, locale (third arg) must be a string
> >>+ | ...
> >>+box.internal.collation.create(42, 'ICU', 'ru_RU')
> >>+ | ---
> >>+ | - error: Illegal parameters, name (first arg) must be a string
> >>+ | ...
> >>+box.internal.collation.create('test', 42, 'ru_RU')
> >>+ | ---
> >>+ | - error: Illegal parameters, type (second arg) must be a string
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 42)
> >>+ | ---
> >>+ | - error: Illegal parameters, locale (third arg) must be a string
> >>+ | ...
> >>+box.internal.collation.create('test', 'nothing', 'ru_RU')
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: unknown collation type.'
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>+ | ---
> >>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
> >>+ | ...
> >>+box.internal.collation.drop('test')
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.drop('nothing') -- allowed
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
> >>+ | ---
> >>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
> >>+ | ---
> >>+ | - error: Illegal parameters, options (fourth arg) must be a table or nil
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong french_collation option setting,
> >>+ | expected ON | OFF.'
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.drop('test') --ok
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong strength option setting, expected
> >>+ | PRIMARY | SECONDARY | TERTIARY | QUATERNARY | IDENTICAL.'
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 5): ''strength'' must be enum'
> >>+ | ...
> >>+box.internal.collation.drop('test') --ok
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.drop('test') --ok
> >>+ | ---
> >>+ | ...
> >>+c = box.space._collation:get{1}:totable()
> >>+ | ---
> >>+ | ...
> >>+c[2] = 'unicode_test'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:replace(c)
> >>+ | ---
> >>+ | - error: collation does not support alter
> >>+ | ...
> >>+
> >>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
> >>+ | ---
> >>+ | ...
> >>+
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>+ | ---
> >>+ | ...
> >>+box.internal.collation.exists('test')
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+
> >>+test_run:cmd('restart server default')
> >>+ |
> >>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>+ | ---
> >>+ | ...
> >>+
> >>+box.internal.collation.exists('test')
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+box.internal.collation.drop('test')
> >>+ | ---
> >>+ | ...
> >>+
> >>+box.space._collation:auto_increment{'test'}
> >>+ | ---
> >>+ | - error: Tuple field 3 required by space format is missing
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU'}
> >>+ | ---
> >>+ | - error: Tuple field 5 required by space format is missing
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
> >>+ | ---
> >>+ | - error: 'Tuple field 3 type does not match one required by operation: expected unsigned'
> >>+ | ...
> >>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
> >>+ | ---
> >>+ | - error: 'Tuple field 2 type does not match one required by operation: expected string'
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
> >>+ | ---
> >>+ | - error: 'Tuple field 4 type does not match one required by operation: expected string'
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
> >>+ | ---
> >>+ | - error: 'Tuple field 5 type does not match one required by operation: expected string'
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
> >>+ | ---
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>+ | ---
> >>+ | - error: Duplicate key exists in unique index 'name' in space '_collation'
> >>+ | ...
> >>+box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>+box.space._collation.index.name:delete{'nothing'} -- allowed
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
> >>+ | ---
> >>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
> >>+ | ---
> >>+ | - error: 'Tuple field 6 type does not match one required by operation: expected map'
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 5): unexpected option ''ping'''
> >>+ | ...
> >>+opts = {normalization_mode='NORMAL'}
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong normalization_mode option setting,
> >>+ | expected ON | OFF.'
> >>+ | ...
> >>+opts.normalization_mode = 'OFF'
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | ...
> >>+opts.numeric_collation = 'PERL'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong numeric_collation option setting,
> >>+ | expected ON | OFF.'
> >>+ | ...
> >>+opts.numeric_collation = 'ON'
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | ...
> >>+opts.alternate_handling1 = 'ON'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 5): unexpected option ''alternate_handling1'''
> >>+ | ...
> >>+opts.alternate_handling1 = nil
> >>+ | ---
> >>+ | ...
> >>+opts.alternate_handling = 'ON'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong alternate_handling option setting,
> >>+ | expected NON_IGNORABLE | SHIFTED.'
> >>+ | ...
> >>+opts.alternate_handling = 'SHIFTED'
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | ...
> >>+opts.case_first = 'ON'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong case_first option setting, expected
> >>+ | OFF | UPPER_FIRST | LOWER_FIRST.'
> >>+ | ...
> >>+opts.case_first = 'OFF'
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | ...
> >>+opts.case_level = 'UPPER'
> >>+ | ---
> >>+ | ...
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
> >>+ | ON | OFF.'
> >>+ | ...
> >>+opts.case_level = 'DEFAULT'
> >>+ | ---
> >>+ | ...
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+ | ---
> >>+ | - error: 'Failed to initialize collation: ICU wrong case_level option setting, expected
> >>+ | ON | OFF.'
> >>+ | ...
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+ | ---
> >>+ | ...
> >>+
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>+ | ---
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>+box.space._collation:select{}
> >>+ | ---
> >>+ | - - [0, 'none', 1, 'BINARY', '', {}]
> >>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
> >>+ | - [3, 'binary', 1, 'BINARY', '', {}]
> >>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
> >>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
> >>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
> >>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
> >>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
> >>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
> >>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
> >>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
> >>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
> >>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
> >>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
> >>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
> >>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
> >>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
> >>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
> >>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
> >>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
> >>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
> >>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
> >>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
> >>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
> >>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
> >>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
> >>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
> >>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
> >>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
> >>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
> >>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
> >>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
> >>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
> >>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
> >>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
> >>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
> >>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
> >>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
> >>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
> >>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
> >>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
> >>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
> >>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
> >>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
> >>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
> >>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
> >>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
> >>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
> >>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
> >>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
> >>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
> >>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
> >>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
> >>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
> >>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
> >>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
> >>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
> >>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
> >>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
> >>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
> >>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
> >>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
> >>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
> >>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
> >>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
> >>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
> >>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
> >>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
> >>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
> >>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
> >>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
> >>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
> >>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
> >>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
> >>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
> >>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
> >>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
> >>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
> >>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
> >>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
> >>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
> >>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
> >>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
> >>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
> >>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
> >>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
> >>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
> >>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
> >>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
> >>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
> >>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
> >>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
> >>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
> >>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
> >>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
> >>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
> >>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
> >>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
> >>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
> >>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
> >>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
> >>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
> >>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
> >>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
> >>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
> >>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
> >>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
> >>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
> >>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
> >>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
> >>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
> >>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
> >>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
> >>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
> >>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
> >>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
> >>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
> >>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
> >>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
> >>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
> >>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
> >>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
> >>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
> >>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
> >>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
> >>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
> >>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
> >>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
> >>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
> >>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
> >>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
> >>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
> >>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
> >>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
> >>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
> >>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
> >>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
> >>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
> >>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
> >>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
> >>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
> >>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
> >>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
> >>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
> >>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
> >>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
> >>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
> >>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
> >>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
> >>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
> >>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
> >>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
> >>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
> >>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
> >>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
> >>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
> >>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
> >>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
> >>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
> >>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
> >>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
> >>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
> >>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
> >>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
> >>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
> >>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
> >>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
> >>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
> >>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
> >>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
> >>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
> >>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
> >>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
> >>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
> >>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
> >>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
> >>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
> >>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
> >>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
> >>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
> >>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
> >>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
> >>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
> >>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
> >>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
> >>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
> >>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
> >>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
> >>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
> >>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
> >>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
> >>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
> >>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
> >>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
> >>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
> >>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
> >>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
> >>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
> >>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
> >>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
> >>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
> >>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
> >>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
> >>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
> >>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
> >>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
> >>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
> >>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
> >>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
> >>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
> >>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
> >>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
> >>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
> >>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
> >>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
> >>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
> >>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
> >>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
> >>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
> >>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
> >>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
> >>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
> >>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
> >>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
> >>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
> >>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
> >>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
> >>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
> >>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
> >>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
> >>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
> >>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
> >>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
> >>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
> >>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
> >>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
> >>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
> >>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
> >>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
> >>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
> >>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
> >>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
> >>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
> >>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
> >>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
> >>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
> >>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
> >>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
> >>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
> >>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
> >>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
> >>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
> >>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
> >>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
> >>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
> >>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
> >>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
> >>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
> >>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
> >>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
> >>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
> >>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
> >>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
> >>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
> >>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
> >>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
> >>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>+test_run:cmd('restart server default')
> >>+ |
> >>+box.space._collation:select{}
> >>+ | ---
> >>+ | - - [0, 'none', 1, 'BINARY', '', {}]
> >>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>+ | - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
> >>+ | - [3, 'binary', 1, 'BINARY', '', {}]
> >>+ | - [4, 'unicode_af_s1', 1, 'ICU', 'af', {'strength': 'primary'}]
> >>+ | - [5, 'unicode_af_s2', 1, 'ICU', 'af', {'strength': 'secondary'}]
> >>+ | - [6, 'unicode_af_s3', 1, 'ICU', 'af', {'strength': 'tertiary'}]
> >>+ | - [7, 'unicode_am_s1', 1, 'ICU', 'am', {'strength': 'primary'}]
> >>+ | - [8, 'unicode_am_s2', 1, 'ICU', 'am', {'strength': 'secondary'}]
> >>+ | - [9, 'unicode_am_s3', 1, 'ICU', 'am', {'strength': 'tertiary'}]
> >>+ | - [10, 'unicode_ar_s1', 1, 'ICU', 'ar', {'strength': 'primary'}]
> >>+ | - [11, 'unicode_ar_s2', 1, 'ICU', 'ar', {'strength': 'secondary'}]
> >>+ | - [12, 'unicode_ar_s3', 1, 'ICU', 'ar', {'strength': 'tertiary'}]
> >>+ | - [13, 'unicode_as_s1', 1, 'ICU', 'as', {'strength': 'primary'}]
> >>+ | - [14, 'unicode_as_s2', 1, 'ICU', 'as', {'strength': 'secondary'}]
> >>+ | - [15, 'unicode_as_s3', 1, 'ICU', 'as', {'strength': 'tertiary'}]
> >>+ | - [16, 'unicode_az_s1', 1, 'ICU', 'az', {'strength': 'primary'}]
> >>+ | - [17, 'unicode_az_s2', 1, 'ICU', 'az', {'strength': 'secondary'}]
> >>+ | - [18, 'unicode_az_s3', 1, 'ICU', 'az', {'strength': 'tertiary'}]
> >>+ | - [19, 'unicode_be_s1', 1, 'ICU', 'be', {'strength': 'primary'}]
> >>+ | - [20, 'unicode_be_s2', 1, 'ICU', 'be', {'strength': 'secondary'}]
> >>+ | - [21, 'unicode_be_s3', 1, 'ICU', 'be', {'strength': 'tertiary'}]
> >>+ | - [22, 'unicode_bn_s1', 1, 'ICU', 'bn', {'strength': 'primary'}]
> >>+ | - [23, 'unicode_bn_s2', 1, 'ICU', 'bn', {'strength': 'secondary'}]
> >>+ | - [24, 'unicode_bn_s3', 1, 'ICU', 'bn', {'strength': 'tertiary'}]
> >>+ | - [25, 'unicode_bs_s1', 1, 'ICU', 'bs', {'strength': 'primary'}]
> >>+ | - [26, 'unicode_bs_s2', 1, 'ICU', 'bs', {'strength': 'secondary'}]
> >>+ | - [27, 'unicode_bs_s3', 1, 'ICU', 'bs', {'strength': 'tertiary'}]
> >>+ | - [28, 'unicode_bs_Cyrl_s1', 1, 'ICU', 'bs_Cyrl', {'strength': 'primary'}]
> >>+ | - [29, 'unicode_bs_Cyrl_s2', 1, 'ICU', 'bs_Cyrl', {'strength': 'secondary'}]
> >>+ | - [30, 'unicode_bs_Cyrl_s3', 1, 'ICU', 'bs_Cyrl', {'strength': 'tertiary'}]
> >>+ | - [31, 'unicode_ca_s1', 1, 'ICU', 'ca', {'strength': 'primary'}]
> >>+ | - [32, 'unicode_ca_s2', 1, 'ICU', 'ca', {'strength': 'secondary'}]
> >>+ | - [33, 'unicode_ca_s3', 1, 'ICU', 'ca', {'strength': 'tertiary'}]
> >>+ | - [34, 'unicode_cs_s1', 1, 'ICU', 'cs', {'strength': 'primary'}]
> >>+ | - [35, 'unicode_cs_s2', 1, 'ICU', 'cs', {'strength': 'secondary'}]
> >>+ | - [36, 'unicode_cs_s3', 1, 'ICU', 'cs', {'strength': 'tertiary'}]
> >>+ | - [37, 'unicode_cy_s1', 1, 'ICU', 'cy', {'strength': 'primary'}]
> >>+ | - [38, 'unicode_cy_s2', 1, 'ICU', 'cy', {'strength': 'secondary'}]
> >>+ | - [39, 'unicode_cy_s3', 1, 'ICU', 'cy', {'strength': 'tertiary'}]
> >>+ | - [40, 'unicode_da_s1', 1, 'ICU', 'da', {'strength': 'primary'}]
> >>+ | - [41, 'unicode_da_s2', 1, 'ICU', 'da', {'strength': 'secondary'}]
> >>+ | - [42, 'unicode_da_s3', 1, 'ICU', 'da', {'strength': 'tertiary'}]
> >>+ | - [43, 'unicode_de__phonebook_s1', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [44, 'unicode_de__phonebook_s2', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [45, 'unicode_de__phonebook_s3', 1, 'ICU', 'de_DE_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [46, 'unicode_de_AT_phonebook_s1', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [47, 'unicode_de_AT_phonebook_s2', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [48, 'unicode_de_AT_phonebook_s3', 1, 'ICU', 'de_AT_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [49, 'unicode_dsb_s1', 1, 'ICU', 'dsb', {'strength': 'primary'}]
> >>+ | - [50, 'unicode_dsb_s2', 1, 'ICU', 'dsb', {'strength': 'secondary'}]
> >>+ | - [51, 'unicode_dsb_s3', 1, 'ICU', 'dsb', {'strength': 'tertiary'}]
> >>+ | - [52, 'unicode_ee_s1', 1, 'ICU', 'ee', {'strength': 'primary'}]
> >>+ | - [53, 'unicode_ee_s2', 1, 'ICU', 'ee', {'strength': 'secondary'}]
> >>+ | - [54, 'unicode_ee_s3', 1, 'ICU', 'ee', {'strength': 'tertiary'}]
> >>+ | - [55, 'unicode_eo_s1', 1, 'ICU', 'eo', {'strength': 'primary'}]
> >>+ | - [56, 'unicode_eo_s2', 1, 'ICU', 'eo', {'strength': 'secondary'}]
> >>+ | - [57, 'unicode_eo_s3', 1, 'ICU', 'eo', {'strength': 'tertiary'}]
> >>+ | - [58, 'unicode_es_s1', 1, 'ICU', 'es', {'strength': 'primary'}]
> >>+ | - [59, 'unicode_es_s2', 1, 'ICU', 'es', {'strength': 'secondary'}]
> >>+ | - [60, 'unicode_es_s3', 1, 'ICU', 'es', {'strength': 'tertiary'}]
> >>+ | - [61, 'unicode_es__traditional_s1', 1, 'ICU', 'es_u_co_trad', {'strength': 'primary'}]
> >>+ | - [62, 'unicode_es__traditional_s2', 1, 'ICU', 'es_u_co_trad', {'strength': 'secondary'}]
> >>+ | - [63, 'unicode_es__traditional_s3', 1, 'ICU', 'es_u_co_trad', {'strength': 'tertiary'}]
> >>+ | - [64, 'unicode_et_s1', 1, 'ICU', 'et', {'strength': 'primary'}]
> >>+ | - [65, 'unicode_et_s2', 1, 'ICU', 'et', {'strength': 'secondary'}]
> >>+ | - [66, 'unicode_et_s3', 1, 'ICU', 'et', {'strength': 'tertiary'}]
> >>+ | - [67, 'unicode_fa_s1', 1, 'ICU', 'fa', {'strength': 'primary'}]
> >>+ | - [68, 'unicode_fa_s2', 1, 'ICU', 'fa', {'strength': 'secondary'}]
> >>+ | - [69, 'unicode_fa_s3', 1, 'ICU', 'fa', {'strength': 'tertiary'}]
> >>+ | - [70, 'unicode_fi_s1', 1, 'ICU', 'fi', {'strength': 'primary'}]
> >>+ | - [71, 'unicode_fi_s2', 1, 'ICU', 'fi', {'strength': 'secondary'}]
> >>+ | - [72, 'unicode_fi_s3', 1, 'ICU', 'fi', {'strength': 'tertiary'}]
> >>+ | - [73, 'unicode_fi__phonebook_s1', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'primary'}]
> >>+ | - [74, 'unicode_fi__phonebook_s2', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'secondary'}]
> >>+ | - [75, 'unicode_fi__phonebook_s3', 1, 'ICU', 'fi_u_co_phonebk', {'strength': 'tertiary'}]
> >>+ | - [76, 'unicode_fil_s1', 1, 'ICU', 'fil', {'strength': 'primary'}]
> >>+ | - [77, 'unicode_fil_s2', 1, 'ICU', 'fil', {'strength': 'secondary'}]
> >>+ | - [78, 'unicode_fil_s3', 1, 'ICU', 'fil', {'strength': 'tertiary'}]
> >>+ | - [79, 'unicode_fo_s1', 1, 'ICU', 'fo', {'strength': 'primary'}]
> >>+ | - [80, 'unicode_fo_s2', 1, 'ICU', 'fo', {'strength': 'secondary'}]
> >>+ | - [81, 'unicode_fo_s3', 1, 'ICU', 'fo', {'strength': 'tertiary'}]
> >>+ | - [82, 'unicode_fr_CA_s1', 1, 'ICU', 'fr_CA', {'strength': 'primary'}]
> >>+ | - [83, 'unicode_fr_CA_s2', 1, 'ICU', 'fr_CA', {'strength': 'secondary'}]
> >>+ | - [84, 'unicode_fr_CA_s3', 1, 'ICU', 'fr_CA', {'strength': 'tertiary'}]
> >>+ | - [85, 'unicode_gu_s1', 1, 'ICU', 'gu', {'strength': 'primary'}]
> >>+ | - [86, 'unicode_gu_s2', 1, 'ICU', 'gu', {'strength': 'secondary'}]
> >>+ | - [87, 'unicode_gu_s3', 1, 'ICU', 'gu', {'strength': 'tertiary'}]
> >>+ | - [88, 'unicode_ha_s1', 1, 'ICU', 'ha', {'strength': 'primary'}]
> >>+ | - [89, 'unicode_ha_s2', 1, 'ICU', 'ha', {'strength': 'secondary'}]
> >>+ | - [90, 'unicode_ha_s3', 1, 'ICU', 'ha', {'strength': 'tertiary'}]
> >>+ | - [91, 'unicode_haw_s1', 1, 'ICU', 'haw', {'strength': 'primary'}]
> >>+ | - [92, 'unicode_haw_s2', 1, 'ICU', 'haw', {'strength': 'secondary'}]
> >>+ | - [93, 'unicode_haw_s3', 1, 'ICU', 'haw', {'strength': 'tertiary'}]
> >>+ | - [94, 'unicode_he_s1', 1, 'ICU', 'he', {'strength': 'primary'}]
> >>+ | - [95, 'unicode_he_s2', 1, 'ICU', 'he', {'strength': 'secondary'}]
> >>+ | - [96, 'unicode_he_s3', 1, 'ICU', 'he', {'strength': 'tertiary'}]
> >>+ | - [97, 'unicode_hi_s1', 1, 'ICU', 'hi', {'strength': 'primary'}]
> >>+ | - [98, 'unicode_hi_s2', 1, 'ICU', 'hi', {'strength': 'secondary'}]
> >>+ | - [99, 'unicode_hi_s3', 1, 'ICU', 'hi', {'strength': 'tertiary'}]
> >>+ | - [100, 'unicode_hr_s1', 1, 'ICU', 'hr', {'strength': 'primary'}]
> >>+ | - [101, 'unicode_hr_s2', 1, 'ICU', 'hr', {'strength': 'secondary'}]
> >>+ | - [102, 'unicode_hr_s3', 1, 'ICU', 'hr', {'strength': 'tertiary'}]
> >>+ | - [103, 'unicode_hu_s1', 1, 'ICU', 'hu', {'strength': 'primary'}]
> >>+ | - [104, 'unicode_hu_s2', 1, 'ICU', 'hu', {'strength': 'secondary'}]
> >>+ | - [105, 'unicode_hu_s3', 1, 'ICU', 'hu', {'strength': 'tertiary'}]
> >>+ | - [106, 'unicode_hy_s1', 1, 'ICU', 'hy', {'strength': 'primary'}]
> >>+ | - [107, 'unicode_hy_s2', 1, 'ICU', 'hy', {'strength': 'secondary'}]
> >>+ | - [108, 'unicode_hy_s3', 1, 'ICU', 'hy', {'strength': 'tertiary'}]
> >>+ | - [109, 'unicode_ig_s1', 1, 'ICU', 'ig', {'strength': 'primary'}]
> >>+ | - [110, 'unicode_ig_s2', 1, 'ICU', 'ig', {'strength': 'secondary'}]
> >>+ | - [111, 'unicode_ig_s3', 1, 'ICU', 'ig', {'strength': 'tertiary'}]
> >>+ | - [112, 'unicode_is_s1', 1, 'ICU', 'is', {'strength': 'primary'}]
> >>+ | - [113, 'unicode_is_s2', 1, 'ICU', 'is', {'strength': 'secondary'}]
> >>+ | - [114, 'unicode_is_s3', 1, 'ICU', 'is', {'strength': 'tertiary'}]
> >>+ | - [115, 'unicode_ja_s1', 1, 'ICU', 'ja', {'strength': 'primary'}]
> >>+ | - [116, 'unicode_ja_s2', 1, 'ICU', 'ja', {'strength': 'secondary'}]
> >>+ | - [117, 'unicode_ja_s3', 1, 'ICU', 'ja', {'strength': 'tertiary'}]
> >>+ | - [118, 'unicode_kk_s1', 1, 'ICU', 'kk', {'strength': 'primary'}]
> >>+ | - [119, 'unicode_kk_s2', 1, 'ICU', 'kk', {'strength': 'secondary'}]
> >>+ | - [120, 'unicode_kk_s3', 1, 'ICU', 'kk', {'strength': 'tertiary'}]
> >>+ | - [121, 'unicode_kl_s1', 1, 'ICU', 'kl', {'strength': 'primary'}]
> >>+ | - [122, 'unicode_kl_s2', 1, 'ICU', 'kl', {'strength': 'secondary'}]
> >>+ | - [123, 'unicode_kl_s3', 1, 'ICU', 'kl', {'strength': 'tertiary'}]
> >>+ | - [124, 'unicode_kn_s1', 1, 'ICU', 'kn', {'strength': 'primary'}]
> >>+ | - [125, 'unicode_kn_s2', 1, 'ICU', 'kn', {'strength': 'secondary'}]
> >>+ | - [126, 'unicode_kn_s3', 1, 'ICU', 'kn', {'strength': 'tertiary'}]
> >>+ | - [127, 'unicode_ko_s1', 1, 'ICU', 'ko', {'strength': 'primary'}]
> >>+ | - [128, 'unicode_ko_s2', 1, 'ICU', 'ko', {'strength': 'secondary'}]
> >>+ | - [129, 'unicode_ko_s3', 1, 'ICU', 'ko', {'strength': 'tertiary'}]
> >>+ | - [130, 'unicode_kok_s1', 1, 'ICU', 'kok', {'strength': 'primary'}]
> >>+ | - [131, 'unicode_kok_s2', 1, 'ICU', 'kok', {'strength': 'secondary'}]
> >>+ | - [132, 'unicode_kok_s3', 1, 'ICU', 'kok', {'strength': 'tertiary'}]
> >>+ | - [133, 'unicode_ky_s1', 1, 'ICU', 'ky', {'strength': 'primary'}]
> >>+ | - [134, 'unicode_ky_s2', 1, 'ICU', 'ky', {'strength': 'secondary'}]
> >>+ | - [135, 'unicode_ky_s3', 1, 'ICU', 'ky', {'strength': 'tertiary'}]
> >>+ | - [136, 'unicode_lkt_s1', 1, 'ICU', 'lkt', {'strength': 'primary'}]
> >>+ | - [137, 'unicode_lkt_s2', 1, 'ICU', 'lkt', {'strength': 'secondary'}]
> >>+ | - [138, 'unicode_lkt_s3', 1, 'ICU', 'lkt', {'strength': 'tertiary'}]
> >>+ | - [139, 'unicode_ln_s1', 1, 'ICU', 'ln', {'strength': 'primary'}]
> >>+ | - [140, 'unicode_ln_s2', 1, 'ICU', 'ln', {'strength': 'secondary'}]
> >>+ | - [141, 'unicode_ln_s3', 1, 'ICU', 'ln', {'strength': 'tertiary'}]
> >>+ | - [142, 'unicode_lt_s1', 1, 'ICU', 'lt', {'strength': 'primary'}]
> >>+ | - [143, 'unicode_lt_s2', 1, 'ICU', 'lt', {'strength': 'secondary'}]
> >>+ | - [144, 'unicode_lt_s3', 1, 'ICU', 'lt', {'strength': 'tertiary'}]
> >>+ | - [145, 'unicode_lv_s1', 1, 'ICU', 'lv', {'strength': 'primary'}]
> >>+ | - [146, 'unicode_lv_s2', 1, 'ICU', 'lv', {'strength': 'secondary'}]
> >>+ | - [147, 'unicode_lv_s3', 1, 'ICU', 'lv', {'strength': 'tertiary'}]
> >>+ | - [148, 'unicode_mk_s1', 1, 'ICU', 'mk', {'strength': 'primary'}]
> >>+ | - [149, 'unicode_mk_s2', 1, 'ICU', 'mk', {'strength': 'secondary'}]
> >>+ | - [150, 'unicode_mk_s3', 1, 'ICU', 'mk', {'strength': 'tertiary'}]
> >>+ | - [151, 'unicode_ml_s1', 1, 'ICU', 'ml', {'strength': 'primary'}]
> >>+ | - [152, 'unicode_ml_s2', 1, 'ICU', 'ml', {'strength': 'secondary'}]
> >>+ | - [153, 'unicode_ml_s3', 1, 'ICU', 'ml', {'strength': 'tertiary'}]
> >>+ | - [154, 'unicode_mr_s1', 1, 'ICU', 'mr', {'strength': 'primary'}]
> >>+ | - [155, 'unicode_mr_s2', 1, 'ICU', 'mr', {'strength': 'secondary'}]
> >>+ | - [156, 'unicode_mr_s3', 1, 'ICU', 'mr', {'strength': 'tertiary'}]
> >>+ | - [157, 'unicode_mt_s1', 1, 'ICU', 'mt', {'strength': 'primary'}]
> >>+ | - [158, 'unicode_mt_s2', 1, 'ICU', 'mt', {'strength': 'secondary'}]
> >>+ | - [159, 'unicode_mt_s3', 1, 'ICU', 'mt', {'strength': 'tertiary'}]
> >>+ | - [160, 'unicode_nb_s1', 1, 'ICU', 'nb', {'strength': 'primary'}]
> >>+ | - [161, 'unicode_nb_s2', 1, 'ICU', 'nb', {'strength': 'secondary'}]
> >>+ | - [162, 'unicode_nb_s3', 1, 'ICU', 'nb', {'strength': 'tertiary'}]
> >>+ | - [163, 'unicode_nn_s1', 1, 'ICU', 'nn', {'strength': 'primary'}]
> >>+ | - [164, 'unicode_nn_s2', 1, 'ICU', 'nn', {'strength': 'secondary'}]
> >>+ | - [165, 'unicode_nn_s3', 1, 'ICU', 'nn', {'strength': 'tertiary'}]
> >>+ | - [166, 'unicode_nso_s1', 1, 'ICU', 'nso', {'strength': 'primary'}]
> >>+ | - [167, 'unicode_nso_s2', 1, 'ICU', 'nso', {'strength': 'secondary'}]
> >>+ | - [168, 'unicode_nso_s3', 1, 'ICU', 'nso', {'strength': 'tertiary'}]
> >>+ | - [169, 'unicode_om_s1', 1, 'ICU', 'om', {'strength': 'primary'}]
> >>+ | - [170, 'unicode_om_s2', 1, 'ICU', 'om', {'strength': 'secondary'}]
> >>+ | - [171, 'unicode_om_s3', 1, 'ICU', 'om', {'strength': 'tertiary'}]
> >>+ | - [172, 'unicode_or_s1', 1, 'ICU', 'or', {'strength': 'primary'}]
> >>+ | - [173, 'unicode_or_s2', 1, 'ICU', 'or', {'strength': 'secondary'}]
> >>+ | - [174, 'unicode_or_s3', 1, 'ICU', 'or', {'strength': 'tertiary'}]
> >>+ | - [175, 'unicode_pa_s1', 1, 'ICU', 'pa', {'strength': 'primary'}]
> >>+ | - [176, 'unicode_pa_s2', 1, 'ICU', 'pa', {'strength': 'secondary'}]
> >>+ | - [177, 'unicode_pa_s3', 1, 'ICU', 'pa', {'strength': 'tertiary'}]
> >>+ | - [178, 'unicode_pl_s1', 1, 'ICU', 'pl', {'strength': 'primary'}]
> >>+ | - [179, 'unicode_pl_s2', 1, 'ICU', 'pl', {'strength': 'secondary'}]
> >>+ | - [180, 'unicode_pl_s3', 1, 'ICU', 'pl', {'strength': 'tertiary'}]
> >>+ | - [181, 'unicode_ro_s1', 1, 'ICU', 'ro', {'strength': 'primary'}]
> >>+ | - [182, 'unicode_ro_s2', 1, 'ICU', 'ro', {'strength': 'secondary'}]
> >>+ | - [183, 'unicode_ro_s3', 1, 'ICU', 'ro', {'strength': 'tertiary'}]
> >>+ | - [184, 'unicode_sa_s1', 1, 'ICU', 'sa', {'strength': 'primary'}]
> >>+ | - [185, 'unicode_sa_s2', 1, 'ICU', 'sa', {'strength': 'secondary'}]
> >>+ | - [186, 'unicode_sa_s3', 1, 'ICU', 'sa', {'strength': 'tertiary'}]
> >>+ | - [187, 'unicode_se_s1', 1, 'ICU', 'se', {'strength': 'primary'}]
> >>+ | - [188, 'unicode_se_s2', 1, 'ICU', 'se', {'strength': 'secondary'}]
> >>+ | - [189, 'unicode_se_s3', 1, 'ICU', 'se', {'strength': 'tertiary'}]
> >>+ | - [190, 'unicode_si_s1', 1, 'ICU', 'si', {'strength': 'primary'}]
> >>+ | - [191, 'unicode_si_s2', 1, 'ICU', 'si', {'strength': 'secondary'}]
> >>+ | - [192, 'unicode_si_s3', 1, 'ICU', 'si', {'strength': 'tertiary'}]
> >>+ | - [193, 'unicode_si__dictionary_s1', 1, 'ICU', 'si_u_co_dict', {'strength': 'primary'}]
> >>+ | - [194, 'unicode_si__dictionary_s2', 1, 'ICU', 'si_u_co_dict', {'strength': 'secondary'}]
> >>+ | - [195, 'unicode_si__dictionary_s3', 1, 'ICU', 'si_u_co_dict', {'strength': 'tertiary'}]
> >>+ | - [196, 'unicode_sk_s1', 1, 'ICU', 'sk', {'strength': 'primary'}]
> >>+ | - [197, 'unicode_sk_s2', 1, 'ICU', 'sk', {'strength': 'secondary'}]
> >>+ | - [198, 'unicode_sk_s3', 1, 'ICU', 'sk', {'strength': 'tertiary'}]
> >>+ | - [199, 'unicode_sl_s1', 1, 'ICU', 'sl', {'strength': 'primary'}]
> >>+ | - [200, 'unicode_sl_s2', 1, 'ICU', 'sl', {'strength': 'secondary'}]
> >>+ | - [201, 'unicode_sl_s3', 1, 'ICU', 'sl', {'strength': 'tertiary'}]
> >>+ | - [202, 'unicode_sq_s1', 1, 'ICU', 'sq', {'strength': 'primary'}]
> >>+ | - [203, 'unicode_sq_s2', 1, 'ICU', 'sq', {'strength': 'secondary'}]
> >>+ | - [204, 'unicode_sq_s3', 1, 'ICU', 'sq', {'strength': 'tertiary'}]
> >>+ | - [205, 'unicode_sr_s1', 1, 'ICU', 'sr', {'strength': 'primary'}]
> >>+ | - [206, 'unicode_sr_s2', 1, 'ICU', 'sr', {'strength': 'secondary'}]
> >>+ | - [207, 'unicode_sr_s3', 1, 'ICU', 'sr', {'strength': 'tertiary'}]
> >>+ | - [208, 'unicode_sr_Latn_s1', 1, 'ICU', 'sr_Latn', {'strength': 'primary'}]
> >>+ | - [209, 'unicode_sr_Latn_s2', 1, 'ICU', 'sr_Latn', {'strength': 'secondary'}]
> >>+ | - [210, 'unicode_sr_Latn_s3', 1, 'ICU', 'sr_Latn', {'strength': 'tertiary'}]
> >>+ | - [211, 'unicode_sv_s1', 1, 'ICU', 'sv', {'strength': 'primary'}]
> >>+ | - [212, 'unicode_sv_s2', 1, 'ICU', 'sv', {'strength': 'secondary'}]
> >>+ | - [213, 'unicode_sv_s3', 1, 'ICU', 'sv', {'strength': 'tertiary'}]
> >>+ | - [214, 'unicode_sv__reformed_s1', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'primary'}]
> >>+ | - [215, 'unicode_sv__reformed_s2', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'secondary'}]
> >>+ | - [216, 'unicode_sv__reformed_s3', 1, 'ICU', 'sv_u_co_reformed', {'strength': 'tertiary'}]
> >>+ | - [217, 'unicode_ta_s1', 1, 'ICU', 'ta', {'strength': 'primary'}]
> >>+ | - [218, 'unicode_ta_s2', 1, 'ICU', 'ta', {'strength': 'secondary'}]
> >>+ | - [219, 'unicode_ta_s3', 1, 'ICU', 'ta', {'strength': 'tertiary'}]
> >>+ | - [220, 'unicode_te_s1', 1, 'ICU', 'te', {'strength': 'primary'}]
> >>+ | - [221, 'unicode_te_s2', 1, 'ICU', 'te', {'strength': 'secondary'}]
> >>+ | - [222, 'unicode_te_s3', 1, 'ICU', 'te', {'strength': 'tertiary'}]
> >>+ | - [223, 'unicode_th_s1', 1, 'ICU', 'th', {'strength': 'primary'}]
> >>+ | - [224, 'unicode_th_s2', 1, 'ICU', 'th', {'strength': 'secondary'}]
> >>+ | - [225, 'unicode_th_s3', 1, 'ICU', 'th', {'strength': 'tertiary'}]
> >>+ | - [226, 'unicode_tn_s1', 1, 'ICU', 'tn', {'strength': 'primary'}]
> >>+ | - [227, 'unicode_tn_s2', 1, 'ICU', 'tn', {'strength': 'secondary'}]
> >>+ | - [228, 'unicode_tn_s3', 1, 'ICU', 'tn', {'strength': 'tertiary'}]
> >>+ | - [229, 'unicode_to_s1', 1, 'ICU', 'to', {'strength': 'primary'}]
> >>+ | - [230, 'unicode_to_s2', 1, 'ICU', 'to', {'strength': 'secondary'}]
> >>+ | - [231, 'unicode_to_s3', 1, 'ICU', 'to', {'strength': 'tertiary'}]
> >>+ | - [232, 'unicode_tr_s1', 1, 'ICU', 'tr', {'strength': 'primary'}]
> >>+ | - [233, 'unicode_tr_s2', 1, 'ICU', 'tr', {'strength': 'secondary'}]
> >>+ | - [234, 'unicode_tr_s3', 1, 'ICU', 'tr', {'strength': 'tertiary'}]
> >>+ | - [235, 'unicode_ug_Cyrl_s1', 1, 'ICU', 'ug', {'strength': 'primary'}]
> >>+ | - [236, 'unicode_ug_Cyrl_s2', 1, 'ICU', 'ug', {'strength': 'secondary'}]
> >>+ | - [237, 'unicode_ug_Cyrl_s3', 1, 'ICU', 'ug', {'strength': 'tertiary'}]
> >>+ | - [238, 'unicode_uk_s1', 1, 'ICU', 'uk', {'strength': 'primary'}]
> >>+ | - [239, 'unicode_uk_s2', 1, 'ICU', 'uk', {'strength': 'secondary'}]
> >>+ | - [240, 'unicode_uk_s3', 1, 'ICU', 'uk', {'strength': 'tertiary'}]
> >>+ | - [241, 'unicode_ur_s1', 1, 'ICU', 'ur', {'strength': 'primary'}]
> >>+ | - [242, 'unicode_ur_s2', 1, 'ICU', 'ur', {'strength': 'secondary'}]
> >>+ | - [243, 'unicode_ur_s3', 1, 'ICU', 'ur', {'strength': 'tertiary'}]
> >>+ | - [244, 'unicode_vi_s1', 1, 'ICU', 'vi', {'strength': 'primary'}]
> >>+ | - [245, 'unicode_vi_s2', 1, 'ICU', 'vi', {'strength': 'secondary'}]
> >>+ | - [246, 'unicode_vi_s3', 1, 'ICU', 'vi', {'strength': 'tertiary'}]
> >>+ | - [247, 'unicode_vo_s1', 1, 'ICU', 'vo', {'strength': 'primary'}]
> >>+ | - [248, 'unicode_vo_s2', 1, 'ICU', 'vo', {'strength': 'secondary'}]
> >>+ | - [249, 'unicode_vo_s3', 1, 'ICU', 'vo', {'strength': 'tertiary'}]
> >>+ | - [250, 'unicode_wae_s1', 1, 'ICU', 'wae', {'strength': 'primary'}]
> >>+ | - [251, 'unicode_wae_s2', 1, 'ICU', 'wae', {'strength': 'secondary'}]
> >>+ | - [252, 'unicode_wae_s3', 1, 'ICU', 'wae', {'strength': 'tertiary'}]
> >>+ | - [253, 'unicode_wo_s1', 1, 'ICU', 'wo', {'strength': 'primary'}]
> >>+ | - [254, 'unicode_wo_s2', 1, 'ICU', 'wo', {'strength': 'secondary'}]
> >>+ | - [255, 'unicode_wo_s3', 1, 'ICU', 'wo', {'strength': 'tertiary'}]
> >>+ | - [256, 'unicode_yo_s1', 1, 'ICU', 'yo', {'strength': 'primary'}]
> >>+ | - [257, 'unicode_yo_s2', 1, 'ICU', 'yo', {'strength': 'secondary'}]
> >>+ | - [258, 'unicode_yo_s3', 1, 'ICU', 'yo', {'strength': 'tertiary'}]
> >>+ | - [259, 'unicode_zh_s1', 1, 'ICU', 'zh', {'strength': 'primary'}]
> >>+ | - [260, 'unicode_zh_s2', 1, 'ICU', 'zh', {'strength': 'secondary'}]
> >>+ | - [261, 'unicode_zh_s3', 1, 'ICU', 'zh', {'strength': 'tertiary'}]
> >>+ | - [262, 'unicode_zh__big5han_s1', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'primary'}]
> >>+ | - [263, 'unicode_zh__big5han_s2', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'secondary'}]
> >>+ | - [264, 'unicode_zh__big5han_s3', 1, 'ICU', 'zh_u_co_big5han', {'strength': 'tertiary'}]
> >>+ | - [265, 'unicode_zh__gb2312han_s1', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'primary'}]
> >>+ | - [266, 'unicode_zh__gb2312han_s2', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'secondary'}]
> >>+ | - [267, 'unicode_zh__gb2312han_s3', 1, 'ICU', 'zh_u_co_gb2312', {'strength': 'tertiary'}]
> >>+ | - [268, 'unicode_zh__pinyin_s1', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'primary'}]
> >>+ | - [269, 'unicode_zh__pinyin_s2', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'secondary'}]
> >>+ | - [270, 'unicode_zh__pinyin_s3', 1, 'ICU', 'zh_u_co_pinyin', {'strength': 'tertiary'}]
> >>+ | - [271, 'unicode_zh__stroke_s1', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'primary'}]
> >>+ | - [272, 'unicode_zh__stroke_s2', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'secondary'}]
> >>+ | - [273, 'unicode_zh__stroke_s3', 1, 'ICU', 'zh_u_co_stroke', {'strength': 'tertiary'}]
> >>+ | - [274, 'unicode_zh__zhuyin_s1', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'primary'}]
> >>+ | - [275, 'unicode_zh__zhuyin_s2', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'secondary'}]
> >>+ | - [276, 'unicode_zh__zhuyin_s3', 1, 'ICU', 'zh_u_co_zhuyin', {'strength': 'tertiary'}]
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>+box.space._collation.index.name:delete{'test'}
> >>+ | ---
> >>+ | - [277, 'test', 0, 'ICU', 'ru_RU', {}]
> >>+ | ...
> >>diff --git a/test/box/ddl_collation.test.lua b/test/box/ddl_collation.test.lua
> >>new file mode 100644
> >>index 000000000..ee26af9c6
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation.test.lua
> >>@@ -0,0 +1,90 @@
> >>+env = require('test_run')
> >>+test_run = env.new()
> >>+
> >>+-- collation
> >>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>+
> >>+box.internal.collation.create('test')
> >>+box.internal.collation.create('test', 'ICU')
> >>+box.internal.collation.create(42, 'ICU', 'ru_RU')
> >>+box.internal.collation.create('test', 42, 'ru_RU')
> >>+box.internal.collation.create('test', 'ICU', 42)
> >>+box.internal.collation.create('test', 'nothing', 'ru_RU')
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', setmap{}) --ok
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>+box.internal.collation.drop('test')
> >>+box.internal.collation.drop('nothing') -- allowed
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', 42)
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', 'options')
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {ping='pong'})
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='german'})
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {french_collation='on'}) --ok
> >>+box.internal.collation.drop('test') --ok
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='supervillian'})
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=42})
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength=2}) --ok
> >>+box.internal.collation.drop('test') --ok
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU', {strength='primary'}) --ok
> >>+box.internal.collation.drop('test') --ok
> >>+c = box.space._collation:get{1}:totable()
> >>+c[2] = 'unicode_test'
> >>+box.space._collation:replace(c)
> >>+
> >>+box.begin() box.internal.collation.create('test2', 'ICU', 'ru_RU') box.rollback()
> >>+
> >>+box.internal.collation.create('test', 'ICU', 'ru_RU')
> >>+box.internal.collation.exists('test')
> >>+
> >>+test_run:cmd('restart server default')
> >>+function setmap(table) return setmetatable(table, { __serialize = 'map' }) end
> >>+
> >>+box.internal.collation.exists('test')
> >>+box.internal.collation.drop('test')
> >>+
> >>+box.space._collation:auto_increment{'test'}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU'}
> >>+box.space._collation:auto_increment{'test', 'ADMIN', 'ICU', 'ru_RU'}
> >>+box.space._collation:auto_increment{42, 0, 'ICU', 'ru_RU'}
> >>+box.space._collation:auto_increment{'test', 0, 42, 'ru_RU'}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 42}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>+box.space._collation.index.name:delete{'test'} -- ok
> >>+box.space._collation.index.name:delete{'nothing'} -- allowed
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 42}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', 'options'}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', {ping='pong'}}
> >>+opts = {normalization_mode='NORMAL'}
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.normalization_mode = 'OFF'
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} -- ok
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+opts.numeric_collation = 'PERL'
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.numeric_collation = 'ON'
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+opts.alternate_handling1 = 'ON'
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.alternate_handling1 = nil
> >>+opts.alternate_handling = 'ON'
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.alternate_handling = 'SHIFTED'
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+opts.case_first = 'ON'
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.case_first = 'OFF'
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+opts.case_level = 'UPPER'
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts}
> >>+opts.case_level = 'DEFAULT'
> >>+_ = box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', opts} --ok
> >>+_ = box.space._collation.index.name:delete{'test'} -- ok
> >>+
> >>+box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
> >>+box.space._collation:select{}
> >>+test_run:cmd('restart server default')
> >>+box.space._collation:select{}
> >>+box.space._collation.index.name:delete{'test'}
> >>diff --git a/test/box/ddl_collation_types.result b/test/box/ddl_collation_types.result
> >>new file mode 100644
> >>index 000000000..7eaef62c0
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation_types.result
> >>@@ -0,0 +1,21 @@
> >>+-- test-run result file version 2
> >>+-- Check that collation is allowed only for strings, scalar and any types.
> >>+format = {}
> >>+ | ---
> >>+ | ...
> >>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
> >>+ | ---
> >>+ | ...
> >>+s = box.schema.create_space('test', {format = format})
> >>+ | ---
> >>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
> >>+ | scalar and any fields'
> >>+ | ...
> >>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
> >>+ | ---
> >>+ | ...
> >>+s = box.schema.create_space('test', {format = format})
> >>+ | ---
> >>+ | - error: 'Failed to create space ''test'': collation is reasonable only for string,
> >>+ | scalar and any fields'
> >>+ | ...
> >>diff --git a/test/box/ddl_collation_types.test.lua b/test/box/ddl_collation_types.test.lua
> >>new file mode 100644
> >>index 000000000..5930d54b0
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation_types.test.lua
> >>@@ -0,0 +1,6 @@
> >>+-- Check that collation is allowed only for strings, scalar and any types.
> >>+format = {}
> >>+format[1] = {'field1', 'unsigned', collation = 'unicode'}
> >>+s = box.schema.create_space('test', {format = format})
> >>+format[1] = {'field2', 'array', collation = 'unicode_ci'}
> >>+s = box.schema.create_space('test', {format = format})
> >>diff --git a/test/box/ddl_collation_wrong_id.result b/test/box/ddl_collation_wrong_id.result
> >>new file mode 100644
> >>index 000000000..c6cf058b1
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation_wrong_id.result
> >>@@ -0,0 +1,21 @@
> >>+-- test-run result file version 2
> >>+-- Check that error is raised when collation with wrong id is used.
> >>+_space = box.space[box.schema.SPACE_ID]
> >>+ | ---
> >>+ | ...
> >>+utils = require('utils')
> >>+ | ---
> >>+ | ...
> >>+EMPTY_MAP = utils.setmap({})
> >>+ | ---
> >>+ | ...
> >>+format = {{name = 'field1', type = 'string', collation = 666}}
> >>+ | ---
> >>+ | ...
> >>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
> >>+ | ---
> >>+ | ...
> >>+_space:insert(surrogate_space)
> >>+ | ---
> >>+ | - error: 'Wrong collation options (field 1): collation was not found by ID'
> >>+ | ...
> >>diff --git a/test/box/ddl_collation_wrong_id.test.lua b/test/box/ddl_collation_wrong_id.test.lua
> >>new file mode 100644
> >>index 000000000..8d28d3ee1
> >>--- /dev/null
> >>+++ b/test/box/ddl_collation_wrong_id.test.lua
> >>@@ -0,0 +1,7 @@
> >>+-- Check that error is raised when collation with wrong id is used.
> >>+_space = box.space[box.schema.SPACE_ID]
> >>+utils = require('utils')
> >>+EMPTY_MAP = utils.setmap({})
> >>+format = {{name = 'field1', type = 'string', collation = 666}}
> >>+surrogate_space = {12345, 1, 'test', 'memtx', 0, EMPTY_MAP, format}
> >>+_space:insert(surrogate_space)
> >>diff --git a/test/box/ddl_no_collation.result b/test/box/ddl_no_collation.result
> >>new file mode 100644
> >>index 000000000..6f4e8fa0b
> >>--- /dev/null
> >>+++ b/test/box/ddl_no_collation.result
> >>@@ -0,0 +1,12 @@
> >>+-- test-run result file version 2
> >>+-- Check that error is raised when collation doesn't exists.
> >>+format = {}
> >>+ | ---
> >>+ | ...
> >>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
> >>+ | ---
> >>+ | ...
> >>+s = box.schema.create_space('test', {format = format})
> >>+ | ---
> >>+ | - error: 'Illegal parameters, format[1]: collation was not found by name ''test_coll'''
> >>+ | ...
> >>diff --git a/test/box/ddl_no_collation.test.lua b/test/box/ddl_no_collation.test.lua
> >>new file mode 100644
> >>index 000000000..3e411373b
> >>--- /dev/null
> >>+++ b/test/box/ddl_no_collation.test.lua
> >>@@ -0,0 +1,4 @@
> >>+-- Check that error is raised when collation doesn't exists.
> >>+format = {}
> >>+format[1] = {'field1', 'unsigend', collation = 'test_coll'}
> >>+s = box.schema.create_space('test', {format = format})
> >>diff --git a/test/box/ddl_parallel.result b/test/box/ddl_parallel.result
> >>new file mode 100644
> >>index 000000000..dfa4a1422
> >>--- /dev/null
> >>+++ b/test/box/ddl_parallel.result
> >>@@ -0,0 +1,61 @@
> >>+-- test-run result file version 2
> >>+env = require('test_run')
> >>+ | ---
> >>+ | ...
> >>+test_run = env.new()
> >>+ | ---
> >>+ | ...
> >>+
> >>+fiber = require'fiber'
> >>+ | ---
> >>+ | ...
> >>+
> >>+-- simple test for parallel ddl execution
> >>+_ = box.schema.space.create('test'):create_index('pk')
> >>+ | ---
> >>+ | ...
> >>+
> >>+ch = fiber.channel(2)
> >>+ | ---
> >>+ | ...
> >>+
> >>+test_run:cmd("setopt delimiter ';'")
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+
> >>+function f1()
> >>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>+ ch:put(true)
> >>+end;
> >>+ | ---
> >>+ | ...
> >>+
> >>+function f2()
> >>+ box.space.test:create_index('third', {parts = {3, 'string'}})
> >>+ ch:put(true)
> >>+end;
> >>+ | ---
> >>+ | ...
> >>+
> >>+test_run:cmd("setopt delimiter ''");
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+
> >>+_ = {fiber.create(f1), fiber.create(f2)}
> >>+ | ---
> >>+ | ...
> >>+
> >>+ch:get()
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+ch:get()
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+
> >>+_ = box.space.test:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/ddl_parallel.test.lua b/test/box/ddl_parallel.test.lua
> >>new file mode 100644
> >>index 000000000..99c3bfdcc
> >>--- /dev/null
> >>+++ b/test/box/ddl_parallel.test.lua
> >>@@ -0,0 +1,30 @@
> >>+env = require('test_run')
> >>+test_run = env.new()
> >>+
> >>+fiber = require'fiber'
> >>+
> >>+-- simple test for parallel ddl execution
> >>+_ = box.schema.space.create('test'):create_index('pk')
> >>+
> >>+ch = fiber.channel(2)
> >>+
> >>+test_run:cmd("setopt delimiter ';'")
> >>+
> >>+function f1()
> >>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>+ ch:put(true)
> >>+end;
> >>+
> >>+function f2()
> >>+ box.space.test:create_index('third', {parts = {3, 'string'}})
> >>+ ch:put(true)
> >>+end;
> >>+
> >>+test_run:cmd("setopt delimiter ''");
> >>+
> >>+_ = {fiber.create(f1), fiber.create(f2)}
> >>+
> >>+ch:get()
> >>+ch:get()
> >>+
> >>+_ = box.space.test:drop()
> >>diff --git a/test/box/ddl_tuple.result b/test/box/ddl_tuple.result
> >>new file mode 100644
> >>index 000000000..6a024a833
> >>--- /dev/null
> >>+++ b/test/box/ddl_tuple.result
> >>@@ -0,0 +1,67 @@
> >>+-- test-run result file version 2
> >>+env = require('test_run')
> >>+ | ---
> >>+ | ...
> >>+test_run = env.new()
> >>+ | ---
> >>+ | ...
> >>+
> >>+fiber = require'fiber'
> >>+ | ---
> >>+ | ...
> >>+ch = fiber.channel(3)
> >>+ | ---
> >>+ | ...
> >>+
> >>+_ = box.schema.space.create('test'):create_index('pk')
> >>+ | ---
> >>+ | ...
> >>+
> >>+test_run:cmd("setopt delimiter ';'")
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+function add_index()
> >>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>+ ch:put(true)
> >>+end;
> >>+ | ---
> >>+ | ...
> >>+
> >>+function insert_tuple(tuple)
> >>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
> >>+end;
> >>+ | ---
> >>+ | ...
> >>+test_run:cmd("setopt delimiter ''");
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+
> >>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
> >>+ | ---
> >>+ | ...
> >>+{ch:get(), ch:get(), ch:get()}
> >>+ | ---
> >>+ | - - - false
> >>+ | - 'Tuple field 2 type does not match one required by operation: expected unsigned'
> >>+ | - - true
> >>+ | - [1, 2, 'a']
> >>+ | - true
> >>+ | ...
> >>+
> >>+box.space.test:select()
> >>+ | ---
> >>+ | - - [1, 2, 'a']
> >>+ | ...
> >>+
> >>+test_run:cmd('restart server default')
> >>+ |
> >>+
> >>+box.space.test:select()
> >>+ | ---
> >>+ | - - [1, 2, 'a']
> >>+ | ...
> >>+box.space.test:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/ddl_tuple.test.lua b/test/box/ddl_tuple.test.lua
> >>new file mode 100644
> >>index 000000000..1c78a00e4
> >>--- /dev/null
> >>+++ b/test/box/ddl_tuple.test.lua
> >>@@ -0,0 +1,28 @@
> >>+env = require('test_run')
> >>+test_run = env.new()
> >>+
> >>+fiber = require'fiber'
> >>+ch = fiber.channel(3)
> >>+
> >>+_ = box.schema.space.create('test'):create_index('pk')
> >>+
> >>+test_run:cmd("setopt delimiter ';'")
> >>+function add_index()
> >>+ box.space.test:create_index('sec', {parts = {2, 'num'}})
> >>+ ch:put(true)
> >>+end;
> >>+
> >>+function insert_tuple(tuple)
> >>+ ch:put({pcall(box.space.test.replace, box.space.test, tuple)})
> >>+end;
> >>+test_run:cmd("setopt delimiter ''");
> >>+
> >>+_ = {fiber.create(insert_tuple, {1, 2, 'a'}), fiber.create(add_index), fiber.create(insert_tuple, {2, '3', 'b'})}
> >>+{ch:get(), ch:get(), ch:get()}
> >>+
> >>+box.space.test:select()
> >>+
> >>+test_run:cmd('restart server default')
> >>+
> >>+box.space.test:select()
> >>+box.space.test:drop()
> >>diff --git a/test/box/gh-2336-ddl_call_twice.result b/test/box/gh-2336-ddl_call_twice.result
> >>new file mode 100644
> >>index 000000000..0f55c9c09
> >>--- /dev/null
> >>+++ b/test/box/gh-2336-ddl_call_twice.result
> >>@@ -0,0 +1,44 @@
> >>+-- test-run result file version 2
> >>+-- gh-2336 crash if format called twice during snapshot
> >>+fiber = require'fiber'
> >>+ | ---
> >>+ | ...
> >>+
> >>+space = box.schema.space.create('test_format')
> >>+ | ---
> >>+ | ...
> >>+_ = space:create_index('pk', { parts = { 1,'str' }})
> >>+ | ---
> >>+ | ...
> >>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
> >>+ | ---
> >>+ | ...
> >>+str = string.rep("t",1024)
> >>+ | ---
> >>+ | ...
> >>+for i = 1, 10000 do space:insert{tostring(i), str} end
> >>+ | ---
> >>+ | ...
> >>+ch = fiber.channel(3)
> >>+ | ---
> >>+ | ...
> >>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
> >>+ | ---
> >>+ | ...
> >>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
> >>+ | ---
> >>+ | ...
> >>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
> >>+ | ---
> >>+ | ...
> >>+
> >>+{ch:get(), ch:get(), ch:get()}
> >>+ | ---
> >>+ | - - true
> >>+ | - true
> >>+ | - true
> >>+ | ...
> >>+
> >>+space:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/gh-2336-ddl_call_twice.test.lua b/test/box/gh-2336-ddl_call_twice.test.lua
> >>new file mode 100644
> >>index 000000000..f92afc211
> >>--- /dev/null
> >>+++ b/test/box/gh-2336-ddl_call_twice.test.lua
> >>@@ -0,0 +1,16 @@
> >>+-- gh-2336 crash if format called twice during snapshot
> >>+fiber = require'fiber'
> >>+
> >>+space = box.schema.space.create('test_format')
> >>+_ = space:create_index('pk', { parts = { 1,'str' }})
> >>+space:format({{ name ="key"; type = "string" }, { name ="dataAB"; type = "string" }})
> >>+str = string.rep("t",1024)
> >>+for i = 1, 10000 do space:insert{tostring(i), str} end
> >>+ch = fiber.channel(3)
> >>+_ = fiber.create(function() fiber.yield() box.snapshot() ch:put(true) end)
> >>+format = {{name ="key"; type = "string"}, {name ="data"; type = "string"}}
> >>+for i = 1, 2 do fiber.create(function() fiber.yield() space:format(format) ch:put(true) end) end
> >>+
> >>+{ch:get(), ch:get(), ch:get()}
> >>+
> >>+space:drop()
> >>diff --git a/test/box/gh-2783-ddl_lock.result b/test/box/gh-2783-ddl_lock.result
> >>new file mode 100644
> >>index 000000000..7b3ba3444
> >>--- /dev/null
> >>+++ b/test/box/gh-2783-ddl_lock.result
> >>@@ -0,0 +1,62 @@
> >>+-- test-run result file version 2
> >>+env = require('test_run')
> >>+ | ---
> >>+ | ...
> >>+test_run = env.new()
> >>+ | ---
> >>+ | ...
> >>+
> >>+--
> >>+-- gh-2783
> >>+-- A ddl operation shoud fail before trying to lock a ddl latch
> >>+-- in a multi-statement transaction.
> >>+-- If operation tries to lock already an locked latch then the
> >>+-- current transaction will be silently rolled back under our feet.
> >>+-- This is confusing. So check for multi-statement transaction
> >>+-- before locking the latch.
> >>+--
> >>+test_latch = box.schema.space.create('test_latch')
> >>+ | ---
> >>+ | ...
> >>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
> >>+ | ---
> >>+ | ...
> >>+fiber = require('fiber')
> >>+ | ---
> >>+ | ...
> >>+c = fiber.channel(1)
> >>+ | ---
> >>+ | ...
> >>+test_run:cmd("setopt delimiter ';'")
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+_ = fiber.create(function()
> >>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
> >>+ c:put(true)
> >>+end);
> >>+ | ---
> >>+ | ...
> >>+
> >>+-- Should be Ok for now
> >>+box.begin()
> >>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
> >>+box.commit();
> >>+ | ---
> >>+ | ...
> >>+test_run:cmd("setopt delimiter ''");
> >>+ | ---
> >>+ | - true
> >>+ | ...
> >>+-- Explicitly roll back the transaction in multi-statement,
> >>+-- which hasn't finished due to DDL error
> >>+box.rollback()
> >>+ | ---
> >>+ | ...
> >>+
> >>+_ = c:get()
> >>+ | ---
> >>+ | ...
> >>+test_latch:drop() -- this is where everything stops
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/gh-2783-ddl_lock.test.lua b/test/box/gh-2783-ddl_lock.test.lua
> >>new file mode 100644
> >>index 000000000..953e177a7
> >>--- /dev/null
> >>+++ b/test/box/gh-2783-ddl_lock.test.lua
> >>@@ -0,0 +1,33 @@
> >>+env = require('test_run')
> >>+test_run = env.new()
> >>+
> >>+--
> >>+-- gh-2783
> >>+-- A ddl operation shoud fail before trying to lock a ddl latch
> >>+-- in a multi-statement transaction.
> >>+-- If operation tries to lock already an locked latch then the
> >>+-- current transaction will be silently rolled back under our feet.
> >>+-- This is confusing. So check for multi-statement transaction
> >>+-- before locking the latch.
> >>+--
> >>+test_latch = box.schema.space.create('test_latch')
> >>+_ = test_latch:create_index('primary', {unique = true, parts = {1, 'unsigned'}})
> >>+fiber = require('fiber')
> >>+c = fiber.channel(1)
> >>+test_run:cmd("setopt delimiter ';'")
> >>+_ = fiber.create(function()
> >>+ test_latch:create_index("sec", {unique = true, parts = {2, 'unsigned'}})
> >>+ c:put(true)
> >>+end);
> >>+
> >>+-- Should be Ok for now
> >>+box.begin()
> >>+ test_latch:create_index("sec2", {unique = true, parts = {2, 'unsigned'}})
> >>+box.commit();
> >>+test_run:cmd("setopt delimiter ''");
> >>+-- Explicitly roll back the transaction in multi-statement,
> >>+-- which hasn't finished due to DDL error
> >>+box.rollback()
> >>+
> >>+_ = c:get()
> >>+test_latch:drop() -- this is where everything stops
> >>diff --git a/test/box/gh-2839-ddl_custom_fields.result b/test/box/gh-2839-ddl_custom_fields.result
> >>new file mode 100644
> >>index 000000000..3846fe08e
> >>--- /dev/null
> >>+++ b/test/box/gh-2839-ddl_custom_fields.result
> >>@@ -0,0 +1,26 @@
> >>+-- test-run result file version 2
> >>+--
> >>+-- gh-2839: allow to store custom fields in field definition.
> >>+--
> >>+format = {}
> >>+ | ---
> >>+ | ...
> >>+format[1] = {name = 'field1', type = 'unsigned'}
> >>+ | ---
> >>+ | ...
> >>+format[2] = {'field2', 'unsigned'}
> >>+ | ---
> >>+ | ...
> >>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
> >>+ | ---
> >>+ | ...
> >>+s = box.schema.create_space('test', {format = format})
> >>+ | ---
> >>+ | ...
> >>+s:format()[3].custom_field
> >>+ | ---
> >>+ | - custom_value
> >>+ | ...
> >>+s:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/gh-2839-ddl_custom_fields.test.lua b/test/box/gh-2839-ddl_custom_fields.test.lua
> >>new file mode 100644
> >>index 000000000..e1c0e2a0b
> >>--- /dev/null
> >>+++ b/test/box/gh-2839-ddl_custom_fields.test.lua
> >>@@ -0,0 +1,10 @@
> >>+--
> >>+-- gh-2839: allow to store custom fields in field definition.
> >>+--
> >>+format = {}
> >>+format[1] = {name = 'field1', type = 'unsigned'}
> >>+format[2] = {'field2', 'unsigned'}
> >>+format[3] = {'field3', 'unsigned', custom_field = 'custom_value'}
> >>+s = box.schema.create_space('test', {format = format})
> >>+s:format()[3].custom_field
> >>+s:drop()
> >>diff --git a/test/box/gh-2937-ddl_collation_field_def.result b/test/box/gh-2937-ddl_collation_field_def.result
> >>new file mode 100644
> >>index 000000000..8b3de607e
> >>--- /dev/null
> >>+++ b/test/box/gh-2937-ddl_collation_field_def.result
> >>@@ -0,0 +1,27 @@
> >>+-- test-run result file version 2
> >>+--
> >>+-- gh-2937: allow to specify collation in field definition.
> >>+--
> >>+format = {}
> >>+ | ---
> >>+ | ...
> >>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
> >>+ | ---
> >>+ | ...
> >>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
> >>+ | ---
> >>+ | ...
> >>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
> >>+ | ---
> >>+ | ...
> >>+s = box.schema.create_space('test', {format = format})
> >>+ | ---
> >>+ | ...
> >>+s:format()
> >>+ | ---
> >>+ | - [{'type': 'string', 'name': 'field1', 'collation': 1}, {'type': 'any', 'name': 'field2',
> >>+ | 'collation': 2}, {'type': 'scalar', 'name': 'field3', 'collation': 1}]
> >>+ | ...
> >>+s:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/gh-2937-ddl_collation_field_def.test.lua b/test/box/gh-2937-ddl_collation_field_def.test.lua
> >>new file mode 100644
> >>index 000000000..1ddfa7246
> >>--- /dev/null
> >>+++ b/test/box/gh-2937-ddl_collation_field_def.test.lua
> >>@@ -0,0 +1,10 @@
> >>+--
> >>+-- gh-2937: allow to specify collation in field definition.
> >>+--
> >>+format = {}
> >>+format[1] = {name = 'field1', type = 'string', collation = 'unicode'}
> >>+format[2] = {'field2', 'any', collation = 'unicode_ci'}
> >>+format[3] = {type = 'scalar', name = 'field3', collation = 'unicode'}
> >>+s = box.schema.create_space('test', {format = format})
> >>+s:format()
> >>+s:drop()
> >>diff --git a/test/box/gh-3290-ddl_collation_deleted.result b/test/box/gh-3290-ddl_collation_deleted.result
> >>new file mode 100644
> >>index 000000000..eb59b6c1d
> >>--- /dev/null
> >>+++ b/test/box/gh-3290-ddl_collation_deleted.result
> >>@@ -0,0 +1,16 @@
> >>+-- test-run result file version 2
> >>+--
> >>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
> >>+-- must work even if a collation is deleted from _collation.
> >>+--
> >>+t = box.space._collation:delete{1}
> >>+ | ---
> >>+ | ...
> >>+utf8.cmp('abc', 'def')
> >>+ | ---
> >>+ | - -1
> >>+ | ...
> >>+box.space._collation:replace(t)
> >>+ | ---
> >>+ | - [1, 'unicode', 1, 'ICU', '', {'strength': 'tertiary'}]
> >>+ | ...
> >>diff --git a/test/box/gh-3290-ddl_collation_deleted.test.lua b/test/box/gh-3290-ddl_collation_deleted.test.lua
> >>new file mode 100644
> >>index 000000000..5fd3d7e1a
> >>--- /dev/null
> >>+++ b/test/box/gh-3290-ddl_collation_deleted.test.lua
> >>@@ -0,0 +1,7 @@
> >>+--
> >>+-- gh-3290: expose ICU into Lua. It uses built-in collations, that
> >>+-- must work even if a collation is deleted from _collation.
> >>+--
> >>+t = box.space._collation:delete{1}
> >>+utf8.cmp('abc', 'def')
> >>+box.space._collation:replace(t)
> >>diff --git a/test/box/gh-928-ddl_truncate.result b/test/box/gh-928-ddl_truncate.result
> >>new file mode 100644
> >>index 000000000..f244e07f1
> >>--- /dev/null
> >>+++ b/test/box/gh-928-ddl_truncate.result
> >>@@ -0,0 +1,35 @@
> >>+-- test-run result file version 2
> >>+fiber = require'fiber'
> >>+ | ---
> >>+ | ...
> >>+ch = fiber.channel(2)
> >>+ | ---
> >>+ | ...
> >>+
> >>+--issue #928
> >>+space = box.schema.space.create('test_trunc')
> >>+ | ---
> >>+ | ...
> >>+_ = space:create_index('pk')
> >>+ | ---
> >>+ | ...
> >>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
> >>+ | ---
> >>+ | ...
> >>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
> >>+ | ---
> >>+ | ...
> >>+
> >>+function test_trunc() space:truncate() ch:put(true) end
> >>+ | ---
> >>+ | ...
> >>+
> >>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
> >>+ | ---
> >>+ | ...
> >>+_ = {ch:get(), ch:get()}
> >>+ | ---
> >>+ | ...
> >>+space:drop()
> >>+ | ---
> >>+ | ...
> >>diff --git a/test/box/gh-928-ddl_truncate.test.lua b/test/box/gh-928-ddl_truncate.test.lua
> >>new file mode 100644
> >>index 000000000..10be8c361
> >>--- /dev/null
> >>+++ b/test/box/gh-928-ddl_truncate.test.lua
> >>@@ -0,0 +1,14 @@
> >>+fiber = require'fiber'
> >>+ch = fiber.channel(2)
> >>+
> >>+--issue #928
> >>+space = box.schema.space.create('test_trunc')
> >>+_ = space:create_index('pk')
> >>+_ = box.space.test_trunc:create_index('i1', {type = 'hash', parts = {2, 'STR'}})
> >>+_ = box.space.test_trunc:create_index('i2', {type = 'hash', parts = {2, 'STR'}})
> >>+
> >>+function test_trunc() space:truncate() ch:put(true) end
> >>+
> >>+_ = {fiber.create(test_trunc), fiber.create(test_trunc)}
> >>+_ = {ch:get(), ch:get()}
> >>+space:drop()
> >>--
> >>2.17.1
> >>  
> > 
> > 
> >--
> >Oleg Piskunov
> >  
>  
>  
> --
> Alexander Tikhonov
>  

-- 
sergeyb@

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test
  2020-03-18 10:37 [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test Alexander V. Tikhonov
  2020-03-18 12:06 ` Oleg Piskunov
@ 2020-04-15 15:26 ` Kirill Yukhin
  1 sibling, 0 replies; 6+ messages in thread
From: Kirill Yukhin @ 2020-04-15 15:26 UTC (permalink / raw)
  To: Alexander V. Tikhonov; +Cc: Oleg Piskunov, tarantool-patches

Hello,

On 18 мар 13:37, Alexander V. Tikhonov wrote:
> Divided into tests:
> - box/ddl_alter.test.lua
> - box/ddl_collation.test.lua
> - box/ddl_collation_types.test.lua
> - box/ddl_collation_wrong_id.test.lua
> - box/ddl_no_collation.test.lua
> - box/ddl_parallel.test.lua
> - box/ddl_tuple.test.lua
> - box/gh-2336-ddl_call_twice.test.lua
> - box/gh-2783-ddl_lock.test.lua
> - box/gh-2839-ddl_custom_fields.test.lua
> - box/gh-2937-ddl_collation_field_def.test.lua
> - box/gh-3290-ddl_collation_deleted.test.lua
> - box/gh-928-ddl_truncate.test.lua
> ---
> 
> Github: https://github.com/tarantool/tarantool/tree/avtikhon/divide_tests

I've checked the patch into master.


--
Regards, Kirill Yukhin

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-15 15:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-18 10:37 [Tarantool-patches] [PATCH v2 1/2] Divide box/ddl.test.lua test Alexander V. Tikhonov
2020-03-18 12:06 ` Oleg Piskunov
2020-03-19 13:50   ` Alexander Tikhonov
2020-03-20  8:40     ` Oleg Piskunov
2020-03-24  8:02     ` Sergey Bronnikov
2020-04-15 15:26 ` Kirill Yukhin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox