Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
fbad8dc3
Commit
fbad8dc3
authored
Dec 19, 2002
by
bar@bar.mysql.r18.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
less use of system_charset_info
parent
1bba969b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
27 deletions
+28
-27
sql/field.cc
sql/field.cc
+2
-1
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+2
-2
sql/time.cc
sql/time.cc
+24
-24
No files found.
sql/field.cc
View file @
fbad8dc3
...
@@ -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
;
}
}
...
...
sql/item_cmpfunc.cc
View file @
fbad8dc3
...
@@ -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
;
...
...
sql/time.cc
View file @
fbad8dc3
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment