mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
less use of system_charset_info
This commit is contained in:
@ -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)
|
|||||||
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()
|
|||||||
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;
|
||||||
|
|
||||||
|
48
sql/time.cc
48
sql/time.cc
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
/* 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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
/* 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)
|
|||||||
|
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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;
|
||||||
|
Reference in New Issue
Block a user