[Commits] Rev 3502: Merge 5.3->5.5. in http://bazaar.launchpad.net/~maria-captains/maria/5.5

knielsen at knielsen-hq.org knielsen at knielsen-hq.org
Wed Aug 22 15:31:44 EEST 2012


At http://bazaar.launchpad.net/~maria-captains/maria/5.5

------------------------------------------------------------
revno: 3502 [merge]
revision-id: knielsen at knielsen-hq.org-20120822123105-s7tghd5t47oxywt9
parent: sergii at pisem.net-20120822075620-4desl15sge421oy8
parent: knielsen at knielsen-hq.org-20120822122650-rrghttpvuj211757
committer: knielsen at knielsen-hq.org
branch nick: mariadb-5.5
timestamp: Wed 2012-08-22 14:31:05 +0200
message:
  Merge 5.3->5.5.
modified:
  mysql-test/r/case.result       sp1f-case.result-20001228015633-zt3tvi3yr42ycsgkeoycm5jbymflme5z
  mysql-test/r/compare.result    sp1f-compare.result-20001228015633-6omgrcr5lejsgilph57vswnwgf3t7sln
  mysql-test/r/order_by.result   sp1f-order_by.result-20001228015634-omkoitbok7pbz53pkfmplnhbifnrebic
  mysql-test/t/case.test         sp1f-case.test-20001228015635-cvkiaivpkn4vfh6pa3k7gqhddmzaypeb
  mysql-test/t/compare.test      sp1f-compare.test-20001228015635-kh3xjgbn4tw7oxkhbbeyf7fubmla2jhi
  mysql-test/t/order_by.test     sp1f-order_by.test-20001228015636-nr7aml75ra7mdlruhoqo5dgbfv5tcesc
  sql/filesort.cc                sp1f-filesort.cc-19700101030959-mfm2vmdgqqru7emm2meeecleb2q3zdso
  sql/item_cmpfunc.cc            sp1f-item_cmpfunc.cc-19700101030959-hrk7pi2n6qpwxauufnkizirsoucdcx2e
  sql/opt_subselect.cc           opt_subselect.cc-20100215190428-nekkl8wisp0k6nlk-1
=== modified file 'mysql-test/r/case.result'
--- a/mysql-test/r/case.result	2011-11-22 17:04:38 +0000
+++ b/mysql-test/r/case.result	2012-08-22 12:31:05 +0000
@@ -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;

=== modified file 'mysql-test/r/compare.result'
--- a/mysql-test/r/compare.result	2011-11-22 17:04:38 +0000
+++ b/mysql-test/r/compare.result	2012-08-22 12:31:05 +0000
@@ -96,3 +96,7 @@ SELECT * FROM t1 WHERE a > '2008-01-01'
 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;

=== modified file 'mysql-test/r/order_by.result'
--- a/mysql-test/r/order_by.result	2012-02-15 17:08:08 +0000
+++ b/mysql-test/r/order_by.result	2012-08-22 12:31:05 +0000
@@ -1813,3 +1813,135 @@ id	select_type	table	type	possible_keys
 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

=== modified file 'mysql-test/t/case.test'
--- a/mysql-test/t/case.test	2011-11-22 17:04:38 +0000
+++ b/mysql-test/t/case.test	2012-08-22 12:31:05 +0000
@@ -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;

=== modified file 'mysql-test/t/compare.test'
--- a/mysql-test/t/compare.test	2008-09-18 12:55:36 +0000
+++ b/mysql-test/t/compare.test	2012-06-21 15:47:13 +0000
@@ -86,3 +86,11 @@ SELECT * FROM t1 WHERE a > '2008-01-01'
 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;

=== modified file 'mysql-test/t/order_by.test'
--- a/mysql-test/t/order_by.test	2012-02-15 17:08:08 +0000
+++ b/mysql-test/t/order_by.test	2012-08-22 12:31:05 +0000
@@ -1613,3 +1613,42 @@ SELECT t2.b FROM t1, t2 WHERE t1.b = t2.
 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
+

=== modified file 'sql/filesort.cc'
--- a/sql/filesort.cc	2012-05-21 13:30:25 +0000
+++ b/sql/filesort.cc	2012-08-22 12:31:05 +0000
@@ -103,6 +103,7 @@ ha_rows filesort(THD *thd, TABLE *table,
   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,
     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_C
   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)
   {

=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc	2012-08-09 15:22:00 +0000
+++ b/sql/item_cmpfunc.cc	2012-08-22 12:31:05 +0000
@@ -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;
 }
 

=== modified file 'sql/opt_subselect.cc'
--- a/sql/opt_subselect.cc	2012-06-06 19:26:40 +0000
+++ b/sql/opt_subselect.cc	2012-08-22 12:31:05 +0000
@@ -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
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



More information about the commits mailing list