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
21e6d131
Commit
21e6d131
authored
Jul 27, 2006
by
gkodinov/kgeorge@rakia.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into rakia.(none):/home/kgeorge/mysql/autopush/B21019-5.0-opt
parents
334e264b
778dd354
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
46 additions
and
10 deletions
+46
-10
mysql-test/r/subselect2.result
mysql-test/r/subselect2.result
+12
-0
mysql-test/t/subselect2.test
mysql-test/t/subselect2.test
+18
-0
sql/item.h
sql/item.h
+1
-1
sql/item_func.cc
sql/item_func.cc
+2
-2
sql/item_func.h
sql/item_func.h
+4
-1
sql/sql_select.cc
sql/sql_select.cc
+9
-6
No files found.
mysql-test/r/subselect2.result
View file @
21e6d131
...
...
@@ -132,3 +132,15 @@ id select_type table type possible_keys key key_len ref rows Extra
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 func 1 Using index; Using where
drop table t1, t2, t3, t4;
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
INSERT INTO t1 VALUES (1),(2);
CREATE TABLE t2 (a int(10), PRIMARY KEY (a)) Engine=InnoDB;
INSERT INTO t2 VALUES (1);
CREATE TABLE t3 (a int(10), b int(10), c int(10),
PRIMARY KEY (a)) Engine=InnoDB;
INSERT INTO t3 VALUES (1,2,1);
SELECT t1.* FROM t1 WHERE (SELECT COUNT(*) FROM t3,t2 WHERE t3.c=t2.a
and t2.a='1' AND t1.a=t3.b) > 0;
a
2
DROP TABLE t1,t2,t3;
mysql-test/t/subselect2.test
View file @
21e6d131
...
...
@@ -150,3 +150,21 @@ EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JO
drop
table
t1
,
t2
,
t3
,
t4
;
# End of 4.1 tests
#
# Bug #20792: Incorrect results from aggregate subquery
#
CREATE
TABLE
t1
(
a
int
(
10
)
,
PRIMARY
KEY
(
a
))
Engine
=
InnoDB
;
INSERT
INTO
t1
VALUES
(
1
),(
2
);
CREATE
TABLE
t2
(
a
int
(
10
),
PRIMARY
KEY
(
a
))
Engine
=
InnoDB
;
INSERT
INTO
t2
VALUES
(
1
);
CREATE
TABLE
t3
(
a
int
(
10
),
b
int
(
10
),
c
int
(
10
),
PRIMARY
KEY
(
a
))
Engine
=
InnoDB
;
INSERT
INTO
t3
VALUES
(
1
,
2
,
1
);
SELECT
t1
.*
FROM
t1
WHERE
(
SELECT
COUNT
(
*
)
FROM
t3
,
t2
WHERE
t3
.
c
=
t2
.
a
and
t2
.
a
=
'1'
AND
t1
.
a
=
t3
.
b
)
>
0
;
DROP
TABLE
t1
,
t2
,
t3
;
sql/item.h
View file @
21e6d131
...
...
@@ -752,7 +752,7 @@ class Item {
virtual
bool
find_item_in_field_list_processor
(
byte
*
arg
)
{
return
0
;
}
virtual
bool
change_context_processor
(
byte
*
context
)
{
return
0
;
}
virtual
bool
reset_query_id_processor
(
byte
*
query_id
)
{
return
0
;
}
virtual
bool
func_type_checker
_processor
(
byte
*
arg
)
{
return
0
;
}
virtual
bool
is_expensive
_processor
(
byte
*
arg
)
{
return
0
;
}
virtual
Item
*
equal_fields_propagator
(
byte
*
arg
)
{
return
this
;
}
virtual
Item
*
set_no_const_sub
(
byte
*
arg
)
{
return
this
;
}
...
...
sql/item_func.cc
View file @
21e6d131
...
...
@@ -399,9 +399,9 @@ Field *Item_func::tmp_table_field(TABLE *t_arg)
}
bool
Item_func
::
func_type_checker
_processor
(
byte
*
arg
)
bool
Item_func
::
is_expensive
_processor
(
byte
*
arg
)
{
return
*
((
Functype
*
)
arg
)
==
functyp
e
();
return
is_expensiv
e
();
}
...
...
sql/item_func.h
View file @
21e6d131
...
...
@@ -189,7 +189,8 @@ class Item_func :public Item_result_field
Item
*
transform
(
Item_transformer
transformer
,
byte
*
arg
);
void
traverse_cond
(
Cond_traverser
traverser
,
void
*
arg
,
traverse_order
order
);
bool
func_type_checker_processor
(
byte
*
arg
);
bool
is_expensive_processor
(
byte
*
arg
);
virtual
bool
is_expensive
()
{
return
0
;
}
};
...
...
@@ -947,6 +948,7 @@ class Item_udf_func :public Item_func
void
cleanup
();
Item_result
result_type
()
const
{
return
udf
.
result_type
();
}
table_map
not_null_tables
()
const
{
return
0
;
}
bool
is_expensive
()
{
return
1
;
}
};
...
...
@@ -1475,6 +1477,7 @@ class Item_func_sp :public Item_func
virtual
enum
Functype
functype
()
const
{
return
FUNC_SP
;
}
bool
fix_fields
(
THD
*
thd
,
Item
**
ref
);
bool
is_expensive
()
{
return
1
;
}
};
...
...
sql/sql_select.cc
View file @
21e6d131
...
...
@@ -1073,10 +1073,7 @@ JOIN::optimize()
for
(
ORDER
*
tmp_order
=
order
;
tmp_order
;
tmp_order
=
tmp_order
->
next
)
{
Item
*
item
=
*
tmp_order
->
item
;
Item_func
::
Functype
type
=
Item_func
::
FUNC_SP
;
Item_func
::
Functype
type1
=
Item_func
::
UDF_FUNC
;
if
(
item
->
walk
(
&
Item
::
func_type_checker_processor
,(
byte
*
)
&
type
)
||
item
->
walk
(
&
Item
::
func_type_checker_processor
,(
byte
*
)
&
type1
))
if
(
item
->
walk
(
&
Item
::
is_expensive_processor
,(
byte
*
)
0
))
{
/* Force tmp table without sort */
need_tmp
=
1
;
simple_order
=
simple_group
=
0
;
...
...
@@ -6197,10 +6194,16 @@ return_zero_rows(JOIN *join, select_result *result,TABLE_LIST *tables,
DBUG_RETURN
(
0
);
}
/*
used only in JOIN::clear
*/
static
void
clear_tables
(
JOIN
*
join
)
{
for
(
uint
i
=
0
;
i
<
join
->
tables
;
i
++
)
/*
must clear only the non-const tables, as const tables
are not re-calculated.
*/
for
(
uint
i
=
join
->
const_tables
;
i
<
join
->
tables
;
i
++
)
mark_as_null_row
(
join
->
table
[
i
]);
// All fields are NULL
}
...
...
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