Commit e56fb196 authored by bar@bar.mysql.r18.ru's avatar bar@bar.mysql.r18.ru

sql_type() is now ucs2 compatible

parent bedaf376
...@@ -207,10 +207,17 @@ bool Field::send_binary(Protocol *protocol) ...@@ -207,10 +207,17 @@ bool Field::send_binary(Protocol *protocol)
void Field_num::add_zerofill_and_unsigned(String &res) const void Field_num::add_zerofill_and_unsigned(String &res) const
{ {
if (unsigned_flag) uint oldlen=res.length();
res.append(" unsigned"); if (oldlen < res.alloced_length())
if (zerofill) {
res.append(" zerofill"); uint len=res.alloced_length()-oldlen;
char *end=(char*)(res.ptr()+oldlen);
CHARSET_INFO *cs=res.charset();
len=cs->snprintf(cs,end,len,"%s%s",
unsigned_flag ? " unsigned" : "",
zerofill ? " zerofill" : "");
res.length(len+oldlen);
}
} }
void Field_num::make_field(Send_field *field) void Field_num::make_field(Send_field *field)
...@@ -242,12 +249,17 @@ void Field_str::make_field(Send_field *field) ...@@ -242,12 +249,17 @@ void Field_str::make_field(Send_field *field)
void Field_str::add_binary_or_charset(String &res) const void Field_str::add_binary_or_charset(String &res) const
{ {
if (binary()) uint oldlen=res.length();
res.append(" binary"); if (oldlen < res.alloced_length())
else
{ {
res.append(" character set "); CHARSET_INFO *cs=res.charset();
res.append(field_charset->name); uint len=res.alloced_length() - oldlen;
char *end=(char*)(res.ptr()+oldlen);
if (binary())
len=cs->snprintf(cs,end,len," binary");
else
len=cs->snprintf(cs,end,len," character set %s",field_charset->name);
res.length(oldlen+len);
} }
} }
...@@ -333,7 +345,10 @@ bool Field::optimize_range(uint idx) ...@@ -333,7 +345,10 @@ bool Field::optimize_range(uint idx)
void Field_null::sql_type(String &res) const void Field_null::sql_type(String &res) const
{ {
res.copy("null",4,my_charset_latin1,res.charset()); CHARSET_INFO *cs=res.charset();
uint len;
len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"null");
res.length(len);
} }
...@@ -909,13 +924,15 @@ void Field_decimal::sort_string(char *to,uint length) ...@@ -909,13 +924,15 @@ void Field_decimal::sort_string(char *to,uint length)
void Field_decimal::sql_type(String &res) const void Field_decimal::sql_type(String &res) const
{ {
CHARSET_INFO *cs=res.charset();
uint tmp=field_length; uint tmp=field_length;
uint len; uint len;
if (!unsigned_flag) if (!unsigned_flag)
tmp--; tmp--;
if (dec) if (dec)
tmp--; tmp--;
len=sprintf((char*) res.ptr(),"decimal(%d,%d)",tmp,dec); len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"decimal(%d,%d)",tmp,dec);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -1115,7 +1132,9 @@ void Field_tiny::sort_string(char *to,uint length __attribute__((unused))) ...@@ -1115,7 +1132,9 @@ void Field_tiny::sort_string(char *to,uint length __attribute__((unused)))
void Field_tiny::sql_type(String &res) const void Field_tiny::sql_type(String &res) const
{ {
uint len=sprintf((char*) res.ptr(),"tinyint(%d)",(int) field_length); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"tinyint(%d)",(int) field_length);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -1387,7 +1406,9 @@ void Field_short::sort_string(char *to,uint length __attribute__((unused))) ...@@ -1387,7 +1406,9 @@ void Field_short::sort_string(char *to,uint length __attribute__((unused)))
void Field_short::sql_type(String &res) const void Field_short::sql_type(String &res) const
{ {
uint len=sprintf((char*) res.ptr(),"smallint(%d)",(int) field_length); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"smallint(%d)",(int) field_length);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -1603,7 +1624,9 @@ void Field_medium::sort_string(char *to,uint length __attribute__((unused))) ...@@ -1603,7 +1624,9 @@ void Field_medium::sort_string(char *to,uint length __attribute__((unused)))
void Field_medium::sql_type(String &res) const void Field_medium::sql_type(String &res) const
{ {
uint len=sprintf((char*) res.ptr(),"mediumint(%d)",(int) field_length); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"mediumint(%d)",(int) field_length);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -1865,7 +1888,9 @@ void Field_long::sort_string(char *to,uint length __attribute__((unused))) ...@@ -1865,7 +1888,9 @@ void Field_long::sort_string(char *to,uint length __attribute__((unused)))
void Field_long::sql_type(String &res) const void Field_long::sql_type(String &res) const
{ {
uint len=sprintf((char*) res.ptr(),"int(%d)",(int) field_length); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"int(%d)",(int) field_length);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -2095,7 +2120,9 @@ void Field_longlong::sort_string(char *to,uint length __attribute__((unused))) ...@@ -2095,7 +2120,9 @@ void Field_longlong::sort_string(char *to,uint length __attribute__((unused)))
void Field_longlong::sql_type(String &res) const void Field_longlong::sql_type(String &res) const
{ {
uint len=sprintf((char*) res.ptr(),"bigint(%d)",(int) field_length); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"bigint(%d)",(int) field_length);
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
} }
...@@ -2360,15 +2387,16 @@ bool Field_float::send_binary(Protocol *protocol) ...@@ -2360,15 +2387,16 @@ bool Field_float::send_binary(Protocol *protocol)
void Field_float::sql_type(String &res) const void Field_float::sql_type(String &res) const
{ {
CHARSET_INFO *cs=res.charset();
uint len; uint len;
if (dec == NOT_FIXED_DEC) if (dec == NOT_FIXED_DEC)
{ {
strmov((char*) res.ptr(),"float"); len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),"float");
len=5;
} }
else else
{ {
len=sprintf((char*) res.ptr(),"float(%d,%d)",(int) field_length,dec); len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"float(%d,%d)",(int) field_length,dec);
} }
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
...@@ -2619,15 +2647,16 @@ void Field_double::sort_string(char *to,uint length __attribute__((unused))) ...@@ -2619,15 +2647,16 @@ void Field_double::sort_string(char *to,uint length __attribute__((unused)))
void Field_double::sql_type(String &res) const void Field_double::sql_type(String &res) const
{ {
CHARSET_INFO *cs=res.charset();
uint len; uint len;
if (dec == NOT_FIXED_DEC) if (dec == NOT_FIXED_DEC)
{ {
strmov((char*) res.ptr(),"double"); len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),"double");
len=6;
} }
else else
{ {
len=sprintf((char*) res.ptr(),"double(%d,%d)",(int) field_length,dec); len=cs->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
"double(%d,%d)",(int) field_length,dec);
} }
res.length(len); res.length(len);
add_zerofill_and_unsigned(res); add_zerofill_and_unsigned(res);
...@@ -2960,7 +2989,9 @@ void Field_timestamp::sort_string(char *to,uint length __attribute__((unused))) ...@@ -2960,7 +2989,9 @@ void Field_timestamp::sort_string(char *to,uint length __attribute__((unused)))
void Field_timestamp::sql_type(String &res) const void Field_timestamp::sql_type(String &res) const
{ {
res.copy("timestamp", 9, my_charset_latin1, res.charset()); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"timestamp");
res.length(len);
} }
...@@ -3152,7 +3183,9 @@ void Field_time::sort_string(char *to,uint length __attribute__((unused))) ...@@ -3152,7 +3183,9 @@ void Field_time::sort_string(char *to,uint length __attribute__((unused)))
void Field_time::sql_type(String &res) const void Field_time::sql_type(String &res) const
{ {
res.copy("time",4,my_charset_latin1, res.charset()); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"time");
res.length(len);
} }
/**************************************************************************** /****************************************************************************
...@@ -3242,9 +3275,10 @@ String *Field_year::val_str(String *val_buffer, ...@@ -3242,9 +3275,10 @@ String *Field_year::val_str(String *val_buffer,
void Field_year::sql_type(String &res) const void Field_year::sql_type(String &res) const
{ {
ulong length=my_sprintf((char*) res.ptr(), CHARSET_INFO *cs=res.charset();
((char*) res.ptr(),"year(%d)",(int) field_length)); ulong len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),
res.length(length); "year(%d)",(int) field_length);
res.length(len);
} }
...@@ -3414,7 +3448,9 @@ void Field_date::sort_string(char *to,uint length __attribute__((unused))) ...@@ -3414,7 +3448,9 @@ void Field_date::sort_string(char *to,uint length __attribute__((unused)))
void Field_date::sql_type(String &res) const void Field_date::sql_type(String &res) const
{ {
res.copy("date",4,my_charset_latin1, res.charset()); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"date");
res.length(len);
} }
/**************************************************************************** /****************************************************************************
...@@ -3577,7 +3613,9 @@ void Field_newdate::sort_string(char *to,uint length __attribute__((unused))) ...@@ -3577,7 +3613,9 @@ void Field_newdate::sort_string(char *to,uint length __attribute__((unused)))
void Field_newdate::sql_type(String &res) const void Field_newdate::sql_type(String &res) const
{ {
res.copy("date",4,my_charset_latin1, res.charset()); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"date");
res.length(len);
} }
...@@ -3801,7 +3839,9 @@ void Field_datetime::sort_string(char *to,uint length __attribute__((unused))) ...@@ -3801,7 +3839,9 @@ void Field_datetime::sort_string(char *to,uint length __attribute__((unused)))
void Field_datetime::sql_type(String &res) const void Field_datetime::sql_type(String &res) const
{ {
res.copy("datetime",8,my_charset_latin1, res.charset()); CHARSET_INFO *cs=res.charset();
uint len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"datetime");
res.length(len);
} }
/**************************************************************************** /****************************************************************************
...@@ -3930,13 +3970,14 @@ void Field_string::sort_string(char *to,uint length) ...@@ -3930,13 +3970,14 @@ void Field_string::sort_string(char *to,uint length)
void Field_string::sql_type(String &res) const void Field_string::sql_type(String &res) const
{ {
ulong length= my_sprintf((char*) res.ptr(), CHARSET_INFO *cs=res.charset();
((char*) res.ptr(), "%s(%d)", ulong length= cs->snprintf(cs,(char*) res.ptr(),
res.alloced_length(), "%s(%d)",
(field_length > 3 && (field_length > 3 &&
(table->db_options_in_use & (table->db_options_in_use &
HA_OPTION_PACK_RECORD) ? HA_OPTION_PACK_RECORD) ?
"varchar" : "char"), "varchar" : "char"),
(int) field_length)); (int) field_length);
res.length(length); res.length(length);
add_binary_or_charset(res); add_binary_or_charset(res);
} }
...@@ -4126,9 +4167,10 @@ void Field_varstring::sort_string(char *to,uint length) ...@@ -4126,9 +4167,10 @@ void Field_varstring::sort_string(char *to,uint length)
void Field_varstring::sql_type(String &res) const void Field_varstring::sql_type(String &res) const
{ {
ulong length= my_sprintf((char*) res.ptr(), CHARSET_INFO *cs=res.charset();
((char*) res.ptr(),"varchar(%u)", ulong length= cs->snprintf(cs,(char*) res.ptr(),
field_length)); res.alloced_length(),"varchar(%u)",
field_length);
res.length(length); res.length(length);
add_binary_or_charset(res); add_binary_or_charset(res);
} }
...@@ -4619,20 +4661,22 @@ void Field_blob::sort_string(char *to,uint length) ...@@ -4619,20 +4661,22 @@ void Field_blob::sort_string(char *to,uint length)
void Field_blob::sql_type(String &res) const void Field_blob::sql_type(String &res) const
{ {
CHARSET_INFO *cs=res.charset();
const char *str; const char *str;
uint len;
switch (packlength) { switch (packlength) {
default: str="tiny"; break; default: str="tiny"; break;
case 2: str=""; break; case 2: str=""; break;
case 3: str="medium"; break; case 3: str="medium"; break;
case 4: str="long"; break; case 4: str="long"; break;
} }
res.set(str,(uint) strlen(str),my_charset_latin1);
res.append(binary() ? "blob" : "text"); len=cs->snprintf(cs,(char*)res.ptr(),res.alloced_length(),"%s%s%s%s",
if (!binary()) str,
{ binary() ? "blob" : "text",
res.append(" character set "); binary() ? "" : " character set ",
res.append(field_charset->name); binary() ? "" : field_charset->name);
} res.length(len);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment