Tarantool development patches archive
 help / color / mirror / Atom feed
* [tarantool-patches] [PATCH v4] Feature request for a new collation
@ 2019-03-05 11:44 Stanislav Zudin
  2019-03-05 14:40 ` Vladimir Davydov
  2019-03-05 15:41 ` [tarantool-patches] " Konstantin Osipov
  0 siblings, 2 replies; 10+ messages in thread
From: Stanislav Zudin @ 2019-03-05 11:44 UTC (permalink / raw)
  To: tarantool-patches, kostja; +Cc: Stanislav Zudin

Adds a new set of default collations.
The collation 'unicode_ky_s1' supports the difference
between Cyrillic letters 'Е' and 'Ё'. The standard case insensitive
collation ('unicode_ci') doesn't distinguish these letters.

Closes #4007
---
Branch: https://github.com/tarantool/tarantool/tree/stanztt/gh-4007-new-default-collation-2.1
Issue: https://github.com/tarantool/tarantool/issues/4007

 src/box/bootstrap.snap          | Bin 1867 -> 4485 bytes
 src/box/lua/upgrade.lua         | 109 ++++++-
 src/coll_def.h                  |   2 +-
 test/box-py/bootstrap.result    |   2 +-
 test/box/ddl.result             | 560 +++++++++++++++++++++++++++++++-
 test/box/net.box.result         |   2 +-
 test/sql-tap/collation.test.lua | 280 +++++++++++++++-
 test/sql/collation.result       |   4 +-
 test/sql/collation.test.lua     |   4 +-
 9 files changed, 943 insertions(+), 20 deletions(-)

