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

less use of system_charset_info

parent 1bba969b
......@@ -855,12 +855,13 @@ String *Field_decimal::val_str(String *val_buffer __attribute__((unused)),
String *val_ptr)
{
char *str;
CHARSET_INFO *cs=current_thd->variables.thd_charset;
for (str=ptr ; *str == ' ' ; str++) ;
uint tmp_length=(uint) (str-ptr);
if (field_length < tmp_length) // Error in data
val_ptr->length(0);
else
val_ptr->set((const char*) str,field_length-tmp_length,default_charset_info);
val_ptr->copy((const char*) str,field_length-tmp_length,my_charset_latin1,cs);
return val_ptr;
}
......
......@@ -878,7 +878,7 @@ String *Item_func_case::val_str(String *str)
longlong Item_func_case::val_int()
{
char buff[MAX_FIELD_WIDTH];
String dummy_str(buff,sizeof(buff),default_charset_info);
String dummy_str(buff,sizeof(buff),thd_charset());
Item *item=find_item(&dummy_str);
longlong res;
......@@ -895,7 +895,7 @@ longlong Item_func_case::val_int()
double Item_func_case::val()
{
char buff[MAX_FIELD_WIDTH];
String dummy_str(buff,sizeof(buff),default_charset_info);
String dummy_str(buff,sizeof(buff),thd_charset());
Item *item=find_item(&dummy_str);
double res;
......
......@@ -268,13 +268,13 @@ void find_date(string pos,uint *vek,uint flag)
DBUG_PRINT("enter",("pos: '%s' flag: %d",pos,flag));
bzero((char*) vek,sizeof(int)*4);
while (*pos && !my_isdigit(system_charset_info,*pos))
while (*pos && !my_isdigit(my_charset_latin1,*pos))
pos++;
length=(uint) strlen(pos);
for (uint i=0 ; i< 3; i++)
{
start=pos; value=0;
while (my_isdigit(system_charset_info,pos[0]) &&
while (my_isdigit(my_charset_latin1,pos[0]) &&
((pos-start) < 2 || ((pos-start) < 4 && length >= 8 &&
!(flag & 3))))
{
......@@ -282,8 +282,8 @@ void find_date(string pos,uint *vek,uint flag)
pos++;
}
vek[flag & 3]=value; flag>>=2;
while (*pos && (my_ispunct(system_charset_info,*pos) ||
my_isspace(system_charset_info,*pos)))
while (*pos && (my_ispunct(my_charset_latin1,*pos) ||
my_isspace(my_charset_latin1,*pos)))
pos++;
}
DBUG_PRINT("exit",("year: %d month: %d day: %d",vek[0],vek[1],vek[2]));
......@@ -452,7 +452,7 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
DBUG_PRINT("enter",("str: %.*s",length,str));
// Skip garbage
for (; str != end && !my_isdigit(system_charset_info, *str) ; str++) ;
for (; str != end && !my_isdigit(my_charset_latin1, *str) ; str++) ;
if (str == end)
DBUG_RETURN(TIMESTAMP_NONE);
/*
......@@ -460,15 +460,15 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
If length= 8 or >= 14 then year is of format YYYY.
(YYYY-MM-DD, YYYYMMDD, YYYYYMMDDHHMMSS)
*/
for (pos=str; pos != end && my_isdigit(system_charset_info,*pos) ; pos++) ;
for (pos=str; pos != end && my_isdigit(my_charset_latin1,*pos) ; pos++) ;
digits= (uint) (pos-str);
year_length= (digits == 4 || digits == 8 || digits >= 14) ? 4 : 2;
field_length=year_length-1;
not_zero_date= 0;
for (i=0 ; i < 6 && str != end && my_isdigit(system_charset_info,*str) ; i++)
for (i=0 ; i < 6 && str != end && my_isdigit(my_charset_latin1,*str) ; i++)
{
uint tmp_value=(uint) (uchar) (*str++ - '0');
while (str != end && my_isdigit(system_charset_info,str[0]) &&
while (str != end && my_isdigit(my_charset_latin1,str[0]) &&
field_length--)
{
tmp_value=tmp_value*10 + (uint) (uchar) (*str - '0');
......@@ -481,11 +481,11 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
else if ( i != 5 ) // Skip inter-field delimiters
{
while (str != end &&
(my_ispunct(system_charset_info,*str) ||
my_isspace(system_charset_info,*str)))
(my_ispunct(my_charset_latin1,*str) ||
my_isspace(my_charset_latin1,*str)))
{
// Only allow space between days and hours
if (my_isspace(system_charset_info,*str) && i != 2)
if (my_isspace(my_charset_latin1,*str) && i != 2)
DBUG_RETURN(TIMESTAMP_NONE);
str++;
}
......@@ -494,12 +494,12 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
}
/* Handle second fractions */
if (i == 6 && (uint) (end-str) >= 2 && *str == '.' &&
my_isdigit(system_charset_info,str[1]))
my_isdigit(my_charset_latin1,str[1]))
{
str++;
uint tmp_value=(uint) (uchar) (*str - '0');
field_length=3;
while (str++ != end && my_isdigit(system_charset_info,str[0]) &&
while (str++ != end && my_isdigit(my_charset_latin1,str[0]) &&
field_length--)
tmp_value=tmp_value*10 + (uint) (uchar) (*str - '0');
date[6]=tmp_value;
......@@ -522,7 +522,7 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
{
for (; str != end ; str++)
{
if (!my_isspace(system_charset_info, *str))
if (!my_isspace(my_charset_latin1, *str))
{
not_zero_date= 1; // Give warning
break;
......@@ -537,7 +537,7 @@ str_to_TIME(const char *str, uint length, TIME *l_time,bool fuzzy_date)
{
for (; str != end ; str++)
{
if (!my_isspace(system_charset_info,*str))
if (!my_isspace(my_charset_latin1,*str))
{
current_thd->cuted_fields++;
break;
......@@ -599,7 +599,7 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
l_time->neg=0;
for (; str != end &&
!my_isdigit(system_charset_info,*str) && *str != '-' ; str++)
!my_isdigit(my_charset_latin1,*str) && *str != '-' ; str++)
length--;
if (str != end && *str == '-')
{
......@@ -618,7 +618,7 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
}
/* Not a timestamp. Try to get this as a DAYS_TO_SECOND string */
for (value=0; str != end && my_isdigit(system_charset_info,*str) ; str++)
for (value=0; str != end && my_isdigit(my_charset_latin1,*str) ; str++)
value=value*10L + (long) (*str - '0');
if (*str == ' ')
......@@ -630,7 +630,7 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
LINT_INIT(state);
found_days=found_hours=0;
if ((uint) (end-str) > 1 && (*str == ' ' &&
my_isdigit(system_charset_info,str[1])))
my_isdigit(my_charset_latin1,str[1])))
{ // days !
date[0]=value;
state=1; // Assume next is hours
......@@ -638,7 +638,7 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
str++; // Skip space;
}
else if ((end-str) > 1 && *str == ':' &&
my_isdigit(system_charset_info,str[1]))
my_isdigit(my_charset_latin1,str[1]))
{
date[0]=0; // Assume we found hours
date[1]=value;
......@@ -660,11 +660,11 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
/* Read hours, minutes and seconds */
for (;;)
{
for (value=0; str != end && my_isdigit(system_charset_info,*str) ; str++)
for (value=0; str != end && my_isdigit(my_charset_latin1,*str) ; str++)
value=value*10L + (long) (*str - '0');
date[state++]=value;
if (state == 4 || (end-str) < 2 || *str != ':' ||
!my_isdigit(system_charset_info,str[1]))
!my_isdigit(my_charset_latin1,str[1]))
break;
str++; // Skip ':'
}
......@@ -684,12 +684,12 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
fractional:
/* Get fractional second part */
if ((end-str) >= 2 && *str == '.' && my_isdigit(system_charset_info,str[1]))
if ((end-str) >= 2 && *str == '.' && my_isdigit(my_charset_latin1,str[1]))
{
uint field_length=3;
str++; value=(uint) (uchar) (*str - '0');
while (++str != end &&
my_isdigit(system_charset_info,str[0]) &&
my_isdigit(my_charset_latin1,str[0]) &&
field_length--)
value=value*10 + (uint) (uchar) (*str - '0');
date[4]=value;
......@@ -715,7 +715,7 @@ bool str_to_time(const char *str,uint length,TIME *l_time)
{
do
{
if (!my_isspace(system_charset_info,*str))
if (!my_isspace(my_charset_latin1,*str))
{
current_thd->cuted_fields++;
break;
......
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