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
13260ea8
Commit
13260ea8
authored
Nov 11, 2005
by
timour@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into mysql.com:/home/timka/mysql/src/5.0-bug-14662
parents
7803d80a
99257a93
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
82 additions
and
11 deletions
+82
-11
mysql-test/r/select.result
mysql-test/r/select.result
+42
-0
mysql-test/t/select.test
mysql-test/t/select.test
+20
-0
sql/item.cc
sql/item.cc
+20
-11
No files found.
mysql-test/r/select.result
View file @
13260ea8
...
...
@@ -3241,3 +3241,45 @@ f1 f2
Warnings:
Warning 1292 Incorrect date value: '2005-09-3a' for column 'f2' at row 1
drop table t1;
create table t1 (f1 int, f2 int);
insert into t1 values (1, 30), (2, 20), (3, 10);
create algorithm=merge view v1 as select f1, f2 from t1;
create algorithm=merge view v2 (f2, f1) as select f1, f2 from t1;
create algorithm=merge view v3 as select t1.f1 as f2, t1.f2 as f1 from t1;
select t1.f1 as x1, f1 from t1 order by t1.f1;
x1 f1
1 1
2 2
3 3
select v1.f1 as x1, f1 from v1 order by v1.f1;
x1 f1
1 1
2 2
3 3
select v2.f1 as x1, f1 from v2 order by v2.f1;
x1 f1
10 10
20 20
30 30
select v3.f1 as x1, f1 from v3 order by v3.f1;
x1 f1
10 10
20 20
30 30
select f1, f2, v1.f1 as x1 from v1 order by v1.f1;
f1 f2 x1
1 30 1
2 20 2
3 10 3
select f1, f2, v2.f1 as x1 from v2 order by v2.f1;
f1 f2 x1
10 3 10
20 2 20
30 1 30
select f1, f2, v3.f1 as x1 from v3 order by v3.f1;
f1 f2 x1
10 3 10
20 2 20
30 1 30
drop table t1;
drop view v1, v2, v3;
mysql-test/t/select.test
View file @
13260ea8
...
...
@@ -2729,3 +2729,23 @@ select * from t1 where f2 >= '2005-09-3a';
select
*
from
t1
where
f2
<=
'2005-09-31'
;
select
*
from
t1
where
f2
<=
'2005-09-3a'
;
drop
table
t1
;
#
# Bug ##14662 ORDER BY on column of a view, with an alias of the same
# column causes ambiguous
#
create
table
t1
(
f1
int
,
f2
int
);
insert
into
t1
values
(
1
,
30
),
(
2
,
20
),
(
3
,
10
);
create
algorithm
=
merge
view
v1
as
select
f1
,
f2
from
t1
;
create
algorithm
=
merge
view
v2
(
f2
,
f1
)
as
select
f1
,
f2
from
t1
;
create
algorithm
=
merge
view
v3
as
select
t1
.
f1
as
f2
,
t1
.
f2
as
f1
from
t1
;
select
t1
.
f1
as
x1
,
f1
from
t1
order
by
t1
.
f1
;
select
v1
.
f1
as
x1
,
f1
from
v1
order
by
v1
.
f1
;
select
v2
.
f1
as
x1
,
f1
from
v2
order
by
v2
.
f1
;
select
v3
.
f1
as
x1
,
f1
from
v3
order
by
v3
.
f1
;
select
f1
,
f2
,
v1
.
f1
as
x1
from
v1
order
by
v1
.
f1
;
select
f1
,
f2
,
v2
.
f1
as
x1
from
v2
order
by
v2
.
f1
;
select
f1
,
f2
,
v3
.
f1
as
x1
from
v3
order
by
v3
.
f1
;
drop
table
t1
;
drop
view
v1
,
v2
,
v3
;
sql/item.cc
View file @
13260ea8
...
...
@@ -4938,8 +4938,7 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
}
/*
Compare view field's name with item's name before call to referenced
item's eq()
Compare two view column references for equality.
SYNOPSIS
Item_direct_view_ref::eq()
...
...
@@ -4947,12 +4946,13 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
binary_cmp make binary comparison
DESCRIPTION
Consider queries:
create view v1 as select t1.f1 as f2, t1.f2 as f1 from t1;
select * from v1 order by f1;
In order to choose right field for sorting we need to compare
given item's name (f1) to view field's name prior to calling
referenced item's eq().
A view column reference is considered equal to another column
reference if the second one is a view column and if both column
references point to the same field. For views 'same field' means
the same Item_field object in the view translation table, where
the view translation table contains all result columns of the
view. This definition ensures that view columns are resolved
in the same manner as table columns.
RETURN
TRUE Referenced item is equal to given item
...
...
@@ -4962,9 +4962,18 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
bool
Item_direct_view_ref
::
eq
(
const
Item
*
item
,
bool
binary_cmp
)
const
{
Item
*
it
=
((
Item
*
)
item
)
->
real_item
();
return
(
!
it
->
name
||
!
my_strcasecmp
(
system_charset_info
,
it
->
name
,
field_name
))
&&
ref
&&
(
*
ref
)
->
real_item
()
->
eq
(
it
,
binary_cmp
);
if
(
item
->
type
()
==
REF_ITEM
)
{
Item_ref
*
item_ref
=
(
Item_ref
*
)
item
;
if
(
item_ref
->
ref_type
()
==
VIEW_REF
)
{
Item
*
item_ref_ref
=
*
(
item_ref
->
ref
);
DBUG_ASSERT
((
*
ref
)
->
type
()
==
FIELD_ITEM
&&
(
item_ref_ref
->
type
()
==
FIELD_ITEM
));
return
(
*
ref
==
item_ref_ref
);
}
}
return
FALSE
;
}
void
Item_null_helper
::
print
(
String
*
str
)
...
...
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