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