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
211638f5
Commit
211638f5
authored
Apr 08, 2005
by
monty@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/my/mysql-5.0
parents
f9dd856d
551ebb8a
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
346 additions
and
228 deletions
+346
-228
.bzrignore
.bzrignore
+1
-0
client/mysqltest.c
client/mysqltest.c
+9
-2
mysql-test/include/big_test.inc
mysql-test/include/big_test.inc
+4
-0
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+2
-2
mysql-test/r/heap.result
mysql-test/r/heap.result
+30
-30
mysql-test/r/innodb-big.result
mysql-test/r/innodb-big.result
+34
-0
mysql-test/r/sum_distinct-big.result
mysql-test/r/sum_distinct-big.result
+108
-0
mysql-test/r/sum_distinct.result
mysql-test/r/sum_distinct.result
+0
-106
mysql-test/t/heap.test
mysql-test/t/heap.test
+3
-3
mysql-test/t/innodb-big.test
mysql-test/t/innodb-big.test
+46
-0
mysql-test/t/sum_distinct-big.test
mysql-test/t/sum_distinct-big.test
+67
-0
mysql-test/t/sum_distinct.test
mysql-test/t/sum_distinct.test
+0
-59
sql/filesort.cc
sql/filesort.cc
+18
-15
sql/ha_innodb.h
sql/ha_innodb.h
+0
-1
sql/handler.h
sql/handler.h
+17
-7
sql/mysql_priv.h
sql/mysql_priv.h
+1
-1
sql/records.cc
sql/records.cc
+4
-2
sql/sql_select.cc
sql/sql_select.cc
+2
-0
No files found.
.bzrignore
View file @
211638f5
...
...
@@ -1109,3 +1109,4 @@ vio/viotest-ssl
VC++Files/client/mysql_amd64.dsp
client/mysqltestmanager-pwgen
client/mysqltestmanagerc
tools/mysqltestmanager
client/mysqltest.c
View file @
211638f5
...
...
@@ -645,6 +645,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char* fname)
{
DBUG_PRINT
(
"info"
,(
"Size differs: result size: %u file size: %u"
,
ds
->
length
,
stat_info
.
st_size
));
DBUG_PRINT
(
"info"
,(
"result: '%s'"
,
ds
->
str
));
DBUG_RETURN
(
2
);
}
if
(
!
(
tmp
=
(
char
*
)
my_malloc
(
stat_info
.
st_size
+
1
,
MYF
(
MY_WME
))))
...
...
@@ -3623,8 +3624,8 @@ static void init_var_hash(MYSQL *mysql)
if
(
hash_init
(
&
var_hash
,
charset_info
,
1024
,
0
,
0
,
get_var_key
,
var_free
,
MYF
(
0
)))
die
(
"Variable hash initialization failed"
);
if
(
opt_big_test
)
my_hash_insert
(
&
var_hash
,
(
byte
*
)
var_init
(
0
,
"BIG_TEST"
,
0
,
"1"
,
0
));
my_hash_insert
(
&
var_hash
,
(
byte
*
)
var_init
(
0
,
"BIG_TEST"
,
0
,
(
opt_big_test
)
?
"1"
:
"0"
,
0
));
v
=
var_init
(
0
,
"MAX_TABLES"
,
0
,
(
sizeof
(
ulong
)
==
4
)
?
"31"
:
"62"
,
0
);
my_hash_insert
(
&
var_hash
,
(
byte
*
)
v
);
v
=
var_init
(
0
,
"SERVER_VERSION"
,
0
,
mysql_get_server_info
(
mysql
),
0
);
...
...
@@ -3793,6 +3794,12 @@ int main(int argc, char **argv)
if
(
q
->
query
==
q
->
query_buf
)
q
->
query
+=
q
->
first_word_len
+
1
;
display_result_vertically
=
(
q
->
type
==
Q_QUERY_VERTICAL
);
if
(
save_file
[
0
])
{
strmov
(
q
->
record_file
,
save_file
);
q
->
require_file
=
require_file
;
save_file
[
0
]
=
0
;
}
error
|=
run_query
(
&
cur_con
->
mysql
,
q
,
QUERY_REAP
|
QUERY_SEND
);
display_result_vertically
=
old_display_result_vertically
;
break
;
...
...
mysql-test/include/big_test.inc
0 → 100644
View file @
211638f5
--
require
r
/
big_test
.
require
disable_query_log
;
eval
select
$BIG_TEST
as
using_big_test
;
enable_query_log
;
mysql-test/mysql-test-run.sh
View file @
211638f5
...
...
@@ -1179,7 +1179,7 @@ start_master()
--default-character-set=
$CHARACTER_SET
\
--tmpdir=
$MYSQL_TMP_DIR
\
--language=
$LANGUAGE
\
--innodb_data_file_path=ibdata1:
50M
\
--innodb_data_file_path=ibdata1:
128M:autoextend
\
--open-files-limit=1024
\
$MASTER_40_ARGS
\
$SMALL_SERVER
\
...
...
@@ -1200,7 +1200,7 @@ start_master()
$USE_NDBCLUSTER
\
--tmpdir=
$MYSQL_TMP_DIR
\
--language=
$LANGUAGE
\
--innodb_data_file_path=ibdata1:
50M
\
--innodb_data_file_path=ibdata1:
128M:autoextend
\
$MASTER_40_ARGS
\
$SMALL_SERVER
\
$EXTRA_MASTER_OPT
$EXTRA_MASTER_MYSQLD_OPT
\
...
...
mysql-test/r/heap.result
View file @
211638f5
...
...
@@ -436,30 +436,30 @@ f 10
g 10
h 10
i 10
select sql_big_result
v
,count(t) from t1 group by v limit 10;
v
count(t)
select sql_big_result
trim(v)
,count(t) from t1 group by v limit 10;
trim(v)
count(t)
a 1
a
10
b
10
c
10
d
10
e
10
f
10
g
10
a 10
b 10
c 10
d 10
e 10
f 10
g 10
h 10
i
10
select sql_big_result
v
,count(c) from t1 group by v limit 10;
v
count(c)
i 10
select sql_big_result
trim(v)
,count(c) from t1 group by v limit 10;
trim(v)
count(c)
a 1
a
10
b
10
c
10
d
10
e
10
f
10
g
10
a 10
b 10
c 10
d 10
e 10
f 10
g 10
h 10
i
10
i 10
select c,count(*) from t1 group by c limit 10;
c count(*)
a 1
...
...
@@ -520,18 +520,18 @@ f 10
g 10
h 10
i 10
select sql_big_result t,count(t) from t1 group by t limit 10;
t count(t)
select sql_big_result t
rim(t)
,count(t) from t1 group by t limit 10;
t
rim(t)
count(t)
a 1
a
10
b
10
c
10
d
10
e
10
f
10
g
10
a 10
b 10
c 10
d 10
e 10
f 10
g 10
h 10
i
10
i 10
drop table t1;
create table t1 (a char(10), unique (a));
insert into t1 values ('a');
...
...
mysql-test/r/innodb-big.result
0 → 100644
View file @
211638f5
DROP TABLE IF EXISTS t1, t2, t3, t4;
CREATE TABLE t1 (id INTEGER) ENGINE=MYISAM;
CREATE TABLE t2 (id INTEGER primary key) ENGINE=INNODB;
CREATE TABLE t3 (a char(32) primary key,id INTEGER) ENGINE=INNODB;
CREATE TABLE t4 (a char(32) primary key,id INTEGER) ENGINE=MYISAM;
INSERT INTO t1 (id) VALUES (1);
INSERT INTO t1 SELECT id+1 FROM t1;
INSERT INTO t1 SELECT id+2 FROM t1;
INSERT INTO t1 SELECT id+4 FROM t1;
INSERT INTO t1 SELECT id+8 FROM t1;
INSERT INTO t1 SELECT id+16 FROM t1;
INSERT INTO t1 SELECT id+32 FROM t1;
INSERT INTO t1 SELECT id+64 FROM t1;
INSERT INTO t1 SELECT id+128 FROM t1;
INSERT INTO t1 SELECT id+256 FROM t1;
INSERT INTO t1 SELECT id+512 FROM t1;
INSERT INTO t1 SELECT id+1024 FROM t1;
INSERT INTO t1 SELECT id+2048 FROM t1;
INSERT INTO t1 SELECT id+4096 FROM t1;
INSERT INTO t1 SELECT id+8192 FROM t1;
INSERT INTO t1 SELECT id+16384 FROM t1;
INSERT INTO t1 SELECT id+32768 FROM t1;
INSERT INTO t1 SELECT id+65536 FROM t1;
INSERT INTO t1 SELECT id+131072 FROM t1;
INSERT INTO t1 SELECT id+262144 FROM t1;
INSERT INTO t1 SELECT id+524288 FROM t1;
INSERT INTO t1 SELECT id+1048576 FROM t1;
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t3 SELECT concat(id),id from t2 ORDER BY -id;
INSERT INTO t4 SELECT * from t3 ORDER BY concat(a);
select sum(id) from t3;
sum(id)
2199024304128
drop table t1,t2,t3,t4;
mysql-test/r/sum_distinct-big.result
0 → 100644
View file @
211638f5
using_big_test
0
CREATE TABLE t1 (id INTEGER);
CREATE TABLE t2 (id INTEGER);
INSERT INTO t1 (id) VALUES (1), (1), (1),(1);
INSERT INTO t1 (id) SELECT id FROM t1;
/* 8 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 12 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 16 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 20 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 24 */
INSERT INTO t1 SELECT id+1 FROM t1;
INSERT INTO t1 SELECT id+2 FROM t1;
INSERT INTO t1 SELECT id+4 FROM t1;
INSERT INTO t1 SELECT id+8 FROM t1;
INSERT INTO t1 SELECT id+16 FROM t1;
INSERT INTO t1 SELECT id+32 FROM t1;
INSERT INTO t1 SELECT id+64 FROM t1;
INSERT INTO t1 SELECT id+128 FROM t1;
INSERT INTO t1 SELECT id+256 FROM t1;
INSERT INTO t1 SELECT id+512 FROM t1;
SELECT AVG(DISTINCT id) FROM t1 GROUP BY id % 13;
AVG(DISTINCT id)
513.5000
508.0000
509.0000
510.0000
511.0000
512.0000
513.0000
514.0000
515.0000
516.0000
517.0000
511.5000
512.5000
SELECT SUM(DISTINCT id)/COUNT(DISTINCT id) FROM t1 GROUP BY id % 13;
SUM(DISTINCT id)/COUNT(DISTINCT id)
513.50000
508.00000
509.00000
510.00000
511.00000
512.00000
513.00000
514.00000
515.00000
516.00000
517.00000
511.50000
512.50000
INSERT INTO t1 SELECT id+1024 FROM t1;
INSERT INTO t1 SELECT id+2048 FROM t1;
INSERT INTO t1 SELECT id+4096 FROM t1;
INSERT INTO t1 SELECT id+8192 FROM t1;
INSERT INTO t2 SELECT id FROM t1 ORDER BY id*rand();
SELECT SUM(DISTINCT id) sm FROM t1;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t2;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t1 group by id % 13;
sm
10327590
10328851
10330112
10331373
10332634
10317510
10318770
10320030
10321290
10322550
10323810
10325070
10326330
SET max_heap_table_size=16384;
SHOW variables LIKE 'max_heap_table_size';
Variable_name Value
max_heap_table_size 16384
SELECT SUM(DISTINCT id) sm FROM t1;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t2;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t1 GROUP BY id % 13;
sm
10327590
10328851
10330112
10331373
10332634
10317510
10318770
10320030
10321290
10322550
10323810
10325070
10326330
DROP TABLE t1;
DROP TABLE t2;
mysql-test/r/sum_distinct.result
View file @
211638f5
...
...
@@ -95,109 +95,3 @@ SELECT SUM(DISTINCT id % 11) FROM t1;
SUM(DISTINCT id % 11)
55
DROP TABLE t1;
CREATE TABLE t1 (id INTEGER);
CREATE TABLE t2 (id INTEGER);
INSERT INTO t1 (id) VALUES (1), (1), (1),(1);
INSERT INTO t1 (id) SELECT id FROM t1;
/* 8 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 12 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 16 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 20 */
INSERT INTO t1 (id) SELECT id FROM t1;
/* 24 */
INSERT INTO t1 SELECT id+1 FROM t1;
INSERT INTO t1 SELECT id+2 FROM t1;
INSERT INTO t1 SELECT id+4 FROM t1;
INSERT INTO t1 SELECT id+8 FROM t1;
INSERT INTO t1 SELECT id+16 FROM t1;
INSERT INTO t1 SELECT id+32 FROM t1;
INSERT INTO t1 SELECT id+64 FROM t1;
INSERT INTO t1 SELECT id+128 FROM t1;
INSERT INTO t1 SELECT id+256 FROM t1;
INSERT INTO t1 SELECT id+512 FROM t1;
SELECT AVG(DISTINCT id) FROM t1 GROUP BY id % 13;
AVG(DISTINCT id)
513.5000
508.0000
509.0000
510.0000
511.0000
512.0000
513.0000
514.0000
515.0000
516.0000
517.0000
511.5000
512.5000
SELECT SUM(DISTINCT id)/COUNT(DISTINCT id) FROM t1 GROUP BY id % 13;
SUM(DISTINCT id)/COUNT(DISTINCT id)
513.50000
508.00000
509.00000
510.00000
511.00000
512.00000
513.00000
514.00000
515.00000
516.00000
517.00000
511.50000
512.50000
INSERT INTO t1 SELECT id+1024 FROM t1;
INSERT INTO t1 SELECT id+2048 FROM t1;
INSERT INTO t1 SELECT id+4096 FROM t1;
INSERT INTO t1 SELECT id+8192 FROM t1;
INSERT INTO t2 SELECT id FROM t1 ORDER BY id*rand();
SELECT SUM(DISTINCT id) sm FROM t1;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t2;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t1 group by id % 13;
sm
10327590
10328851
10330112
10331373
10332634
10317510
10318770
10320030
10321290
10322550
10323810
10325070
10326330
SET max_heap_table_size=16384;
SHOW variables LIKE 'max_heap_table_size';
Variable_name Value
max_heap_table_size 16384
SELECT SUM(DISTINCT id) sm FROM t1;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t2;
sm
134225920
SELECT SUM(DISTINCT id) sm FROM t1 GROUP BY id % 13;
sm
10327590
10328851
10330112
10331373
10332634
10317510
10318770
10320030
10321290
10322550
10323810
10325070
10326330
DROP TABLE t1;
DROP TABLE t2;
mysql-test/t/heap.test
View file @
211638f5
...
...
@@ -280,14 +280,14 @@ explain select * from t1 where v='a';
select
v
,
count
(
*
)
from
t1
group
by
v
limit
10
;
select
v
,
count
(
t
)
from
t1
group
by
v
limit
10
;
select
v
,
count
(
c
)
from
t1
group
by
v
limit
10
;
select
sql_big_result
v
,
count
(
t
)
from
t1
group
by
v
limit
10
;
select
sql_big_result
v
,
count
(
c
)
from
t1
group
by
v
limit
10
;
select
sql_big_result
trim
(
v
)
,
count
(
t
)
from
t1
group
by
v
limit
10
;
select
sql_big_result
trim
(
v
)
,
count
(
c
)
from
t1
group
by
v
limit
10
;
select
c
,
count
(
*
)
from
t1
group
by
c
limit
10
;
select
c
,
count
(
t
)
from
t1
group
by
c
limit
10
;
select
sql_big_result
c
,
count
(
t
)
from
t1
group
by
c
limit
10
;
select
t
,
count
(
*
)
from
t1
group
by
t
limit
10
;
select
t
,
count
(
t
)
from
t1
group
by
t
limit
10
;
select
sql_big_result
t
,
count
(
t
)
from
t1
group
by
t
limit
10
;
select
sql_big_result
t
rim
(
t
)
,
count
(
t
)
from
t1
group
by
t
limit
10
;
drop
table
t1
;
#
...
...
mysql-test/t/innodb-big.test
0 → 100644
View file @
211638f5
#
# Test some things that takes a long time
--
source
include
/
big_test
.
inc
--
source
include
/
have_innodb
.
inc
--
disable_warnings
DROP
TABLE
IF
EXISTS
t1
,
t2
,
t3
,
t4
;
--
enable_warnings
#
# Test test how filesort and buffered-record-reads works with innodb
#
CREATE
TABLE
t1
(
id
INTEGER
)
ENGINE
=
MYISAM
;
CREATE
TABLE
t2
(
id
INTEGER
primary
key
)
ENGINE
=
INNODB
;
CREATE
TABLE
t3
(
a
char
(
32
)
primary
key
,
id
INTEGER
)
ENGINE
=
INNODB
;
CREATE
TABLE
t4
(
a
char
(
32
)
primary
key
,
id
INTEGER
)
ENGINE
=
MYISAM
;
INSERT
INTO
t1
(
id
)
VALUES
(
1
);
INSERT
INTO
t1
SELECT
id
+
1
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
16
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
32
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
64
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
128
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
256
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
512
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
1024
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2048
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4096
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8192
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
16384
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
32768
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
65536
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
131072
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
262144
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
524288
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
1048576
FROM
t1
;
INSERT
INTO
t2
SELECT
*
FROM
t1
;
INSERT
INTO
t3
SELECT
concat
(
id
),
id
from
t2
ORDER
BY
-
id
;
INSERT
INTO
t4
SELECT
*
from
t3
ORDER
BY
concat
(
a
);
select
sum
(
id
)
from
t3
;
drop
table
t1
,
t2
,
t3
,
t4
;
mysql-test/t/sum_distinct-big.test
0 → 100644
View file @
211638f5
#
# Various tests for SUM(DISTINCT ...)
#
--
source
include
/
big_test
.
inc
--
disable_warnings
DROP
TABLE
IF
EXISTS
t1
,
t2
;
--
enable_warnings
#
# Test the case when distinct values doesn't fit in memory and
# filesort is used (see uniques.cc:merge_walk)
#
CREATE
TABLE
t1
(
id
INTEGER
);
CREATE
TABLE
t2
(
id
INTEGER
);
INSERT
INTO
t1
(
id
)
VALUES
(
1
),
(
1
),
(
1
),(
1
);
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 8 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 12 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 16 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 20 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 24 */
INSERT
INTO
t1
SELECT
id
+
1
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
16
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
32
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
64
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
128
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
256
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
512
FROM
t1
;
# Just test that AVG(DISTINCT) is there
SELECT
AVG
(
DISTINCT
id
)
FROM
t1
GROUP
BY
id
%
13
;
SELECT
SUM
(
DISTINCT
id
)
/
COUNT
(
DISTINCT
id
)
FROM
t1
GROUP
BY
id
%
13
;
INSERT
INTO
t1
SELECT
id
+
1024
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2048
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4096
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8192
FROM
t1
;
INSERT
INTO
t2
SELECT
id
FROM
t1
ORDER
BY
id
*
rand
();
# SELECT '++++++++++++++++++++++++++++++++++++++++++++++++++';
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t2
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
group
by
id
%
13
;
# this limit for max_heap_table_size is set to force testing the case, when
# all distinct sum values can not fit in memory and must be stored in a
# temporary table
SET
max_heap_table_size
=
16384
;
# to check that max_heap_table_size was actually set (hard limit for minimum
# max_heap_table_size is set in mysqld.cc):
SHOW
variables
LIKE
'max_heap_table_size'
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t2
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
GROUP
BY
id
%
13
;
DROP
TABLE
t1
;
DROP
TABLE
t2
;
mysql-test/t/sum_distinct.test
View file @
211638f5
...
...
@@ -93,62 +93,3 @@ SELECT SUM(DISTINCT id) FROM t1;
SELECT
SUM
(
DISTINCT
id
%
11
)
FROM
t1
;
DROP
TABLE
t1
;
#
# Test the case when distinct values doesn't fit in memory and
# filesort is used (see uniques.cc:merge_walk)
#
CREATE
TABLE
t1
(
id
INTEGER
);
CREATE
TABLE
t2
(
id
INTEGER
);
INSERT
INTO
t1
(
id
)
VALUES
(
1
),
(
1
),
(
1
),(
1
);
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 8 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 12 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 16 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 20 */
INSERT
INTO
t1
(
id
)
SELECT
id
FROM
t1
;
/* 24 */
INSERT
INTO
t1
SELECT
id
+
1
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
16
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
32
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
64
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
128
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
256
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
512
FROM
t1
;
# Just test that AVG(DISTINCT) is there
SELECT
AVG
(
DISTINCT
id
)
FROM
t1
GROUP
BY
id
%
13
;
SELECT
SUM
(
DISTINCT
id
)
/
COUNT
(
DISTINCT
id
)
FROM
t1
GROUP
BY
id
%
13
;
INSERT
INTO
t1
SELECT
id
+
1024
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
2048
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
4096
FROM
t1
;
INSERT
INTO
t1
SELECT
id
+
8192
FROM
t1
;
INSERT
INTO
t2
SELECT
id
FROM
t1
ORDER
BY
id
*
rand
();
# SELECT '++++++++++++++++++++++++++++++++++++++++++++++++++';
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t2
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
group
by
id
%
13
;
# this limit for max_heap_table_size is set to force testing the case, when
# all distinct sum values can not fit in memory and must be stored in a
# temporary table
SET
max_heap_table_size
=
16384
;
# to check that max_heap_table_size was actually set (hard limit for minimum
# max_heap_table_size is set in mysqld.cc):
SHOW
variables
LIKE
'max_heap_table_size'
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t2
;
SELECT
SUM
(
DISTINCT
id
)
sm
FROM
t1
GROUP
BY
id
%
13
;
DROP
TABLE
t1
;
DROP
TABLE
t2
;
sql/filesort.cc
View file @
211638f5
...
...
@@ -127,7 +127,8 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
param
.
ref_length
=
table
->
file
->
ref_length
;
param
.
addon_field
=
0
;
param
.
addon_length
=
0
;
if
(
!
(
table
->
s
->
tmp_table
||
table
->
fulltext_searched
))
if
(
!
(
table
->
file
->
table_flags
()
&
HA_FAST_KEY_READ
)
&&
!
table
->
fulltext_searched
)
{
/*
Get the descriptors of all fields whose values are appended
...
...
@@ -1301,27 +1302,29 @@ get_addon_fields(THD *thd, Field **ptabfield, uint sortlength, uint *plength)
uint
length
=
0
;
uint
fields
=
0
;
uint
null_fields
=
0
;
/*
If there is a reference to a field in the query add it
to the the set of appended fields.
Note for future refinement:
This this a too strong condition.
Actually we need only the fields referred in the
result set. And for some of them it makes sense to use
the values directly from sorted fields.
query_id_t
query_id
=
thd
->
query_id
;
/*
If there is a reference to a field in the query add it
to the the set of appended fields.
Note for future refinement:
This this a too strong condition.
Actually we need only the fields referred in the
result set. And for some of them it makes sense to use
the values directly from sorted fields.
*/
*
plength
=
0
;
/*
The following statement is added to avoid sorting in alter_table.
The fact is the filter 'field->query_id != thd->query_id'
doesn't work for alter table
The following statement is added to avoid sorting in alter_table.
The fact is the filter 'field->query_id != thd->query_id'
doesn't work for alter table
*/
if
(
thd
->
lex
->
sql_command
!=
SQLCOM_SELECT
)
if
(
thd
->
lex
->
sql_command
!=
SQLCOM_SELECT
&&
thd
->
lex
->
sql_command
!=
SQLCOM_INSERT_SELECT
)
return
0
;
for
(
pfield
=
ptabfield
;
(
field
=
*
pfield
)
;
pfield
++
)
{
if
(
field
->
query_id
!=
thd
->
query_id
)
if
(
field
->
query_id
!=
query_id
)
continue
;
if
(
field
->
flags
&
BLOB_FLAG
)
return
0
;
...
...
sql/ha_innodb.h
View file @
211638f5
...
...
@@ -85,7 +85,6 @@ class ha_innobase: public handler
ha_innobase
(
TABLE
*
table
)
:
handler
(
table
),
int_table_flags
(
HA_REC_NOT_IN_SEQ
|
HA_NULL_IN_KEY
|
HA_FAST_KEY_READ
|
HA_CAN_INDEX_BLOBS
|
HA_CAN_SQL_HANDLER
|
HA_NOT_EXACT_COUNT
|
...
...
sql/handler.h
View file @
211638f5
...
...
@@ -47,14 +47,22 @@
#define HA_ADMIN_WRONG_CHECKSUM -8
/* Bits in table_flags() to show what database can do */
#define HA_READ_RND_SAME (1 << 0)
/* can switch index during the scan
with ::rnd_same() - not used yet.
see mi_rsame/heap_rsame/myrg_rsame */
/*
Can switch index during the scan with ::rnd_same() - not used yet.
see mi_rsame/heap_rsame/myrg_rsame
*/
#define HA_READ_RND_SAME (1 << 0)
#define HA_TABLE_SCAN_ON_INDEX (1 << 2)
/* No separate data/index file */
#define HA_REC_NOT_IN_SEQ (1 << 3)
/* ha_info don't return recnumber;
It returns a position to ha_r_rnd */
#define HA_CAN_GEOMETRY (1 << 4)
#define HA_FAST_KEY_READ (1 << 5)
/* no need for a record cache in filesort */
/*
Reading keys in random order is as fast as reading keys in sort order
(Used in records.cc to decide if we should use a record cache and by
filesort to decide if we should sort key + data or key + pointer-to-row
*/
#define HA_FAST_KEY_READ (1 << 5)
#define HA_NULL_IN_KEY (1 << 7)
/* One can have keys with NULL */
#define HA_DUPP_POS (1 << 8)
/* ha_position() gives dup row */
#define HA_NO_BLOBS (1 << 9)
/* Doesn't support blobs */
...
...
@@ -62,9 +70,11 @@
#define HA_AUTO_PART_KEY (1 << 11)
/* auto-increment in multi-part key */
#define HA_REQUIRE_PRIMARY_KEY (1 << 12)
/* .. and can't create a hidden one */
#define HA_NOT_EXACT_COUNT (1 << 13)
#define HA_CAN_INSERT_DELAYED (1 << 14)
/* only handlers with table-level locks
need no special code to support
INSERT DELAYED */
/*
INSERT_DELAYED only works with handlers that uses MySQL internal table
level locks
*/
#define HA_CAN_INSERT_DELAYED (1 << 14)
#define HA_PRIMARY_KEY_IN_READ_INDEX (1 << 15)
#define HA_NOT_DELETE_WITH_CACHE (1 << 18)
#define HA_NO_PREFIX_CHAR_KEYS (1 << 20)
...
...
sql/mysql_priv.h
View file @
211638f5
...
...
@@ -116,7 +116,7 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
The following parameters is to decide when to use an extra cache to
optimise seeks when reading a big table in sorted order
*/
#define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (1
6
L*1024*1024)
#define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (1
0
L*1024*1024)
#define MIN_ROWS_TO_USE_TABLE_CACHE 100
#define MIN_ROWS_TO_USE_BULK_INSERT 100
...
...
sql/records.cc
View file @
211638f5
...
...
@@ -89,7 +89,8 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
(
ulonglong
)
MIN_FILE_LENGTH_TO_USE_ROW_CACHE
&&
info
->
io_cache
->
end_of_file
/
info
->
ref_length
*
table
->
s
->
reclength
>
(
my_off_t
)
MIN_ROWS_TO_USE_TABLE_CACHE
&&
!
table
->
s
->
blob_fields
)
!
table
->
s
->
blob_fields
&&
info
->
ref_length
<=
MAX_REFLENGTH
)
{
if
(
!
init_rr_cache
(
thd
,
info
))
{
...
...
@@ -348,7 +349,8 @@ static int init_rr_cache(THD *thd, READ_RECORD *info)
MYF
(
0
))))
DBUG_RETURN
(
1
);
#ifdef HAVE_purify
bzero
(
info
->
cache
,
rec_cache_size
);
// Avoid warnings in qsort
// Avoid warnings in qsort
bzero
(
info
->
cache
,
rec_cache_size
+
info
->
cache_records
*
info
->
struct_length
+
1
);
#endif
DBUG_PRINT
(
"info"
,(
"Allocated buffert for %d records"
,
info
->
cache_records
));
info
->
read_positions
=
info
->
cache
+
rec_cache_size
;
...
...
sql/sql_select.cc
View file @
211638f5
...
...
@@ -8157,6 +8157,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
*/
(
*
argp
)
->
maybe_null
=
1
;
}
new_field
->
query_id
=
thd
->
query_id
;
}
}
}
...
...
@@ -8203,6 +8204,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
group_null_items
++
;
new_field
->
flags
|=
GROUP_FLAG
;
}
new_field
->
query_id
=
thd
->
query_id
;
*
(
reg_field
++
)
=
new_field
;
}
if
(
!--
hidden_field_count
)
...
...
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