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 : >  > >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