From cfd34fe23216c0bbbddb871849d1607398e14739 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Aug 2007 05:35:20 -0400 Subject: [PATCH] Bug#27562: ascii.xml invalid? Two character mappings were way off (backtick and tilde were "E" and "Y"!), and three others were slightly rotated. The first would cause collisions, and the latter was probably benign. Now, assign the character mappings exactly to their normal values. sql/share/charsets/ascii.xml: Change the character mapping for "`" to "`" (was "E") and "[" to "[" (was "\") and "\" to "\" (was "]") and "]" to "]" (was "[") and "~" to "~" (was "Y"). strings/ctype-extra.c: Generated from charsets directory. mysql-test/r/ctype_ascii.result: Add new test file. Test all combinations of printable letter comparisons for similarity. mysql-test/t/ctype_ascii.test: Add new test file. Test all combinations of printable letter comparisons for similarity. --- mysql-test/r/ctype_ascii.result | 177 ++++++++++++++++++++++++++++++++ mysql-test/t/ctype_ascii.test | 13 +++ sql/share/charsets/ascii.xml | 6 +- strings/ctype-extra.c | 6 +- 4 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 mysql-test/r/ctype_ascii.result create mode 100644 mysql-test/t/ctype_ascii.test diff --git a/mysql-test/r/ctype_ascii.result b/mysql-test/r/ctype_ascii.result new file mode 100644 index 00000000000..06362486073 --- /dev/null +++ b/mysql-test/r/ctype_ascii.result @@ -0,0 +1,177 @@ +set names ascii; +select 'e'='`'; +'e'='`' +0 +select 'y'='~'; +'y'='~' +0 +create table t1 (a char(1) character set ascii); +insert into t1 (a) values (' '), ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z'), ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'), ('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'), ('U'), ('V'), ('W'), ('X'), ('Y'), ('Z'), ('!'), ('@'), ('#'), ('$'), ('%'), ('^'), ('&'), ('*'), ('('), (')'), ('_'), ('+'), ('`'), ('~'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'), ('0'), ('['), (']'), ('\\'), ('|'), ('}'), ('{'), ('"'), (':'), (''''), (';'), ('/'), ('.'), (','), ('?'), ('>'), ('<'), ('\n'), ('\t'), ('\a'), ('\f'), ('\v'); +select t1a.a, t1b.a from t1 as t1a, t1 as t1b where t1a.a=t1b.a order by binary t1a.a, binary t1b.a; +a a + + + + + +! ! +" " +# # +$ $ +% % +& & +' ' +( ( +) ) +* * ++ + +, , +. . +/ / +0 0 +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +: : +; ; +< < +> > +? ? +@ @ +A A +A a +A a +B B +B b +C C +C c +D D +D d +E E +E e +F F +F f +F f +G G +G g +H H +H h +I I +I i +J J +J j +K K +K k +L L +L l +M M +M m +N N +N n +O O +O o +P P +P p +Q Q +Q q +R R +R r +S S +S s +T T +T t +U U +U u +V V +V v +V v +W W +W w +X X +X x +Y Y +Y y +Z Z +Z z +[ [ +\ \ +] ] +^ ^ +_ _ +` ` +a A +a A +a a +a a +a a +a a +b B +b b +c C +c c +d D +d d +e E +e e +f F +f F +f f +f f +f f +f f +g G +g g +h H +h h +i I +i i +j J +j j +k K +k k +l L +l l +m M +m m +n N +n n +o O +o o +p P +p p +q Q +q q +r R +r r +s S +s s +t T +t t +u U +u u +v V +v V +v v +v v +v v +v v +w W +w w +x X +x x +y Y +y y +z Z +z z +{ { +| | +} } +~ ~ +drop table t1; +End of 5.0 tests. diff --git a/mysql-test/t/ctype_ascii.test b/mysql-test/t/ctype_ascii.test new file mode 100644 index 00000000000..2a5118c7d34 --- /dev/null +++ b/mysql-test/t/ctype_ascii.test @@ -0,0 +1,13 @@ +# +# Bug #27562: ascii.xml invalid? +# +set names ascii; +select 'e'='`'; +select 'y'='~'; +create table t1 (a char(1) character set ascii); +insert into t1 (a) values (' '), ('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('g'), ('h'), ('i'), ('j'), ('k'), ('l'), ('m'), ('n'), ('o'), ('p'), ('q'), ('r'), ('s'), ('t'), ('u'), ('v'), ('w'), ('x'), ('y'), ('z'), ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J'), ('K'), ('L'), ('M'), ('N'), ('O'), ('P'), ('Q'), ('R'), ('S'), ('T'), ('U'), ('V'), ('W'), ('X'), ('Y'), ('Z'), ('!'), ('@'), ('#'), ('$'), ('%'), ('^'), ('&'), ('*'), ('('), (')'), ('_'), ('+'), ('`'), ('~'), ('1'), ('2'), ('3'), ('4'), ('5'), ('6'), ('7'), ('8'), ('9'), ('0'), ('['), (']'), ('\\'), ('|'), ('}'), ('{'), ('"'), (':'), (''''), (';'), ('/'), ('.'), (','), ('?'), ('>'), ('<'), ('\n'), ('\t'), ('\a'), ('\f'), ('\v'); +select t1a.a, t1b.a from t1 as t1a, t1 as t1b where t1a.a=t1b.a order by binary t1a.a, binary t1b.a; +drop table t1; + +# +--echo End of 5.0 tests. diff --git a/sql/share/charsets/ascii.xml b/sql/share/charsets/ascii.xml index 068fb84eeae..f4fb79ac632 100644 --- a/sql/share/charsets/ascii.xml +++ b/sql/share/charsets/ascii.xml @@ -117,9 +117,9 @@ 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 5C 5D 5B 5E 5F - 45 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 59 7F + 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F + 60 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F + 50 51 52 53 54 55 56 57 58 59 5A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF diff --git a/strings/ctype-extra.c b/strings/ctype-extra.c index bf45b5b5d75..384db5afa71 100644 --- a/strings/ctype-extra.c +++ b/strings/ctype-extra.c @@ -894,9 +894,9 @@ uchar sort_order_ascii_general_ci[] = { 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5C,0x5D,0x5B,0x5E,0x5F, -0x45,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, -0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x59,0x7F, +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, +0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, +0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x7B,0x7C,0x7D,0x7E,0x7F, 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,