mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge from 5.3
This commit is contained in:
commit
caa535eb9f
9 changed files with 229 additions and 11 deletions
|
@ -227,3 +227,7 @@ case t1.f1 when '00:00:00' then 1 end
|
|||
1
|
||||
NULL
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a YEAR);
|
||||
SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END;
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -96,3 +96,7 @@ SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
|||
a
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE t1(a INT ZEROFILL);
|
||||
SELECT 1 FROM t1 WHERE t1.a IN (1, t1.a) AND t1.a=2;
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1813,3 +1813,135 @@ Warnings:
|
|||
Note 1003 select `test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t2`.`a` = `test`.`t1`.`b`) group by `test`.`t2`.`b` order by `test`.`t1`.`b`
|
||||
drop table t1,t2;
|
||||
End of 5.2 tests
|
||||
#
|
||||
# Bug mdev-449: ORDER BY with small sort_buffer_size
|
||||
#
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int, f2 varchar(200));
|
||||
INSERT INTO t1(f1, f2) VALUES
|
||||
(0,"0"),(1,"1"),(2,"2"),(3,"3"),(4,"4"),(5,"5"),
|
||||
(6,"6"),(7,"7"),(8,"8"),(9,"9"),(10,"10"),
|
||||
(11,"11"),(12,"12"),(13,"13"),(14,"14"),(15,"15"),
|
||||
(16,"16"),(17,"17"),(18,"18"),(19,"19"),(20,"20"),
|
||||
(21,"21"),(22,"22"),(23,"23"),(24,"24"),(25,"25"),
|
||||
(26,"26"),(27,"27"),(28,"28"),(29,"29"),(30,"30"),
|
||||
(31,"31"),(32,"32"),(33,"33"),(34,"34"),(35,"35"),
|
||||
(36,"36"),(37,"37"),(38,"38"),(39,"39"),(40,"40"),
|
||||
(41,"41"),(42,"42"),(43,"43"),(44,"44"),(45,"45"),
|
||||
(46,"46"),(47,"47"),(48,"48"),(49,"49"),(50,"50"),
|
||||
(51,"51"),(52,"52"),(53,"53"),(54,"54"),(55,"55"),
|
||||
(56,"56"),(57,"57"),(58,"58"),(59,"59"),(60,"60"),
|
||||
(61,"61"),(62,"62"),(63,"63"),(64,"64"),(65,"65"),
|
||||
(66,"66"),(67,"67"),(68,"68"),(69,"69"),(70,"70"),
|
||||
(71,"71"),(72,"72"),(73,"73"),(74,"74"),(75,"75"),
|
||||
(76,"76"),(77,"77"),(78,"78"),(79,"79"),(80,"80"),
|
||||
(81,"81"),(82,"82"),(83,"83"),(84,"84"),(85,"85"),
|
||||
(86,"86"),(87,"87"),(88,"88"),(89,"89"),(90,"90"),
|
||||
(91,"91"),(92,"92"),(93,"93"),(94,"94"),(95,"95"),
|
||||
(96,"96"),(97,"97"),(98,"98"),(99,"99");
|
||||
set @save_sort_buffer_size= @@sort_buffer_size;
|
||||
set sort_buffer_size= 2000;
|
||||
SELECT * FROM t1 ORDER BY f1 DESC, f0;
|
||||
f0 f1 f2
|
||||
100 99 99
|
||||
99 98 98
|
||||
98 97 97
|
||||
97 96 96
|
||||
96 95 95
|
||||
95 94 94
|
||||
94 93 93
|
||||
93 92 92
|
||||
92 91 91
|
||||
91 90 90
|
||||
90 89 89
|
||||
89 88 88
|
||||
88 87 87
|
||||
87 86 86
|
||||
86 85 85
|
||||
85 84 84
|
||||
84 83 83
|
||||
83 82 82
|
||||
82 81 81
|
||||
81 80 80
|
||||
80 79 79
|
||||
79 78 78
|
||||
78 77 77
|
||||
77 76 76
|
||||
76 75 75
|
||||
75 74 74
|
||||
74 73 73
|
||||
73 72 72
|
||||
72 71 71
|
||||
71 70 70
|
||||
70 69 69
|
||||
69 68 68
|
||||
68 67 67
|
||||
67 66 66
|
||||
66 65 65
|
||||
65 64 64
|
||||
64 63 63
|
||||
63 62 62
|
||||
62 61 61
|
||||
61 60 60
|
||||
60 59 59
|
||||
59 58 58
|
||||
58 57 57
|
||||
57 56 56
|
||||
56 55 55
|
||||
55 54 54
|
||||
54 53 53
|
||||
53 52 52
|
||||
52 51 51
|
||||
51 50 50
|
||||
50 49 49
|
||||
49 48 48
|
||||
48 47 47
|
||||
47 46 46
|
||||
46 45 45
|
||||
45 44 44
|
||||
44 43 43
|
||||
43 42 42
|
||||
42 41 41
|
||||
41 40 40
|
||||
40 39 39
|
||||
39 38 38
|
||||
38 37 37
|
||||
37 36 36
|
||||
36 35 35
|
||||
35 34 34
|
||||
34 33 33
|
||||
33 32 32
|
||||
32 31 31
|
||||
31 30 30
|
||||
30 29 29
|
||||
29 28 28
|
||||
28 27 27
|
||||
27 26 26
|
||||
26 25 25
|
||||
25 24 24
|
||||
24 23 23
|
||||
23 22 22
|
||||
22 21 21
|
||||
21 20 20
|
||||
20 19 19
|
||||
19 18 18
|
||||
18 17 17
|
||||
17 16 16
|
||||
16 15 15
|
||||
15 14 14
|
||||
14 13 13
|
||||
13 12 12
|
||||
12 11 11
|
||||
11 10 10
|
||||
10 9 9
|
||||
9 8 8
|
||||
8 7 7
|
||||
7 6 6
|
||||
6 5 5
|
||||
5 4 4
|
||||
4 3 3
|
||||
3 2 2
|
||||
2 1 1
|
||||
1 0 0
|
||||
set sort_buffer_size= @save_sort_buffer_size;
|
||||
DROP TABLE t1;
|
||||
End of 5.3 tests
|
||||
|
|
|
@ -182,3 +182,13 @@ create table t1 (f1 time);
|
|||
insert t1 values ('00:00:00'),('00:01:00');
|
||||
select case t1.f1 when '00:00:00' then 1 end from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# LP BUG#1001510
|
||||
# Bug #11764313 57135: CRASH IN ITEM_FUNC_CASE::FIND_ITEM WITH CASE WHEN
|
||||
# ELSE CLAUSE
|
||||
#
|
||||
|
||||
CREATE TABLE t1(a YEAR);
|
||||
SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -86,3 +86,11 @@ SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
|||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
# Bug #11764818 57692: Crash in item_func_in::val_int() with ZEROFILL
|
||||
#
|
||||
|
||||
CREATE TABLE t1(a INT ZEROFILL);
|
||||
SELECT 1 FROM t1 WHERE t1.a IN (1, t1.a) AND t1.a=2;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1613,3 +1613,42 @@ SELECT t2.b FROM t1, t2 WHERE t1.b = t2.a GROUP BY t2.b ORDER BY t1.b;
|
|||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.2 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug mdev-449: ORDER BY with small sort_buffer_size
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int, f2 varchar(200));
|
||||
INSERT INTO t1(f1, f2) VALUES
|
||||
(0,"0"),(1,"1"),(2,"2"),(3,"3"),(4,"4"),(5,"5"),
|
||||
(6,"6"),(7,"7"),(8,"8"),(9,"9"),(10,"10"),
|
||||
(11,"11"),(12,"12"),(13,"13"),(14,"14"),(15,"15"),
|
||||
(16,"16"),(17,"17"),(18,"18"),(19,"19"),(20,"20"),
|
||||
(21,"21"),(22,"22"),(23,"23"),(24,"24"),(25,"25"),
|
||||
(26,"26"),(27,"27"),(28,"28"),(29,"29"),(30,"30"),
|
||||
(31,"31"),(32,"32"),(33,"33"),(34,"34"),(35,"35"),
|
||||
(36,"36"),(37,"37"),(38,"38"),(39,"39"),(40,"40"),
|
||||
(41,"41"),(42,"42"),(43,"43"),(44,"44"),(45,"45"),
|
||||
(46,"46"),(47,"47"),(48,"48"),(49,"49"),(50,"50"),
|
||||
(51,"51"),(52,"52"),(53,"53"),(54,"54"),(55,"55"),
|
||||
(56,"56"),(57,"57"),(58,"58"),(59,"59"),(60,"60"),
|
||||
(61,"61"),(62,"62"),(63,"63"),(64,"64"),(65,"65"),
|
||||
(66,"66"),(67,"67"),(68,"68"),(69,"69"),(70,"70"),
|
||||
(71,"71"),(72,"72"),(73,"73"),(74,"74"),(75,"75"),
|
||||
(76,"76"),(77,"77"),(78,"78"),(79,"79"),(80,"80"),
|
||||
(81,"81"),(82,"82"),(83,"83"),(84,"84"),(85,"85"),
|
||||
(86,"86"),(87,"87"),(88,"88"),(89,"89"),(90,"90"),
|
||||
(91,"91"),(92,"92"),(93,"93"),(94,"94"),(95,"95"),
|
||||
(96,"96"),(97,"97"),(98,"98"),(99,"99");
|
||||
|
||||
set @save_sort_buffer_size= @@sort_buffer_size;
|
||||
set sort_buffer_size= 2000;
|
||||
|
||||
SELECT * FROM t1 ORDER BY f1 DESC, f0;
|
||||
|
||||
set sort_buffer_size= @save_sort_buffer_size;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.3 tests
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||
int error;
|
||||
ulong memory_available= thd->variables.sortbuff_size;
|
||||
ulong min_sort_memory;
|
||||
ulong sort_buff_sz;
|
||||
uint maxbuffer;
|
||||
BUFFPEK *buffpek;
|
||||
ha_rows num_rows= HA_POS_ERROR;
|
||||
|
@ -193,19 +194,21 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||
goto err;
|
||||
|
||||
min_sort_memory= max(MIN_SORT_MEMORY, param.sort_length * MERGEBUFF2);
|
||||
set_if_bigger(min_sort_memory, sizeof(BUFFPEK*)*MERGEBUFF2);
|
||||
if (!table_sort.sort_keys)
|
||||
{
|
||||
while (memory_available >= min_sort_memory)
|
||||
{
|
||||
ulong keys= memory_available / (param.rec_length + sizeof(char*));
|
||||
table_sort.keys= (uint) min(num_rows, keys);
|
||||
sort_buff_sz= table_sort.keys*(param.rec_length+sizeof(char*));
|
||||
set_if_bigger(sort_buff_sz, param.rec_length * MERGEBUFF2);
|
||||
|
||||
DBUG_EXECUTE_IF("make_sort_keys_alloc_fail",
|
||||
DBUG_SET("+d,simulate_out_of_memory"););
|
||||
|
||||
if ((table_sort.sort_keys=
|
||||
(uchar**) my_malloc(table_sort.keys*(param.rec_length+sizeof(char*)),
|
||||
MYF(0))))
|
||||
(uchar**) my_malloc(sort_buff_sz, MYF(0))))
|
||||
break;
|
||||
ulong old_memory_available= memory_available;
|
||||
memory_available= memory_available/4*3;
|
||||
|
@ -1259,9 +1262,8 @@ int merge_buffers(SORTPARAM *param, IO_CACHE *from_file,
|
|||
to_start_filepos= my_b_tell(to_file);
|
||||
strpos= sort_buffer;
|
||||
org_max_rows=max_rows= param->max_rows;
|
||||
|
||||
/* The following will fire if there is not enough space in sort_buffer */
|
||||
DBUG_ASSERT(maxcount!=0);
|
||||
|
||||
set_if_bigger(maxcount, 1);
|
||||
|
||||
if (unique_buff)
|
||||
{
|
||||
|
|
|
@ -3089,6 +3089,15 @@ void Item_func_case::fix_length_and_dec()
|
|||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
Set cmp_context of all WHEN arguments. This prevents
|
||||
Item_field::equal_fields_propagator() from transforming a
|
||||
zerofill argument into a string constant. Such a change would
|
||||
require rebuilding cmp_items.
|
||||
*/
|
||||
for (i= 0; i < ncases; i+= 2)
|
||||
args[i]->cmp_context= item_cmp_type(left_result_type,
|
||||
args[i]->result_type());
|
||||
}
|
||||
|
||||
if (else_expr_num == -1 || args[else_expr_num]->maybe_null)
|
||||
|
@ -4069,6 +4078,16 @@ void Item_func_in::fix_length_and_dec()
|
|||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
Set cmp_context of all arguments. This prevents
|
||||
Item_field::equal_fields_propagator() from transforming a zerofill integer
|
||||
argument into a string constant. Such a change would require rebuilding
|
||||
cmp_itmes.
|
||||
*/
|
||||
for (arg= args + 1, arg_end= args + arg_count; arg != arg_end ; arg++)
|
||||
{
|
||||
arg[0]->cmp_context= item_cmp_type(left_result_type, arg[0]->result_type());
|
||||
}
|
||||
max_length= 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -160,18 +160,18 @@
|
|||
3.2.1 Non-merged semi-joins and join optimization
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
For join optimization purposes, non-merged semi-join nests are similar to
|
||||
base tables - they've got one JOIN_TAB, which can be accessed with one of
|
||||
two methods:
|
||||
base tables. Each such nest is represented by one one JOIN_TAB, which has
|
||||
two possible access strategies:
|
||||
- full table scan (representing SJ-Materialization-Scan strategy)
|
||||
- eq_ref-like table lookup (representing SJ-Materialization-Lookup)
|
||||
|
||||
Unlike regular base tables, non-merged semi-joins have:
|
||||
- non-zero JOIN_TAB::startup_cost, and
|
||||
- join_tab->table->is_filled_at_execution()==TRUE, which means one
|
||||
cannot do const table detection or range analysis or other table data-
|
||||
dependent inferences
|
||||
// instead, get_delayed_table_estimates() runs optimization on the nest so that
|
||||
// we get an idea about temptable size
|
||||
cannot do const table detection, range analysis or other dataset-dependent
|
||||
optimizations.
|
||||
Instead, get_delayed_table_estimates() will run optimization for the
|
||||
subquery and produce an E(materialized table size).
|
||||
|
||||
3.2.2 Merged semi-joins and join optimization
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
Loading…
Reference in a new issue