From 72481997837c1255f4ef0f831bb252b57057f828 Mon Sep 17 00:00:00 2001
From: Matthias Leich <mleich@mysql.com>
Date: Wed, 9 Jul 2008 13:22:07 +0200
Subject: [PATCH] 1. Fix for Bug#37160    "funcs_2: The tests do not check if
 optional character                sets exist." 2. Minor cleanup

---
 .../suite/funcs_2/charset/charset_master.test | 90 ++++++++++++++++++-
 .../suite/funcs_2/t/innodb_charset.test       | 12 +--
 .../suite/funcs_2/t/memory_charset.test       | 12 +--
 .../suite/funcs_2/t/myisam_charset.test       | 12 +--
 mysql-test/suite/funcs_2/t/ndb_charset.test   | 12 +--
 5 files changed, 114 insertions(+), 24 deletions(-)

diff --git a/mysql-test/suite/funcs_2/charset/charset_master.test b/mysql-test/suite/funcs_2/charset/charset_master.test
index a241e62f0f4..09e24e2c246 100644
--- a/mysql-test/suite/funcs_2/charset/charset_master.test
+++ b/mysql-test/suite/funcs_2/charset/charset_master.test
@@ -1,14 +1,96 @@
 #################################################################################
-# Author:  Serge Kozlov								#
-# Date:    09/21/2005								#
-# Purpose: used by ../t/*_charset.test						#
-# Require: set $engine_type= [NDB,MyISAM,InnoDB,etc] before calling		#
+# Author:  Serge Kozlov                                                         #
+# Date:    2005-09-21                                                           #
+# Purpose: used by ../t/*_charset.test                                          #
+# Require: set $engine_type= [NDB,MyISAM,InnoDB,etc] before calling             #
+#                                                                               #
+# Last modification:  Matthias Leich                                            #
+# Date:    2008-07-02                                                           #
+# Purpose: Fix Bug#37160 funcs_2: The tests do not check if optional character  #
+#                                 sets exist.                                   #
+#          Add checking of prerequisites + minor cleanup                        #
 #################################################################################
 
 #
 #
 #
 
+# Check that all character sets needed are available
+# Note(mleich):
+#    It is intentional that the common solution with
+#    "--source include/have_<character set>.inc"
+#    is not applied.
+#    - We currently do not have such a prerequisite test for every character set
+#      /collation needed.
+#    - There is also no real value in mentioning the first missing character set
+#      /collation within the "skip message" because it is most probably only
+#      one of many.
+#      
+# Hint: 5 character_set_names per source line if possible
+if (`SELECT COUNT(*) <> 36 FROM information_schema.character_sets
+    WHERE CHARACTER_SET_NAME IN (
+    'armscii8', 'ascii'  , 'big5'   , 'binary' , 'cp1250',
+    'cp1251'  , 'cp1256' , 'cp1257' , 'cp850'  , 'cp852' ,
+    'cp866'   , 'cp932'  , 'dec8'   , 'eucjpms', 'euckr' ,
+    'gb2312'  , 'gbk'    , 'geostd8', 'greek'  , 'hebrew',
+    'hp8'     , 'keybcs2', 'koi8r'  , 'koi8u'  , 'latin1',
+    'latin2'  , 'latin5' , 'latin7' , 'macce'  , 'macroman',
+    'sjis'    , 'swe7'   , 'tis620' , 'ucs2'   , 'ujis',
+    'utf8'
+    )`)
+{
+   --skip Not all character sets required for this test are present
+}
+# Check that all collations needed are available
+# Hint: 4 collation_names per source line if possible
+if (`SELECT COUNT(*) <> 123 FROM information_schema.collations
+WHERE collation_name IN (
+'armscii8_bin', 'armscii8_general_ci', 'ascii_bin', 'ascii_general_ci',
+'big5_bin', 'big5_chinese_ci', 'cp1250_bin', 'cp1250_croatian_ci',
+'cp1250_czech_cs', 'cp1250_general_ci', 'cp1251_bin', 'cp1251_bulgarian_ci',
+'cp1251_general_ci', 'cp1251_general_cs', 'cp1251_ukrainian_ci', 'cp1256_bin',
+'cp1256_general_ci', 'cp1257_bin', 'cp1257_general_ci', 'cp1257_lithuanian_ci',
+'cp850_bin', 'cp850_general_ci', 'cp852_bin', 'cp852_general_ci',
+'cp866_bin', 'cp866_general_ci', 'cp932_bin', 'cp932_japanese_ci',
+'dec8_bin', 'dec8_swedish_ci', 'eucjpms_bin', 'eucjpms_japanese_ci',
+'euckr_bin', 'euckr_korean_ci', 'gb2312_bin', 'gb2312_chinese_ci',
+'gbk_bin', 'gbk_chinese_ci', 'geostd8_bin', 'geostd8_general_ci',
+'greek_bin', 'greek_general_ci', 'hebrew_bin', 'hebrew_general_ci',
+'hp8_bin', 'hp8_english_ci', 'keybcs2_bin', 'keybcs2_general_ci',
+'koi8r_bin', 'koi8r_general_ci', 'koi8u_bin', 'koi8u_general_ci',
+'latin1_bin', 'latin1_danish_ci', 'latin1_general_ci', 'latin1_general_cs',
+'latin1_german1_ci', 'latin1_german2_ci', 'latin1_spanish_ci', 'latin1_swedish_ci',
+'latin2_bin', 'latin2_croatian_ci', 'latin2_czech_cs', 'latin2_general_ci',
+'latin2_hungarian_ci', 'latin5_bin', 'latin5_turkish_ci', 'latin7_bin',
+'latin7_estonian_cs', 'latin7_general_ci', 'latin7_general_cs', 'macce_bin',
+'macce_general_ci', 'macroman_bin', 'macroman_general_ci', 'sjis_bin',
+'sjis_japanese_ci', 'swe7_bin', 'swe7_swedish_ci', 'tis620_bin',
+'tis620_thai_ci', 'ucs2_bin', 'ucs2_czech_ci', 'ucs2_danish_ci',
+'ucs2_estonian_ci', 'ucs2_general_ci', 'ucs2_hungarian_ci', 'ucs2_icelandic_ci',
+'ucs2_latvian_ci', 'ucs2_lithuanian_ci', 'ucs2_persian_ci', 'ucs2_polish_ci',
+'ucs2_roman_ci', 'ucs2_romanian_ci', 'ucs2_slovak_ci', 'ucs2_slovenian_ci',
+'ucs2_spanish2_ci', 'ucs2_spanish_ci', 'ucs2_swedish_ci', 'ucs2_turkish_ci',
+'ucs2_unicode_ci', 'ujis_bin', 'ujis_japanese_ci', 'utf8_bin',
+'utf8_czech_ci', 'utf8_danish_ci', 'utf8_estonian_ci', 'utf8_general_ci',
+'utf8_hungarian_ci', 'utf8_icelandic_ci', 'utf8_latvian_ci', 'utf8_lithuanian_ci',
+'utf8_persian_ci', 'utf8_polish_ci', 'utf8_roman_ci', 'utf8_romanian_ci',
+'utf8_slovak_ci', 'utf8_slovenian_ci', 'utf8_spanish2_ci', 'utf8_spanish_ci',
+'utf8_swedish_ci', 'utf8_turkish_ci', 'utf8_unicode_ci'
+)`)
+{
+   --skip Not all collations required for this test are present
+}
+
+################################
+let $check_std_csets= 1;
+let $check_ucs2_csets= 1;
+let $check_utf8_csets= 1;
+
+#
+# Check all charsets/collation combinations
+#
+
+################################
 let $check_std_csets= 1;
 let $check_ucs2_csets= 1;
 let $check_utf8_csets= 1;
