1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

Added dyamic column api

Added character set conversion
This commit is contained in:
holzboote@googlemail.com
2013-08-23 18:35:07 +02:00
parent a6fd66698f
commit 87150c736e
19 changed files with 7477 additions and 404 deletions

View File

@@ -140,6 +140,10 @@ IF(WITH_SQLITE)
ADD_DEFINITIONS(-DHAVE_SQLITE) ADD_DEFINITIONS(-DHAVE_SQLITE)
ENDIF() ENDIF()
IF(NOT WIN32)
INCLUDE(cmake/FindIconv.cmake)
ENDIF()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/mysql_version.h.in CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/mysql_version.h.in
${CMAKE_CURRENT_BINARY_DIR}/include/mysql_version.h) ${CMAKE_CURRENT_BINARY_DIR}/include/mysql_version.h)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h.in CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/include/my_config.h.in

52
cmake/FindIconv.cmake Normal file
View File

@@ -0,0 +1,52 @@
# Copyright (c) 2010 Michael Bell <michael.bell@web.de>
if (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
# Already in cache, be silent
set(ICONV_FIND_QUIETLY TRUE)
endif (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
find_path(ICONV_INCLUDE_DIR iconv.h)
find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
if (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
set (ICONV_FOUND TRUE)
endif (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES)
set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES})
if (ICONV_FOUND)
include(CheckCSourceCompiles)
CHECK_C_SOURCE_COMPILES("
#include <iconv.h>
int main(){
iconv_t conv = 0;
const char* in = 0;
size_t ilen = 0;
char* out = 0;
size_t olen = 0;
iconv(conv, &in, &ilen, &out, &olen);
return 0;
}
" ICONV_SECOND_ARGUMENT_IS_CONST )
endif (ICONV_FOUND)
set (CMAKE_REQUIRED_INCLUDES)
set (CMAKE_REQUIRED_LIBRARIES)
if (ICONV_FOUND)
if (NOT ICONV_FIND_QUIETLY)
message (STATUS "Found Iconv: ${ICONV_LIBRARIES}")
endif (NOT ICONV_FIND_QUIETLY)
else (ICONV_FOUND)
if (Iconv_FIND_REQUIRED)
message (FATAL_ERROR "Could not find Iconv")
endif (Iconv_FIND_REQUIRED)
endif (ICONV_FOUND)
MARK_AS_ADVANCED(
ICONV_INCLUDE_DIR
ICONV_LIBRARIES
ICONV_SECOND_ARGUMENT_IS_CONST
)

View File

@@ -213,9 +213,9 @@ inline double ulonglong2double(ulonglong value)
#define HAVE_STRPBRK #define HAVE_STRPBRK
#define HAVE_STRSTR #define HAVE_STRSTR
#ifdef NOT_USED #ifdef WIN32
#define HAVE_SNPRINTF /* Gave link error */ #define HAVE_SNPRINTF /* Gave link error */
#define _snprintf snprintf #define snprintf _snprintf
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@@ -42,8 +42,8 @@ typedef struct charset_info_st
uint state; uint state;
char *csname; char *csname;
char *name; char *name;
char *comment;
char *dir; char *dir;
char *encoding;
uint char_minlen; uint char_minlen;
uint char_maxlen; uint char_maxlen;
uint (*mb_charlen)(uint c); uint (*mb_charlen)(uint c);
@@ -52,6 +52,9 @@ typedef struct charset_info_st
extern const CHARSET_INFO compiled_charsets[]; extern const CHARSET_INFO compiled_charsets[];
extern CHARSET_INFO *default_charset_info; extern CHARSET_INFO *default_charset_info;
extern CHARSET_INFO *my_charset_bin;
extern CHARSET_INFO *my_charset_latin1;
extern CHARSET_INFO *my_charset_utf8_general_ci;
CHARSET_INFO *find_compiled_charset(uint cs_number); CHARSET_INFO *find_compiled_charset(uint cs_number);
CHARSET_INFO *find_compiled_charset_by_name(const char *name); CHARSET_INFO *find_compiled_charset_by_name(const char *name);

221
include/ma_dyncol.h Normal file
View File

@@ -0,0 +1,221 @@
/* Copyright (c) 2011, Monty Program Ab
Copyright (c) 2011, Oleksandr Byelkin
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must the following disclaimer in
the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
#ifndef ma_dyncol_h
#define ma_dyncol_h
#ifndef LIBMARIADB
#include <decimal.h>
#include <my_decimal_limits.h>
#endif
#include <mysql.h>
/*
Limits of implementation
*/
#define MAX_TOTAL_NAME_LENGTH 65535
#define MAX_NAME_LENGTH (MAX_TOTAL_NAME_LENGTH/4)
/* NO and OK is the same used just to show semantics */
#define ER_DYNCOL_NO ER_DYNCOL_OK
enum enum_dyncol_func_result
{
ER_DYNCOL_OK= 0,
ER_DYNCOL_YES= 1, /* For functions returning 0/1 */
ER_DYNCOL_FORMAT= -1, /* Wrong format of the encoded string */
ER_DYNCOL_LIMIT= -2, /* Some limit reached */
ER_DYNCOL_RESOURCE= -3, /* Out of resourses */
ER_DYNCOL_DATA= -4, /* Incorrect input data */
ER_DYNCOL_UNKNOWN_CHARSET= -5, /* Unknown character set */
ER_DYNCOL_TRUNCATED= 2 /* OK, but data was truncated */
};
typedef DYNAMIC_STRING DYNAMIC_COLUMN;
enum enum_dynamic_column_type
{
DYN_COL_NULL= 0,
DYN_COL_INT,
DYN_COL_UINT,
DYN_COL_DOUBLE,
DYN_COL_STRING,
DYN_COL_DECIMAL,
DYN_COL_DATETIME,
DYN_COL_DATE,
DYN_COL_TIME,
DYN_COL_DYNCOL
};
typedef enum enum_dynamic_column_type DYNAMIC_COLUMN_TYPE;
struct st_dynamic_column_value
{
DYNAMIC_COLUMN_TYPE type;
union
{
long long long_value;
unsigned long long ulong_value;
double double_value;
struct {
MYSQL_LEX_STRING value;
CHARSET_INFO *charset;
} string;
#ifndef LIBMARIADB
struct {
decimal_digit_t buffer[DECIMAL_BUFF_LENGTH];
decimal_t value;
} decimal;
#endif
MYSQL_TIME time_value;
} x;
};
typedef struct st_dynamic_column_value DYNAMIC_COLUMN_VALUE;
#ifdef MADYNCOL_DEPRECATED
enum enum_dyncol_func_result
dynamic_column_create(DYNAMIC_COLUMN *str,
uint column_nr, DYNAMIC_COLUMN_VALUE *value);
enum enum_dyncol_func_result
dynamic_column_create_many(DYNAMIC_COLUMN *str,
uint column_count,
uint *column_numbers,
DYNAMIC_COLUMN_VALUE *values);
enum enum_dyncol_func_result
dynamic_column_update(DYNAMIC_COLUMN *org, uint column_nr,
DYNAMIC_COLUMN_VALUE *value);
enum enum_dyncol_func_result
dynamic_column_update_many(DYNAMIC_COLUMN *str,
uint add_column_count,
uint *column_numbers,
DYNAMIC_COLUMN_VALUE *values);
enum enum_dyncol_func_result
dynamic_column_exists(DYNAMIC_COLUMN *org, uint column_nr);
enum enum_dyncol_func_result
dynamic_column_list(DYNAMIC_COLUMN *org, DYNAMIC_ARRAY *array_of_uint);
enum enum_dyncol_func_result
dynamic_column_get(DYNAMIC_COLUMN *org, uint column_nr,
DYNAMIC_COLUMN_VALUE *store_it_here);
#endif
/* new functions */
enum enum_dyncol_func_result
mariadb_dyncol_create_many(DYNAMIC_COLUMN *str,
uint column_count,
uint *column_numbers,
DYNAMIC_COLUMN_VALUE *values,
my_bool new_string);
enum enum_dyncol_func_result
mariadb_dyncol_create_many_named(DYNAMIC_COLUMN *str,
uint column_count,
MYSQL_LEX_STRING *column_keys,
DYNAMIC_COLUMN_VALUE *values,
my_bool new_string);
enum enum_dyncol_func_result
mariadb_dyncol_update_many(DYNAMIC_COLUMN *str,
uint add_column_count,
uint *column_keys,
DYNAMIC_COLUMN_VALUE *values);
enum enum_dyncol_func_result
mariadb_dyncol_update_many_named(DYNAMIC_COLUMN *str,
uint add_column_count,
MYSQL_LEX_STRING *column_keys,
DYNAMIC_COLUMN_VALUE *values);
enum enum_dyncol_func_result
mariadb_dyncol_exists(DYNAMIC_COLUMN *org, uint column_nr);
enum enum_dyncol_func_result
mariadb_dyncol_exists_named(DYNAMIC_COLUMN *str, MYSQL_LEX_STRING *name);
/* List of not NULL columns */
enum enum_dyncol_func_result
mariadb_dyncol_list(DYNAMIC_COLUMN *str, uint *count, uint **nums);
enum enum_dyncol_func_result
mariadb_dyncol_list_named(DYNAMIC_COLUMN *str, uint *count,
MYSQL_LEX_STRING **names);
/*
if the column do not exists it is NULL
*/
enum enum_dyncol_func_result
mariadb_dyncol_get(DYNAMIC_COLUMN *org, uint column_nr,
DYNAMIC_COLUMN_VALUE *store_it_here);
enum enum_dyncol_func_result
mariadb_dyncol_get_named(DYNAMIC_COLUMN *str, MYSQL_LEX_STRING *name,
DYNAMIC_COLUMN_VALUE *store_it_here);
my_bool mariadb_dyncol_has_names(DYNAMIC_COLUMN *str);
enum enum_dyncol_func_result
mariadb_dyncol_check(DYNAMIC_COLUMN *str);
enum enum_dyncol_func_result
mariadb_dyncol_json(DYNAMIC_COLUMN *str, DYNAMIC_STRING *json);
void mariadb_dyncol_free(DYNAMIC_COLUMN *str);
#define mariadb_dyncol_init(A) memset((A), 0, sizeof(DYNAMIC_COLUMN))
#define dynamic_column_initialize(A) mariadb_dyncol_init((A))
#define dynamic_column_column_free(A) mariadb_dyncol_free((A))
/* conversion of values to 3 base types */
enum enum_dyncol_func_result
mariadb_dyncol_val_str(DYNAMIC_STRING *str, DYNAMIC_COLUMN_VALUE *val,
CHARSET_INFO *cs, my_bool quote);
enum enum_dyncol_func_result
mariadb_dyncol_val_long(longlong *ll, DYNAMIC_COLUMN_VALUE *val);
enum enum_dyncol_func_result
mariadb_dyncol_val_double(double *dbl, DYNAMIC_COLUMN_VALUE *val);
enum enum_dyncol_func_result
mariadb_dyncol_unpack(DYNAMIC_COLUMN *str,
uint *count,
MYSQL_LEX_STRING **names, DYNAMIC_COLUMN_VALUE **vals);
int mariadb_dyncol_column_cmp_named(const MYSQL_LEX_STRING *s1,
const MYSQL_LEX_STRING *s2);
enum enum_dyncol_func_result
mariadb_dyncol_column_count(DYNAMIC_COLUMN *str, uint *column_count);
#define mariadb_dyncol_value_init(V) (V)->type= DYN_COL_NULL
/*
Prepare value for using as decimal
*/
void mariadb_dyncol_prepare_decimal(DYNAMIC_COLUMN_VALUE *value);
#endif

View File

@@ -330,6 +330,14 @@ typedef unsigned short ushort;
#define ASCII_BITS_USED 8 /* Bit char used */ #define ASCII_BITS_USED 8 /* Bit char used */
#define NEAR_F /* No near function handling */ #define NEAR_F /* No near function handling */
struct st_mysql_lex_string
{
char *str;
size_t length;
};
typedef struct st_mysql_lex_string LEX_STRING;
typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
/* Some types that is different between systems */ /* Some types that is different between systems */
typedef int File; /* File descriptor */ typedef int File; /* File descriptor */
@@ -499,6 +507,14 @@ extern double my_atof(const char*);
/* #define sigset(A,B) signal((A),(B)) */ /* #define sigset(A,B) signal((A),(B)) */
#endif #endif
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \
defined(__cplusplus) || !defined(__GNUC__)
#define UNINIT_VAR(x) x= 0
#else
/* GCC specific self-initialization which inhibits the warning. */
#define UNINIT_VAR(x) x= x
#endif
/* Remove some things that mit_thread break or doesn't support */ /* Remove some things that mit_thread break or doesn't support */
#if defined(HAVE_mit_thread) && defined(THREAD) #if defined(HAVE_mit_thread) && defined(THREAD)
#undef HAVE_PREAD #undef HAVE_PREAD
@@ -521,25 +537,20 @@ extern double my_atof(const char*);
#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) #define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL)
#endif #endif
#if SIZEOF_LONG == 4 #define INT_MIN64 (~0x7FFFFFFFFFFFFFFFLL)
#define INT_MIN32 (long) 0x80000000L #define INT_MAX64 0x7FFFFFFFFFFFFFFFLL
#define INT_MAX32 (long) 0x7FFFFFFFL #define INT_MIN32 (~0x7FFFFFFFL)
#define INT_MAX32 0x7FFFFFFFL
#define UINT_MAX32 0xFFFFFFFFL #define UINT_MAX32 0xFFFFFFFFL
#define INT_MIN24 ((long) 0xff800000L) #define INT_MIN24 (~0x007FFFFF)
#define INT_MAX24 0x007fffffL #define INT_MAX24 0x007FFFFF
#define INT_MIN16 ((short int) 0x8000) #define UINT_MAX24 0x00FFFFFF
#define INT_MAX16 0x7FFF #define INT_MIN16 (~0x7FFF)
#define UINT_MAX16 0xFFFF #define INT_MAX16 0x7FFF
#define INT_MIN8 ((char) 0x80) #define UINT_MAX16 0xFFFF
#define INT_MAX8 ((char) 0x7F) #define INT_MIN8 (~0x7F)
#else /* Probably Alpha */ #define INT_MAX8 0x7F
#define INT_MIN32 ((long) (int) 0x80000000) #define UINT_MAX8 0xFF
#define INT_MAX32 ((long) (int) 0x7FFFFFFF)
#define INT_MIN24 ((long) (int) 0xff800000)
#define INT_MAX24 ((long) (int) 0x007fffff)
#define INT_MIN16 ((short int) 0xffff8000)
#define INT_MAX16 ((short int) 0x00007FFF)
#endif
#ifndef ULL #ifndef ULL
#ifdef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG
@@ -549,6 +560,15 @@ extern double my_atof(const char*);
#endif #endif
#endif #endif
#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)
/* First check for ANSI C99 definition: */
#ifdef ULLONG_MAX
#define ULONGLONG_MAX ULLONG_MAX
#else
#define ULONGLONG_MAX ((unsigned long long)(~0ULL))
#endif
#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/
/* From limits.h instead */ /* From limits.h instead */
#ifndef DBL_MIN #ifndef DBL_MIN
#define DBL_MIN 4.94065645841246544e-324 #define DBL_MIN 4.94065645841246544e-324
@@ -638,7 +658,7 @@ typedef long longlong;
#ifndef MAX #ifndef MAX
#define MAX(a,b) (((a) > (b)) ? (a) : (b)) #define MAX(a,b) (((a) > (b)) ? (a) : (b))
#endif #endif
#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1)
#ifdef USE_RAID #ifdef USE_RAID
/* /*
The following is done with a if to not get problems with pre-processors The following is done with a if to not get problems with pre-processors

View File

@@ -272,11 +272,6 @@ typedef struct st_mysql {
void *extension; void *extension;
} MYSQL; } MYSQL;
typedef struct st_mysql_lex_string {
char *str;
size_t length;
} MYSQL_LEX_STRING;
struct st_mysql_options_extention { struct st_mysql_options_extention {
char *plugin_dir; char *plugin_dir;
char *default_auth; char *default_auth;
@@ -319,6 +314,9 @@ typedef struct st_mysql_time
enum enum_mysql_timestamp_type time_type; enum enum_mysql_timestamp_type time_type;
} MYSQL_TIME; } MYSQL_TIME;
#define AUTO_SEC_PART_DIGITS 31
#define SEC_PART_DIGITS 6
typedef struct character_set typedef struct character_set
{ {
unsigned int number; /* character set number */ unsigned int number; /* character set number */

View File

@@ -13,10 +13,12 @@ ENDIF()
ADD_DEFINITIONS(-D ENABLED_LOCAL_INFILE) ADD_DEFINITIONS(-D ENABLED_LOCAL_INFILE)
ADD_DEFINITIONS(-D HAVE_COMPRESS) ADD_DEFINITIONS(-D HAVE_COMPRESS)
ADD_DEFINITIONS(-D LIBMARIADB)
ADD_DEFINITIONS(-D THREAD) ADD_DEFINITIONS(-D THREAD)
SET(LIBMARIADB_SOURCES SET(LIBMARIADB_SOURCES
array.c array.c
ma_dyncol.c
bchange.c bchange.c
bmove.c bmove.c
bmove_upp.c bmove_upp.c
@@ -24,6 +26,7 @@ my_charset.c
violite.c violite.c
net.c net.c
charset.c charset.c
ma_time.c
dbug.c dbug.c
default.c default.c
errmsg.c errmsg.c
@@ -132,13 +135,13 @@ ELSE()
ENDIF() ENDIF()
ADD_LIBRARY(mariadbclient STATIC ${LIBMARIADB_SOURCES}) ADD_LIBRARY(mariadbclient STATIC ${LIBMARIADB_SOURCES})
TARGET_LINK_LIBRARIES(mariadbclient ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ${MATH_LIBRARY}) TARGET_LINK_LIBRARIES(mariadbclient ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ${MATH_LIBRARY} ${ICONV_LIBRARIES})
IF(OPENSSL_FOUND) IF(OPENSSL_FOUND)
TARGET_LINK_LIBRARIES(mariadbclient ${SSL_LIBRARIES}) TARGET_LINK_LIBRARIES(mariadbclient ${SSL_LIBRARIES})
ENDIF() ENDIF()
ADD_LIBRARY(libmariadb SHARED ${LIBMARIADB_SOURCES}) ADD_LIBRARY(libmariadb SHARED ${LIBMARIADB_SOURCES})
TARGET_LINK_LIBRARIES(libmariadb ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ${MATH_LIBRARY}) TARGET_LINK_LIBRARIES(libmariadb ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} ${MATH_LIBRARY} ${ICONV_LIBRARIES})
IF(OPENSSL_FOUND) IF(OPENSSL_FOUND)
TARGET_LINK_LIBRARIES(libmariadb ${SSL_LIBRARIES}) TARGET_LINK_LIBRARIES(libmariadb ${SSL_LIBRARIES})

View File

@@ -22,6 +22,9 @@
#include <my_dir.h> #include <my_dir.h>
CHARSET_INFO *default_charset_info = (CHARSET_INFO *)&compiled_charsets[5]; CHARSET_INFO *default_charset_info = (CHARSET_INFO *)&compiled_charsets[5];
CHARSET_INFO *my_charset_bin= (CHARSET_INFO *)&compiled_charsets[32];
CHARSET_INFO *my_charset_latin1= (CHARSET_INFO *)&compiled_charsets[5];
CHARSET_INFO *my_charset_utf8_general_ci= (CHARSET_INFO *)&compiled_charsets[21];
CHARSET_INFO *get_charset_by_nr(uint cs_number) CHARSET_INFO *get_charset_by_nr(uint cs_number)
{ {
@@ -52,7 +55,7 @@ CHARSET_INFO *get_charset_by_name(const char *cs_name)
{ {
int i= 0; int i= 0;
while (compiled_charsets[i].nr && strcmp(cs_name, compiled_charsets[i].name) != 0) while (compiled_charsets[i].nr && strcmp(cs_name, compiled_charsets[i].csname) != 0)
i++; i++;
return (compiled_charsets[i].nr) ? (CHARSET_INFO *)&compiled_charsets[i] : NULL; return (compiled_charsets[i].nr) ? (CHARSET_INFO *)&compiled_charsets[i] : NULL;

View File

@@ -106,3 +106,23 @@ EXPORTS
mysql_stmt_more_results mysql_stmt_more_results
mariadb_connection mariadb_connection
mysql_get_server_name mysql_get_server_name
mariadb_dyncol_create_many
mariadb_dyncol_create_many_named
mariadb_dyncol_update_many
mariadb_dyncol_update_many_named
mariadb_dyncol_exists
mariadb_dyncol_exists_named
mariadb_dyncol_list
mariadb_dyncol_list_named
mariadb_dyncol_get
mariadb_dyncol_get_named
mariadb_dyncol_has_names
mariadb_dyncol_check
mariadb_dyncol_val_str
mariadb_dyncol_val_long
mariadb_dyncol_val_double
mariadb_dyncol_unpack
mariadb_dyncol_column_cmp_named
mariadb_dyncol_column_count
mariadb_dyncol_json

4406
libmariadb/ma_dyncol.c Normal file

File diff suppressed because it is too large Load Diff

65
libmariadb/ma_time.c Normal file
View File

@@ -0,0 +1,65 @@
/****************************************************************************
Copyright (C) 2013 Monty Program AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not see <http://www.gnu.org/licenses>
or write to the Free Software Foundation, Inc.,
51 Franklin St., Fifth Floor, Boston, MA 02110, USA
Part of this code includes code from the PHP project which
is freely available from http://www.php.net
*****************************************************************************/
#include "mysys_priv.h"
#include <my_global.h>
#include <mysql.h>
#include <stdio.h>
size_t mariadb_time_to_string(const MYSQL_TIME *tm, char *time_str, size_t len,
unsigned int digits)
{
size_t length;
if (!time_str || !len)
return 0;
if (digits == AUTO_SEC_PART_DIGITS)
digits= MIN((tm->second_part) ? SEC_PART_DIGITS : 0, 15);
switch(tm->time_type) {
case MYSQL_TIMESTAMP_DATE:
length= snprintf(time_str, len, "%04u-%02u-%02u", tm->year, tm->month, tm->day);
digits= 0;
break;
case MYSQL_TIMESTAMP_DATETIME:
length= snprintf(time_str, len, "%04u-%02u-%02u %02u:%02u:%02u",
tm->year, tm->month, tm->day, tm->hour, tm->minute, tm->second);
break;
case MYSQL_TIMESTAMP_TIME:
length= snprintf(time_str, len, "%s%02u:%02u:%02u",
(tm->neg ? "-" : ""), tm->hour, tm->minute, tm->second);
break;
default:
time_str[0]= '\0';
return 0;
break;
}
if (digits && (len < length))
{
char helper[16];
snprintf(helper, 16, ".%%0%du", digits);
length+= snprintf(time_str + length, len - length, helper, digits);
}
return length;
}

View File

@@ -52,6 +52,8 @@
#include <my_global.h> #include <my_global.h>
#include <m_ctype.h> #include <m_ctype.h>
#include <iconv.h>
/* /*
+----------------------------------------------------------------------+ +----------------------------------------------------------------------+
| PHP Version 5 | | PHP Version 5 |
@@ -492,170 +494,170 @@ mysql_mbcharlen_utf32(unsigned int utf32 __attribute((unused)))
/* {{{ mysql_charsets */ /* {{{ mysql_charsets */
const CHARSET_INFO compiled_charsets[] = const CHARSET_INFO compiled_charsets[] =
{ {
{ 1, 1, "big5","big5_chinese_ci", "", "", 1, 2, mysql_mbcharlen_big5, check_mb_big5}, { 1, 1, "big5","big5_chinese_ci", "", "BIG5", 1, 2, mysql_mbcharlen_big5, check_mb_big5},
{ 3, 1, "dec8", "dec8_swedisch_ci", "", "", 1, 1, NULL, NULL}, { 3, 1, "dec8", "dec8_swedisch_ci", "", "DEC", 1, 1, NULL, NULL},
{ 4, 1, "cp850", "cp850_general_ci", "", "", 1, 1, NULL, NULL}, { 4, 1, "cp850", "cp850_general_ci", "", "CP850", 1, 1, NULL, NULL},
{ 6, 1, "hp8", "hp8_english_ci", "", "", 1, 1, NULL, NULL}, { 6, 1, "hp8", "hp8_english_ci", "", "HP-ROMAN8", 1, 1, NULL, NULL},
{ 7, 1, "koi8r", "koi8r_general_ci", "", "", 1, 1, NULL, NULL}, { 7, 1, "koi8r", "koi8r_general_ci", "", "KOI8R", 1, 1, NULL, NULL},
{ 8, 1, "latin1", "latin1_swedish_ci", "", "", 1, 1, NULL, NULL}, { 8, 1, "latin1", "latin1_swedish_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 9, 1, "latin2", "latin2_general_ci", "", "", 1, 1, NULL, NULL}, { 9, 1, "latin2", "latin2_general_ci", "", "LATIN2", 1, 1, NULL, NULL},
{ 10, 1, "swe7", "swe7_swedish_ci", "", "", 1, 1, NULL, NULL}, { 10, 1, "swe7", "swe7_swedish_ci", "", "", 1, 1, NULL, NULL},
{ 11, 1, "ascii", "ascii_general_ci", "", "", 1, 1, NULL, NULL}, { 11, 1, "ascii", "ascii_general_ci", "", "ASCII", 1, 1, NULL, NULL},
{ 12, 1, "ujis", "ujis_japanese_ci", "", "", 1, 3, mysql_mbcharlen_ujis, check_mb_ujis}, { 12, 1, "ujis", "ujis_japanese_ci", "", "UJIS", 1, 3, mysql_mbcharlen_ujis, check_mb_ujis},
{ 13, 1, "sjis", "sjis_japanese_ci", "", "", 1, 2, mysql_mbcharlen_sjis, check_mb_sjis}, { 13, 1, "sjis", "sjis_japanese_ci", "", "SJIS", 1, 2, mysql_mbcharlen_sjis, check_mb_sjis},
{ 16, 1, "hebrew", "hebrew_general_ci", "", "", 1, 1, NULL, NULL}, { 16, 1, "hebrew", "hebrew_general_ci", "", "HEBREW", 1, 1, NULL, NULL},
{ 18, 1, "tis620", "tis620_thai_ci", "", "", 1, 1, NULL, NULL}, { 18, 1, "tis620", "tis620_thai_ci", "", "TIS620", 1, 1, NULL, NULL},
{ 19, 1, "euckr", "euckr_korean_ci", "", "", 1, 2, mysql_mbcharlen_euckr, check_mb_euckr}, { 19, 1, "euckr", "euckr_korean_ci", "", "EUCKR", 1, 2, mysql_mbcharlen_euckr, check_mb_euckr},
{ 22, 1, "koi8u", "koi8u_general_ci", "", "", 1, 1, NULL, NULL}, { 22, 1, "koi8u", "koi8u_general_ci", "", "KOI8U", 1, 1, NULL, NULL},
{ 24, 1, "gb2312", "gb2312_chinese_ci", "", "", 1, 2, mysql_mbcharlen_gb2312, check_mb_gb2312}, { 24, 1, "gb2312", "gb2312_chinese_ci", "", "GB2312", 1, 2, mysql_mbcharlen_gb2312, check_mb_gb2312},
{ 25, 1, "greek", "greek_general_ci", "", "", 1, 1, NULL, NULL}, { 25, 1, "greek", "greek_general_ci", "", "GREEK", 1, 1, NULL, NULL},
{ 26, 1, "cp1250", "cp1250_general_ci", "", "", 1, 1, NULL, NULL}, { 26, 1, "cp1250", "cp1250_general_ci", "", "CP1250", 1, 1, NULL, NULL},
{ 28, 1, "gbk", "gbk_chinese_ci", "", "", 1, 2, mysql_mbcharlen_gbk, check_mb_gbk}, { 28, 1, "gbk", "gbk_chinese_ci", "", "GBK", 1, 2, mysql_mbcharlen_gbk, check_mb_gbk},
{ 30, 1, "latin5", "latin5_turkish_ci", "", "", 1, 1, NULL, NULL}, { 30, 1, "latin5", "latin5_turkish_ci", "", "LATIN5", 1, 1, NULL, NULL},
{ 32, 1, "armscii8", "armscii8_general_ci", "", "", 1, 1, NULL, NULL}, { 32, 1, "armscii8", "armscii8_general_ci", "", "ARMSCII-8", 1, 1, NULL, NULL},
{ 33, 1, UTF8_MB3, UTF8_MB3"_general_ci", "UTF-8 Unicode", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 33, 1, UTF8_MB3, UTF8_MB3"_general_ci", "UTF-8 Unicode", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 35, 1, "ucs2", "ucs2_general_ci", "UCS-2 Unicode", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 35, 1, "ucs2", "ucs2_general_ci", "UCS-2 Unicode", "UCS-2BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 36, 1, "cp866", "cp866_general_ci", "", "", 1, 1, NULL, NULL}, { 36, 1, "cp866", "cp866_general_ci", "", "CP866", 1, 1, NULL, NULL},
{ 37, 1, "keybcs2", "keybcs2_general_ci", "", "", 1, 1, NULL, NULL}, { 37, 1, "keybcs2", "keybcs2_general_ci", "", "", 1, 1, NULL, NULL},
{ 38, 1, "macce", "macce_general_ci", "", "", 1, 1, NULL, NULL}, { 38, 1, "macce", "macce_general_ci", "", "CP1282", 1, 1, NULL, NULL},
{ 39, 1, "macroman", "macroman_general_ci", "", "", 1, 1, NULL, NULL}, { 39, 1, "macroman", "macroman_general_ci", "MACINTOSH", "", 1, 1, NULL, NULL},
{ 40, 1, "cp852", "cp852_general_ci", "", "", 1, 1, NULL, NULL}, { 40, 1, "cp852", "cp852_general_ci", "", "CP852", 1, 1, NULL, NULL},
{ 41, 1, "latin7", "latin7_general_ci", "", "", 1, 1, NULL, NULL}, { 41, 1, "latin7", "latin7_general_ci", "", "LATIN7", 1, 1, NULL, NULL},
{ 51, 1, "cp1251", "cp1251_general_ci", "", "", 1, 1, NULL, NULL}, { 51, 1, "cp1251", "cp1251_general_ci", "", "CP1251", 1, 1, NULL, NULL},
{ 57, 1, "cp1256", "cp1256_general_ci", "", "", 1, 1, NULL, NULL}, { 57, 1, "cp1256", "cp1256_general_ci", "", "CP1256", 1, 1, NULL, NULL},
{ 59, 1, "cp1257", "cp1257_general_ci", "", "", 1, 1, NULL, NULL}, { 59, 1, "cp1257", "cp1257_general_ci", "", "CP1257", 1, 1, NULL, NULL},
{ 63, 1, "binary", "binary", "", "", 1, 1, NULL, NULL}, { 63, 1, "binary", "binary", "", "ASCII", 1, 1, NULL, NULL},
{ 92, 1, "geostd8", "geostd8_general_ci", "", "", 1, 1, NULL, NULL}, { 92, 1, "geostd8", "geostd8_general_ci", "", "GEORGIAN-PS", 1, 1, NULL, NULL},
{ 95, 1, "cp932", "cp932_japanese_ci", "", "", 1, 2, mysql_mbcharlen_cp932, check_mb_cp932}, { 95, 1, "cp932", "cp932_japanese_ci", "", "CP932", 1, 2, mysql_mbcharlen_cp932, check_mb_cp932},
{ 97, 1, "eucjpms", "eucjpms_japanese_ci", "", "", 1, 3, mysql_mbcharlen_eucjpms, check_mb_eucjpms}, { 97, 1, "eucjpms", "eucjpms_japanese_ci", "", "EUC-JP-MS", 1, 3, mysql_mbcharlen_eucjpms, check_mb_eucjpms},
{ 2, 1, "latin2", "latin2_czech_cs", "", "", 1, 1, NULL, NULL}, { 2, 1, "latin2", "latin2_czech_cs", "", "LATIN2", 1, 1, NULL, NULL},
{ 5, 1, "latin1", "latin1_german_ci", "", "", 1, 1, NULL, NULL}, { 5, 1, "latin1", "latin1_german_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 14, 1, "cp1251", "cp1251_bulgarian_ci", "", "", 1, 1, NULL, NULL}, { 14, 1, "cp1251", "cp1251_bulgarian_ci", "", "CP1251", 1, 1, NULL, NULL},
{ 15, 1, "latin1", "latin1_danish_ci", "", "", 1, 1, NULL, NULL}, { 15, 1, "latin1", "latin1_danish_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 17, 1, "filename", "filename", "", "", 1, 5, NULL, NULL}, { 17, 1, "filename", "filename", "", "", 1, 5, NULL, NULL},
{ 20, 1, "latin7", "latin7_estonian_cs", "", "", 1, 1, NULL, NULL}, { 20, 1, "latin7", "latin7_estonian_cs", "", "LATIN7", 1, 1, NULL, NULL},
{ 21, 1, "latin2", "latin2_hungarian_ci", "", "", 1, 1, NULL, NULL}, { 21, 1, "latin2", "latin2_hungarian_ci", "", "LATIN2", 1, 1, NULL, NULL},
{ 23, 1, "cp1251", "cp1251_ukrainian_ci", "", "", 1, 1, NULL, NULL}, { 23, 1, "cp1251", "cp1251_ukrainian_ci", "", "CP1251", 1, 1, NULL, NULL},
{ 27, 1, "latin2", "latin2_croatian_ci", "", "", 1, 1, NULL, NULL}, { 27, 1, "latin2", "latin2_croatian_ci", "", "LATIN2", 1, 1, NULL, NULL},
{ 29, 1, "cp1257", "cp1257_lithunian_ci", "", "", 1, 1, NULL, NULL}, { 29, 1, "cp1257", "cp1257_lithunian_ci", "", "CP1257", 1, 1, NULL, NULL},
{ 31, 1, "latin1", "latin1_german2_ci", "", "", 1, 1, NULL, NULL}, { 31, 1, "latin1", "latin1_german2_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 34, 1, "cp1250", "cp1250_czech_cs", "", "", 1, 1, NULL, NULL}, { 34, 1, "cp1250", "cp1250_czech_cs", "", "CP1250", 1, 1, NULL, NULL},
{ 42, 1, "latin7", "latin7_general_cs", "", "", 1, 1, NULL, NULL}, { 42, 1, "latin7", "latin7_general_cs", "", "LATIN7", 1, 1, NULL, NULL},
{ 43, 1, "macce", "macce_bin", "", "", 1, 1, NULL, NULL}, { 43, 1, "macce", "macce_bin", "", "MACINTOSH", 1, 1, NULL, NULL},
{ 44, 1, "cp1250", "cp1250_croatian_ci", "", "", 1, 1, NULL, NULL}, { 44, 1, "cp1250", "cp1250_croatian_ci", "", "CP1250", 1, 1, NULL, NULL},
{ 45, 1, UTF8_MB4, UTF8_MB4"_general_ci", "UTF-8 Unicode", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 45, 1, UTF8_MB4, UTF8_MB4"_general_ci", "UTF-8 Unicode", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 46, 1, UTF8_MB4, UTF8_MB4"_bin", "UTF-8 Unicode", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 46, 1, UTF8_MB4, UTF8_MB4"_bin", "UTF-8 Unicode", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 47, 1, "latin1", "latin1_bin", "", "", 1, 1, NULL, NULL}, { 47, 1, "latin1", "latin1_bin", "", "LATIN1", 1, 1, NULL, NULL},
{ 48, 1, "latin1", "latin1_general_ci", "", "", 1, 1, NULL, NULL}, { 48, 1, "latin1", "latin1_general_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 49, 1, "latin1", "latin1_general_cs", "", "", 1, 1, NULL, NULL}, { 49, 1, "latin1", "latin1_general_cs", "", "LATIN1", 1, 1, NULL, NULL},
{ 50, 1, "cp1251", "cp1251_bin", "", "", 1, 1, NULL, NULL}, { 50, 1, "cp1251", "cp1251_bin", "", "CP1251", 1, 1, NULL, NULL},
{ 52, 1, "cp1251", "cp1251_general_cs", "", "", 1, 1, NULL, NULL}, { 52, 1, "cp1251", "cp1251_general_cs", "", "CP1251", 1, 1, NULL, NULL},
{ 53, 1, "macroman", "macroman_bin", "", "", 1, 1, NULL, NULL}, { 53, 1, "macroman", "macroman_bin", "", "MACINTOSH", 1, 1, NULL, NULL},
{ 54, 1, "utf16", "utf16_general_ci", "UTF_16 Unicode", "", 2, 4, mysql_mbcharlen_utf16, check_mb_utf16}, { 54, 1, "utf16", "utf16_general_ci", "UTF_16 Unicode", "UTF16", 2, 4, mysql_mbcharlen_utf16, check_mb_utf16},
{ 55, 1, "utf16", "utf16_bin", "UTF-16 Unicode", "", 2, 4, mysql_mbcharlen_utf16, check_mb_utf16}, { 55, 1, "utf16", "utf16_bin", "UTF-16 Unicode", "UTF16", 2, 4, mysql_mbcharlen_utf16, check_mb_utf16},
{ 58, 1, "cp1257", "cp1257_bin", "", "", 1, 1, NULL, NULL}, { 58, 1, "cp1257", "cp1257_bin", "", "CP1257", 1, 1, NULL, NULL},
#ifdef USED_TO_BE_SO_BEFORE_MYSQL_5_5 #ifdef USED_TO_BE_SO_BEFORE_MYSQL_5_5
{ 60, 1, "armascii8", "armascii8_bin", "", "", 1, 1, NULL, NULL}, { 60, 1, "armascii8", "armascii8_bin", "", "ARMSCII-8", 1, 1, NULL, NULL},
#endif #endif
{ 60, 1, "utf32", "utf32_general_ci", "UTF-32 Unicode", "", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32}, { 60, 1, "utf32", "utf32_general_ci", "UTF-32 Unicode", "UTF32", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32},
{ 61, 1, "utf32", "utf32_bin", "UTF-32 Unicode", "", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32}, { 61, 1, "utf32", "utf32_bin", "UTF-32 Unicode", "UTF32", 4, 4, mysql_mbcharlen_utf32, check_mb_utf32},
{ 65, 1, "ascii", "ascii_bin", "", "", 1, 1, NULL, NULL}, { 65, 1, "ascii", "ascii_bin", "", "ASCII", 1, 1, NULL, NULL},
{ 66, 1, "cp1250", "cp1250_bin", "", "", 1, 1, NULL, NULL}, { 66, 1, "cp1250", "cp1250_bin", "", "CP1250", 1, 1, NULL, NULL},
{ 67, 1, "cp1256", "cp1256_bin", "", "", 1, 1, NULL, NULL}, { 67, 1, "cp1256", "cp1256_bin", "", "CP1256", 1, 1, NULL, NULL},
{ 68, 1, "cp866", "cp866_bin", "", "", 1, 1, NULL, NULL}, { 68, 1, "cp866", "cp866_bin", "", "CP866", 1, 1, NULL, NULL},
{ 69, 1, "dec8", "dec8_bin", "", "", 1, 1, NULL, NULL}, { 69, 1, "dec8", "dec8_bin", "", "DEC", 1, 1, NULL, NULL},
{ 70, 1, "greek", "greek_bin", "", "", 1, 1, NULL, NULL}, { 70, 1, "greek", "greek_bin", "", "GREEK", 1, 1, NULL, NULL},
{ 71, 1, "hebew", "hebrew_bin", "", "", 1, 1, NULL, NULL}, { 71, 1, "hebrew", "hebrew_bin", "", "hebrew", 1, 1, NULL, NULL},
{ 72, 1, "hp8", "hp8_bin", "", "", 1, 1, NULL, NULL}, { 72, 1, "hp8", "hp8_bin", "", "HPROMAN-8", 1, 1, NULL, NULL},
{ 73, 1, "keybcs2", "keybcs2_bin", "", "", 1, 1, NULL, NULL}, { 73, 1, "keybcs2", "keybcs2_bin", "", "", 1, 1, NULL, NULL},
{ 74, 1, "koi8r", "koi8r_bin", "", "", 1, 1, NULL, NULL}, { 74, 1, "koi8r", "koi8r_bin", "", "KOI8R", 1, 1, NULL, NULL},
{ 75, 1, "koi8u", "koi8u_bin", "", "", 1, 1, NULL, NULL}, { 75, 1, "koi8u", "koi8u_bin", "", "KOI8U", 1, 1, NULL, NULL},
{ 77, 1, "latin2", "latin2_bin", "", "", 1, 1, NULL, NULL}, { 77, 1, "latin2", "latin2_bin", "", "LATIN2", 1, 1, NULL, NULL},
{ 78, 1, "latin5", "latin5_bin", "", "", 1, 1, NULL, NULL}, { 78, 1, "latin5", "latin5_bin", "", "LATIN5", 1, 1, NULL, NULL},
{ 79, 1, "latin7", "latin7_bin", "", "", 1, 1, NULL, NULL}, { 79, 1, "latin7", "latin7_bin", "", "LATIN7", 1, 1, NULL, NULL},
{ 80, 1, "cp850", "cp850_bin", "", "", 1, 1, NULL, NULL}, { 80, 1, "cp850", "cp850_bin", "", "CP850", 1, 1, NULL, NULL},
{ 81, 1, "cp852", "cp852_bin", "", "", 1, 1, NULL, NULL}, { 81, 1, "cp852", "cp852_bin", "", "CP852", 1, 1, NULL, NULL},
{ 82, 1, "swe7", "swe7_bin", "", "", 1, 1, NULL, NULL}, { 82, 1, "swe7", "swe7_bin", "", "", 1, 1, NULL, NULL},
{ 93, 1, "geostd8", "geostd8_bin", "", "", 1, 1, NULL, NULL}, { 93, 1, "geostd8", "geostd8_bin", "", "GEORGIAN-PS", 1, 1, NULL, NULL},
{ 83, 1, UTF8_MB3, UTF8_MB3"_bin", "UTF-8 Unicode", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 83, 1, UTF8_MB3, UTF8_MB3"_bin", "UTF-8 Unicode", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 84, 1, "big5", "big5_bin", "", "", 1, 2, mysql_mbcharlen_big5, check_mb_big5}, { 84, 1, "big5", "big5_bin", "", "BIG5", 1, 2, mysql_mbcharlen_big5, check_mb_big5},
{ 85, 1, "euckr", "euckr_bin", "", "", 1, 2, mysql_mbcharlen_euckr, check_mb_euckr}, { 85, 1, "euckr", "euckr_bin", "", "EUCKR", 1, 2, mysql_mbcharlen_euckr, check_mb_euckr},
{ 86, 1, "gb2312", "gb2312_bin", "", "", 1, 2, mysql_mbcharlen_gb2312, check_mb_gb2312}, { 86, 1, "gb2312", "gb2312_bin", "", "GB2312", 1, 2, mysql_mbcharlen_gb2312, check_mb_gb2312},
{ 87, 1, "gbk", "gbk_bin", "", "", 1, 2, mysql_mbcharlen_gbk, check_mb_gbk}, { 87, 1, "gbk", "gbk_bin", "", "GBK", 1, 2, mysql_mbcharlen_gbk, check_mb_gbk},
{ 88, 1, "sjis", "sjis_bin", "", "", 1, 2, mysql_mbcharlen_sjis, check_mb_sjis}, { 88, 1, "sjis", "sjis_bin", "", "SJIS", 1, 2, mysql_mbcharlen_sjis, check_mb_sjis},
{ 89, 1, "tis620", "tis620_bin", "", "", 1, 1, NULL, NULL}, { 89, 1, "tis620", "tis620_bin", "TIS620", "", 1, 1, NULL, NULL},
{ 90, 1, "ucs2", "ucs2_bin", "UCS-2 Unicode", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 90, 1, "ucs2", "ucs2_bin", "UCS-2 Unicode", "UCS-2BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 91, 1, "ujis", "ujis_bin", "", "", 1, 3, mysql_mbcharlen_ujis, check_mb_ujis}, { 91, 1, "ujis", "ujis_bin", "", "UJIS", 1, 3, mysql_mbcharlen_ujis, check_mb_ujis},
{ 94, 1, "latin1", "latin1_spanish_ci", "", "", 1, 1, NULL, NULL}, { 94, 1, "latin1", "latin1_spanish_ci", "", "LATIN1", 1, 1, NULL, NULL},
{ 96, 1, "cp932", "cp932_bin", "", "", 1, 2, mysql_mbcharlen_cp932, check_mb_cp932}, { 96, 1, "cp932", "cp932_bin", "", "CP932", 1, 2, mysql_mbcharlen_cp932, check_mb_cp932},
{ 99, 1, "cp1250", "cp1250_polish_ci", "", "", 1, 1, NULL, NULL}, { 99, 1, "cp1250", "cp1250_polish_ci", "", "CP1250", 1, 1, NULL, NULL},
{ 98, 1, "eucjpms", "eucjpms_bin", "", "", 1, 3, mysql_mbcharlen_eucjpms, check_mb_eucjpms}, { 98, 1, "eucjpms", "eucjpms_bin", "", "EUCJP-MS", 1, 3, mysql_mbcharlen_eucjpms, check_mb_eucjpms},
{ 128, 1, "ucs2", "ucs2_unicode_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 128, 1, "ucs2", "ucs2_unicode_ci", "", "UCS-2BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 129, 1, "ucs2", "ucs2_icelandic_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 129, 1, "ucs2", "ucs2_icelandic_ci", "", "UCS-2BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 130, 1, "ucs2", "ucs2_latvian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 130, 1, "ucs2", "ucs2_latvian_ci", "", "UCS-2BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 131, 1, "ucs2", "ucs2_romanian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 131, 1, "ucs2", "ucs2_romanian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 132, 1, "ucs2", "ucs2_slovenian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 132, 1, "ucs2", "ucs2_slovenian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 133, 1, "ucs2", "ucs2_polish_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 133, 1, "ucs2", "ucs2_polish_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 134, 1, "ucs2", "ucs2_estonian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 134, 1, "ucs2", "ucs2_estonian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 135, 1, "ucs2", "ucs2_spanish_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 135, 1, "ucs2", "ucs2_spanish_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 136, 1, "ucs2", "ucs2_swedish_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 136, 1, "ucs2", "ucs2_swedish_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 137, 1, "ucs2", "ucs2_turkish_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 137, 1, "ucs2", "ucs2_turkish_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 138, 1, "ucs2", "ucs2_czech_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 138, 1, "ucs2", "ucs2_czech_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 139, 1, "ucs2", "ucs2_danish_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 139, 1, "ucs2", "ucs2_danish_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 140, 1, "ucs2", "ucs2_lithunian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 140, 1, "ucs2", "ucs2_lithunian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 141, 1, "ucs2", "ucs2_slovak_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 141, 1, "ucs2", "ucs2_slovak_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 142, 1, "ucs2", "ucs2_spanish2_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 142, 1, "ucs2", "ucs2_spanish2_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 143, 1, "ucs2", "ucs2_roman_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 143, 1, "ucs2", "ucs2_roman_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 144, 1, "ucs2", "ucs2_persian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 144, 1, "ucs2", "ucs2_persian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 145, 1, "ucs2", "ucs2_esperanto_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 145, 1, "ucs2", "ucs2_esperanto_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 146, 1, "ucs2", "ucs2_hungarian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 146, 1, "ucs2", "ucs2_hungarian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 147, 1, "ucs2", "ucs2_sinhala_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, { 147, 1, "ucs2", "ucs2_sinhala_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2},
{ 149, 1, "ucs2", "ucs2_croatian_ci", "", "", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, /* MDB */ { 149, 1, "ucs2", "ucs2_croatian_ci", "", "UCS2-BE", 2, 2, mysql_mbcharlen_ucs2, check_mb_ucs2}, /* MDB */
{ 192, 1, UTF8_MB3, UTF8_MB3"_general_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 192, 1, UTF8_MB3, UTF8_MB3"_general_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 193, 1, UTF8_MB3, UTF8_MB3"_icelandic_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 193, 1, UTF8_MB3, UTF8_MB3"_icelandic_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 194, 1, UTF8_MB3, UTF8_MB3"_latvian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 194, 1, UTF8_MB3, UTF8_MB3"_latvian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 195, 1, UTF8_MB3, UTF8_MB3"_romanian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 195, 1, UTF8_MB3, UTF8_MB3"_romanian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 196, 1, UTF8_MB3, UTF8_MB3"_slovenian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 196, 1, UTF8_MB3, UTF8_MB3"_slovenian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 197, 1, UTF8_MB3, UTF8_MB3"_polish_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 197, 1, UTF8_MB3, UTF8_MB3"_polish_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 198, 1, UTF8_MB3, UTF8_MB3"_estonian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 198, 1, UTF8_MB3, UTF8_MB3"_estonian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 119, 1, UTF8_MB3, UTF8_MB3"_spanish_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 119, 1, UTF8_MB3, UTF8_MB3"_spanish_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 200, 1, UTF8_MB3, UTF8_MB3"_swedish_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 200, 1, UTF8_MB3, UTF8_MB3"_swedish_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 201, 1, UTF8_MB3, UTF8_MB3"_turkish_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 201, 1, UTF8_MB3, UTF8_MB3"_turkish_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 202, 1, UTF8_MB3, UTF8_MB3"_czech_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 202, 1, UTF8_MB3, UTF8_MB3"_czech_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 203, 1, UTF8_MB3, UTF8_MB3"_danish_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid }, { 203, 1, UTF8_MB3, UTF8_MB3"_danish_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid },
{ 204, 1, UTF8_MB3, UTF8_MB3"_lithunian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid }, { 204, 1, UTF8_MB3, UTF8_MB3"_lithunian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid },
{ 205, 1, UTF8_MB3, UTF8_MB3"_slovak_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 205, 1, UTF8_MB3, UTF8_MB3"_slovak_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 206, 1, UTF8_MB3, UTF8_MB3"_spanish2_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 206, 1, UTF8_MB3, UTF8_MB3"_spanish2_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 207, 1, UTF8_MB3, UTF8_MB3"_roman_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 207, 1, UTF8_MB3, UTF8_MB3"_roman_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 208, 1, UTF8_MB3, UTF8_MB3"_persian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 208, 1, UTF8_MB3, UTF8_MB3"_persian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 209, 1, UTF8_MB3, UTF8_MB3"_esperanto_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 209, 1, UTF8_MB3, UTF8_MB3"_esperanto_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 210, 1, UTF8_MB3, UTF8_MB3"_hungarian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 210, 1, UTF8_MB3, UTF8_MB3"_hungarian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 211, 1, UTF8_MB3, UTF8_MB3"_sinhala_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, { 211, 1, UTF8_MB3, UTF8_MB3"_sinhala_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid},
{ 213, 1, UTF8_MB3, UTF8_MB3"_croatian_ci", "", "", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, /*MDB*/ { 213, 1, UTF8_MB3, UTF8_MB3"_croatian_ci", "", "UTF8", 1, 3, mysql_mbcharlen_utf8mb3, check_mb_utf8mb3_valid}, /*MDB*/
{ 224, 1, UTF8_MB4, UTF8_MB4"_unicode_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 224, 1, UTF8_MB4, UTF8_MB4"_unicode_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 225, 1, UTF8_MB4, UTF8_MB4"_icelandic_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 225, 1, UTF8_MB4, UTF8_MB4"_icelandic_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 226, 1, UTF8_MB4, UTF8_MB4"_latvian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 226, 1, UTF8_MB4, UTF8_MB4"_latvian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 227, 1, UTF8_MB4, UTF8_MB4"_romanian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 227, 1, UTF8_MB4, UTF8_MB4"_romanian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 228, 1, UTF8_MB4, UTF8_MB4"_slovenian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 228, 1, UTF8_MB4, UTF8_MB4"_slovenian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 229, 1, UTF8_MB4, UTF8_MB4"_polish_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 229, 1, UTF8_MB4, UTF8_MB4"_polish_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 230, 1, UTF8_MB4, UTF8_MB4"_estonian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 230, 1, UTF8_MB4, UTF8_MB4"_estonian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 231, 1, UTF8_MB4, UTF8_MB4"_spanish_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 231, 1, UTF8_MB4, UTF8_MB4"_spanish_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 232, 1, UTF8_MB4, UTF8_MB4"_swedish_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 232, 1, UTF8_MB4, UTF8_MB4"_swedish_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 233, 1, UTF8_MB4, UTF8_MB4"_turkish_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 233, 1, UTF8_MB4, UTF8_MB4"_turkish_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 234, 1, UTF8_MB4, UTF8_MB4"_czech_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 234, 1, UTF8_MB4, UTF8_MB4"_czech_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 235, 1, UTF8_MB4, UTF8_MB4"_danish_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 235, 1, UTF8_MB4, UTF8_MB4"_danish_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 236, 1, UTF8_MB4, UTF8_MB4"_lithuanian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 236, 1, UTF8_MB4, UTF8_MB4"_lithuanian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 237, 1, UTF8_MB4, UTF8_MB4"_slovak_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 237, 1, UTF8_MB4, UTF8_MB4"_slovak_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 238, 1, UTF8_MB4, UTF8_MB4"_spanish2_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 238, 1, UTF8_MB4, UTF8_MB4"_spanish2_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 239, 1, UTF8_MB4, UTF8_MB4"_roman_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 239, 1, UTF8_MB4, UTF8_MB4"_roman_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 240, 1, UTF8_MB4, UTF8_MB4"_persian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 240, 1, UTF8_MB4, UTF8_MB4"_persian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 241, 1, UTF8_MB4, UTF8_MB4"_esperanto_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 241, 1, UTF8_MB4, UTF8_MB4"_esperanto_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 242, 1, UTF8_MB4, UTF8_MB4"_hungarian_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 242, 1, UTF8_MB4, UTF8_MB4"_hungarian_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 243, 1, UTF8_MB4, UTF8_MB4"_sinhala_ci", "", "", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 243, 1, UTF8_MB4, UTF8_MB4"_sinhala_ci", "", "UTF8", 1, 4, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 254, 1, UTF8_MB3, UTF8_MB3"_general_cs", "", "", 1, 3, mysql_mbcharlen_utf8, check_mb_utf8_valid}, { 254, 1, UTF8_MB3, UTF8_MB3"_general_cs", "", "UTF8", 1, 3, mysql_mbcharlen_utf8, check_mb_utf8_valid},
{ 0, 0, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL} { 0, 0, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL}
}; };
/* }}} */ /* }}} */
@@ -835,6 +837,7 @@ struct st_madb_os_charset {
char *identifier; char *identifier;
char *description; char *description;
char *charset; char *charset;
char *iconv_cs;
unsigned char supported; unsigned char supported;
}; };
@@ -846,227 +849,228 @@ struct st_madb_os_charset MADB_OS_CHARSET[]=
{ {
#ifdef _WIN32 #ifdef _WIN32
/* Windows code pages */ /* Windows code pages */
{"037", "IBM EBCDIC US-Canada", NULL, MADB_CS_UNSUPPORTED}, {"037", "IBM EBCDIC US-Canada", NULL, NULL, MADB_CS_UNSUPPORTED},
{"437", "OEM United States", "cp850", MADB_CS_APPROX}, {"437", "OEM United States", "cp850", NULL, MADB_CS_APPROX},
{"500", "IBM EBCDIC International", NULL, MADB_CS_UNSUPPORTED}, {"500", "IBM EBCDIC International", NULL, NULL, MADB_CS_UNSUPPORTED},
{"708", "Arabic (ASMO 708)", NULL, MADB_CS_UNSUPPORTED}, {"708", "Arabic (ASMO 708)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"709", "Arabic (ASMO-449+, BCON V4)", NULL, MADB_CS_UNSUPPORTED}, {"709", "Arabic (ASMO-449+, BCON V4)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"710", "Transparent Arabic", NULL, MADB_CS_UNSUPPORTED}, {"710", "Transparent Arabic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"720", "Arabic (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"720", "Arabic (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"737", "Greek (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"737", "Greek (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"775", "Baltic (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"775", "Baltic (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"850", "Western European (DOS)", "cp850", MADB_CS_EXACT}, {"850", "Western European (DOS)", "cp850", NULL, MADB_CS_EXACT},
{"852", "Central European (DOS)", "cp852", MADB_CS_EXACT}, {"852", "Central European (DOS)", "cp852", NULL, MADB_CS_EXACT},
{"855", "Cyrillic (primarily Russian)", NULL, MADB_CS_UNSUPPORTED}, {"855", "Cyrillic (primarily Russian)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"857", "Turkish (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"857", "Turkish (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"858", "OEM Multilingual Latin 1 + Euro symbol", "cp850", MADB_CS_EXACT}, {"858", "OEM Multilingual Latin 1 + Euro symbol", "cp850", NULL, MADB_CS_EXACT},
{"860", "Portuguese (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"860", "Portuguese (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"861", "Icelandic (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"861", "Icelandic (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"862", "Hebrew (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"862", "Hebrew (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"863", "French Canadian (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"863", "French Canadian (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"864", "Arabic (864)", NULL, MADB_CS_UNSUPPORTED}, {"864", "Arabic (864)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"865", "Nordic (DOS)", NULL, MADB_CS_UNSUPPORTED}, {"865", "Nordic (DOS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"866", "Cyrillic (DOS)", "cp866", MADB_CS_EXACT}, {"866", "Cyrillic (DOS)", "cp866", NULL, MADB_CS_EXACT},
{"869", "Greek, Modern (DOS)", "greek", MADB_CS_EXACT}, {"869", "Greek, Modern (DOS)", "greek", NULL, MADB_CS_EXACT},
{"870", "IBM EBCDIC Multilingual Latin 2", NULL, MADB_CS_UNSUPPORTED}, {"870", "IBM EBCDIC Multilingual Latin 2", NULL, NULL, MADB_CS_UNSUPPORTED},
{"874", "Thai (Windows)", "tis620", MADB_CS_UNSUPPORTED}, {"874", "Thai (Windows)", "tis620", NULL, MADB_CS_UNSUPPORTED},
{"875", "Greek Modern", NULL, MADB_CS_UNSUPPORTED}, {"875", "Greek Modern", NULL, NULL, MADB_CS_UNSUPPORTED},
{"932", "Japanese (Shift-JIS)", "cp932", MADB_CS_EXACT}, {"932", "Japanese (Shift-JIS)", "cp932", NULL, MADB_CS_EXACT},
{"936", "Chinese Simplified (GB2312)", "gbk", MADB_CS_EXACT}, {"936", "Chinese Simplified (GB2312)", "gbk", NULL, MADB_CS_EXACT},
{"949", "ANSI/OEM Korean (Unified Hangul Code)", "euckr", MADB_CS_EXACT}, {"949", "ANSI/OEM Korean (Unified Hangul Code)", "euckr", NULL, MADB_CS_EXACT},
{"950", "Chinese Traditional (Big5)", "big5", MADB_CS_EXACT}, {"950", "Chinese Traditional (Big5)", "big5", NULL, MADB_CS_EXACT},
{"1026", "EBCDIC Turkish (Latin 5)", NULL, MADB_CS_UNSUPPORTED}, {"1026", "EBCDIC Turkish (Latin 5)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1047", "EBCDIC Latin 1/Open System", NULL, MADB_CS_UNSUPPORTED}, {"1047", "EBCDIC Latin 1/Open System", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1140", "IBM EBCDIC (US-Canada-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1140", "IBM EBCDIC (US-Canada-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1141", "IBM EBCDIC (Germany-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1141", "IBM EBCDIC (Germany-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1142", "IBM EBCDIC (Denmark-Norway-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1142", "IBM EBCDIC (Denmark-Norway-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1143", "IBM EBCDIC (Finland-Sweden-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1143", "IBM EBCDIC (Finland-Sweden-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1144", "IBM EBCDIC (Italy-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1144", "IBM EBCDIC (Italy-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1145", "IBM EBCDIC (Spain-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1145", "IBM EBCDIC (Spain-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1146", "IBM EBCDIC (UK-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1146", "IBM EBCDIC (UK-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1147", "IBM EBCDIC (France-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1147", "IBM EBCDIC (France-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1148", "IBM EBCDIC (International-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1148", "IBM EBCDIC (International-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1149", "IBM EBCDIC (Icelandic-Euro)", NULL, MADB_CS_UNSUPPORTED}, {"1149", "IBM EBCDIC (Icelandic-Euro)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1200", "UTF-16, little endian byte order", NULL, MADB_CS_UNSUPPORTED}, {"1200", "UTF-16, little endian byte order", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1201", "UTF-16, big endian byte order", "utf16", MADB_CS_UNSUPPORTED}, {"1201", "UTF-16, big endian byte order", "utf16", NULL, MADB_CS_UNSUPPORTED},
{"1250", "Central European (Windows)", "cp1250", MADB_CS_EXACT}, {"1250", "Central European (Windows)", "cp1250", NULL, MADB_CS_EXACT},
{"1251", "Cyrillic (Windows)", "cp1251", MADB_CS_EXACT}, {"1251", "Cyrillic (Windows)", "cp1251", NULL, MADB_CS_EXACT},
{"1252", "Western European (Windows)", "latin1", MADB_CS_EXACT}, {"1252", "Western European (Windows)", "latin1", NULL, MADB_CS_EXACT},
{"1253", "Greek (Windows)", "greek", MADB_CS_EXACT}, {"1253", "Greek (Windows)", "greek", NULL, MADB_CS_EXACT},
{"1254", "Turkish (Windows)", "latin5", MADB_CS_EXACT}, {"1254", "Turkish (Windows)", "latin5", NULL, MADB_CS_EXACT},
{"1255", "Hebrew (Windows)", "hewbrew", MADB_CS_EXACT}, {"1255", "Hebrew (Windows)", "hewbrew", NULL, MADB_CS_EXACT},
{"1256", "Arabic (Windows)", "cp1256", MADB_CS_EXACT}, {"1256", "Arabic (Windows)", "cp1256", NULL, MADB_CS_EXACT},
{"1257", "Baltic (Windows)","cp1257", MADB_CS_EXACT}, {"1257", "Baltic (Windows)","cp1257", NULL, MADB_CS_EXACT},
{"1258", "Vietnamese (Windows)", NULL, MADB_CS_UNSUPPORTED}, {"1258", "Vietnamese (Windows)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"1361", "Korean (Johab)", NULL, MADB_CS_UNSUPPORTED}, {"1361", "Korean (Johab)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10000", "Western European (Mac)", "macroman", MADB_CS_EXACT}, {"10000", "Western European (Mac)", "macroman", NULL, MADB_CS_EXACT},
{"10001", "Japanese (Mac)", "sjis", MADB_CS_EXACT}, {"10001", "Japanese (Mac)", "sjis", NULL, MADB_CS_EXACT},
{"10002", "Chinese Traditional (Mac)", "big5", MADB_CS_EXACT}, {"10002", "Chinese Traditional (Mac)", "big5", NULL, MADB_CS_EXACT},
{"10003", "Korean (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10003", "Korean (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10004", "Arabic (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10004", "Arabic (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10005", "Hebrew (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10005", "Hebrew (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10006", "Greek (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10006", "Greek (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10007", "Cyrillic (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10007", "Cyrillic (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10008", "Chinese Simplified (Mac)", "gb2312", MADB_CS_EXACT}, {"10008", "Chinese Simplified (Mac)", "gb2312", NULL, MADB_CS_EXACT},
{"10010", "Romanian (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10010", "Romanian (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10017", "Ukrainian (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10017", "Ukrainian (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10021", "Thai (Mac)", "tis620", MADB_CS_EXACT}, {"10021", "Thai (Mac)", "tis620", NULL, MADB_CS_EXACT},
{"10029", "Central European (Mac)", "macce", MADB_CS_EXACT}, {"10029", "Central European (Mac)", "macce", NULL, MADB_CS_EXACT},
{"10079", "Icelandic (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10079", "Icelandic (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10081", "Turkish (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10081", "Turkish (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"10082", "Croatian (Mac)", NULL, MADB_CS_UNSUPPORTED}, {"10082", "Croatian (Mac)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"12000", "Unicode UTF-32, little endian byte order", NULL, MADB_CS_UNSUPPORTED}, {"12000", "Unicode UTF-32, little endian byte order", NULL, NULL, MADB_CS_UNSUPPORTED},
{"12001", "Unicode UTF-32, big endian byte order", "utf32", MADB_CS_UNSUPPORTED}, {"12001", "Unicode UTF-32, big endian byte order", "utf32", NULL, MADB_CS_UNSUPPORTED},
{"20000", "Chinese Traditional (CNS)", NULL, MADB_CS_UNSUPPORTED}, {"20000", "Chinese Traditional (CNS)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20001", "TCA Taiwan", NULL, MADB_CS_UNSUPPORTED}, {"20001", "TCA Taiwan", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20002", "Chinese Traditional (Eten)", NULL, MADB_CS_UNSUPPORTED}, {"20002", "Chinese Traditional (Eten)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20003", "IBM5550 Taiwan", NULL, MADB_CS_UNSUPPORTED}, {"20003", "IBM5550 Taiwan", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20004", "TeleText Taiwan", NULL, MADB_CS_UNSUPPORTED}, {"20004", "TeleText Taiwan", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20005", "Wang Taiwan", NULL, MADB_CS_UNSUPPORTED}, {"20005", "Wang Taiwan", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20105", "Western European (IA5)", NULL, MADB_CS_UNSUPPORTED}, {"20105", "Western European (IA5)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20106", "IA5 German (7-bit)", NULL, MADB_CS_UNSUPPORTED}, {"20106", "IA5 German (7-bit)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20107", "Swedish (7-bit)", NULL, MADB_CS_UNSUPPORTED}, {"20107", "Swedish (7-bit)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20108", "Norwegian (7-bit)", NULL, MADB_CS_UNSUPPORTED}, {"20108", "Norwegian (7-bit)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20127", "US-ASCII (7-bit)", NULL, MADB_CS_UNSUPPORTED}, {"20127", "US-ASCII (7-bit)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20261", "T.61", NULL, MADB_CS_UNSUPPORTED}, {"20261", "T.61", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20269", "Non-Spacing Accent", NULL, MADB_CS_UNSUPPORTED}, {"20269", "Non-Spacing Accent", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20273", "EBCDIC Germany", NULL, MADB_CS_UNSUPPORTED}, {"20273", "EBCDIC Germany", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20277", "EBCDIC Denmark-Norway", NULL, MADB_CS_UNSUPPORTED}, {"20277", "EBCDIC Denmark-Norway", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20278", "EBCDIC Finland-Sweden", NULL, MADB_CS_UNSUPPORTED}, {"20278", "EBCDIC Finland-Sweden", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20280", "EBCDIC Italy", NULL, MADB_CS_UNSUPPORTED}, {"20280", "EBCDIC Italy", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20284", "EBCDIC Latin America-Spain", NULL, MADB_CS_UNSUPPORTED}, {"20284", "EBCDIC Latin America-Spain", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20285", "EBCDIC United Kingdom", NULL, MADB_CS_UNSUPPORTED}, {"20285", "EBCDIC United Kingdom", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20290", "EBCDIC Japanese Katakana Extended", NULL, MADB_CS_UNSUPPORTED}, {"20290", "EBCDIC Japanese Katakana Extended", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20297", "EBCDIC France", NULL, MADB_CS_UNSUPPORTED}, {"20297", "EBCDIC France", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20420", "EBCDIC Arabic", NULL, MADB_CS_UNSUPPORTED}, {"20420", "EBCDIC Arabic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20423", "EBCDIC Greek", NULL, MADB_CS_UNSUPPORTED}, {"20423", "EBCDIC Greek", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20424", "EBCDIC Hebrew", NULL, MADB_CS_UNSUPPORTED}, {"20424", "EBCDIC Hebrew", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20833", "EBCDIC Korean Extended", NULL, MADB_CS_UNSUPPORTED}, {"20833", "EBCDIC Korean Extended", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20838", "EBCDIC Thai", NULL, MADB_CS_UNSUPPORTED}, {"20838", "EBCDIC Thai", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20866", "Cyrillic (KOI8-R)", "koi8r", MADB_CS_EXACT}, {"20866", "Cyrillic (KOI8-R)", "koi8r", NULL, MADB_CS_EXACT},
{"20871", "EBCDIC Icelandic", NULL, MADB_CS_UNSUPPORTED}, {"20871", "EBCDIC Icelandic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20880", "EBCDIC Cyrillic Russian", NULL, MADB_CS_UNSUPPORTED}, {"20880", "EBCDIC Cyrillic Russian", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20905", "EBCDIC Turkish", NULL, MADB_CS_UNSUPPORTED}, {"20905", "EBCDIC Turkish", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20924", "EBCDIC Latin 1/Open System (1047 + Euro symbol)", NULL, MADB_CS_UNSUPPORTED}, {"20924", "EBCDIC Latin 1/Open System (1047 + Euro symbol)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"20932", "Japanese (JIS 0208-1990 and 0121-1990)", "ujis", MADB_CS_EXACT}, {"20932", "Japanese (JIS 0208-1990 and 0121-1990)", "ujis", NULL, MADB_CS_EXACT},
{"20936", "Chinese Simplified (GB2312-80)", "gb2312", MADB_CS_APPROX}, {"20936", "Chinese Simplified (GB2312-80)", "gb2312", NULL, MADB_CS_APPROX},
{"20949", "Korean Wansung", "euckr", MADB_CS_APPROX}, {"20949", "Korean Wansung", "euckr", NULL, MADB_CS_APPROX},
{"21025", "EBCDIC Cyrillic Serbian-Bulgarian", NULL, MADB_CS_UNSUPPORTED}, {"21025", "EBCDIC Cyrillic Serbian-Bulgarian", NULL, NULL, MADB_CS_UNSUPPORTED},
{"21866", "Cyrillic (KOI8-U)", "koi8u", MADB_CS_EXACT}, {"21866", "Cyrillic (KOI8-U)", "koi8u", NULL, MADB_CS_EXACT},
{"28591", "Western European (ISO)", "latin1", MADB_CS_APPROX}, {"28591", "Western European (ISO)", "latin1", NULL, MADB_CS_APPROX},
{"28592", "Central European (ISO)", "latin2", MADB_CS_EXACT}, {"28592", "Central European (ISO)", "latin2", NULL, MADB_CS_EXACT},
{"28593", "Latin 3", NULL, MADB_CS_UNSUPPORTED}, {"28593", "Latin 3", NULL, NULL, MADB_CS_UNSUPPORTED},
{"28594", "Baltic", NULL, MADB_CS_UNSUPPORTED}, {"28594", "Baltic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"28595", "ISO 8859-5 Cyrillic", NULL, MADB_CS_UNSUPPORTED}, {"28595", "ISO 8859-5 Cyrillic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"28596", "ISO 8859-6 Arabic", NULL, MADB_CS_UNSUPPORTED}, {"28596", "ISO 8859-6 Arabic", NULL, NULL, MADB_CS_UNSUPPORTED},
{"28597", "ISO 8859-7 Greek", "greek", MADB_CS_EXACT}, {"28597", "ISO 8859-7 Greek", "greek", NULL, MADB_CS_EXACT},
{"28598", "Hebrew (ISO-Visual)", "hebrew", MADB_CS_EXACT}, {"28598", "Hebrew (ISO-Visual)", "hebrew", NULL, MADB_CS_EXACT},
{"28599", "ISO 8859-9 Turkish", "latin5", MADB_CS_EXACT}, {"28599", "ISO 8859-9 Turkish", "latin5", NULL, MADB_CS_EXACT},
{"28603", "ISO 8859-13 Estonian", "latin7", MADB_CS_EXACT}, {"28603", "ISO 8859-13 Estonian", "latin7", NULL, MADB_CS_EXACT},
{"28605", "8859-15 Latin 9", NULL, MADB_CS_UNSUPPORTED}, {"28605", "8859-15 Latin 9", NULL, NULL, MADB_CS_UNSUPPORTED},
{"29001", "Europa 3", NULL, MADB_CS_UNSUPPORTED}, {"29001", "Europa 3", NULL, NULL, MADB_CS_UNSUPPORTED},
{"38598", "ISO 8859-8 Hebrew; Hebrew (ISO-Logical)", "hebrew", MADB_CS_EXACT}, {"38598", "ISO 8859-8 Hebrew; Hebrew (ISO-Logical)", "hebrew", NULL, MADB_CS_EXACT},
{"50220", "ISO 2022 Japanese with no halfwidth Katakana", NULL, MADB_CS_UNSUPPORTED}, {"50220", "ISO 2022 Japanese with no halfwidth Katakana", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50221", "ISO 2022 Japanese with halfwidth Katakana", NULL, MADB_CS_UNSUPPORTED}, {"50221", "ISO 2022 Japanese with halfwidth Katakana", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50222", "ISO 2022 Japanese JIS X 0201-1989", NULL, MADB_CS_UNSUPPORTED}, {"50222", "ISO 2022 Japanese JIS X 0201-1989", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50225", "ISO 2022 Korean", NULL, MADB_CS_UNSUPPORTED}, {"50225", "ISO 2022 Korean", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50227", "ISO 2022 Simplified Chinese", NULL, MADB_CS_UNSUPPORTED}, {"50227", "ISO 2022 Simplified Chinese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50229", "ISO 2022 Traditional Chinese", NULL, MADB_CS_UNSUPPORTED}, {"50229", "ISO 2022 Traditional Chinese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50930", "EBCDIC Japanese (Katakana) Extended", NULL, MADB_CS_UNSUPPORTED}, {"50930", "EBCDIC Japanese (Katakana) Extended", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50931", "EBCDIC US-Canada and Japanese", NULL, MADB_CS_UNSUPPORTED}, {"50931", "EBCDIC US-Canada and Japanese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50933", "EBCDIC Korean Extended and Korean", NULL, MADB_CS_UNSUPPORTED}, {"50933", "EBCDIC Korean Extended and Korean", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50935", "EBCDIC Simplified Chinese Extended and Simplified Chinese", NULL, MADB_CS_UNSUPPORTED}, {"50935", "EBCDIC Simplified Chinese Extended and Simplified Chinese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50936", "EBCDIC Simplified Chinese", NULL, MADB_CS_UNSUPPORTED}, {"50936", "EBCDIC Simplified Chinese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50937", "EBCDIC US-Canada and Traditional Chinese", NULL, MADB_CS_UNSUPPORTED}, {"50937", "EBCDIC US-Canada and Traditional Chinese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"50939", "EBCDIC Japanese (Latin) Extended and Japanese", NULL, MADB_CS_UNSUPPORTED}, {"50939", "EBCDIC Japanese (Latin) Extended and Japanese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"51932", "EUC Japanese", "ujis", MADB_CS_EXACT}, {"51932", "EUC Japanese", "ujis", NULL, MADB_CS_EXACT},
{"51936", "EUC Simplified Chinese; Chinese Simplified (EUC)", "gb2312", MADB_CS_EXACT}, {"51936", "EUC Simplified Chinese; Chinese Simplified (EUC)", "gb2312", NULL, MADB_CS_EXACT},
{"51949", "EUC Korean", "euckr", MADB_CS_EXACT}, {"51949", "EUC Korean", "euckr", NULL, MADB_CS_EXACT},
{"51950", "EUC Traditional Chinese", "big5", MADB_CS_EXACT}, {"51950", "EUC Traditional Chinese", "big5", NULL, MADB_CS_EXACT},
{"52936", "Chinese Simplified (HZ)", NULL, MADB_CS_UNSUPPORTED}, {"52936", "Chinese Simplified (HZ)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"54936", "Chinese Simplified (GB18030)", NULL, MADB_CS_UNSUPPORTED}, {"54936", "Chinese Simplified (GB18030)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57002", "ISCII Devanagari", NULL, MADB_CS_UNSUPPORTED}, {"57002", "ISCII Devanagari", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57003", "ISCII Bengali", NULL, MADB_CS_UNSUPPORTED}, {"57003", "ISCII Bengali", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57004", "ISCII Tamil", NULL, MADB_CS_UNSUPPORTED}, {"57004", "ISCII Tamil", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57005", "ISCII Telugu", NULL, MADB_CS_UNSUPPORTED}, {"57005", "ISCII Telugu", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57006", "ISCII Assamese", NULL, MADB_CS_UNSUPPORTED}, {"57006", "ISCII Assamese", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57007", "ISCII Oriya", NULL, MADB_CS_UNSUPPORTED}, {"57007", "ISCII Oriya", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57008", "ISCII Kannada", NULL, MADB_CS_UNSUPPORTED}, {"57008", "ISCII Kannada", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57009", "ISCII Malayalam", NULL, MADB_CS_UNSUPPORTED}, {"57009", "ISCII Malayalam", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57010", "ISCII Gujarati", NULL, MADB_CS_UNSUPPORTED}, {"57010", "ISCII Gujarati", NULL, NULL, MADB_CS_UNSUPPORTED},
{"57011", "ISCII Punjabi", NULL, MADB_CS_UNSUPPORTED}, {"57011", "ISCII Punjabi", NULL, NULL, MADB_CS_UNSUPPORTED},
{"65000", "utf-7 Unicode (UTF-7)", NULL, MADB_CS_UNSUPPORTED}, {"65000", "utf-7 Unicode (UTF-7)", NULL, NULL, MADB_CS_UNSUPPORTED},
{"65001", "utf-8 Unicode (UTF-8)", "utf8", MADB_CS_EXACT}, {"65001", "utf-8 Unicode (UTF-8)", "utf8", NULL, MADB_CS_EXACT},
/* non Windows */ /* non Windows */
#else #else
{"ASCII", "US-ASCII", "ascii", MADB_CS_APPROX}, /* iconv encodings */
{"US-ASCII", "US-ASCII", "ascii", MADB_CS_APPROX}, {"ASCII", "US-ASCII", "ascii", "ASCII", MADB_CS_APPROX},
{"Big5", "Chinese for Taiwan Multi-byte set", "big5", MADB_CS_EXACT}, {"US-ASCII", "US-ASCII", "ascii", "ASCII", MADB_CS_APPROX},
{"CP866", "IBM 866", "cp866", MADB_CS_EXACT}, {"Big5", "Chinese for Taiwan Multi-byte set", "big5", "BIG5", MADB_CS_EXACT},
{"IBM-1252", "Catalan Spain", "cp1252", MADB_CS_EXACT}, {"CP866", "IBM 866", "cp866", "CP866", MADB_CS_EXACT},
{"ISCII-DEV", "Hindi", NULL, MADB_CS_UNSUPPORTED}, {"IBM-1252", "Catalan Spain", "cp1252", "CP1252", MADB_CS_EXACT},
{"ISO-8859-1", "ISO-8859-1", "latin1", MADB_CS_APPROX}, {"ISCII-DEV", "Hindi", NULL, NULL, MADB_CS_UNSUPPORTED},
{"ISO8859-1", "ISO-8859-1", "latin1", MADB_CS_APPROX}, {"ISO-8859-1", "ISO-8859-1", "latin1", "ISO_8859-1", MADB_CS_APPROX},
{"ISO_8859-1", "ISO-8859-1", "latin1", MADB_CS_APPROX}, {"ISO8859-1", "ISO-8859-1", "latin1", "ISO_8859-1", MADB_CS_APPROX},
{"ISO88591", "ISO-8859-1", "latin1", MADB_CS_APPROX}, {"ISO_8859-1", "ISO-8859-1", "latin1", "ISO_8859-1", MADB_CS_APPROX},
{"ISO-8859-13", "ISO-8859-13", "latin7", MADB_CS_EXACT}, {"ISO88591", "ISO-8859-1", "latin1", "ISO_8859-1", MADB_CS_APPROX},
{"ISO8859-13", "ISO-8859-13", "latin7", MADB_CS_EXACT}, {"ISO-8859-13", "ISO-8859-13", "latin7", "ISO_8859-13", MADB_CS_EXACT},
{"ISO_8859-13", "ISO-8859-13", "latin7", MADB_CS_EXACT}, {"ISO8859-13", "ISO-8859-13", "latin7", "ISO_8859-13", MADB_CS_EXACT},
{"ISO885913", "ISO-8859-13", "latin7", MADB_CS_EXACT}, {"ISO_8859-13", "ISO-8859-13", "latin7", "ISO_8859-13", MADB_CS_EXACT},
{"ISO-8859-15", "ISO-8859-15", "latin9", MADB_CS_UNSUPPORTED}, {"ISO885913", "ISO-8859-13", "latin7", "ISO_8859-13", MADB_CS_EXACT},
{"ISO8859-15", "ISO-8859-15", "latin9", MADB_CS_UNSUPPORTED}, {"ISO-8859-15", "ISO-8859-15", "latin9", "ISO_8859-15", MADB_CS_UNSUPPORTED},
{"ISO_8859-15", "ISO-8859-15", "latin9", MADB_CS_UNSUPPORTED}, {"ISO8859-15", "ISO-8859-15", "latin9", "ISO_8859-15", MADB_CS_UNSUPPORTED},
{"ISO885915", "ISO-8859-15", "latin9", MADB_CS_UNSUPPORTED}, {"ISO_8859-15", "ISO-8859-15", "latin9", "ISO_8859-15", MADB_CS_UNSUPPORTED},
{"ISO-8859-2", "ISO-8859-2", "latin2", MADB_CS_EXACT}, {"ISO885915", "ISO-8859-15", "latin9", "ISO_8859-15", MADB_CS_UNSUPPORTED},
{"ISO8859-2", "ISO-8859-2", "latin2", MADB_CS_EXACT}, {"ISO-8859-2", "ISO-8859-2", "latin2", "ISO_8859-2", MADB_CS_EXACT},
{"ISO_8859-2", "ISO-8859-2", "latin2", MADB_CS_EXACT}, {"ISO8859-2", "ISO-8859-2", "latin2", "ISO_8859-2", MADB_CS_EXACT},
{"ISO88592", "ISO-8859-2", "latin2", MADB_CS_EXACT}, {"ISO_8859-2", "ISO-8859-2", "latin2", "ISO_8859-2", MADB_CS_EXACT},
{"ISO-8859-7", "ISO-8859-7", "greek", MADB_CS_EXACT}, {"ISO88592", "ISO-8859-2", "latin2", "ISO_8859-2", MADB_CS_EXACT},
{"ISO8859-7", "ISO-8859-7", "greek", MADB_CS_EXACT}, {"ISO-8859-7", "ISO-8859-7", "greek", "ISO_8859-7", MADB_CS_EXACT},
{"ISO_8859-7", "ISO-8859-7", "greek", MADB_CS_EXACT}, {"ISO8859-7", "ISO-8859-7", "greek", "ISO_8859-7", MADB_CS_EXACT},
{"ISO88597", "ISO-8859-7", "greek", MADB_CS_EXACT}, {"ISO_8859-7", "ISO-8859-7", "greek", "ISO_8859-7", MADB_CS_EXACT},
{"ISO-8859-8", "ISO-8859-8", "hebrew", MADB_CS_EXACT}, {"ISO88597", "ISO-8859-7", "greek", "ISO_8859-7", MADB_CS_EXACT},
{"ISO8859-8", "ISO-8859-8", "hebrew", MADB_CS_EXACT}, {"ISO-8859-8", "ISO-8859-8", "hebrew", "ISO_8859-8", MADB_CS_EXACT},
{"ISO_8859-8", "ISO-8859-8", "hebrew", MADB_CS_EXACT}, {"ISO8859-8", "ISO-8859-8", "hebrew", "ISO_8859-8", MADB_CS_EXACT},
{"ISO88598", "ISO-8859-8", "hebrew", MADB_CS_EXACT}, {"ISO_8859-8", "ISO-8859-8", "hebrew", "ISO_8859-8", MADB_CS_EXACT},
{"ISO-8859-9", "ISO-8859-9", "latin5", MADB_CS_EXACT}, {"ISO88598", "ISO-8859-8", "hebrew", "ISO_8859-8", MADB_CS_EXACT},
{"ISO8859-9", "ISO-8859-9", "latin5", MADB_CS_EXACT}, {"ISO-8859-9", "ISO-8859-9", "latin5", "ISO_8859-9", MADB_CS_EXACT},
{"ISO_8859-9", "ISO-8859-9", "latin5", MADB_CS_EXACT}, {"ISO8859-9", "ISO-8859-9", "latin5", "ISO_8859-9", MADB_CS_EXACT},
{"ISO88599", "ISO-8859-9", "latin5", MADB_CS_EXACT}, {"ISO_8859-9", "ISO-8859-9", "latin5", "ISO_8859-9", MADB_CS_EXACT},
{"ISO-8859-4", "ISO-8859-4", NULL, MADB_CS_UNSUPPORTED}, {"ISO88599", "ISO-8859-9", "latin5", "ISO_8859-9", MADB_CS_EXACT},
{"ISO8859-4", "ISO-8859-4", NULL, MADB_CS_UNSUPPORTED}, {"ISO-8859-4", "ISO-8859-4", NULL, "ISO_8859-4", MADB_CS_UNSUPPORTED},
{"ISO_8859-4", "ISO-8859-4", NULL, MADB_CS_UNSUPPORTED}, {"ISO8859-4", "ISO-8859-4", NULL, "ISO_8859-4", MADB_CS_UNSUPPORTED},
{"ISO88594", "ISO-8859-4", NULL, MADB_CS_UNSUPPORTED}, {"ISO_8859-4", "ISO-8859-4", NULL, "ISO_8859-4", MADB_CS_UNSUPPORTED},
{"ISO-8859-5", "ISO-8859-5", NULL, MADB_CS_UNSUPPORTED}, {"ISO88594", "ISO-8859-4", NULL, "ISO_8859-4", MADB_CS_UNSUPPORTED},
{"ISO8859-5", "ISO-8859-5", NULL, MADB_CS_UNSUPPORTED}, {"ISO-8859-5", "ISO-8859-5", NULL, "ISO_8859-5", MADB_CS_UNSUPPORTED},
{"ISO_8859-5", "ISO-8859-5", NULL, MADB_CS_UNSUPPORTED}, {"ISO8859-5", "ISO-8859-5", NULL, "ISO_8859-5", MADB_CS_UNSUPPORTED},
{"ISO88595", "ISO-8859-5", NULL, MADB_CS_UNSUPPORTED}, {"ISO_8859-5", "ISO-8859-5", NULL, "ISO_8859-5", MADB_CS_UNSUPPORTED},
{"KOI8-R", "KOI8-R", "koi8r", MADB_CS_EXACT}, {"ISO88595", "ISO-8859-5", NULL, "ISO_8859-5", MADB_CS_UNSUPPORTED},
{"koi8r", "KOI8-R", "koi8r", MADB_CS_EXACT}, {"KOI8-R", "KOI8-R", "koi8r", "KOI8R", MADB_CS_EXACT},
{"KOI8-U", "KOI8-U", "koi8u", MADB_CS_EXACT}, {"koi8r", "KOI8-R", "koi8r", "KOI8R", MADB_CS_EXACT},
{"koi8u", "KOI8-U", "koi8u", MADB_CS_EXACT}, {"KOI8-U", "KOI8-U", "koi8u", "KOI8U", MADB_CS_EXACT},
{"koi8t", "KOI8-T", NULL, MADB_CS_UNSUPPORTED}, {"koi8u", "KOI8-U", "koi8u", "KOI8U", MADB_CS_EXACT},
{"KOI8-T", "KOI8-T", NULL, MADB_CS_UNSUPPORTED}, {"koi8t", "KOI8-T", NULL, "KOI8-T", MADB_CS_UNSUPPORTED},
{"SJIS", "SHIFT_JIS", "sjis", MADB_CS_EXACT}, {"KOI8-T", "KOI8-T", NULL, "KOI8-T", MADB_CS_UNSUPPORTED},
{"Shift-JIS", "SHIFT_JIS", "sjis", MADB_CS_EXACT}, {"SJIS", "SHIFT_JIS", "sjis", "SJIS", MADB_CS_EXACT},
{"ansi1251", "Cyrillic", "cp1251", MADB_CS_EXACT}, {"Shift-JIS", "SHIFT_JIS", "sjis", "SJIS", MADB_CS_EXACT},
{"cp1251", "Cyrillic", "cp1251", MADB_CS_EXACT}, {"ansi1251", "Cyrillic", "cp1251", "CP1251", MADB_CS_EXACT},
{"armscii8", "Armenian", "armscii8", MADB_CS_EXACT}, {"cp1251", "Cyrillic", "cp1251", "CP1251", MADB_CS_EXACT},
{"armscii-8", "Armenian", "armscii8", MADB_CS_EXACT}, {"armscii8", "Armenian", "armscii8", "ASMSCII-8", MADB_CS_EXACT},
{"big5hkscs", "Big5-HKSCS", NULL, MADB_CS_UNSUPPORTED}, {"armscii-8", "Armenian", "armscii8", "ASMSCII-8", MADB_CS_EXACT},
{"cp1255", "Hebrew", "cp1255", MADB_CS_EXACT}, {"big5hkscs", "Big5-HKSCS", NULL, NULL, MADB_CS_UNSUPPORTED},
{"eucCN", "GB-2312", "gb2312", MADB_CS_EXACT}, {"cp1255", "Hebrew", "cp1255", "CP1255", MADB_CS_EXACT},
{"eucJP", "UJIS", "ujis", MADB_CS_EXACT}, {"eucCN", "GB-2312", "gb2312", "GB2312", MADB_CS_EXACT},
{"eucKR", "EUC-KR", "euckr", MADB_CS_EXACT}, {"eucJP", "UJIS", "ujis", "UJIS", MADB_CS_EXACT},
{"euctw", "EUC-TW", NULL, MADB_CS_UNSUPPORTED}, {"eucKR", "EUC-KR", "euckr", "EUCKR", MADB_CS_EXACT},
{"gb18030", "GB 18030-2000", "gb18030", MADB_CS_UNSUPPORTED}, {"euctw", "EUC-TW", NULL, NULL, MADB_CS_UNSUPPORTED},
{"gb2312", "GB2312", "gb2312", MADB_CS_EXACT}, {"gb18030", "GB 18030-2000", "gb18030", "GB18030", MADB_CS_UNSUPPORTED},
{"gbk", "GBK", "gbk", MADB_CS_EXACT}, {"gb2312", "GB2312", "gb2312", "GB2312", MADB_CS_EXACT},
{"georgianps", "Georgian", "geostd8", MADB_CS_EXACT}, {"gbk", "GBK", "gbk", "GBK", MADB_CS_EXACT},
{"utf8", "UTF8", "utf8", MADB_CS_EXACT}, {"georgianps", "Georgian", "geostd8", "GEORGIAN-PS", MADB_CS_EXACT},
{"utf-8", "UTF8", "utf8", MADB_CS_EXACT}, {"utf8", "UTF8", "utf8", "UTF8", MADB_CS_EXACT},
{"utf-8", "UTF8", "utf8", "UTF8", MADB_CS_EXACT},
#endif #endif
{NULL, NULL, NULL, 0} {NULL, NULL, NULL, NULL, 0}
}; };
/* }}} */ /* }}} */
@@ -1113,3 +1117,29 @@ int madb_get_windows_cp(const char *charset)
#endif #endif
/* }}} */ /* }}} */
size_t convert_string(const char *from, size_t *from_len, CHARSET_INFO *from_cs,
char *to, size_t *to_len, CHARSET_INFO *to_cs)
{
iconv_t conv= 0;
size_t rc= -1;
size_t save_len= *to_len;
char to_encoding[128];
/* check if conversion is supported */
if (!from_cs || !from_cs->encoding || !from_cs->encoding[0] ||
!to_cs || !to_cs->encoding || !to_cs->encoding[0])
goto error;
snprintf(to_encoding, 128, "%s//TRANSLIT", to_cs->encoding);
if ((conv= iconv_open(to_encoding, from_cs->encoding)) == (iconv_t)-1)
goto error;
if ((rc= iconv(conv, (char **)&from, from_len, &to, to_len)) == -1)
goto error;
rc= save_len - *to_len;
error:
if (conv != (iconv_t)-1)
iconv_close(conv);
return rc;
}

View File

@@ -416,7 +416,7 @@ net_real_write(NET *net,const char *packet,size_t len)
my_progname,vio_errno(net->vio)); my_progname,vio_errno(net->vio));
#endif /* EXTRA_DEBUG */ #endif /* EXTRA_DEBUG */
net->error=2; /* Close socket */ net->error=2; /* Close socket */
net->last_errno= (interrupted ? net->last_errno= (interrupted ?
ER_NET_WRITE_INTERRUPTED : ER_NET_ERROR_ON_WRITE); ER_NET_WRITE_INTERRUPTED : ER_NET_ERROR_ON_WRITE);
goto end; goto end;
} }

View File

@@ -19,9 +19,10 @@ ENABLE_TESTING()
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include ${CMAKE_BINARY_DIR}/include
${CMAKE_SOURCE_DIR}/unittest/mytap) ${CMAKE_SOURCE_DIR}/unittest/mytap)
ADD_DEFINITIONS(-DLIBMARIADB)
SET(API_TESTS "basic-t" "fetch" "charset" "logs" "cursor" "errors" "view" "ps" "ps_bugs" SET(API_TESTS "basic-t" "fetch" "charset" "logs" "cursor" "errors" "view" "ps" "ps_bugs"
"sp" "result" "connection" "misc" "ssl" "ps_new" "sqlite3" "thread") "sp" "result" "connection" "misc" "ssl" "ps_new" "sqlite3" "thread" "cs_conv")
FOREACH(API_TEST ${API_TESTS}) FOREACH(API_TEST ${API_TESTS})
ADD_EXECUTABLE(${API_TEST} ${API_TEST}.c) ADD_EXECUTABLE(${API_TEST} ${API_TEST}.c)

View File

@@ -0,0 +1,128 @@
/*
Copyright (c) 2013 Monty Program AB. 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 as published
by the Free Software Foundation; version 2 of the License.
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
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 "my_test.h"
#include <locale.h>
typedef struct {
char *cs_from;
char *cs_to;
char *hex_source;
char *source;
size_t len;
} CS_CONV;
static int test_cs_conversion(MYSQL *mysql)
{
CS_CONV cs_conv[]= { {"latin1", "utf8", NULL, "Günter André",0},
{"koi8r", "utf8", NULL, "×ÁÓÑ", 0},
{"koi8r", "utf8", NULL, "÷áóñ", 0},
{"koi8r", "utf8", NULL, "É", 0},
{"koi8r", "utf8", NULL, "Ê", 0},
{"ucs2", "utf8", "0x0041040B", "\x00\x41\x04\x0B", 4},
{"ucs2", "utf8", "0x039C03C903B4", "\x03\x9C\x03\xC9\x03\xB4",6},
{"ucs2", "utf8", "0x039C03C903B403B11F770308", "\x03\x9C\x03\xC9\x03\xB4\x03\xB1\x1F\x77\x03\x08", 0},
{"ucs2", "utf8", "0x0030", "\x00\x30", 2},
{"ucs2", "utf8", NULL, "£Ã£±", 0},
{"ucs2", "utf8", NULL, "£Ã£±", 0},
{"ucs2", "utf8", NULL, "£Ã£±", 0},
{"ucs2", "sjis", NULL, "£Ã£±", 0},
{"ucs2", "ujis", NULL, "£Ã£±", 0},
{"eucjpms", "ujis", NULL, "C1", 0},
{"latin1", "sjis", NULL, "C1", 0},
{"utf8", "latin1", NULL, "C1", 0},
/* C8 pane not supported
{"big5", "utf8", "0xC84041", "\xC8\x40\x41", 0}, */
{"latin1", "utf8", "0xFF8F", "\xFF\x8F", 0},
{NULL, NULL, NULL}
};
int i= 0, rc;
setlocale(LC_ALL, "en_GB");
while (cs_conv[i].cs_from)
{
char query[1024];
size_t from_len, to_len= 1024;
CHARSET_INFO *cs_from, *cs_to;
MYSQL_RES *res;
MYSQL_ROW row;
char str_converted[1024];
char str_expected[1024];
memset(str_converted, 0, 1024);
memset(str_expected, 0, 1024);
FAIL_IF(!(cs_from= get_charset_by_name(cs_conv[i].cs_from)), "invalid character set");
FAIL_IF(!(cs_to= get_charset_by_name(cs_conv[i].cs_to)), "invalid character set");
snprintf(query, 1024, "SET NAMES %s", cs_conv[i].cs_to);
rc= mysql_query(mysql, query);
check_mysql_rc(rc, mysql);
snprintf(query, 1024, "SELECT CONVERT(_%s %s%s%s using %s)",
cs_conv[i].cs_from,
cs_conv[i].hex_source ? "" : "\"",
cs_conv[i].hex_source ? cs_conv[i].hex_source : cs_conv[i].source,
cs_conv[i].hex_source ? "" : "\"",
cs_conv[i].cs_to);
rc= mysql_query(mysql, query);
check_mysql_rc(rc, mysql);
res= mysql_store_result(mysql);
FAIL_IF(!res, "expected result set");
FAIL_IF(!(row= mysql_fetch_row(res)), "fetching row failed");
strcpy(str_converted, row[0]);
mysql_free_result(res);
from_len= cs_conv[i].len ? cs_conv[i].len : strlen(cs_conv[i].source);
FAIL_IF(convert_string(cs_conv[i].source, &from_len, cs_from,
str_expected, &to_len, cs_to) < 1, "conversion error occured");
if (strcmp(str_converted, str_expected))
{
diag("Error converting from %s to %s\ndb:'%s' library: '%s'",
cs_from->csname, cs_to->csname, str_converted, str_expected);
return FAIL;
}
i++;
}
return OK;
}
struct my_tests_st my_tests[] = {
{"test_cs_conversion", test_cs_conversion, TEST_CONNECTION_NEW, 0, NULL, NULL},
{NULL, NULL, 0, 0, NULL, 0}
};
int main(int argc, char **argv)
{
if (argc > 1)
get_options(argc, argv);
get_envvars();
run_tests(my_tests);
return(exit_status());
}

14
win-iconv/iconv.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef _LIBICONV_H
#define _LIBICONV_H
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void* iconv_t;
iconv_t iconv_open(const char *tocode, const char *fromcode);
int iconv_close(iconv_t cd);
size_t iconv(iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
#ifdef __cplusplus
}
#endif
#endif//_LIBICONV_H

54
win-iconv/mlang.h Normal file
View File

@@ -0,0 +1,54 @@
HRESULT WINAPI ConvertINetString(
LPDWORD lpdwMode,
DWORD dwSrcEncoding,
DWORD dwDstEncoding,
LPCSTR lpSrcStr,
LPINT lpnSrcSize,
LPBYTE lpDstStr,
LPINT lpnDstSize
);
HRESULT WINAPI ConvertINetMultiByteToUnicode(
LPDWORD lpdwMode,
DWORD dwSrcEncoding,
LPCSTR lpSrcStr,
LPINT lpnMultiCharCount,
LPWSTR lpDstStr,
LPINT lpnWideCharCount
);
HRESULT WINAPI ConvertINetUnicodeToMultiByte(
LPDWORD lpdwMode,
DWORD dwEncoding,
LPCWSTR lpSrcStr,
LPINT lpnWideCharCount,
LPSTR lpDstStr,
LPINT lpnMultiCharCount
);
HRESULT WINAPI IsConvertINetStringAvailable(
DWORD dwSrcEncoding,
DWORD dwDstEncoding
);
HRESULT WINAPI LcidToRfc1766A(
LCID Locale,
LPSTR pszRfc1766,
int nChar
);
HRESULT WINAPI LcidToRfc1766W(
LCID Locale,
LPWSTR pszRfc1766,
int nChar
);
HRESULT WINAPI Rfc1766ToLcidA(
LCID *pLocale,
LPSTR pszRfc1766
);
HRESULT WINAPI Rfc1766ToLcidW(
LCID *pLocale,
LPWSTR pszRfc1766
);

2051
win-iconv/win_iconv.c Normal file

File diff suppressed because it is too large Load Diff