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