polardbxengine/plugin/polarx_rpc/tests/driver/mysqlx_charset.cc

290 lines
11 KiB
C++

/*
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2.0,
* as published by the Free Software Foundation.
*
* This program is also distributed with certain software (including
* but not limited to OpenSSL) that is licensed under separate terms,
* as designated in a particular file or component or in included license
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have included with MySQL.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License, version 2.0, for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "mysqlx_charset.h"
namespace xcl {
const Charset::Charset_entry Charset::m_charsets_info[] = {
/* The list is taken from protocol/mysqlx-protocol-xplugin.rst */
{1, "big5", "big5_chinese_ci"},
{2, "latin2", "latin2_czech_cs"},
{3, "dec8", "dec8_swedish_ci"},
{4, "cp850", "cp850_general_ci"},
{5, "latin1", "latin1_german1_ci"},
{6, "hp8", "hp8_english_ci"},
{7, "koi8r", "koi8r_general_ci"},
{8, "latin1", "latin1_swedish_ci"},
{9, "latin2", "latin2_general_ci"},
{10, "swe7", "swe7_swedish_ci"},
{11, "ascii", "ascii_general_ci"},
{12, "ujis", "ujis_japanese_ci"},
{13, "sjis", "sjis_japanese_ci"},
{14, "cp1251", "cp1251_bulgarian_ci"},
{15, "latin1", "latin1_danish_ci"},
{16, "hebrew", "hebrew_general_ci"},
{18, "tis620", "tis620_thai_ci"},
{19, "euckr", "euckr_korean_ci"},
{20, "latin7", "latin7_estonian_cs"},
{21, "latin2", "latin2_hungarian_ci"},
{22, "koi8u", "koi8u_general_ci"},
{23, "cp1251", "cp1251_ukrainian_ci"},
{24, "gb2312", "gb2312_chinese_ci"},
{25, "greek", "greek_general_ci"},
{26, "cp1250", "cp1250_general_ci"},
{27, "latin2", "latin2_croatian_ci"},
{28, "gbk", "gbk_chinese_ci"},
{29, "cp1257", "cp1257_lithuanian_ci"},
{30, "latin5", "latin5_turkish_ci"},
{31, "latin1", "latin1_german2_ci"},
{32, "armscii8", "armscii8_general_ci"},
{33, "utf8", "utf8_general_ci"},
{34, "cp1250", "cp1250_czech_cs"},
{35, "ucs2", "ucs2_general_ci"},
{36, "cp866", "cp866_general_ci"},
{37, "keybcs2", "keybcs2_general_ci"},
{38, "macce", "macce_general_ci"},
{39, "macroman", "macroman_general_ci"},
{40, "cp852", "cp852_general_ci"},
{41, "latin7", "latin7_general_ci"},
{42, "latin7", "latin7_general_cs"},
{43, "macce", "macce_bin"},
{44, "cp1250", "cp1250_croatian_ci"},
{45, "utf8mb4", "utf8mb4_general_ci"},
{46, "utf8mb4", "utf8mb4_bin"},
{47, "latin1", "latin1_bin"},
{48, "latin1", "latin1_general_ci"},
{49, "latin1", "latin1_general_cs"},
{50, "cp1251", "cp1251_bin"},
{51, "cp1251", "cp1251_general_ci"},
{52, "cp1251", "cp1251_general_cs"},
{53, "macroman", "macroman_bin"},
{54, "utf16", "utf16_general_ci"},
{55, "utf16", "utf16_bin"},
{56, "utf16le", "utf16le_general_ci"},
{57, "cp1256", "cp1256_general_ci"},
{58, "cp1257", "cp1257_bin"},
{59, "cp1257", "cp1257_general_ci"},
{60, "utf32", "utf32_general_ci"},
{61, "utf32", "utf32_bin"},
{62, "utf16le", "utf16le_bin"},
{63, "binary", "binary"},
{64, "armscii8", "armscii8_bin"},
{65, "ascii", "ascii_bin"},
{66, "cp1250", "cp1250_bin"},
{67, "cp1256", "cp1256_bin"},
{68, "cp866", "cp866_bin"},
{69, "dec8", "dec8_bin"},
{70, "greek", "greek_bin"},
{71, "hebrew", "hebrew_bin"},
{72, "hp8", "hp8_bin"},
{73, "keybcs2", "keybcs2_bin"},
{74, "koi8r", "koi8r_bin"},
{75, "koi8u", "koi8u_bin"},
{77, "latin2", "latin2_bin"},
{78, "latin5", "latin5_bin"},
{79, "latin7", "latin7_bin"},
{80, "cp850", "cp850_bin"},
{81, "cp852", "cp852_bin"},
{82, "swe7", "swe7_bin"},
{83, "utf8", "utf8_bin"},
{84, "big5", "big5_bin"},
{85, "euckr", "euckr_bin"},
{86, "gb2312", "gb2312_bin"},
{87, "gbk", "gbk_bin"},
{88, "sjis", "sjis_bin"},
{89, "tis620", "tis620_bin"},
{90, "ucs2", "ucs2_bin"},
{91, "ujis", "ujis_bin"},
{92, "geostd8", "geostd8_general_ci"},
{93, "geostd8", "geostd8_bin"},
{94, "latin1", "latin1_spanish_ci"},
{95, "cp932", "cp932_japanese_ci"},
{96, "cp932", "cp932_bin"},
{97, "eucjpms", "eucjpms_japanese_ci"},
{98, "eucjpms", "eucjpms_bin"},
{99, "cp1250", "cp1250_polish_ci"},
{101, "utf16", "utf16_unicode_ci"},
{102, "utf16", "utf16_icelandic_ci"},
{103, "utf16", "utf16_latvian_ci"},
{104, "utf16", "utf16_romanian_ci"},
{105, "utf16", "utf16_slovenian_ci"},
{106, "utf16", "utf16_polish_ci"},
{107, "utf16", "utf16_estonian_ci"},
{108, "utf16", "utf16_spanish_ci"},
{109, "utf16", "utf16_swedish_ci"},
{110, "utf16", "utf16_turkish_ci"},
{111, "utf16", "utf16_czech_ci"},
{112, "utf16", "utf16_danish_ci"},
{113, "utf16", "utf16_lithuanian_ci"},
{114, "utf16", "utf16_slovak_ci"},
{115, "utf16", "utf16_spanish2_ci"},
{116, "utf16", "utf16_roman_ci"},
{117, "utf16", "utf16_persian_ci"},
{118, "utf16", "utf16_esperanto_ci"},
{119, "utf16", "utf16_hungarian_ci"},
{120, "utf16", "utf16_sinhala_ci"},
{121, "utf16", "utf16_german2_ci"},
{122, "utf16", "utf16_croatian_ci"},
{123, "utf16", "utf16_unicode_520_ci"},
{124, "utf16", "utf16_vietnamese_ci"},
{128, "ucs2", "ucs2_unicode_ci"},
{129, "ucs2", "ucs2_icelandic_ci"},
{130, "ucs2", "ucs2_latvian_ci"},
{131, "ucs2", "ucs2_romanian_ci"},
{132, "ucs2", "ucs2_slovenian_ci"},
{133, "ucs2", "ucs2_polish_ci"},
{134, "ucs2", "ucs2_estonian_ci"},
{135, "ucs2", "ucs2_spanish_ci"},
{136, "ucs2", "ucs2_swedish_ci"},
{137, "ucs2", "ucs2_turkish_ci"},
{138, "ucs2", "ucs2_czech_ci"},
{139, "ucs2", "ucs2_danish_ci"},
{140, "ucs2", "ucs2_lithuanian_ci"},
{141, "ucs2", "ucs2_slovak_ci"},
{142, "ucs2", "ucs2_spanish2_ci"},
{143, "ucs2", "ucs2_roman_ci"},
{144, "ucs2", "ucs2_persian_ci"},
{145, "ucs2", "ucs2_esperanto_ci"},
{146, "ucs2", "ucs2_hungarian_ci"},
{147, "ucs2", "ucs2_sinhala_ci"},
{148, "ucs2", "ucs2_german2_ci"},
{149, "ucs2", "ucs2_croatian_ci"},
{150, "ucs2", "ucs2_unicode_520_ci"},
{151, "ucs2", "ucs2_vietnamese_ci"},
{159, "ucs2", "ucs2_general_mysql500_ci"},
{160, "utf32", "utf32_unicode_ci"},
{161, "utf32", "utf32_icelandic_ci"},
{162, "utf32", "utf32_latvian_ci"},
{163, "utf32", "utf32_romanian_ci"},
{164, "utf32", "utf32_slovenian_ci"},
{165, "utf32", "utf32_polish_ci"},
{166, "utf32", "utf32_estonian_ci"},
{167, "utf32", "utf32_spanish_ci"},
{168, "utf32", "utf32_swedish_ci"},
{169, "utf32", "utf32_turkish_ci"},
{170, "utf32", "utf32_czech_ci"},
{171, "utf32", "utf32_danish_ci"},
{172, "utf32", "utf32_lithuanian_ci"},
{173, "utf32", "utf32_slovak_ci"},
{174, "utf32", "utf32_spanish2_ci"},
{175, "utf32", "utf32_roman_ci"},
{176, "utf32", "utf32_persian_ci"},
{177, "utf32", "utf32_esperanto_ci"},
{178, "utf32", "utf32_hungarian_ci"},
{179, "utf32", "utf32_sinhala_ci"},
{180, "utf32", "utf32_german2_ci"},
{181, "utf32", "utf32_croatian_ci"},
{182, "utf32", "utf32_unicode_520_ci"},
{183, "utf32", "utf32_vietnamese_ci"},
{192, "utf8", "utf8_unicode_ci"},
{193, "utf8", "utf8_icelandic_ci"},
{194, "utf8", "utf8_latvian_ci"},
{195, "utf8", "utf8_romanian_ci"},
{196, "utf8", "utf8_slovenian_ci"},
{197, "utf8", "utf8_polish_ci"},
{198, "utf8", "utf8_estonian_ci"},
{199, "utf8", "utf8_spanish_ci"},
{200, "utf8", "utf8_swedish_ci"},
{201, "utf8", "utf8_turkish_ci"},
{202, "utf8", "utf8_czech_ci"},
{203, "utf8", "utf8_danish_ci"},
{204, "utf8", "utf8_lithuanian_ci"},
{205, "utf8", "utf8_slovak_ci"},
{206, "utf8", "utf8_spanish2_ci"},
{207, "utf8", "utf8_roman_ci"},
{208, "utf8", "utf8_persian_ci"},
{209, "utf8", "utf8_esperanto_ci"},
{210, "utf8", "utf8_hungarian_ci"},
{211, "utf8", "utf8_sinhala_ci"},
{212, "utf8", "utf8_german2_ci"},
{213, "utf8", "utf8_croatian_ci"},
{214, "utf8", "utf8_unicode_520_ci"},
{215, "utf8", "utf8_vietnamese_ci"},
{223, "utf8", "utf8_general_mysql500_ci"},
{224, "utf8mb4", "utf8mb4_unicode_ci"},
{225, "utf8mb4", "utf8mb4_icelandic_ci"},
{226, "utf8mb4", "utf8mb4_latvian_ci"},
{227, "utf8mb4", "utf8mb4_romanian_ci"},
{228, "utf8mb4", "utf8mb4_slovenian_ci"},
{229, "utf8mb4", "utf8mb4_polish_ci"},
{230, "utf8mb4", "utf8mb4_estonian_ci"},
{231, "utf8mb4", "utf8mb4_spanish_ci"},
{232, "utf8mb4", "utf8mb4_swedish_ci"},
{233, "utf8mb4", "utf8mb4_turkish_ci"},
{234, "utf8mb4", "utf8mb4_czech_ci"},
{235, "utf8mb4", "utf8mb4_danish_ci"},
{236, "utf8mb4", "utf8mb4_lithuanian_ci"},
{237, "utf8mb4", "utf8mb4_slovak_ci"},
{238, "utf8mb4", "utf8mb4_spanish2_ci"},
{239, "utf8mb4", "utf8mb4_roman_ci"},
{240, "utf8mb4", "utf8mb4_persian_ci"},
{241, "utf8mb4", "utf8mb4_esperanto_ci"},
{242, "utf8mb4", "utf8mb4_hungarian_ci"},
{243, "utf8mb4", "utf8mb4_sinhala_ci"},
{244, "utf8mb4", "utf8mb4_german2_ci"},
{245, "utf8mb4", "utf8mb4_croatian_ci"},
{246, "utf8mb4", "utf8mb4_unicode_520_ci"},
{247, "utf8mb4", "utf8mb4_vietnamese_ci"},
{248, "gb18030", "gb18030_chinese_ci"},
{249, "gb18030", "gb18030_bin"},
{250, "gb18030", "gb18030_unicode_520_ci"}};
std::string Charset::charset_name_from_id(uint32_t id) {
return field_from_id(id, &Charset_entry::name);
}
std::string Charset::collation_name_from_id(uint32_t id) {
return field_from_id(id, &Charset_entry::collation);
}
std::string Charset::field_from_id(uint32_t id,
std::string Charset_entry::*field) {
std::string result = (id == 0) ? "" : "?";
for (const auto &charset_info : m_charsets_info) {
if (charset_info.id == id) {
result = charset_info.*field;
break;
}
}
return result;
}
uint32_t Charset::id_from_collation_name(const std::string &collation_name) {
uint32_t result = 0;
for (const auto &charset_info : m_charsets_info) {
if (charset_info.collation == collation_name) {
result = charset_info.id;
break;
}
}
return result;
}
} // namespace xcl