diff --git a/src/box/bootstrap.snap b/src/box/bootstrap.snap
index a0c436d0dac9593d88e87fefe5084e833d8bed2f..35ab86f01b3e6f6936a26b6441ed196caa730064 100644
GIT binary patch
delta 4476
zcmV-?5rgi_4uvC-GJiQ`H8?OhVPY+2F*#x_G-hNnEjc(hVl8DgH!)^oFg9j3GByfU
zLu_wjYdRo%ARr(hARr)p3JTS_3%bn_1OUz?`MIB^0000004TLD{QywihXCr8d?7~=
zfLNOV{Qv*||9^4(1^=cE2$!<0)()kTB6zC$k?|y=l<BE*(|=}1uH0NX`DiAxd<$)^
z&Dkee83JOA!3-$%28#2rVkZ(A0ty250r&$DX1g+<Y)9q;sY~LdF1hod3`ve5Ly}@V
zAj!3ZG3m&Gm~`BrgLF*CFdWR}JZ&J8qd}OQQ<aa4a=<)^;uj4>F#|B-ioqAX^OAvV
zcL4@Ei@04EFMqQxE*E5ROP4Ih$z58wWHHN@ELxx?i&<Q;WD&(H7Kox1ETXtpxzalo
zE4@2a>3waYGP_fO69rA-<^3_7yU*NnczOT6$9JYwFaZS^OE3lF2qri&lLRMTir~a2
zhJXp<2bM6F0s+Qrlm}?Pn@OSlP8NmsA&&MtrP=IGl7CEg#{s1$C#5H+J5Z8lT~8d4
zbu|E`Ji#yhu2}hS$W@*v4eyggzYljgd2&Mr8n_{nlN;Xfh=JMyNVS>*N3~i43p@e}
z{2!3OzX1qbaE%>s!PUrs3tC-pEsD*!h>T=Sim)`VRpA;U`U0B#6EO5IRKN}*VDABh
z_7)%r(|-aO0Mmd3z%)!_5`fLN1juGn!o+6#S@NGm$v={x|078_H-d!oB1bqUV#G87
zC}NsJh?u4j0CMNJXU&2P3HJ%&*OCDdB3>({|HS*PKZ4Zw-I=EI0pbIDrK$02W{zT!
zecYJ$&pMOA?+xrnm?~Ou7KbO8cZy}JVn9AVuzyz?GdhR?<K#sP6`jTV+*hxv7?2O_
zl?G;E`^?X=ip9qIz+P$g*j|{wscY(Pu^;<->G?r31|ArSUMRA{sfi!37n)@E0*v0f
z_@Z|%yy$)1qKn(L;Ntcywz&OvEVP)_xgrZ$9V@U<UrvZkeu|iXpZayGxZ<A*EB>db
z;(u2usF-m@F@=l^3MsJq?eg*GdLjz`PC&t5&lCLl_ne4&o}Q?0q8Ig1&jjy(i6;J)
zVB$ZCCH|36;{S*wel-G#nVmdG$n4-T0?gsV;b0EGFTb54^5iE1PyQi_$e&*bBJc+>
z1b!fdz>oijAnxA*;=Y|9?%(gabMiWNPJd3P>*Ob&Q%9pd(9viQb2O?^E*~z+Lk|~~
z!*$V%#^HgVJ30JZ<M5N8aCYXowVLM}IOb`dT3cCf&fi#Cyx+Lr>9TeXYws)F-nblX
zTV2ui4mjGTZ5^z74m<RYgATplkOQ{?2hMA_fpZ#c&~9qbdIlP_ZsVpjt7f2TQ-7MJ
z$)-wG*HEc9Hma&-P46<?))>@is}%+rwtgXotzCd&>#bXOfdv<2yA@jCl^R#-oeC_>
zQdogkt|+L$E7ucJn3=#sL6+tO-dW;yXiVVE&ZOa$W_W0LWeI0^B?)GDyBwi}UG7o@
z5_B2D2)eY1pi5oWLMY2ATUoABwSUs8T-B)yl}cTxu3o4M_33BcKS%xN&nO@B88zmO
zj(N=HStIqXk)>H9Yb2CT$y}x+36+v5IcAa+Ns`1PNv@$tk{~8YT1c)J#25q`#^1#O
z>W5`xM*O0=jH{Z$;m)7V8Wp)wzc-eMsNeA0*(Oc)#riyH8mwUwykM^L+kZbdb$2##
z9FMr~jD_O<S8g^=qws%Pc4$ZnXZ353rG8jesDOS=eu}#BYBAS$dV*i5aTd3B9yivt
z`E)jj0Q8!;@924T!BgwdTIYC6ojI$jedd0(KEdye1ro}GHSKDh?(g#!PW4rDwS94E
zYPiIWJM;cJG&eJ^scvF3cYjSxg8yOJAKSZ}-yGIx+H?CgF2sAxztb#?*7{YLKMY><
zv#@#h6`D0R%paPbe9SuY!uljj@M@YC?pWjS3o++d#NnrFJF6cZYi+MhENB2A0hk1k
zlC~v4N|^jC!R5*OCs8t+gXBjx=SY%V+Zml>1j($c$Prl=5hFX9(tk`w8@m7~GNUtu
zh)js>*&b<&b4e*<rhRmR3?Xemgpjr$K}Z{E^8qr0*`DpmtnK;KYA@Tfz1bdKRSd}X
zq@>n9UbZK-^08;O+oKQJP7gk=6z)px^4Q~4@zCQ`@5tj+Pt^`QvRcO-S*62{tY&qN
zI(RAv9XyR=4xaK94u3h)^o=;u)D1Y&wT(AsTx_@@<65H)UTQU_Txzhvdm3x-j)oe%
z^L|Dey_<nX?`53P`$~oxy^m2w@2ePOSgm1<L3S|2Ao~|#kUd3jd6Q2RYzxYCDs3b)
zrin@`WP3oimxE=yQ!xu>sbWjEw`b2DJ$4Lw;pbS*JIxY*z<*wrDz=0<M$^yPq7cj)
z#eB>9fLNdW3e1|8qB;wsiY3|J&SrRX*4`<jNTRjZPF%2nPQHx6QZ+9<3FRV%RZ;~)
z>5~5hy(Fl0hT~7K`r~xW*%wtT2?VDwU2ygkcZS08r%<3woirb;rHUPWHvAwg1LU@*
z44E4l53=l-Cx0<pI<Q$d$g+WL3e)t&qyZBcrY|=gY$=1+5(YlEHA`NUE>P;C#3gA<
zl9r?_NERSrQG;~l$jVU_HAhrpPPbT-Q3W?63W%l<O+X|8`Il@G!4T8X(hvkf4+u#S
ziUNZL&FoDL9vdVJQnD5(3CMxhO-&x0M&+IA&S1>@)qm^9_Nrn=P`305zPTZq?o*2d
z`!#c)w>IV%)e3bcK{tKp%lq#W{7UiL+3<;ZUl;Bxy>U@^<Eo;RX`uhrRG4v^)^SSx
z_WyL$e{U=qCn4^a<BiAfGn}n8aqJTVxf|{m+$ry$mfeE1W*jr`UzW{slwRHXryBgS
zY|{d2=6@)Y0wdO0%^cOb`hu_1`Z|cAXy+EjXWy5PSZe0zm$OR=P;vaJ5&~pTFBQk1
zemR?T02^?pqWbA9k^yPQ&j#G7_~q<TtSW|KsPog8nld9I00000K>%YLNDx?KW=RGU
z0DwV)f#I?-JQj<D7zoUI%rZ3q10X;_fFc0Z-+v-an9oQkMFVr2qJ_Ck(ZF20;{;pC
z1Hf^kb1XO2jVM^>5iimFmDj(q{f*95kEwaFGo{el22hsG*aMY7e<c?q7}15KVK*Xd
zS+<0w($P7gP~)S;1V)K;6$3rR`a>(Y)*?wfC|&ENMu;gey@uxvC!xMRrx>zwL{Vkv
z41d*GV%8n*4_F#tPSuapbQ!WLc@D51j2E%`1}%0bD^=Lp)w4kEO|V~j0*4kwy2Lqa
zYnW{mKP<~{=y|Or9RmaLxAhMs3$zp)oQSl2C_+=^?Qz5?rpwXdh*4Z=c|1MdgB}#t
zQJ(kyV#M%Z2L;$inbKt~5czk+VqqvAJ%1Oo#i{4=-1IdDBUC@>W^E44k}hY9BSs-r
zjur=ua65ADJT-oXp$M^7cyfn-q)&pQ4eX~lX=H$5*2ooplmAFahL~YDz_YA6zW4bl
z7Th{5Sp1)u+2*6QbsDWyvd!~VyQr5rWw<ap5ekZ5pVLM~4&Y?R`o6)m3o7(?W`FUy
zL04sK__v7J`{2;%!PDB;m7BKt`{H#>xfq5M365CLL*}9LF?g@Z8G!3itPzXSpoKCC
zWC%Vszlv)gH;hf`qZ22jV5Eicja5jG{g0cm4cUB+v2NgM4CkU)f2WNt)NM@bjyX^0
zAsS&h{Gg}A^_TtXL@pObUzq^Yy?<30i2qS+wjLvvEUu~WCQrqYmbygjB_f$UJb}p0
z);KjgLeJvFS;6t>3>h9Ft;?xtA;d-R%;tBkYNOEewCCH9JA{t)k!B@_-Mm$cDgo+r
zrDHb&JI;Q4Q8D3V`c%;%Ocw+hd5xFjAEMJEbgTt&Epn|31#qh*gTt4VKz|e8SqJ8(
zO_IRIw~jJLxr_Z?-?Xsn2i4>+s67&Cqakh#es;9p+|)OARmg;1YG_ec5ZB`nl*&M{
z0LvqRZBRO)nm*hLDLS87RM?CQ9>F)C5j2M`_CPE;W6?jNEgW<S)JDQqH0$M}cx20F
zxm=9T+w^CAa4OmfXuv(OGk>ujc{nF_Crwt7+OgP?2x`XjexCkFQ9?P~&->2u^xyDB
z@~5wcAms}y3Yg5eraYfoLFX89u8|SX86{)QUYJVjE<jdP0c&S}JxLC*=(<Z6d=llB
zBVU?_R=4vPZbj+ev-K4Mo(|)0g^MarD5XeNPSO3*`_c@tZMxGaNPozypU~tepmjD$
zb+=8#niO>+M!AvU303h;sz*FZs=v|cUMmu?X$tWo!WN(>&Lt53CHWttz<vawv7R9O
ze=6gQ@gM=mJa85v(o!WinoR@sl%t%R+Uvhx54zfz%bOHx;$bCbza<wBAV8Q4HVpAE
zW5dTqKrF(frAK1)$$!Jstp{mGip%#-zSe!hJ#>;6u`RfsRh?uDOZvo7D`Gq-eQz*n
zC@%$4UHVWo2z31|z0|QJLcS#YZ#3xVC>CUlOG7;v@^q{gJX#O1JshX{Bt934pS=9h
zaza~q5PMU3{rB6&M`Y05M*o)VdL@njl0s!_QVrur(K%&sB7fFU&QJ()l(1hzz<Qve
zu$3T<`^w{u^8o>kB)DS9M}xp#)@{|2iw1$NUubR26@f(cZh-wG?!Q}Ku24we=zR4j
zS+HgP^#z~<l$l0$pi4mfbyC3@<G})+c_1uOq@{jtG@AzMDQ7Ln@u2j2!^}as36S$3
zhu6;O2Irpg&41!{0s&qV`8OI=hZGjO6U6XeY2J7q5TcmEV2~m$HFBfbG*C}HXF-k!
zrQaK7PRdPy{1_3KG9h_-#LcTe03t0_`#zi6;zkyMl$4sV-ZNM%QlzC{V)V(v(=CUs
z0Hmb#jJKY^Ozas0eoj)&X(Rznn57-P^gDY)j1Q%H5r6f*5CV{ctPFq&L<8P>0=k|O
z^wiv7>xt_+^w|Ma110>(b){>n!MLw_vbqq)-mDk^Oz5owf`tM`N%qd=j!2;^#auh3
zJdd>Xkgho&rg5AmscM)!ic}2*@_6Lj$)t+N7){9#ljPSvPOR+OtB1J4TWC&`KvR%_
z_HlJ$@PB6bc&SfU*coBM8Ntqn4>d5{Xb4ytq=|Gi`N$v8t}%G|*iRgG3MMsKFNy9c
zJxpBd#(fytfZ#Pfv0*&w7(FWX5d`=uQK%1!W87bU^AQASmi#xtRbzM@WK3i#9lB`#
z?id1grfDL1k}%Z=XTYDWJL|P8E>kR1^WVF%uYZ3ne|726gv}&^HcqaTlSND@eUp5@
zhQzy|G0S?81T9l$KM9dX?ZW16PPt%fHsI6L6M}yaCQRT)XrnVm85-;qXi;*N=*&`!
zA&o!IY=s;G7%<f;j8~0qepjEdEjYf78>P$gq6S7HR2Gxgsv2TIhj$~o&BhBO)}9YW
zoPTo}6K<~%N*0)T+GI4K8BY@6%LGp!DSRj)@~B<d-0UkCZ0Yrc%n~@Lsk71!Xh+{#
z5Nz~5$=mzpNj*3yO&>~7s+4nC*>->sqQ<-mqlfKZ?8{;7BOiAnL})DhHv$Ra6m#Ai
zqH=8QdHxldjTh(Us(CTcKabVqe;$G<#eeQw1-an4QJ_ajkF=T%13E}?RAsedMhO;;
z3z`X~PMLp_nf*QxN<m-+4fh=&<!{n$s@e=DEircDd>E3}3%j@lExb*WeV&4Xc=8~3
z$)sJ9lhO^=?Zlz`Pt8v#5?gNUBfA6?3$sSfjFN2H-GXU`A~+Q=P=$C~ql|cvTy-hd
zws8fZ!1QI2+D=0SK>=&e#%*72Gz91jl0@(%VX6<t;JH|TcJBN7>A6^YHg5a+>A6^Y
zHg5a+>A6^Yw&P^mJcEMzy0OVWj#XbHcKzetgtD1DoqCZ-_eoZ^+xN$5bD5Nnv!!|n
O=H$0fEz<|p5UuUun{2QE

delta 1838
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

diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
index 09af2e20d..58b5d47cc 100644
--- a/src/box/lua/upgrade.lua
+++ b/src/box/lua/upgrade.lua
@@ -615,7 +615,114 @@ local function upgrade_to_2_1_0()
 end
 
 local function upgrade_to_2_1_2()
-    box.space._collation:replace{4, "unicode_ru_s2", ADMIN, "ICU", "ru_RU", {strength='secondary'}}
+    local coll_lst = {
+        {name="af", loc_str="af"},  -- Afrikaans
+        {name="am", loc_str="am"},  -- Amharic (no character changes, just re-ordering)
+        {name="ar", loc_str="ar"},  -- Arabic (use only "standard")
+        {name="as", loc_str="as"},  -- Assamese
+        {name="az", loc_str="az"},  -- Azerbaijani (Azeri)
+        {name="be", loc_str="be"},  -- Belarusian
+        {name="bn", loc_str="bn"},  -- Bengali (Bangla actually)
+        {name="bs", loc_str="bs"},  -- Bosnian (tailored as Croatian)
+        {name="bs_Cyrl", loc_str="bs_Cyrl"}, -- Bosnian in Cyrillic (tailored as Serbian)
+        {name="ca", loc_str="ca"},  -- Catalan
+        {name="cs", loc_str="cs"},  -- Czech
+        {name="cy", loc_str="cy"},  -- Welsh
+        {name="da", loc_str="da"},  -- Danish
+        {name="de__phonebook", loc_str="de_DE_u_co_phonebk"}, -- German (umlaut as 'ae', 'oe', 'ue')
+        {name="de_AT_phonebook", loc_str="de_AT_u_co_phonebk"}, -- Austrian German (umlaut primary greater)
+        {name="dsb", loc_str="dsb"}, -- Lower Sorbian
+        {name="ee", loc_str="ee"},  -- Ewe
+        {name="eo", loc_str="eo"},  -- Esperanto
+        {name="es", loc_str="es"},  -- Spanish
+        {name="es__traditional", loc_str="es_u_co_trad"}, -- Spanish ('ch' and 'll' as a grapheme)
+        {name="et", loc_str="et"},  -- Estonian
+        {name="fa", loc_str="fa"},  -- Persian
+        {name="fi", loc_str="fi"},  -- Finnish (v and w are primary equal)
+        {name="fi__phonebook", loc_str="fi_u_co_phonebk"}, -- Finnish (v and w as separate characters)
+        {name="fil", loc_str="fil"}, -- Filipino
+        {name="fo", loc_str="fo"},  -- Faroese
+        {name="fr_CA", loc_str="fr_CA"}, -- Canadian French
+        {name="gu", loc_str="gu"},  -- Gujarati
+        {name="ha", loc_str="ha"},  -- Hausa
+        {name="haw", loc_str="haw"}, -- Hawaiian
+        {name="he", loc_str="he"},  -- Hebrew
+        {name="hi", loc_str="hi"},  -- Hindi
+        {name="hr", loc_str="hr"},  -- Croatian
+        {name="hu", loc_str="hu"},  -- Hungarian
+        {name="hy", loc_str="hy"},  -- Armenian
+        {name="ig", loc_str="ig"},  -- Igbo
+        {name="is", loc_str="is"},  -- Icelandic
+        {name="ja", loc_str="ja"},  -- Japanese
+        {name="kk", loc_str="kk"},  -- Kazakh
+        {name="kl", loc_str="kl"},  -- Kalaallisut
+        {name="kn", loc_str="kn"},  -- Kannada
+        {name="ko", loc_str="ko"},  -- Korean
+        {name="kok", loc_str="kok"}, -- Konkani
+        {name="ky", loc_str="ky"},  -- Kyrgyz
+        {name="lkt", loc_str="lkt"}, -- Lakota
+        {name="ln", loc_str="ln"},  -- Lingala
+        {name="lt", loc_str="lt"},  -- Lithuanian
+        {name="lv", loc_str="lv"},  -- Latvian
+        {name="mk", loc_str="mk"},  -- Macedonian
+        {name="ml", loc_str="ml"},  -- Malayalam
+        {name="mr", loc_str="mr"},  -- Marathi
+        {name="mt", loc_str="mt"},  -- Maltese
+        {name="nb", loc_str="nb"},  -- Norwegian Bokmal
+        {name="nn", loc_str="nn"},  -- Norwegian Nynorsk
+        {name="nso", loc_str="nso"}, -- Northern Sotho
+        {name="om", loc_str="om"},  -- Oromo
+        {name="or", loc_str="or"},  -- Oriya (Odia)
+        {name="pa", loc_str="pa"},  -- Punjabi
+        {name="pl", loc_str="pl"},  -- Polish
+        {name="ro", loc_str="ro"},  -- Romanian
+        {name="sa", loc_str="sa"},  -- Sanskrit
+        {name="se", loc_str="se"},  -- Northern Sami
+        {name="si", loc_str="si"},  -- Sinhala
+        {name="si__dictionary", loc_str="si_u_co_dict"}, -- Sinhala (U+0DA5 = U+0DA2,0DCA,0DA4)
+        {name="sk", loc_str="sk"},  -- Slovak
+        {name="sl", loc_str="sl"},  -- Slovenian
+        {name="sq", loc_str="sq"},  -- Albanian (just "standard")
+        {name="sr", loc_str="sr"},  -- Serbian
+        {name="sr_Latn", loc_str="sr_Latn"}, -- Serbian in Latin (tailored as Croatian)
+        {name="sv", loc_str="sv"},  -- Swedish (v and w are primary equal)
+        {name="sv__reformed", loc_str="sv_u_co_reformed"}, -- Swedish (v and w as separate characters)
+        {name="ta", loc_str="ta"},  -- Tamil
+        {name="te", loc_str="te"},  -- Telugu
+        {name="th", loc_str="th"},  -- Thai
+        {name="tn", loc_str="tn"},  -- Tswana
+        {name="to", loc_str="to"},  -- Tonga
+        {name="tr", loc_str="tr"},  -- Turkish
+        {name="ug_Cyrl", loc_str="ug"}, -- Uyghur in Cyrillic - is there such locale?
+        {name="uk", loc_str="uk"},  -- Ukrainian
+        {name="ur", loc_str="ur"},  -- Urdu
+        {name="vi", loc_str="vi"},  -- Vietnamese
+        {name="vo", loc_str="vo"},  -- Volapük
+        {name="wae", loc_str="wae"}, -- Walser
+        {name="wo", loc_str="wo"},  -- Wolof
+        {name="yo", loc_str="yo"},  -- Yoruba
+        {name="zh", loc_str="zh"},  -- Chinese
+        {name="zh__big5han", loc_str="zh_u_co_big5han"},  -- Chinese (ideographs: big5 order)
+        {name="zh__gb2312han", loc_str="zh_u_co_gb2312"}, -- Chinese (ideographs: GB-2312 order)
+        {name="zh__pinyin", loc_str="zh_u_co_pinyin"}, -- Chinese (ideographs: pinyin order)
+        {name="zh__stroke", loc_str="zh_u_co_stroke"}, -- Chinese (ideographs: stroke order)
+        {name="zh__zhuyin", loc_str="zh_u_co_zhuyin"}, -- Chinese (ideographs: zhuyin order)
+    }
+    local coll_strengths = {
+        {s="s1", opt={strength='primary'}},
+        {s="s2", opt={strength='secondary'}},
+        {s="s3", opt={strength='tertiary'}}
+    }
+
+    local id = 4
+    for _, collation in ipairs(coll_lst) do
+        for i, strength in ipairs(coll_strengths) do
+            local coll_name = 'unicode_' .. collation.name .. "_" .. strength.s
+            log.info("creating collation %s", coll_name)
+            box.space._collation:replace{id, coll_name, ADMIN, "ICU", collation.loc_str, strength.opt }
+            id = id + 1
+        end
+    end
 end
 
 local function get_version()
diff --git a/src/coll_def.h b/src/coll_def.h
index d3af89802..18ed606ad 100644
--- a/src/coll_def.h
+++ b/src/coll_def.h
@@ -44,7 +44,7 @@ extern const char *coll_type_strs[];
 
 /** Maximal length of locale name. */
 enum {
-	COLL_LOCALE_LEN_MAX = 16,
+	COLL_LOCALE_LEN_MAX = 1024,
 };
 
 /*
diff --git a/test/box-py/bootstrap.result b/test/box-py/bootstrap.result
index 3e4394557..69fbded6d 100644
--- a/test/box-py/bootstrap.result
+++ b/test/box-py/bootstrap.result
@@ -4,7 +4,7 @@ box.internal.bootstrap()
 box.space._schema:select{}
 ---
 - - ['max_id', 511]
-  - ['version', 2, 1, 0]
+  - ['version', 2, 1, 2]
 ...
 box.space._cluster:select{}
 ---
diff --git a/test/box/ddl.result b/test/box/ddl.result
index bffa19a8c..6f0d09120 100644
--- a/test/box/ddl.result
+++ b/test/box/ddl.result
@@ -350,7 +350,7 @@ box.space._collation:auto_increment{'test', 0, 'ICU', 42}
 ...
 box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}} --ok
 ---
-- [5, 'test', 0, 'ICU', 'ru_RU', {}]
+- [277, 'test', 0, 'ICU', 'ru_RU', {}]
 ...
 box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
 ---
@@ -358,7 +358,7 @@ box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
 ...
 box.space._collation.index.name:delete{'test'} -- ok
 ---
-- [5, 'test', 0, 'ICU', 'ru_RU', {}]
+- [277, 'test', 0, 'ICU', 'ru_RU', {}]
 ...
 box.space._collation.index.name:delete{'nothing'} -- allowed
 ---
@@ -474,7 +474,7 @@ _ = box.space._collation.index.name:delete{'test'} -- ok
 ...
 box.space._collation:auto_increment{'test', 0, 'ICU', 'ru_RU', setmap{}}
 ---
-- [5, 'test', 0, 'ICU', 'ru_RU', {}]
+- [277, 'test', 0, 'ICU', 'ru_RU', {}]
 ...
 box.space._collation:select{}
 ---
@@ -482,8 +482,280 @@ box.space._collation:select{}
   - [1, 'unicode', 1, 'ICU', '', {}]
   - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
   - [3, 'binary', 1, 'BINARY', '', {}]
-  - [4, 'unicode_ru_s2', 1, 'ICU', 'ru_RU', {'strength': 'secondary'}]
-  - [5, 'test', 0, 'ICU', 'ru_RU', {}]
+  - [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{}
@@ -492,12 +764,284 @@ box.space._collation:select{}
   - [1, 'unicode', 1, 'ICU', '', {}]
   - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
   - [3, 'binary', 1, 'BINARY', '', {}]
-  - [4, 'unicode_ru_s2', 1, 'ICU', 'ru_RU', {'strength': 'secondary'}]
-  - [5, 'test', 0, 'ICU', 'ru_RU', {}]
+  - [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'}
 ---
-- [5, 'test', 0, 'ICU', 'ru_RU', {}]
+- [277, 'test', 0, 'ICU', 'ru_RU', {}]
 ...
 --
 -- gh-3290: expose ICU into Lua. It uses built-in collations, that
diff --git a/test/box/net.box.result b/test/box/net.box.result
index 67bb29a39..7959a3035 100644
--- a/test/box/net.box.result
+++ b/test/box/net.box.result
@@ -2666,7 +2666,7 @@ c.space.test.index.sk.parts
 ---
 - - type: string
     is_nullable: false
-    collation_id: 5
+    collation_id: 277
     fieldno: 1
 ...
 c:close()
diff --git a/test/sql-tap/collation.test.lua b/test/sql-tap/collation.test.lua
index cec980423..158036f33 100755
--- a/test/sql-tap/collation.test.lua
+++ b/test/sql-tap/collation.test.lua
@@ -21,10 +21,282 @@ test:do_execsql_test(
         1,"unicode",
         2,"unicode_ci",
         3,"binary",
-        4,"unicode_ru_s2",
-        5,"unicode_numeric",
-        6,"unicode_numeric_s2",
-        7,"unicode_tur_s2"
+        4,"unicode_af_s1",
+        5,"unicode_af_s2",
+        6,"unicode_af_s3",
+        7,"unicode_am_s1",
+        8,"unicode_am_s2",
+        9,"unicode_am_s3",
+        10,"unicode_ar_s1",
+        11,"unicode_ar_s2",
+        12,"unicode_ar_s3",
+        13,"unicode_as_s1",
+        14,"unicode_as_s2",
+        15,"unicode_as_s3",
+        16,"unicode_az_s1",
+        17,"unicode_az_s2",
+        18,"unicode_az_s3",
+        19,"unicode_be_s1",
+        20,"unicode_be_s2",
+        21,"unicode_be_s3",
+        22,"unicode_bn_s1",
+        23,"unicode_bn_s2",
+        24,"unicode_bn_s3",
+        25,"unicode_bs_s1",
+        26,"unicode_bs_s2",
+        27,"unicode_bs_s3",
+        28,"unicode_bs_Cyrl_s1",
+        29,"unicode_bs_Cyrl_s2",
+        30,"unicode_bs_Cyrl_s3",
+        31,"unicode_ca_s1",
+        32,"unicode_ca_s2",
+        33,"unicode_ca_s3",
+        34,"unicode_cs_s1",
+        35,"unicode_cs_s2",
+        36,"unicode_cs_s3",
+        37,"unicode_cy_s1",
+        38,"unicode_cy_s2",
+        39,"unicode_cy_s3",
+        40,"unicode_da_s1",
+        41,"unicode_da_s2",
+        42,"unicode_da_s3",
+        43,"unicode_de__phonebook_s1",
+        44,"unicode_de__phonebook_s2",
+        45,"unicode_de__phonebook_s3",
+        46,"unicode_de_AT_phonebook_s1",
+        47,"unicode_de_AT_phonebook_s2",
+        48,"unicode_de_AT_phonebook_s3",
+        49,"unicode_dsb_s1",
+        50,"unicode_dsb_s2",
+        51,"unicode_dsb_s3",
+        52,"unicode_ee_s1",
+        53,"unicode_ee_s2",
+        54,"unicode_ee_s3",
+        55,"unicode_eo_s1",
+        56,"unicode_eo_s2",
+        57,"unicode_eo_s3",
+        58,"unicode_es_s1",
+        59,"unicode_es_s2",
+        60,"unicode_es_s3",
+        61,"unicode_es__traditional_s1",
+        62,"unicode_es__traditional_s2",
+        63,"unicode_es__traditional_s3",
+        64,"unicode_et_s1",
+        65,"unicode_et_s2",
+        66,"unicode_et_s3",
+        67,"unicode_fa_s1",
+        68,"unicode_fa_s2",
+        69,"unicode_fa_s3",
+        70,"unicode_fi_s1",
+        71,"unicode_fi_s2",
+        72,"unicode_fi_s3",
+        73,"unicode_fi__phonebook_s1",
+        74,"unicode_fi__phonebook_s2",
+        75,"unicode_fi__phonebook_s3",
+        76,"unicode_fil_s1",
+        77,"unicode_fil_s2",
+        78,"unicode_fil_s3",
+        79,"unicode_fo_s1",
+        80,"unicode_fo_s2",
+        81,"unicode_fo_s3",
+        82,"unicode_fr_CA_s1",
+        83,"unicode_fr_CA_s2",
+        84,"unicode_fr_CA_s3",
+        85,"unicode_gu_s1",
+        86,"unicode_gu_s2",
+        87,"unicode_gu_s3",
+        88,"unicode_ha_s1",
+        89,"unicode_ha_s2",
+        90,"unicode_ha_s3",
+        91,"unicode_haw_s1",
+        92,"unicode_haw_s2",
+        93,"unicode_haw_s3",
+        94,"unicode_he_s1",
+        95,"unicode_he_s2",
+        96,"unicode_he_s3",
+        97,"unicode_hi_s1",
+        98,"unicode_hi_s2",
+        99,"unicode_hi_s3",
+        100,"unicode_hr_s1",
+        101,"unicode_hr_s2",
+        102,"unicode_hr_s3",
+        103,"unicode_hu_s1",
+        104,"unicode_hu_s2",
+        105,"unicode_hu_s3",
+        106,"unicode_hy_s1",
+        107,"unicode_hy_s2",
+        108,"unicode_hy_s3",
+        109,"unicode_ig_s1",
+        110,"unicode_ig_s2",
+        111,"unicode_ig_s3",
+        112,"unicode_is_s1",
+        113,"unicode_is_s2",
+        114,"unicode_is_s3",
+        115,"unicode_ja_s1",
+        116,"unicode_ja_s2",
+        117,"unicode_ja_s3",
+        118,"unicode_kk_s1",
+        119,"unicode_kk_s2",
+        120,"unicode_kk_s3",
+        121,"unicode_kl_s1",
+        122,"unicode_kl_s2",
+        123,"unicode_kl_s3",
+        124,"unicode_kn_s1",
+        125,"unicode_kn_s2",
+        126,"unicode_kn_s3",
+        127,"unicode_ko_s1",
+        128,"unicode_ko_s2",
+        129,"unicode_ko_s3",
+        130,"unicode_kok_s1",
+        131,"unicode_kok_s2",
+        132,"unicode_kok_s3",
+        133,"unicode_ky_s1",
+        134,"unicode_ky_s2",
+        135,"unicode_ky_s3",
+        136,"unicode_lkt_s1",
+        137,"unicode_lkt_s2",
+        138,"unicode_lkt_s3",
+        139,"unicode_ln_s1",
+        140,"unicode_ln_s2",
+        141,"unicode_ln_s3",
+        142,"unicode_lt_s1",
+        143,"unicode_lt_s2",
+        144,"unicode_lt_s3",
+        145,"unicode_lv_s1",
+        146,"unicode_lv_s2",
+        147,"unicode_lv_s3",
+        148,"unicode_mk_s1",
+        149,"unicode_mk_s2",
+        150,"unicode_mk_s3",
+        151,"unicode_ml_s1",
+        152,"unicode_ml_s2",
+        153,"unicode_ml_s3",
+        154,"unicode_mr_s1",
+        155,"unicode_mr_s2",
+        156,"unicode_mr_s3",
+        157,"unicode_mt_s1",
+        158,"unicode_mt_s2",
+        159,"unicode_mt_s3",
+        160,"unicode_nb_s1",
+        161,"unicode_nb_s2",
+        162,"unicode_nb_s3",
+        163,"unicode_nn_s1",
+        164,"unicode_nn_s2",
+        165,"unicode_nn_s3",
+        166,"unicode_nso_s1",
+        167,"unicode_nso_s2",
+        168,"unicode_nso_s3",
+        169,"unicode_om_s1",
+        170,"unicode_om_s2",
+        171,"unicode_om_s3",
+        172,"unicode_or_s1",
+        173,"unicode_or_s2",
+        174,"unicode_or_s3",
+        175,"unicode_pa_s1",
+        176,"unicode_pa_s2",
+        177,"unicode_pa_s3",
+        178,"unicode_pl_s1",
+        179,"unicode_pl_s2",
+        180,"unicode_pl_s3",
+        181,"unicode_ro_s1",
+        182,"unicode_ro_s2",
+        183,"unicode_ro_s3",
+        184,"unicode_sa_s1",
+        185,"unicode_sa_s2",
+        186,"unicode_sa_s3",
+        187,"unicode_se_s1",
+        188,"unicode_se_s2",
+        189,"unicode_se_s3",
+        190,"unicode_si_s1",
+        191,"unicode_si_s2",
+        192,"unicode_si_s3",
+        193,"unicode_si__dictionary_s1",
+        194,"unicode_si__dictionary_s2",
+        195,"unicode_si__dictionary_s3",
+        196,"unicode_sk_s1",
+        197,"unicode_sk_s2",
+        198,"unicode_sk_s3",
+        199,"unicode_sl_s1",
+        200,"unicode_sl_s2",
+        201,"unicode_sl_s3",
+        202,"unicode_sq_s1",
+        203,"unicode_sq_s2",
+        204,"unicode_sq_s3",
+        205,"unicode_sr_s1",
+        206,"unicode_sr_s2",
+        207,"unicode_sr_s3",
+        208,"unicode_sr_Latn_s1",
+        209,"unicode_sr_Latn_s2",
+        210,"unicode_sr_Latn_s3",
+        211,"unicode_sv_s1",
+        212,"unicode_sv_s2",
+        213,"unicode_sv_s3",
+        214,"unicode_sv__reformed_s1",
+        215,"unicode_sv__reformed_s2",
+        216,"unicode_sv__reformed_s3",
+        217,"unicode_ta_s1",
+        218,"unicode_ta_s2",
+        219,"unicode_ta_s3",
+        220,"unicode_te_s1",
+        221,"unicode_te_s2",
+        222,"unicode_te_s3",
+        223,"unicode_th_s1",
+        224,"unicode_th_s2",
+        225,"unicode_th_s3",
+        226,"unicode_tn_s1",
+        227,"unicode_tn_s2",
+        228,"unicode_tn_s3",
+        229,"unicode_to_s1",
+        230,"unicode_to_s2",
+        231,"unicode_to_s3",
+        232,"unicode_tr_s1",
+        233,"unicode_tr_s2",
+        234,"unicode_tr_s3",
+        235,"unicode_ug_Cyrl_s1",
+        236,"unicode_ug_Cyrl_s2",
+        237,"unicode_ug_Cyrl_s3",
+        238,"unicode_uk_s1",
+        239,"unicode_uk_s2",
+        240,"unicode_uk_s3",
+        241,"unicode_ur_s1",
+        242,"unicode_ur_s2",
+        243,"unicode_ur_s3",
+        244,"unicode_vi_s1",
+        245,"unicode_vi_s2",
+        246,"unicode_vi_s3",
+        247,"unicode_vo_s1",
+        248,"unicode_vo_s2",
+        249,"unicode_vo_s3",
+        250,"unicode_wae_s1",
+        251,"unicode_wae_s2",
+        252,"unicode_wae_s3",
+        253,"unicode_wo_s1",
+        254,"unicode_wo_s2",
+        255,"unicode_wo_s3",
+        256,"unicode_yo_s1",
+        257,"unicode_yo_s2",
+        258,"unicode_yo_s3",
+        259,"unicode_zh_s1",
+        260,"unicode_zh_s2",
+        261,"unicode_zh_s3",
+        262,"unicode_zh__big5han_s1",
+        263,"unicode_zh__big5han_s2",
+        264,"unicode_zh__big5han_s3",
+        265,"unicode_zh__gb2312han_s1",
+        266,"unicode_zh__gb2312han_s2",
+        267,"unicode_zh__gb2312han_s3",
+        268,"unicode_zh__pinyin_s1",
+        269,"unicode_zh__pinyin_s2",
+        270,"unicode_zh__pinyin_s3",
+        271,"unicode_zh__stroke_s1",
+        272,"unicode_zh__stroke_s2",
+        273,"unicode_zh__stroke_s3",
+        274,"unicode_zh__zhuyin_s1",
+        275,"unicode_zh__zhuyin_s2",
+        276,"unicode_zh__zhuyin_s3",
+        277,"unicode_numeric",
+        278,"unicode_numeric_s2",
+        279,"unicode_tur_s2"
     }
 )
 
diff --git a/test/sql/collation.result b/test/sql/collation.result
index 8337dde0e..23dc4e80d 100644
--- a/test/sql/collation.result
+++ b/test/sql/collation.result
@@ -506,10 +506,10 @@ s:drop()
 s = box.schema.space.create('t1')
 ---
 ...
-s:format({{name='s1', type='string', collation = 'unicode_ru_s2'}})
+s:format({{name='s1', type='string', collation = 'unicode_ky_s1'}})
 ---
 ...
-idx = s:create_index('pk', {unique = true, type='tree', parts={{'s1', collation = 'unicode_ru_s2'}}})
+idx = s:create_index('pk', {unique = true, type='tree', parts={{'s1', collation = 'unicode_ky_s1'}}})
 ---
 ...
 s:insert{'Ё'}
diff --git a/test/sql/collation.test.lua b/test/sql/collation.test.lua
index 6f4ef08f3..37de9a951 100644
--- a/test/sql/collation.test.lua
+++ b/test/sql/collation.test.lua
@@ -203,8 +203,8 @@ s:drop()
 
 -- unicode_s2 collation does distinguish russian letters 'Е' and 'Ё'
 s = box.schema.space.create('t1')
-s:format({{name='s1', type='string', collation = 'unicode_ru_s2'}})
-idx = s:create_index('pk', {unique = true, type='tree', parts={{'s1', collation = 'unicode_ru_s2'}}})
+s:format({{name='s1', type='string', collation = 'unicode_ky_s1'}})
+idx = s:create_index('pk', {unique = true, type='tree', parts={{'s1', collation = 'unicode_ky_s1'}}})
 s:insert{'Ё'}
 s:insert{'е'}
 -- the following calls should fail
-- 
2.17.1

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

* Re: [tarantool-patches] [PATCH v4] Feature request for a new collation
  2019-03-05 11:44 [tarantool-patches] [PATCH v4] Feature request for a new collation Stanislav Zudin
@ 2019-03-05 14:40 ` Vladimir Davydov
  2019-03-06  6:32   ` Stanislav Zudin
  2019-03-05 15:41 ` [tarantool-patches] " Konstantin Osipov
  1 sibling, 1 reply; 10+ messages in thread
From: Vladimir Davydov @ 2019-03-05 14:40 UTC (permalink / raw)
  To: Stanislav Zudin; +Cc: tarantool-patches, kostja

On Tue, Mar 05, 2019 at 02:44:31PM +0300, Stanislav Zudin wrote:
> Adds a new set of default collations.
> The collation 'unicode_ky_s1' supports the difference
> between Cyrillic letters 'Е' and 'Ё'. The standard case insensitive
> collation ('unicode_ci') doesn't distinguish these letters.
> 
> Closes #4007
> ---
> Branch: https://github.com/tarantool/tarantool/tree/stanztt/gh-4007-new-default-collation-2.1
> Issue: https://github.com/tarantool/tarantool/issues/4007

Whenever you resubmit a patch, please add a brief changelog here to
point what have changed. It jogs my memory. Something like this would
be fine:

Changes in v4:
 - Add collations for other languages
Changes in v3:
 - Upgrade schema to 2.1.2 instead of using 2.1.0.
...

> 
>  src/box/bootstrap.snap          | Bin 1867 -> 4485 bytes
>  src/box/lua/upgrade.lua         | 109 ++++++-
>  src/coll_def.h                  |   2 +-
>  test/box-py/bootstrap.result    |   2 +-
>  test/box/ddl.result             | 560 +++++++++++++++++++++++++++++++-
>  test/box/net.box.result         |   2 +-
>  test/sql-tap/collation.test.lua | 280 +++++++++++++++-
>  test/sql/collation.result       |   4 +-
>  test/sql/collation.test.lua     |   4 +-
>  9 files changed, 943 insertions(+), 20 deletions(-)
> 
> diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
> index 09af2e20d..58b5d47cc 100644
> --- a/src/box/lua/upgrade.lua
> +++ b/src/box/lua/upgrade.lua
> @@ -615,7 +615,114 @@ local function upgrade_to_2_1_0()
>  end
>  
>  local function upgrade_to_2_1_2()
> -    box.space._collation:replace{4, "unicode_ru_s2", ADMIN, "ICU", "ru_RU", {strength='secondary'}}

Apparently, this patch is based on the previous version of the same
patch. Please don't do that. Squash it instead (see `git rebase -i` and
`git push -f`).

I won't be reviewing the rest of this patch, because I don't see much
point in adding collations for all those languates now. Up to Kostja.

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-05 11:44 [tarantool-patches] [PATCH v4] Feature request for a new collation Stanislav Zudin
  2019-03-05 14:40 ` Vladimir Davydov
@ 2019-03-05 15:41 ` Konstantin Osipov
  2019-03-06  6:36   ` Stanislav Zudin
  1 sibling, 1 reply; 10+ messages in thread
From: Konstantin Osipov @ 2019-03-05 15:41 UTC (permalink / raw)
  To: Stanislav Zudin; +Cc: tarantool-patches

* Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
>  /** Maximal length of locale name. */
>  enum {
> -	COLL_LOCALE_LEN_MAX = 16,
> +	COLL_LOCALE_LEN_MAX = 1024,
>  };

Why?


> 

-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov

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

* Re: [tarantool-patches] [PATCH v4] Feature request for a new collation
  2019-03-05 14:40 ` Vladimir Davydov
@ 2019-03-06  6:32   ` Stanislav Zudin
  2019-03-06  8:10     ` Konstantin Osipov
  0 siblings, 1 reply; 10+ messages in thread
From: Stanislav Zudin @ 2019-03-06  6:32 UTC (permalink / raw)
  To: Vladimir Davydov; +Cc: tarantool-patches, kostja



On 05.03.2019 17:40, Vladimir Davydov wrote:
> On Tue, Mar 05, 2019 at 02:44:31PM +0300, Stanislav Zudin wrote:
>> Adds a new set of default collations.
>> The collation 'unicode_ky_s1' supports the difference
>> between Cyrillic letters 'Е' and 'Ё'. The standard case insensitive
>> collation ('unicode_ci') doesn't distinguish these letters.
>>
>> Closes #4007
>> ---
>> Branch: https://github.com/tarantool/tarantool/tree/stanztt/gh-4007-new-default-collation-2.1
>> Issue: https://github.com/tarantool/tarantool/issues/4007
> 
> Whenever you resubmit a patch, please add a brief changelog here to
> point what have changed. It jogs my memory. Something like this would
> be fine:
> 
> Changes in v4:
>   - Add collations for other languages
> Changes in v3:
>   - Upgrade schema to 2.1.2 instead of using 2.1.0.
> ...
> 
Got it.

>>
>>   src/box/bootstrap.snap          | Bin 1867 -> 4485 bytes
>>   src/box/lua/upgrade.lua         | 109 ++++++-
>>   src/coll_def.h                  |   2 +-
>>   test/box-py/bootstrap.result    |   2 +-
>>   test/box/ddl.result             | 560 +++++++++++++++++++++++++++++++-
>>   test/box/net.box.result         |   2 +-
>>   test/sql-tap/collation.test.lua | 280 +++++++++++++++-
>>   test/sql/collation.result       |   4 +-
>>   test/sql/collation.test.lua     |   4 +-
>>   9 files changed, 943 insertions(+), 20 deletions(-)
>>
>> diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
>> index 09af2e20d..58b5d47cc 100644
>> --- a/src/box/lua/upgrade.lua
>> +++ b/src/box/lua/upgrade.lua
>> @@ -615,7 +615,114 @@ local function upgrade_to_2_1_0()
>>   end
>>   
>>   local function upgrade_to_2_1_2()
>> -    box.space._collation:replace{4, "unicode_ru_s2", ADMIN, "ICU", "ru_RU", {strength='secondary'}}
> 
> Apparently, this patch is based on the previous version of the same
> patch. Please don't do that. Squash it instead (see `git rebase -i` and
> `git push -f`).
> 
> I won't be reviewing the rest of this patch, because I don't see much
> point in adding collations for all those languates now. Up to Kostja.
> 

Me either. That is why i didn't squash the commits.

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-05 15:41 ` [tarantool-patches] " Konstantin Osipov
@ 2019-03-06  6:36   ` Stanislav Zudin
  2019-03-06  8:11     ` Konstantin Osipov
  0 siblings, 1 reply; 10+ messages in thread
From: Stanislav Zudin @ 2019-03-06  6:36 UTC (permalink / raw)
  To: Konstantin Osipov; +Cc: tarantool-patches



On 05.03.2019 18:41, Konstantin Osipov wrote:
> * Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
>>   /** Maximal length of locale name. */
>>   enum {
>> -	COLL_LOCALE_LEN_MAX = 16,
>> +	COLL_LOCALE_LEN_MAX = 1024,
>>   };
> 
> Why?
> 

Because locale may include numerous options such as collation, numbers,
calendar etc. e.g.: "fr@collation=phonebook;calendar=islamic-civil".
The max length is not specified.

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

* Re: [tarantool-patches] [PATCH v4] Feature request for a new collation
  2019-03-06  6:32   ` Stanislav Zudin
@ 2019-03-06  8:10     ` Konstantin Osipov
  0 siblings, 0 replies; 10+ messages in thread
From: Konstantin Osipov @ 2019-03-06  8:10 UTC (permalink / raw)
  To: Stanislav Zudin; +Cc: Vladimir Davydov, tarantool-patches

* Stanislav Zudin <szudin@tarantool.org> [19/03/06 10:24]:
> > I won't be reviewing the rest of this patch, because I don't see much
> > point in adding collations for all those languates now. Up to Kostja.
> Me either. That is why i didn't squash the commits.

I'm fine with these collations, but I think we should have a test
for each and every one, otherwise we can't claim we added them.

-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-06  6:36   ` Stanislav Zudin
@ 2019-03-06  8:11     ` Konstantin Osipov
  2019-03-06  8:23       ` Stanislav Zudin
  0 siblings, 1 reply; 10+ messages in thread
From: Konstantin Osipov @ 2019-03-06  8:11 UTC (permalink / raw)
  To: Stanislav Zudin; +Cc: tarantool-patches

* Stanislav Zudin <szudin@tarantool.org> [19/03/06 10:24]:
> 
> 
> On 05.03.2019 18:41, Konstantin Osipov wrote:
> > * Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
> > >   /** Maximal length of locale name. */
> > >   enum {
> > > -	COLL_LOCALE_LEN_MAX = 16,
> > > +	COLL_LOCALE_LEN_MAX = 1024,
> > >   };
> > 
> > Why?
> > 
> 
> Because locale may include numerous options such as collation, numbers,
> calendar etc. e.g.: "fr@collation=phonebook;calendar=islamic-civil".
> The max length is not specified.

*Nobody* except us can add a new collation. The names of the
collations you added don't exceed 16 bytes. Please keep the old
value.

-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-06  8:11     ` Konstantin Osipov
@ 2019-03-06  8:23       ` Stanislav Zudin
  2019-03-06  9:48         ` Konstantin Osipov
  0 siblings, 1 reply; 10+ messages in thread
From: Stanislav Zudin @ 2019-03-06  8:23 UTC (permalink / raw)
  To: tarantool-patches, Konstantin Osipov



On 06.03.2019 11:11, Konstantin Osipov wrote:
> * Stanislav Zudin <szudin@tarantool.org> [19/03/06 10:24]:
>>
>>
>> On 05.03.2019 18:41, Konstantin Osipov wrote:
>>> * Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
>>>>    /** Maximal length of locale name. */
>>>>    enum {
>>>> -	COLL_LOCALE_LEN_MAX = 16,
>>>> +	COLL_LOCALE_LEN_MAX = 1024,
>>>>    };
>>>
>>> Why?
>>>
>>
>> Because locale may include numerous options such as collation, numbers,
>> calendar etc. e.g.: "fr@collation=phonebook;calendar=islamic-civil".
>> The max length is not specified.
> 
> *Nobody* except us can add a new collation. The names of the
> collations you added don't exceed 16 bytes. Please keep the old
> value.
> 
strlen("de_DE_u_co_phonebk") == 18.

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-06  8:23       ` Stanislav Zudin
@ 2019-03-06  9:48         ` Konstantin Osipov
  2019-03-20 15:53           ` Stanislav Zudin
  0 siblings, 1 reply; 10+ messages in thread
From: Konstantin Osipov @ 2019-03-06  9:48 UTC (permalink / raw)
  To: Stanislav Zudin; +Cc: tarantool-patches

* Stanislav Zudin <szudin@tarantool.org> [19/03/06 11:26]:
> 
> 
> On 06.03.2019 11:11, Konstantin Osipov wrote:
> > * Stanislav Zudin <szudin@tarantool.org> [19/03/06 10:24]:
> > > 
> > > 
> > > On 05.03.2019 18:41, Konstantin Osipov wrote:
> > > > * Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
> > > > >    /** Maximal length of locale name. */
> > > > >    enum {
> > > > > -	COLL_LOCALE_LEN_MAX = 16,
> > > > > +	COLL_LOCALE_LEN_MAX = 1024,
> > > > >    };
> > > > 
> > > > Why?
> > > > 
> > > 
> > > Because locale may include numerous options such as collation, numbers,
> > > calendar etc. e.g.: "fr@collation=phonebook;calendar=islamic-civil".
> > > The max length is not specified.
> > 
> > *Nobody* except us can add a new collation. The names of the
> > collations you added don't exceed 16 bytes. Please keep the old
> > value.
> > 
> strlen("de_DE_u_co_phonebk") == 18.

+ "unicode_", then, increase to a relevant value please.

-- 
Konstantin Osipov, Moscow, Russia, +7 903 626 22 32
http://tarantool.io - www.twitter.com/kostja_osipov

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

* [tarantool-patches] Re: [PATCH v4] Feature request for a new collation
  2019-03-06  9:48         ` Konstantin Osipov
@ 2019-03-20 15:53           ` Stanislav Zudin
  0 siblings, 0 replies; 10+ messages in thread
From: Stanislav Zudin @ 2019-03-20 15:53 UTC (permalink / raw)
  To: tarantool-patches, Konstantin Osipov

The recent patch defines COLL_LOCALE_LEN_MAX equal to 30 and introduces 
test for the following collations:
- Afrikaans
- Amharic
- Assamese
- Azerbaijani
- Belarusian
- Kyrgyz
- German (phonebook)
- Hebrew
- Japanese
The source of test sequences is the following:
https://www.unicode.org/cldr/charts/34/collation/index.html

Issue: https://github.com/tarantool/tarantool/issues/4007
Branch: 
https://github.com/tarantool/tarantool/tree/stanztt/gh-4007-new-default-collation-2.1

On 06.03.2019 12:48, Konstantin Osipov wrote:
> * Stanislav Zudin <szudin@tarantool.org> [19/03/06 11:26]:
>>
>>
>> On 06.03.2019 11:11, Konstantin Osipov wrote:
>>> * Stanislav Zudin <szudin@tarantool.org> [19/03/06 10:24]:
>>>>
>>>>
>>>> On 05.03.2019 18:41, Konstantin Osipov wrote:
>>>>> * Stanislav Zudin <szudin@tarantool.org> [19/03/05 14:45]:
>>>>>>     /** Maximal length of locale name. */
>>>>>>     enum {
>>>>>> -	COLL_LOCALE_LEN_MAX = 16,
>>>>>> +	COLL_LOCALE_LEN_MAX = 1024,
>>>>>>     };
>>>>>
>>>>> Why?
>>>>>
>>>>
>>>> Because locale may include numerous options such as collation, numbers,
>>>> calendar etc. e.g.: "fr@collation=phonebook;calendar=islamic-civil".
>>>> The max length is not specified.
>>>
>>> *Nobody* except us can add a new collation. The names of the
>>> collations you added don't exceed 16 bytes. Please keep the old
>>> value.
>>>
>> strlen("de_DE_u_co_phonebk") == 18.
> 
> + "unicode_", then, increase to a relevant value please.
> 
Done.


---
  src/coll_def.h                    |   2 +-
  test/sql-tap/collation-2.test.lua | 143 ++++++++++++++++++++++++++++++
  2 files changed, 144 insertions(+), 1 deletion(-)
  create mode 100755 test/sql-tap/collation-2.test.lua

diff --git a/src/coll_def.h b/src/coll_def.h
index 18ed606ad..fd91f942a 100644
--- a/src/coll_def.h
+++ b/src/coll_def.h
@@ -44,7 +44,7 @@ extern const char *coll_type_strs[];

  /** Maximal length of locale name. */
  enum {
-	COLL_LOCALE_LEN_MAX = 1024,
+	COLL_LOCALE_LEN_MAX = 30,
  };

  /*
diff --git a/test/sql-tap/collation-2.test.lua 
b/test/sql-tap/collation-2.test.lua
new file mode 100755
index 000000000..58b6a1ef1
--- /dev/null
+++ b/test/sql-tap/collation-2.test.lua
@@ -0,0 +1,143 @@
+#!/usr/bin/env tarantool
+test = require("sqltester")
+test:plan(10 * 4)
+
+local prefix = "unicode-collation-"
+
+local function insert_into_table(tbl_name, data)
+    local sql = string.format("INSERT INTO %s VALUES ", tbl_name)
+    --local values = {}
+    for _, item in ipairs(data) do
+        local value = "('"..item.."')"
+        local e = sql .. value
+        box.sql.execute(e)
+    end
+end
+
+
+local collation_entries =
+{
+    {   -- Afrikaans case sensitive
+        "unicode_af_s3",
+        {"a","A","á","Á","â","Â","b","B","c","C","d","D","e","E","é","É",
+ 
"è","È","ê","Ê","ë","Ë","f","F","g","G","h","H","i","I","î","Î",
+            "ï","Ï","j","J","k","K","l","L","m","M","n","N","ʼn","o","O",
+ 
"ô","Ô","ö","Ö","p","P","q","Q","r","R","s","S","t","T","u","U",
+            "û","Û","v","V","w","W","x","X","y","Y","z","Z"}},
+    {
+        -- Amharic
+        "unicode_am_s3",
+        {"ሀ","ሁ","ሂ","ሃ","ሄ","ህ","ሆ","ለ","ሉ","ሊ","ላ","ሌ","ል","ሎ","ሏ","ሐ",
+            "ሑ","ሒ","ሓ","ሔ","ሕ","ሖ","ሗ","መ","ሙ","ሚ","ማ","ሜ","ም","ሞ",
+            "ሟ","ሠ","ሡ","ሢ","ሣ","ሤ","ሥ","ሦ","ሧ","ረ","ሩ","ሪ","ራ","ሬ","ር",
+ 
"ሮ","ሯ","ሰ","ሱ","ሲ","ሳ","ሴ","ስ","ሶ","ሷ","ሸ","ሹ","ሺ","ሻ","ሼ","ሽ",
+            "ሾ","ሿ","ቀ","ቁ","ቂ","ቃ","ቄ","ቅ","ቆ","ቈ","ቊ","ቋ","ቌ","ቍ","በ",
+            "ቡ","ቢ","ባ","ቤ","ብ","ቦ","ቧ","ቨ","ቩ","ቪ","ቫ","ቬ","ቭ","ቮ","ቯ",
+            "ተ","ቱ","ቲ","ታ","ቴ","ት","ቶ","ቷ","ቸ","ቹ","ቺ","ቻ","ቼ","ች","ቾ",
+            "ቿ","ኀ","ኁ","ኂ","ኃ","ኄ","ኅ","ኆ","ኈ","ኊ","ኋ","ኌ","ኍ","ነ","ኑ",
+ 
"ኒ","ና","ኔ","ን","ኖ","ኗ","ኘ","ኙ","ኚ","ኛ","ኜ","ኝ","ኞ","ኟ","አ","ኡ",
+            "ኢ","ኣ","ኤ","እ","ኦ","ኧ","ከ","ኩ","ኪ","ካ","ኬ","ክ","ኮ","ኰ","ኲ",
+            "ኳ","ኴ","ኵ","ኸ","ኹ","ኺ","ኻ","ኼ","ኽ","ኾ","ወ","ዉ","ዊ","ዋ","ዌ",
+            "ው","ዎ","ዐ","ዑ","ዒ","ዓ","ዔ","ዕ","ዖ","ዘ","ዙ","ዚ","ዛ","ዜ","ዝ",
+            "ዞ","ዟ","ዠ","ዡ","ዢ","ዣ","ዤ","ዥ","ዦ","ዧ","የ","ዩ","ዪ","ያ",
+            "ዬ","ይ","ዮ","ደ","ዱ","ዲ","ዳ","ዴ","ድ","ዶ","ዷ","ጀ","ጁ","ጂ","ጃ",
+            "ጄ","ጅ","ጆ","ጇ","ገ","ጉ","ጊ","ጋ","ጌ","ግ","ጎ","ጐ","ጒ","ጓ","ጔ",
+            "ጕ","ጠ","ጡ","ጢ","ጣ","ጤ","ጥ","ጦ","ጧ","ጨ","ጩ","ጪ","ጫ","ጬ",
+            "ጭ","ጮ","ጯ","ጰ","ጱ","ጲ","ጳ","ጴ","ጵ","ጶ","ጷ","ጸ","ጹ","ጺ","ጻ",
+ 
"ጼ","ጽ","ጾ","ጿ","ፀ","ፁ","ፂ","ፃ","ፄ","ፅ","ፆ","ፈ","ፉ","ፊ","ፋ","ፌ",
+            "ፍ","ፎ","ፏ","ፐ","ፑ","ፒ","ፓ","ፔ","ፕ","ፖ","ፗ"}},
+    {
+        -- Assamese
+        "unicode_as_s3",
+        {"়","অ","আ","ই","ঈ","উ","ঊ","ঋ","এ","ঐ","ও","ঔ","ং ","ঁ ","ঃ ",
+ 
"ক","খ","গ","ঘ","ঙ","চ","ছ","জ","ঝ","ঞ","ট","ঠ","ড","ড়","ঢ","ঢ়",
+            "ণ","ৎ ","ত","থ","দ","ধ","ন","প","ফ","ব","ভ","ম","য","য়","ৰ",
+            "ল","ৱ","শ","ষ","স","হ","ক্ষ ","া","ি","ী","ু","ূ","ৃ","ে","ৈ",
+            "ো","ৌ","্"}},
+
+    {
+        -- Azerbaijani
+        "unicode_az_s3",
+        {"a ","A ","b ","B ","c ","C ","ç ","Ç ","ḉ ","Ḉ ","d ","D ","e ",
+            "E ","ə ","Ə ","f ","F ","g ","G ","ğ ","Ğ ","ģ̆ ","Ģ̆ ","h ",
+            "H ","x ","X ","ẍ ","Ẍ ","ẋ ","Ẋ ","ı ","I ","Í ","Ì ","Ĭ ",
+            "Î ","Ǐ ","Ï ","Ḯ ","Ĩ ","Į ","Ī ","Ỉ ","Ȉ ","Ȋ ","Ị ","Ḭ ",
+            "i ","İ ","Į̇ ","Ị̇ ","Ḭ̇ ","j ","J ","k ","K ","q ","Q ","l ",
+            "L ","m ","M ","n ","N ","o ","O ","ö ","Ö ","ǫ̈ ","Ǫ̈ ","ȫ ",
+            "Ȫ ","ơ̈ ","Ơ̈ ","ợ̈ ","Ợ̈ ","ọ̈ ","Ọ̈ ","p ","P ","r ","R ","s ",
+            "S ","ş ","Ş ","t ","T ","u ","U ","ü ","Ü ","ǘ ","Ǘ ","ǜ ",
+            "Ǜ ","ǚ ","Ǚ ","ų̈ ","Ų̈ ","ǖ ","Ǖ ","ư̈ ","Ư̈ ","ự̈ ","Ự̈ ","ụ̈ ",
+            "Ụ̈ ","ṳ̈ ","Ṳ̈ ","ṷ̈ ","Ṷ̈ ","ṵ̈ ","Ṵ̈ ","v ","V ","y ","Y ","z ",
+            "Z ","Ẉ","w ","W ","ẃ ","Ẃ ","ẁ ","Ẁ ","ŵ ","Ŵ ","ẘ ","ẅ 
","Ẅ ",
+            "ẇ ","Ẇ ","ẉ "}},
+    {
+        -- Belarusian
+        "unicode_be_s3",
+        {"а","А","б","Б","в","ᲀ","В","г","Г","д","ᲁ","Д","дж","дз","е",
+            "Е","ё","Ё","ж","Ж","з","З","і","І","й","Й","к","К","л",
+            "Л","м","М","н","Н","о","ᲂ","О","п","П","р","Р","с","ᲃ",
+            "С","т","Т","у","У","ў","Ў","ф","Ф","х","Х","ц",
+            "Ц","ч","Ч","ш","Ш","ы","Ы","ь","Ь","э","Э","ю","Ю","я","Я"}},
+    {
+        -- Kyrgyz
+        "unicode_ky_s3",
+        {"а","А","б","Б","г","Г","д","ᲁ","Д","е","Е","ё","Ё","ж","Ж",
+ 
"з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","ң","Ң",
+            "о","ᲂ","О","ө","Ө","п","П","р","Р","с","ᲃ","С","т","ᲄ",
+ 
"Т","у","У","ү","Ү","х","Х","ч","Ч","ш","Ш","ъ","ᲆ","Ъ","ы","Ы",
+            "э","Э","ю","Ю","я","Я"}},
+    {
+        -- Kyrgyz (russian codepage)
+        "unicode_ky_s3",
+        {"а","А","б","Б","в","В","г","Г","д","Д","е","Е","ё","Ё","ж","Ж",
+            "з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н",
+            "о","О","п","П","р","Р","с","С","т","Т","у","У","ф","Ф",
+            "х","Х","ц","Ц","ч","Ч","ш","Ш","щ","Щ","ъ","Ъ","ы","Ы",
+            "ь","Ь","э","Э","ю","Ю","я","Я"}},
+    {
+        -- German (umlaut as 'ae', 'oe', 'ue')
+        "unicode_de__phonebook_s3",
+        {"a","A","ä","ǟ","Ǟ","ą̈","Ą̈","ạ̈","Ạ̈","ḁ̈","Ḁ̈","Ä ","b","B","c","C",
+            "d","D","e","E","f","F","g","G","h","H","i","I","j","J",
+            "k","K","l","L","m","M","n","N","o","O","ȫ","Ȫ","ǫ̈","Ǫ̈",
+            "ơ̈","Ơ̈","ợ̈","Ợ̈","ọ̈","Ọ̈","ö ","Ö ","p","P","q","Q","r","R",
+            "s","S","ss","ß","t","T","u","U","ǘ","Ǘ","ǜ","Ǜ","ǚ","Ǚ",
+            "ǖ","Ǖ","ų̈","Ų̈","ư̈","Ư̈","ự̈","Ự̈","ụ̈","Ụ̈","ṳ̈","Ṳ̈","ṷ̈","Ṷ̈",
+            "ṵ̈","Ṵ̈","ü ","Ü ","v","V","w","W","x","X","y","Y","z","Z"}},
+    {
+        -- Hebrew
+        "unicode_he_s3",
+        {"׳","״","א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ",
+            "ך","ל","מ","ם","נ","ן","ס","ע","פ","ף","צ","ץ",
+            "ק","ר","ש","ת"} },
+    {
+        -- Japanese
+        "unicode_ja_s3",
+        {"幸","広","庚","康","弘","恒","慌","抗","拘","控","攻","港",
+            "溝","甲","皇","硬","稿"}}
+}
+
+for _, test_entry in ipairs(collation_entries) do
+    -- create title
+    local extendex_prefix = string.format("%s1.%s.", prefix, test_entry[1])
+
+    test:do_execsql_test(
+        extendex_prefix.."create_table",
+        string.format("create table t1(a char(5) collate \"%s\" primary 
key);", test_entry[1]),
+        {})
+    test:do_test(
+        extendex_prefix.."insert_values",
+        function()
+            return insert_into_table("t1", test_entry[2])
+        end, {})
+    test:do_execsql_test(
+        extendex_prefix.."select",
+        string.format("select a from t1 order by a"),
+        test_entry[2])
+    test:do_execsql_test(
+        extendex_prefix.."drop_table",
+        "drop table t1",
+        {})
+end
+
+test:finish_test()
-- 
2.17.1

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

end of thread, other threads:[~2019-03-20 15:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-05 11:44 [tarantool-patches] [PATCH v4] Feature request for a new collation Stanislav Zudin
2019-03-05 14:40 ` Vladimir Davydov
2019-03-06  6:32   ` Stanislav Zudin
2019-03-06  8:10     ` Konstantin Osipov
2019-03-05 15:41 ` [tarantool-patches] " Konstantin Osipov
2019-03-06  6:36   ` Stanislav Zudin
2019-03-06  8:11     ` Konstantin Osipov
2019-03-06  8:23       ` Stanislav Zudin
2019-03-06  9:48         ` Konstantin Osipov
2019-03-20 15:53           ` Stanislav Zudin

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