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
6d6d90d2
Commit
6d6d90d2
authored
Jul 26, 2005
by
marko@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
Merge marko@bk-internal.mysql.com:/home/bk/mysql-5.0
into hundin.mysql.fi:/home/marko/mysql-5.0
parents
5dd8eeef
ffd08ef7
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
100 additions
and
46 deletions
+100
-46
mysql-test/r/view.result
mysql-test/r/view.result
+23
-0
mysql-test/t/view.test
mysql-test/t/view.test
+25
-1
mysys/charset.c
mysys/charset.c
+18
-16
sql/item.h
sql/item.h
+8
-2
sql/item_buff.cc
sql/item_buff.cc
+3
-3
sql/sql_select.cc
sql/sql_select.cc
+23
-24
No files found.
mysql-test/r/view.result
View file @
6d6d90d2
...
...
@@ -2024,3 +2024,26 @@ f1 sb
2005-01-01 12:00:00 2005-01-01 10:58:59
drop view v1;
drop table t1;
CREATE TABLE t1 (
aid int PRIMARY KEY,
fn varchar(20) NOT NULL,
ln varchar(20) NOT NULL
);
CREATE TABLE t2 (
aid int NOT NULL,
pid int NOT NULL
);
INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d');
INSERT INTO t2 values (1,1), (2,1), (2,2);
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
WHERE t1.aid = t2.aid GROUP BY pid;
pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
1 a b,c d
2 c d
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid;
pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
1 a b,c d
2 c d
DROP VIEW v1;
DROP TABLE t1,t2;
mysql-test/t/view.test
View file @
6d6d90d2
...
...
@@ -1862,4 +1862,28 @@ insert into t1 values('2005.01.01 12:0:0');
create
view
v1
as
select
f1
,
subtime
(
f1
,
'1:1:1'
)
as
sb
from
t1
;
select
*
from
v1
;
drop
view
v1
;
drop
table
t1
;
drop
table
t1
;
#
# Test for bug #11412: query over a multitable view with GROUP_CONCAT
#
CREATE
TABLE
t1
(
aid
int
PRIMARY
KEY
,
fn
varchar
(
20
)
NOT
NULL
,
ln
varchar
(
20
)
NOT
NULL
);
CREATE
TABLE
t2
(
aid
int
NOT
NULL
,
pid
int
NOT
NULL
);
INSERT
INTO
t1
VALUES
(
1
,
'a'
,
'b'
),
(
2
,
'c'
,
'd'
);
INSERT
INTO
t2
values
(
1
,
1
),
(
2
,
1
),
(
2
,
2
);
CREATE
VIEW
v1
AS
SELECT
t1
.*
,
t2
.
pid
FROM
t1
,
t2
WHERE
t1
.
aid
=
t2
.
aid
;
SELECT
pid
,
GROUP_CONCAT
(
CONCAT
(
fn
,
' '
,
ln
)
ORDER
BY
1
)
FROM
t1
,
t2
WHERE
t1
.
aid
=
t2
.
aid
GROUP
BY
pid
;
SELECT
pid
,
GROUP_CONCAT
(
CONCAT
(
fn
,
' '
,
ln
)
ORDER
BY
1
)
FROM
v1
GROUP
BY
pid
;
DROP
VIEW
v1
;
DROP
TABLE
t1
,
t2
;
mysys/charset.c
View file @
6d6d90d2
...
...
@@ -383,26 +383,28 @@ static my_bool init_available_charsets(myf myflags)
while we may changing the cs_info_table
*/
pthread_mutex_lock
(
&
THR_LOCK_charset
);
bzero
(
&
all_charsets
,
sizeof
(
all_charsets
));
init_compiled_charsets
(
myflags
);
/* Copy compiled charsets */
for
(
cs
=
all_charsets
;
cs
<
all_charsets
+
array_elements
(
all_charsets
)
-
1
;
cs
++
)
if
(
!
charset_initialized
)
{
if
(
*
cs
)
bzero
(
&
all_charsets
,
sizeof
(
all_charsets
));
init_compiled_charsets
(
myflags
);
/* Copy compiled charsets */
for
(
cs
=
all_charsets
;
cs
<
all_charsets
+
array_elements
(
all_charsets
)
-
1
;
cs
++
)
{
if
(
cs
[
0
]
->
ctype
)
if
(
init_state_maps
(
*
cs
))
*
cs
=
NULL
;
if
(
*
cs
)
{
if
(
cs
[
0
]
->
ctype
)
if
(
init_state_maps
(
*
cs
))
*
cs
=
NULL
;
}
}
strmov
(
get_charsets_dir
(
fname
),
MY_CHARSET_INDEX
);
error
=
my_read_charset_file
(
fname
,
myflags
);
charset_initialized
=
1
;
}
strmov
(
get_charsets_dir
(
fname
),
MY_CHARSET_INDEX
);
error
=
my_read_charset_file
(
fname
,
myflags
);
charset_initialized
=
1
;
pthread_mutex_unlock
(
&
THR_LOCK_charset
);
}
return
error
;
...
...
sql/item.h
View file @
6d6d90d2
...
...
@@ -1473,7 +1473,13 @@ class Item_ref :public Item_ident
void
save_org_in_field
(
Field
*
field
)
{
(
*
ref
)
->
save_org_in_field
(
field
);
}
enum
Item_result
result_type
()
const
{
return
(
*
ref
)
->
result_type
();
}
enum_field_types
field_type
()
const
{
return
(
*
ref
)
->
field_type
();
}
Field
*
get_tmp_table_field
()
{
return
result_field
;
}
Field
*
get_tmp_table_field
()
{
return
result_field
?
result_field
:
(
*
ref
)
->
get_tmp_table_field
();
}
Item
*
get_tmp_table_item
(
THD
*
thd
)
{
return
(
result_field
?
new
Item_field
(
result_field
)
:
(
*
ref
)
->
get_tmp_table_item
(
thd
));
}
table_map
used_tables
()
const
{
return
depended_from
?
OUTER_REF_TABLE_BIT
:
(
*
ref
)
->
used_tables
();
...
...
@@ -1711,7 +1717,7 @@ class Cached_item_field :public Cached_item
public:
Cached_item_field
(
Item_field
*
item
)
{
field
=
item
->
field
;
field
=
item
->
field
;
buff
=
(
char
*
)
sql_calloc
(
length
=
field
->
pack_length
());
}
bool
cmp
(
void
);
...
...
sql/item_buff.cc
View file @
6d6d90d2
...
...
@@ -25,9 +25,9 @@
Cached_item
*
new_Cached_item
(
THD
*
thd
,
Item
*
item
)
{
if
(
item
->
type
()
==
Item
::
FIELD_ITEM
&&
!
(((
Item_field
*
)
item
)
->
field
->
flags
&
BLOB_FLAG
))
return
new
Cached_item_field
((
Item_field
*
)
item
);
if
(
item
->
real_item
()
->
type
()
==
Item
::
FIELD_ITEM
&&
!
(((
Item_field
*
)
(
item
->
real_item
())
)
->
field
->
flags
&
BLOB_FLAG
))
return
new
Cached_item_field
((
Item_field
*
)
(
item
->
real_item
())
);
switch
(
item
->
result_type
())
{
case
STRING_RESULT
:
return
new
Cached_item_str
(
thd
,
(
Item_field
*
)
item
);
...
...
sql/sql_select.cc
View file @
6d6d90d2
...
...
@@ -8026,6 +8026,12 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
bool
table_cant_handle_bit_fields
,
uint
convert_blob_length
)
{
Item
*
org_item
=
item
;
if
(
item
->
real_item
()
->
type
()
==
Item
::
FIELD_ITEM
)
{
item
=
item
->
real_item
();
type
=
item
->
type
();
}
switch
(
type
)
{
case
Item
:
:
SUM_FUNC_ITEM
:
{
...
...
@@ -8038,30 +8044,22 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
case
Item
:
:
FIELD_ITEM
:
case
Item
:
:
DEFAULT_VALUE_ITEM
:
{
Item_field
*
field
=
(
Item_field
*
)
item
;
if
(
table_cant_handle_bit_fields
&&
field
->
field
->
type
()
==
FIELD_TYPE_BIT
)
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
copy_func
,
modify_item
,
convert_blob_length
);
return
create_tmp_field_from_field
(
thd
,
(
*
from_field
=
field
->
field
),
item
->
name
,
table
,
modify_item
?
(
Item_field
*
)
item
:
NULL
,
convert_blob_length
);
}
case
Item
:
:
REF_ITEM
:
{
Item
*
tmp_item
;
if
((
tmp_item
=
item
->
real_item
())
->
type
()
==
Item
::
FIELD_ITEM
)
if
(
org_item
->
type
()
!=
Item
::
REF_ITEM
||
!
((
Item_ref
*
)
org_item
)
->
depended_from
)
{
Item_field
*
field
=
(
Item_field
*
)
tmp_item
;
Field
*
new_field
=
create_tmp_field_from_field
(
thd
,
(
*
from_field
=
field
->
field
),
item
->
name
,
table
,
NULL
,
convert_blob_length
);
if
(
modify_item
)
item
->
set_result_field
(
new_field
);
return
new_field
;
Item_field
*
field
=
(
Item_field
*
)
item
;
if
(
table_cant_handle_bit_fields
&&
field
->
field
->
type
()
==
FIELD_TYPE_BIT
)
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
copy_func
,
modify_item
,
convert_blob_length
);
return
create_tmp_field_from_field
(
thd
,
(
*
from_field
=
field
->
field
),
item
->
name
,
table
,
modify_item
?
(
Item_field
*
)
item
:
NULL
,
convert_blob_length
);
}
else
item
=
org_item
;
}
case
Item
:
:
FUNC_ITEM
:
case
Item
:
:
COND_ITEM
:
...
...
@@ -8074,6 +8072,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
case
Item
:
:
REAL_ITEM
:
case
Item
:
:
DECIMAL_ITEM
:
case
Item
:
:
STRING_ITEM
:
case
Item
:
:
REF_ITEM
:
case
Item
:
:
NULL_ITEM
:
case
Item
:
:
VARBIN_ITEM
:
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
copy_func
,
modify_item
,
...
...
@@ -10904,12 +10903,12 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
usable_keys
.
set_all
();
for
(
ORDER
*
tmp_order
=
order
;
tmp_order
;
tmp_order
=
tmp_order
->
next
)
{
if
((
*
tmp_order
->
item
)
->
type
()
!=
Item
::
FIELD_ITEM
)
if
((
*
tmp_order
->
item
)
->
real_item
()
->
type
()
!=
Item
::
FIELD_ITEM
)
{
usable_keys
.
clear_all
();
DBUG_RETURN
(
0
);
}
usable_keys
.
intersect
(((
Item_field
*
)
(
*
tmp_order
->
item
))
->
usable_keys
.
intersect
(((
Item_field
*
)
(
*
tmp_order
->
item
)
->
real_item
()
)
->
field
->
part_of_sortkey
);
if
(
usable_keys
.
is_clear_all
())
DBUG_RETURN
(
0
);
// No usable keys
...
...
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