diff --git a/mysql-test/suite/funcs_2/t/innodb_charset.test b/mysql-test/suite/funcs_2/t/innodb_charset.test
index 5d4a72cfa2e..b77bacfc01c 100644
--- a/mysql-test/suite/funcs_2/t/innodb_charset.test
+++ b/mysql-test/suite/funcs_2/t/innodb_charset.test
@@ -1,8 +1,10 @@
-#################################################################################
-# Author:  Serge Kozlov								#
-# Date:    09/21/2005								#
-# Purpose: Testing the charsets for InnoDB engine				#
-#################################################################################
+################################################################################
+# Author:  Serge Kozlov                                                        #
+# Date:    2005-09-21                                                          #
+# Purpose: Testing the charsets for InnoDB engine                              #
+#                                                                              #
+# Checking of other prerequisites is in charset_master.test                    #
+################################################################################
 
 --source include/have_innodb.inc
 
diff --git a/mysql-test/suite/funcs_2/t/memory_charset.test b/mysql-test/suite/funcs_2/t/memory_charset.test
index ce9b80462f1..cc878652bfa 100644
--- a/mysql-test/suite/funcs_2/t/memory_charset.test
+++ b/mysql-test/suite/funcs_2/t/memory_charset.test
@@ -1,8 +1,10 @@
-#################################################################################
-# Author:  Serge Kozlov								#
-# Date:    09/21/2005								#
-# Purpose: Testing the charsets for Memory engine				#
-#################################################################################
+################################################################################
+# Author:  Serge Kozlov                                                        #
+# Date:    2005-09-21                                                          #
+# Purpose: Testing the charsets for Memory engine                              #
+#                                                                              #
+# Checking of other prerequisites is in charset_master.test                    #
+################################################################################
 
 let $engine_type= Memory;
 --source suite/funcs_2/charset/charset_master.test
diff --git a/mysql-test/suite/funcs_2/t/myisam_charset.test b/mysql-test/suite/funcs_2/t/myisam_charset.test
index b3f862c89de..e9a62e1060b 100644
--- a/mysql-test/suite/funcs_2/t/myisam_charset.test
+++ b/mysql-test/suite/funcs_2/t/myisam_charset.test
@@ -1,8 +1,10 @@
-#################################################################################
-# Author:  Serge Kozlov								#
-# Date:    09/21/2005								#
-# Purpose: Testing the charsets for MyISAM engine				#
-#################################################################################
+################################################################################
+# Author:  Serge Kozlov                                                        #
+# Date:    2005-09-21                                                          #
+# Purpose: Testing the charsets for MyISAM engine                              #
+#                                                                              #
+# Checking of other prerequisites is in charset_master.test                    #
+################################################################################
 
 let $engine_type= MyISAM;
 --source suite/funcs_2/charset/charset_master.test
diff --git a/mysql-test/suite/funcs_2/t/ndb_charset.test b/mysql-test/suite/funcs_2/t/ndb_charset.test
index 72ebbad43d7..68665cc1ae5 100644
--- a/mysql-test/suite/funcs_2/t/ndb_charset.test
+++ b/mysql-test/suite/funcs_2/t/ndb_charset.test
@@ -1,8 +1,10 @@
-#################################################################################
-# Author:  Serge Kozlov								#
-# Date:    09/21/2005								#
-# Purpose: Testing the charsets for NDB engine					#
-#################################################################################
+################################################################################
+# Author:  Serge Kozlov                                                        #
+# Date:    09/21/2005                                                          #
+# Purpose: Testing the charsets for NDB engine                                 #
+#                                                                              #
+# Checking of other prerequisites is in charset_master.test                    #
+################################################################################
 
 --source include/have_ndb.inc
 --source include/not_embedded.inc