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
ddea0b44
Commit
ddea0b44
authored
Oct 28, 2005
by
evgen@moonbone.local
Browse files
Options
Browse Files
Download
Plain Diff
Manually merged
parents
f6995841
cc5d7c07
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
9 deletions
+64
-9
mysql-test/r/analyse.result
mysql-test/r/analyse.result
+26
-0
mysql-test/t/analyse.test
mysql-test/t/analyse.test
+25
-0
sql/sql_select.cc
sql/sql_select.cc
+12
-9
sql/sql_select.h
sql/sql_select.h
+1
-0
No files found.
mysql-test/r/analyse.result
View file @
ddea0b44
...
...
@@ -115,3 +115,29 @@ select * from t1 procedure analyse (1,1);
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
test.t1.d 100000 100000 6 6 0 0 100000 0 MEDIUMINT(6) UNSIGNED NOT NULL
drop table t1;
create table t1 (product varchar(32), country_id int not null, year int,
profit int);
insert into t1 values ( 'Computer', 2,2000, 1200),
( 'TV', 1, 1999, 150),
( 'Calculator', 1, 1999,50),
( 'Computer', 1, 1999,1500),
( 'Computer', 1, 2000,1500),
( 'TV', 1, 2000, 150),
( 'TV', 2, 2000, 100),
( 'TV', 2, 2000, 100),
( 'Calculator', 1, 2000,75),
( 'Calculator', 2, 2000,75),
( 'TV', 1, 1999, 100),
( 'Computer', 1, 1999,1200),
( 'Computer', 2, 2000,1500),
( 'Calculator', 2, 2000,75),
( 'Phone', 3, 2003,10)
;
create table t2 (country_id int primary key, country char(20) not null);
insert into t2 values (1, 'USA'),(2,'India'), (3,'Finland');
select product, sum(profit),avg(profit) from t1 group by product with rollup procedure analyse();
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
test.t1.product Computer TV 2 8 0 0 4.2500 NULL ENUM('Computer','Phone','TV') NOT NULL
sum(profit) 10 6900 2 4 0 0 1946 2868 ENUM('10','275','600','6900') NOT NULL
avg(profit) 10.0000 1380.0000 7 9 0 0 394.6875 570.2003 ENUM('10.0000','68.7500','120.0000','1380.0000') NOT NULL
drop table t1,t2;
mysql-test/t/analyse.test
View file @
ddea0b44
...
...
@@ -65,5 +65,30 @@ insert into t1 values (100000);
select
*
from
t1
procedure
analyse
(
1
,
1
);
drop
table
t1
;
#
# Bug #14138 ROLLUP and PROCEDURE ANALYSE() hang server
#
create
table
t1
(
product
varchar
(
32
),
country_id
int
not
null
,
year
int
,
profit
int
);
insert
into
t1
values
(
'Computer'
,
2
,
2000
,
1200
),
(
'TV'
,
1
,
1999
,
150
),
(
'Calculator'
,
1
,
1999
,
50
),
(
'Computer'
,
1
,
1999
,
1500
),
(
'Computer'
,
1
,
2000
,
1500
),
(
'TV'
,
1
,
2000
,
150
),
(
'TV'
,
2
,
2000
,
100
),
(
'TV'
,
2
,
2000
,
100
),
(
'Calculator'
,
1
,
2000
,
75
),
(
'Calculator'
,
2
,
2000
,
75
),
(
'TV'
,
1
,
1999
,
100
),
(
'Computer'
,
1
,
1999
,
1200
),
(
'Computer'
,
2
,
2000
,
1500
),
(
'Calculator'
,
2
,
2000
,
75
),
(
'Phone'
,
3
,
2003
,
10
)
;
create
table
t2
(
country_id
int
primary
key
,
country
char
(
20
)
not
null
);
insert
into
t2
values
(
1
,
'USA'
),(
2
,
'India'
),
(
3
,
'Finland'
);
select
product
,
sum
(
profit
),
avg
(
profit
)
from
t1
group
by
product
with
rollup
procedure
analyse
();
drop
table
t1
,
t2
;
# End of 4.1 tests
sql/sql_select.cc
View file @
ddea0b44
...
...
@@ -1175,18 +1175,21 @@ JOIN::save_join_tab()
void
JOIN
::
exec
()
{
List
<
Item
>
*
columns_list
=
&
fields_list
;
int
tmp_error
;
DBUG_ENTER
(
"JOIN::exec"
);
error
=
0
;
if
(
procedure
)
{
if
(
procedure
->
change_columns
(
fields_list
)
||
result
->
prepare
(
fields_list
,
unit
))
procedure_fields_list
=
fields_list
;
if
(
procedure
->
change_columns
(
procedure_fields_list
)
||
result
->
prepare
(
procedure_fields_list
,
unit
))
{
thd
->
limit_found_rows
=
thd
->
examined_row_count
=
0
;
DBUG_VOID_RETURN
;
}
columns_list
=
&
procedure_fields_list
;
}
(
void
)
result
->
prepare2
();
// Currently, this cannot fail.
...
...
@@ -1197,7 +1200,7 @@ JOIN::exec()
(
zero_result_cause
?
zero_result_cause
:
"No tables used"
));
else
{
result
->
send_fields
(
field
s_list
,
result
->
send_fields
(
*
column
s_list
,
Protocol
::
SEND_NUM_ROWS
|
Protocol
::
SEND_EOF
);
/*
We have to test for 'conds' here as the WHERE may not be constant
...
...
@@ -1208,9 +1211,9 @@ JOIN::exec()
(
!
conds
||
conds
->
val_int
())
&&
(
!
having
||
having
->
val_int
()))
{
if
(
do_send_rows
&&
(
procedure
?
(
procedure
->
send_row
(
fields_list
)
||
procedure
->
end_of_records
())
:
result
->
send_data
(
fields_list
)))
if
(
do_send_rows
&&
(
procedure
?
(
procedure
->
send_row
(
procedure_fields_list
)
||
procedure
->
end_of_records
())
:
result
->
send_data
(
fields_list
)))
error
=
1
;
else
{
...
...
@@ -1234,7 +1237,7 @@ JOIN::exec()
if
(
zero_result_cause
)
{
(
void
)
return_zero_rows
(
this
,
result
,
select_lex
->
leaf_tables
,
field
s_list
,
(
void
)
return_zero_rows
(
this
,
result
,
select_lex
->
leaf_tables
,
*
column
s_list
,
send_row_on_empty_set
(),
select_options
,
zero_result_cause
,
...
...
@@ -9053,7 +9056,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
error
=
(
*
end_select
)(
join
,
join_tab
,
1
);
}
else
if
(
join
->
send_row_on_empty_set
())
rc
=
join
->
result
->
send_data
(
*
join
->
fields
);
rc
=
join
->
result
->
send_data
(
*
columns_list
);
}
else
{
...
...
@@ -10082,7 +10085,7 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
DBUG_RETURN
(
NESTED_LOOP_OK
);
// Didn't match having
error
=
0
;
if
(
join
->
procedure
)
error
=
join
->
procedure
->
send_row
(
*
join
->
fields
);
error
=
join
->
procedure
->
send_row
(
join
->
procedure_fields_list
);
else
if
(
join
->
do_send_rows
)
error
=
join
->
result
->
send_data
(
*
join
->
fields
);
if
(
error
)
...
...
sql/sql_select.h
View file @
ddea0b44
...
...
@@ -244,6 +244,7 @@ class JOIN :public Sql_alloc
//Part, shared with list above, emulate following list
List
<
Item
>
tmp_fields_list1
,
tmp_fields_list2
,
tmp_fields_list3
;
List
<
Item
>
&
fields_list
;
// hold field list passed to mysql_select
List
<
Item
>
procedure_fields_list
;
int
error
;
ORDER
*
order
,
*
group_list
,
*
proc_param
;
//hold parameters of mysql_select
...
...
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