List:Commits« Previous MessageNext Message »
From:msvensson Date:October 25 2006 4:39pm
Subject:bk commit into 5.1 tree (msvensson:1.2323) BUG#18888
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-10-25 16:39:19+02:00, msvensson@shellback.(none) +6 -0
  Bug#18888 Trying to overwrite sql/lex_hash.h during build
   - As a sideeffect of the patch to generate lex_hash.h only once
  on the machine where the source dist was produced, a problem
  was found when compiling a mysqld without partition support - it 
  would crash when looking up the lex symbols due to mismatch between
  lex.h and the generated lex_hash.h
  
   - Remove the ifdef for partition in lex.h 
   - Fix minor problem with"EXPLAIN PARTITION" when not compiled with
     partition(existed also without the above patch)
   - Add test case that will be run when we don't have partition
     support compiled into mysqld

  mysql-test/r/not_partition.require@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +2 -0
    New BitKeeper file ``mysql-test/r/not_partition.require''

  mysql-test/r/not_partition.require@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +0 -0

  mysql-test/r/not_partition.result@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +54 -0
    New BitKeeper file ``mysql-test/r/not_partition.result''

  mysql-test/r/not_partition.result@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +0 -0

  mysql-test/t/not_partition.test@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +58 -0
    New BitKeeper file ``mysql-test/t/not_partition.test''

  mysql-test/t/not_partition.test@stripped, 2006-10-25 16:39:14+02:00,
msvensson@shellback.(none) +0 -0

  sql/lex.h@stripped, 2006-10-25 16:39:13+02:00, msvensson@shellback.(none) +0 -2
    There should be no ifdefs of features in lex.h

  sql/sql_class.cc@stripped, 2006-10-25 16:39:14+02:00, msvensson@shellback.(none) +0 -2
    In line with the comment in sql_yacc.yy that we want the same output
    from "EXPLAIN PARTITIONS.." regardless of wheter we have compiled in
    support for partition  or not, remove the ifdef so the extra field
    is added to output if the DESCRIBE_PARTITIONS bit it set. Without
    this patch we get a crash as the code in select_describe believes the
    field is there.

  sql/sql_select.cc@stripped, 2006-10-25 16:39:14+02:00, msvensson@shellback.(none) +1 -1
    Use "const" for the variable as it's a ssigned once and never changes

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	shellback.(none)
# Root:	/home/msvensson/mysql/my51-m-bug18888

--- 1.164/sql/lex.h	2006-10-25 16:39:33 +02:00
+++ 1.165/sql/lex.h	2006-10-25 16:39:33 +02:00
@@ -383,11 +383,9 @@
   { "PACK_KEYS",	SYM(PACK_KEYS_SYM)},
   { "PARSER",           SYM(PARSER_SYM)},
   { "PARTIAL",		SYM(PARTIAL)},
-#ifdef WITH_PARTITION_STORAGE_ENGINE
   { "PARTITION",        SYM(PARTITION_SYM)},
   { "PARTITIONING",     SYM(PARTITIONING_SYM)},
   { "PARTITIONS",       SYM(PARTITIONS_SYM)},
-#endif
   { "PASSWORD",		SYM(PASSWORD)},
   { "PHASE",            SYM(PHASE_SYM)},
   { "PLUGIN",           SYM(PLUGIN_SYM)},

--- 1.297/sql/sql_class.cc	2006-10-25 16:39:33 +02:00
+++ 1.298/sql/sql_class.cc	2006-10-25 16:39:33 +02:00
@@ -859,7 +859,6 @@
   field_list.push_back(new Item_empty_string("select_type", 19, cs));
   field_list.push_back(item= new Item_empty_string("table", NAME_LEN, cs));
   item->maybe_null= 1;
-#ifdef WITH_PARTITION_STORAGE_ENGINE
   if (lex->describe & DESCRIBE_PARTITIONS)
   {
     /* Maximum length of string that make_used_partitions_str() can produce */
@@ -868,7 +867,6 @@
     field_list.push_back(item);
     item->maybe_null= 1;
   }
-#endif
   field_list.push_back(item= new Item_empty_string("type", 10, cs));
   item->maybe_null= 1;
   field_list.push_back(item=new Item_empty_string("possible_keys",

--- 1.458/sql/sql_select.cc	2006-10-25 16:39:33 +02:00
+++ 1.459/sql/sql_select.cc	2006-10-25 16:39:34 +02:00
@@ -2200,7 +2200,7 @@
       continue;
     }
 #ifdef WITH_PARTITION_STORAGE_ENGINE
-    bool no_partitions_used= table->no_partitions_used;
+    const bool no_partitions_used= table->no_partitions_used;
 #else
     const bool no_partitions_used= FALSE;
 #endif
--- New file ---
+++ mysql-test/r/not_partition.require	06/10/25 16:39:14
Variable_name	Value
have_partitioning	NO

--- New file ---
+++ mysql-test/r/not_partition.result	06/10/25 16:39:14
CREATE TABLE t1 (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
drop table t1;
CREATE TABLE t1 (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p0 VALUES LESS THAN (1960),
PARTITION p1 VALUES LESS THAN (1970),
PARTITION p2 VALUES LESS THAN (1980),
PARTITION p3 VALUES LESS THAN (1990),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
drop table t1;
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) )
SUBPARTITIONS 2 (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN MAXVALUE
);
drop table t1;
create table t1 (a varchar(10) charset latin1 collate latin1_bin)
partition by hash(length(a))
partitions 10;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
insert into t1 values (''),(' '),('a'),('a '),('a  ');
explain partitions select * from t1 where a='a ';
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	NULL	ALL	NULL	NULL	NULL	NULL	5	Using where
explain partitions select * from t1 where a='a';
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	NULL	ALL	NULL	NULL	NULL	NULL	5	Using where
explain partitions select * from t1 where a='a ' OR a='a';
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	NULL	ALL	NULL	NULL	NULL	NULL	5	Using where
drop table t1;

--- New file ---
+++ mysql-test/t/not_partition.test	06/10/25 16:39:14

# Run this tets only when mysqld don't has partitioning
# the statements are not expected to work, just check that we
# can't crash the server
-- require r/not_partition.require
disable_query_log;
show variables like "have_partitioning";
enable_query_log;


CREATE TABLE t1 (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;

ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
drop table t1;

CREATE TABLE t1 (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
    PARTITION p0 VALUES LESS THAN (1960),
    PARTITION p1 VALUES LESS THAN (1970),
    PARTITION p2 VALUES LESS THAN (1980),
    PARTITION p3 VALUES LESS THAN (1990),
    PARTITION p4 VALUES LESS THAN MAXVALUE
);
drop table t1;

CREATE TABLE t1 (id INT, purchased DATE)
    PARTITION BY RANGE( YEAR(purchased) )
    SUBPARTITION BY HASH( TO_DAYS(purchased) )
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN (1990),
        PARTITION p1 VALUES LESS THAN (2000),
        PARTITION p2 VALUES LESS THAN MAXVALUE
    );
drop table t1;

create table t1 (a varchar(10) charset latin1 collate latin1_bin)
partition by hash(length(a))
partitions 10;
show create table t1;
insert into t1 values (''),(' '),('a'),('a '),('a  ');
explain partitions select * from t1 where a='a ';
explain partitions select * from t1 where a='a';
explain partitions select * from t1 where a='a ' OR a='a';
drop table t1;

Thread
bk commit into 5.1 tree (msvensson:1.2323) BUG#18888msvensson25 Oct