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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
2c86049d
Commit
2c86049d
authored
Sep 07, 2004
by
bar@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug #5228 ORDER BY CAST(enumcol) sorts incorrectly under certain conditions
parent
09f681ba
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
61 additions
and
0 deletions
+61
-0
mysql-test/r/cast.result
mysql-test/r/cast.result
+23
-0
mysql-test/t/cast.test
mysql-test/t/cast.test
+13
-0
sql/item_func.h
sql/item_func.h
+2
-0
sql/item_timefunc.cc
sql/item_timefunc.cc
+18
-0
sql/item_timefunc.h
sql/item_timefunc.h
+5
-0
No files found.
mysql-test/r/cast.result
View file @
2c86049d
...
@@ -155,3 +155,26 @@ NULL
...
@@ -155,3 +155,26 @@ NULL
select cast(NULL as BINARY);
select cast(NULL as BINARY);
cast(NULL as BINARY)
cast(NULL as BINARY)
NULL
NULL
CREATE TABLE t1 (a enum ('aac','aab','aaa') not null);
INSERT INTO t1 VALUES ('aaa'),('aab'),('aac');
SELECT a, CAST(a AS CHAR) FROM t1 ORDER BY CAST(a AS UNSIGNED) ;
a CAST(a AS CHAR)
aac aac
aab aab
aaa aaa
SELECT a, CAST(a AS CHAR(3)) FROM t1 ORDER BY CAST(a AS CHAR(2)), a;
a CAST(a AS CHAR(3))
aac aac
aab aab
aaa aaa
SELECT a, CAST(a AS UNSIGNED) FROM t1 ORDER BY CAST(a AS CHAR) ;
a CAST(a AS UNSIGNED)
aaa 3
aab 2
aac 1
SELECT a, CAST(a AS CHAR(2)) FROM t1 ORDER BY CAST(a AS CHAR(3)), a;
a CAST(a AS CHAR(2))
aaa aa
aab aa
aac aa
DROP TABLE t1;
mysql-test/t/cast.test
View file @
2c86049d
...
@@ -95,3 +95,16 @@ select cast("2001-1-1" as datetime) = "2001-01-01 00:00:00";
...
@@ -95,3 +95,16 @@ select cast("2001-1-1" as datetime) = "2001-01-01 00:00:00";
select
cast
(
"1:2:3"
as
TIME
)
=
"1:02:03"
;
select
cast
(
"1:2:3"
as
TIME
)
=
"1:02:03"
;
select
cast
(
NULL
as
DATE
);
select
cast
(
NULL
as
DATE
);
select
cast
(
NULL
as
BINARY
);
select
cast
(
NULL
as
BINARY
);
#
# Bug #5228 ORDER BY CAST(enumcol) sorts incorrectly under certain conditions
#
CREATE
TABLE
t1
(
a
enum
(
'aac'
,
'aab'
,
'aaa'
)
not
null
);
INSERT
INTO
t1
VALUES
(
'aaa'
),(
'aab'
),(
'aac'
);
# these two should be in enum order
SELECT
a
,
CAST
(
a
AS
CHAR
)
FROM
t1
ORDER
BY
CAST
(
a
AS
UNSIGNED
)
;
SELECT
a
,
CAST
(
a
AS
CHAR
(
3
))
FROM
t1
ORDER
BY
CAST
(
a
AS
CHAR
(
2
)),
a
;
# these two should be in alphabetic order
SELECT
a
,
CAST
(
a
AS
UNSIGNED
)
FROM
t1
ORDER
BY
CAST
(
a
AS
CHAR
)
;
SELECT
a
,
CAST
(
a
AS
CHAR
(
2
))
FROM
t1
ORDER
BY
CAST
(
a
AS
CHAR
(
3
)),
a
;
DROP
TABLE
t1
;
sql/item_func.h
View file @
2c86049d
...
@@ -214,6 +214,7 @@ class Item_func_signed :public Item_int_func
...
@@ -214,6 +214,7 @@ class Item_func_signed :public Item_int_func
{
{
public:
public:
Item_func_signed
(
Item
*
a
)
:
Item_int_func
(
a
)
{}
Item_func_signed
(
Item
*
a
)
:
Item_int_func
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_signed"
;
}
double
val
()
double
val
()
{
{
double
tmp
=
args
[
0
]
->
val
();
double
tmp
=
args
[
0
]
->
val
();
...
@@ -236,6 +237,7 @@ class Item_func_unsigned :public Item_func_signed
...
@@ -236,6 +237,7 @@ class Item_func_unsigned :public Item_func_signed
{
{
public:
public:
Item_func_unsigned
(
Item
*
a
)
:
Item_func_signed
(
a
)
{}
Item_func_unsigned
(
Item
*
a
)
:
Item_func_signed
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_unsigned"
;
}
void
fix_length_and_dec
()
void
fix_length_and_dec
()
{
max_length
=
args
[
0
]
->
max_length
;
unsigned_flag
=
1
;
}
{
max_length
=
args
[
0
]
->
max_length
;
unsigned_flag
=
1
;
}
void
print
(
String
*
str
);
void
print
(
String
*
str
);
...
...
sql/item_timefunc.cc
View file @
2c86049d
...
@@ -2059,6 +2059,24 @@ bool Item_extract::eq(const Item *item, bool binary_cmp) const
...
@@ -2059,6 +2059,24 @@ bool Item_extract::eq(const Item *item, bool binary_cmp) const
}
}
bool
Item_char_typecast
::
eq
(
const
Item
*
item
,
bool
binary_cmp
)
const
{
if
(
this
==
item
)
return
1
;
if
(
item
->
type
()
!=
FUNC_ITEM
||
func_name
()
!=
((
Item_func
*
)
item
)
->
func_name
())
return
0
;
Item_char_typecast
*
cast
=
(
Item_char_typecast
*
)
item
;
if
(
cast_length
!=
cast
->
cast_length
||
cast_cs
!=
cast
->
cast_cs
)
return
0
;
if
(
!
args
[
0
]
->
eq
(
cast
->
args
[
0
],
binary_cmp
))
return
0
;
return
1
;
}
void
Item_typecast
::
print
(
String
*
str
)
void
Item_typecast
::
print
(
String
*
str
)
{
{
str
->
append
(
"cast("
,
5
);
str
->
append
(
"cast("
,
5
);
...
...
sql/item_timefunc.h
View file @
2c86049d
...
@@ -683,6 +683,8 @@ class Item_char_typecast :public Item_typecast
...
@@ -683,6 +683,8 @@ class Item_char_typecast :public Item_typecast
public:
public:
Item_char_typecast
(
Item
*
a
,
int
length_arg
,
CHARSET_INFO
*
cs_arg
)
Item_char_typecast
(
Item
*
a
,
int
length_arg
,
CHARSET_INFO
*
cs_arg
)
:
Item_typecast
(
a
),
cast_length
(
length_arg
),
cast_cs
(
cs_arg
)
{}
:
Item_typecast
(
a
),
cast_length
(
length_arg
),
cast_cs
(
cs_arg
)
{}
bool
eq
(
const
Item
*
item
,
bool
binary_cmp
)
const
;
const
char
*
func_name
()
const
{
return
"cast_as_char"
;
}
const
char
*
cast_type
()
const
{
return
"char"
;
};
const
char
*
cast_type
()
const
{
return
"char"
;
};
String
*
val_str
(
String
*
a
);
String
*
val_str
(
String
*
a
);
void
fix_length_and_dec
();
void
fix_length_and_dec
();
...
@@ -694,6 +696,7 @@ class Item_date_typecast :public Item_typecast_maybe_null
...
@@ -694,6 +696,7 @@ class Item_date_typecast :public Item_typecast_maybe_null
{
{
public:
public:
Item_date_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
Item_date_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_date"
;
}
String
*
val_str
(
String
*
str
);
String
*
val_str
(
String
*
str
);
bool
get_date
(
TIME
*
ltime
,
uint
fuzzy_date
);
bool
get_date
(
TIME
*
ltime
,
uint
fuzzy_date
);
const
char
*
cast_type
()
const
{
return
"date"
;
}
const
char
*
cast_type
()
const
{
return
"date"
;
}
...
@@ -709,6 +712,7 @@ class Item_time_typecast :public Item_typecast_maybe_null
...
@@ -709,6 +712,7 @@ class Item_time_typecast :public Item_typecast_maybe_null
{
{
public:
public:
Item_time_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
Item_time_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_time"
;
}
String
*
val_str
(
String
*
str
);
String
*
val_str
(
String
*
str
);
bool
get_time
(
TIME
*
ltime
);
bool
get_time
(
TIME
*
ltime
);
const
char
*
cast_type
()
const
{
return
"time"
;
}
const
char
*
cast_type
()
const
{
return
"time"
;
}
...
@@ -724,6 +728,7 @@ class Item_datetime_typecast :public Item_typecast_maybe_null
...
@@ -724,6 +728,7 @@ class Item_datetime_typecast :public Item_typecast_maybe_null
{
{
public:
public:
Item_datetime_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
Item_datetime_typecast
(
Item
*
a
)
:
Item_typecast_maybe_null
(
a
)
{}
const
char
*
func_name
()
const
{
return
"cast_as_datetime"
;
}
String
*
val_str
(
String
*
str
);
String
*
val_str
(
String
*
str
);
const
char
*
cast_type
()
const
{
return
"datetime"
;
}
const
char
*
cast_type
()
const
{
return
"datetime"
;
}
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_DATETIME
;
}
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_DATETIME
;
}
...
...
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