Commit 37e6bfd7 authored by unknown's avatar unknown

Merge jamppa@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.1-new-merge_060509


sql/sql_parse.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
parents 6dc4a129 0490cb5b
...@@ -9,7 +9,7 @@ t1 CREATE TABLE `t1` ( ...@@ -9,7 +9,7 @@ t1 CREATE TABLE `t1` (
`pk1` int(11) NOT NULL, `pk1` int(11) NOT NULL,
`b` bit(64) DEFAULT NULL, `b` bit(64) DEFAULT NULL,
PRIMARY KEY (`pk1`) PRIMARY KEY (`pk1`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
insert into t1 values insert into t1 values
(0,b'1111111111111111111111111111111111111111111111111111111111111111'), (0,b'1111111111111111111111111111111111111111111111111111111111111111'),
(1,b'1000000000000000000000000000000000000000000000000000000000000000'), (1,b'1000000000000000000000000000000000000000000000000000000000000000'),
......
...@@ -49,7 +49,7 @@ t1 CREATE TABLE `t1` ( ...@@ -49,7 +49,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL, `b` int(11) NOT NULL,
`c` int(11) NOT NULL, `c` int(11) NOT NULL,
PRIMARY KEY (`pk1`) PRIMARY KEY (`pk1`)
) TABLESPACE ts1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) TABLESPACE ts1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1
INSERT INTO t1 VALUES (0, 0, 0); INSERT INTO t1 VALUES (0, 0, 0);
SELECT * FROM t1; SELECT * FROM t1;
pk1 b c pk1 b c
......
...@@ -218,7 +218,7 @@ t2 CREATE TABLE `t2` ( ...@@ -218,7 +218,7 @@ t2 CREATE TABLE `t2` (
`b2` int(11) NOT NULL, `b2` int(11) NOT NULL,
`c2` int(11) NOT NULL, `c2` int(11) NOT NULL,
PRIMARY KEY (`pk2`) PRIMARY KEY (`pk2`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW CREATE TABLE test.t1; SHOW CREATE TABLE test.t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
...@@ -226,7 +226,7 @@ t1 CREATE TABLE `t1` ( ...@@ -226,7 +226,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL, `b` int(11) NOT NULL,
`c` int(11) NOT NULL, `c` int(11) NOT NULL,
PRIMARY KEY (`pk1`) PRIMARY KEY (`pk1`)
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1
ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK
ENGINE=NDB; ENGINE=NDB;
SHOW CREATE TABLE test.t2; SHOW CREATE TABLE test.t2;
...@@ -236,7 +236,7 @@ t2 CREATE TABLE `t2` ( ...@@ -236,7 +236,7 @@ t2 CREATE TABLE `t2` (
`b2` int(11) NOT NULL, `b2` int(11) NOT NULL,
`c2` int(11) NOT NULL, `c2` int(11) NOT NULL,
PRIMARY KEY (`pk2`) PRIMARY KEY (`pk2`)
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1
ALTER TABLE test.t1 ENGINE=NDBCLUSTER; ALTER TABLE test.t1 ENGINE=NDBCLUSTER;
SHOW CREATE TABLE test.t1; SHOW CREATE TABLE test.t1;
Table Create Table Table Create Table
...@@ -245,7 +245,7 @@ t1 CREATE TABLE `t1` ( ...@@ -245,7 +245,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL, `b` int(11) NOT NULL,
`c` int(11) NOT NULL, `c` int(11) NOT NULL,
PRIMARY KEY (`pk1`) PRIMARY KEY (`pk1`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
DROP TABLE test.t1; DROP TABLE test.t1;
DROP TABLE test.t2; DROP TABLE test.t2;
......
...@@ -14,7 +14,7 @@ gis_point CREATE TABLE `gis_point` ( ...@@ -14,7 +14,7 @@ gis_point CREATE TABLE `gis_point` (
`fid` int(11) NOT NULL AUTO_INCREMENT, `fid` int(11) NOT NULL AUTO_INCREMENT,
`g` point DEFAULT NULL, `g` point DEFAULT NULL,
PRIMARY KEY (`fid`) PRIMARY KEY (`fid`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW FIELDS FROM gis_point; SHOW FIELDS FROM gis_point;
Field Type Null Key Default Extra Field Type Null Key Default Extra
fid int(11) NO PRI NULL auto_increment fid int(11) NO PRI NULL auto_increment
...@@ -476,7 +476,7 @@ gis_point CREATE TABLE `gis_point` ( ...@@ -476,7 +476,7 @@ gis_point CREATE TABLE `gis_point` (
`fid` int(11) NOT NULL AUTO_INCREMENT, `fid` int(11) NOT NULL AUTO_INCREMENT,
`g` point DEFAULT NULL, `g` point DEFAULT NULL,
PRIMARY KEY (`fid`) PRIMARY KEY (`fid`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW FIELDS FROM gis_point; SHOW FIELDS FROM gis_point;
Field Type Null Key Default Extra Field Type Null Key Default Extra
fid int(11) NO PRI NULL auto_increment fid int(11) NO PRI NULL auto_increment
......
...@@ -137,7 +137,7 @@ show create table t1; ...@@ -137,7 +137,7 @@ show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL `a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
alter table t1 alter table t1
partition by key(a) partition by key(a)
(partition p0 engine=ndb, partition p1); (partition p0 engine=ndb, partition p1);
...@@ -197,3 +197,44 @@ ENGINE=NDB ...@@ -197,3 +197,44 @@ ENGINE=NDB
PARTITION BY KEY(c3); PARTITION BY KEY(c3);
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1; ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
DROP TABLE t1; DROP TABLE t1;
create table t1 (a int) engine = ndb;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
alter table t1 add column b int;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
alter table t1 engine = myisam;
alter table t1 engine = ndb;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
alter table t1 coalesce partition 1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () PARTITIONS 1
drop table t1 ;
create table t1 (a int) engine = ndb;
alter table t1 add partition partitions 1;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () PARTITIONS 3
drop table t1;
CREATE TABLE t1 (a int)
PARTITION BY KEY(a)
(PARTITION p0 ENGINE = NDB);
DROP TABLE t1;
...@@ -886,4 +886,36 @@ s1 ...@@ -886,4 +886,36 @@ s1
2 2
3 3
drop table t1; drop table t1;
create table t1 (a varchar(1))
partition by key (a)
as select 'a';
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` varchar(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY KEY (a)
drop table t1;
CREATE TABLE t1 (a int) ENGINE = MYISAM PARTITION BY KEY(a);
INSERT into t1 values (1), (2);
SHOW TABLE STATUS;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 2 7 14 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
DELETE from t1 where a = 1;
SHOW TABLE STATUS;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 14 14 0 0 7 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
ALTER TABLE t1 OPTIMIZE PARTITION p0;
SHOW TABLE STATUS;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Fixed 1 7 7 0 1024 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
DROP TABLE t1;
CREATE TABLE t1 (a int, index(a)) PARTITION BY KEY(a);
ALTER TABLE t1 DISABLE KEYS;
ALTER TABLE t1 ENABLE KEYS;
DROP TABLE t1;
create table t1 (a int) engine=memory
partition by key(a);
insert into t1 values (1);
create index inx1 on t1(a);
drop table t1;
End of 5.1 tests End of 5.1 tests
...@@ -33,7 +33,7 @@ t1 CREATE TABLE `t1` ( ...@@ -33,7 +33,7 @@ t1 CREATE TABLE `t1` (
`blob_column` longblob, `blob_column` longblob,
`vchar_column` varchar(100) DEFAULT NULL, `vchar_column` varchar(100) DEFAULT NULL,
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
DROP PROCEDURE test.p1; DROP PROCEDURE test.p1;
DROP FUNCTION test.fn1; DROP FUNCTION test.fn1;
DROP TABLE test.t1; DROP TABLE test.t1;
......
...@@ -69,7 +69,7 @@ t1 CREATE TABLE `t1` ( ...@@ -69,7 +69,7 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`), KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`) KEY `c5` (`c5`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Show first set of ALTERs on SLAVE **** **** Show first set of ALTERs on SLAVE ****
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
...@@ -82,7 +82,7 @@ t1 CREATE TABLE `t1` ( ...@@ -82,7 +82,7 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`), KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`) KEY `c5` (`c5`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Second set of alters test 1 **** **** Second set of alters test 1 ****
ALTER TABLE t1 RENAME t2; ALTER TABLE t1 RENAME t2;
ALTER TABLE t2 DROP INDEX c5; ALTER TABLE t2 DROP INDEX c5;
...@@ -101,7 +101,7 @@ t1 CREATE TABLE `t1` ( ...@@ -101,7 +101,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`) KEY `t1_i` (`c2`,`c3`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Show second set of ALTERs on SLAVE **** **** Show second set of ALTERs on SLAVE ****
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
...@@ -113,7 +113,7 @@ t1 CREATE TABLE `t1` ( ...@@ -113,7 +113,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`) KEY `t1_i` (`c2`,`c3`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Third and last set of alters for test1 **** **** Third and last set of alters for test1 ****
ALTER TABLE t1 CHANGE c1 c1 DOUBLE; ALTER TABLE t1 CHANGE c1 c1 DOUBLE;
ALTER TABLE t1 CHANGE c2 c2 DECIMAL(10,2); ALTER TABLE t1 CHANGE c2 c2 DECIMAL(10,2);
...@@ -135,7 +135,7 @@ t1 CREATE TABLE `t1` ( ...@@ -135,7 +135,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`) KEY `t1_i` (`c2`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SELECT * FROM t1 ORDER BY c1 LIMIT 5; SELECT * FROM t1 ORDER BY c1 LIMIT 5;
c1 c2 c3 c5 c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL 1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
...@@ -153,7 +153,7 @@ t1 CREATE TABLE `t1` ( ...@@ -153,7 +153,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL, `c5` double DEFAULT NULL,
PRIMARY KEY (`c1`), PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`) KEY `t1_i` (`c2`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY () ) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SELECT * FROM t1 where c1 = 1; SELECT * FROM t1 where c1 = 1;
c1 c2 c3 c5 c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL 1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
......
...@@ -196,3 +196,29 @@ CREATE TABLE t1 ( ...@@ -196,3 +196,29 @@ CREATE TABLE t1 (
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1; ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
DROP TABLE t1; DROP TABLE t1;
#
# BUG 19010: ALTER TABLE from NDB to other engine without primary key
# doesn't work.
#
create table t1 (a int) engine = ndb;
show create table t1;
alter table t1 add column b int;
show create table t1;
alter table t1 engine = myisam;
alter table t1 engine = ndb;
show create table t1;
alter table t1 coalesce partition 1;
show create table t1;
drop table t1 ;
create table t1 (a int) engine = ndb;
alter table t1 add partition partitions 1;
show create table t1;
drop table t1;
CREATE TABLE t1 (a int)
PARTITION BY KEY(a)
(PARTITION p0 ENGINE = NDB);
DROP TABLE t1;
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
create table t1 (a int)
partition by key(a)
(partition p0 engine = MEMORY);
drop table t1;
# #
# Partition by key no partition defined => OK # Partition by key no partition defined => OK
# #
...@@ -1009,4 +1014,46 @@ select auto_increment from information_schema.tables where table_name='t1'; ...@@ -1009,4 +1014,46 @@ select auto_increment from information_schema.tables where table_name='t1';
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# BUG 19140 Partitions: Create index for partitioned table crashes
#
create table t1 (a int) engine=memory
partition by key(a);
insert into t1 values (1);
create index inx1 on t1(a);
drop table t1;
#
# BUG 19062 Partition clause ignored if CREATE TABLE ... AS SELECT ...;
#
create table t1 (a varchar(1))
partition by key (a)
as select 'a';
show create table t1;
drop table t1;
#
# BUG 19501 Partitions: SHOW TABLE STATUS shows wrong Data_free
#
CREATE TABLE t1 (a int) ENGINE = MYISAM PARTITION BY KEY(a);
INSERT into t1 values (1), (2);
--replace_column 9 0 12 NULL 13 NULL 14 NULL
SHOW TABLE STATUS;
DELETE from t1 where a = 1;
--replace_column 9 0 12 NULL 13 NULL 14 NULL
SHOW TABLE STATUS;
ALTER TABLE t1 OPTIMIZE PARTITION p0;
--replace_column 12 NULL 13 NULL 14 NULL
SHOW TABLE STATUS;
DROP TABLE t1;
#
# BUG 19502: ENABLE/DISABLE Keys don't work for partitioned tables
#
CREATE TABLE t1 (a int, index(a)) PARTITION BY KEY(a);
ALTER TABLE t1 DISABLE KEYS;
ALTER TABLE t1 ENABLE KEYS;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -4175,6 +4175,8 @@ void ha_partition::info(uint flag) ...@@ -4175,6 +4175,8 @@ void ha_partition::info(uint flag)
index_file_length: Length of index file, in principle bytes in index_file_length: Length of index file, in principle bytes in
indexes in the table indexes in the table
We report sum We report sum
delete_length: Length of free space easily used by new records in table
We report sum
mean_record_length:Mean record length in the table mean_record_length:Mean record length in the table
We calculate this We calculate this
check_time: Time of last check (only applicable to MyISAM) check_time: Time of last check (only applicable to MyISAM)
...@@ -4184,6 +4186,7 @@ void ha_partition::info(uint flag) ...@@ -4184,6 +4186,7 @@ void ha_partition::info(uint flag)
deleted= 0; deleted= 0;
data_file_length= 0; data_file_length= 0;
index_file_length= 0; index_file_length= 0;
delete_length= 0;
check_time= 0; check_time= 0;
file_array= m_file; file_array= m_file;
do do
...@@ -4196,6 +4199,7 @@ void ha_partition::info(uint flag) ...@@ -4196,6 +4199,7 @@ void ha_partition::info(uint flag)
deleted+= file->deleted; deleted+= file->deleted;
data_file_length+= file->data_file_length; data_file_length+= file->data_file_length;
index_file_length+= file->index_file_length; index_file_length+= file->index_file_length;
delete_length+= file->delete_length;
if (file->check_time > check_time) if (file->check_time > check_time)
check_time= file->check_time; check_time= file->check_time;
} }
...@@ -5324,6 +5328,82 @@ void ha_partition::init_table_handle_for_HANDLER() ...@@ -5324,6 +5328,82 @@ void ha_partition::init_table_handle_for_HANDLER()
} }
/****************************************************************************
MODULE enable/disable indexes
****************************************************************************/
/*
Disable indexes for a while
SYNOPSIS
disable_indexes()
mode Mode
RETURN VALUES
0 Success
!= 0 Error
*/
int ha_partition::disable_indexes(uint mode)
{
handler **file;
int error= 0;
for (file= m_file; *file; file++)
{
if ((error= (*file)->disable_indexes(mode)))
break;
}
return error;
}
/*
Enable indexes again
SYNOPSIS
enable_indexes()
mode Mode
RETURN VALUES
0 Success
!= 0 Error
*/
int ha_partition::enable_indexes(uint mode)
{
handler **file;
int error= 0;
for (file= m_file; *file; file++)
{
if ((error= (*file)->enable_indexes(mode)))
break;
}
return error;
}
/*
Check if indexes are disabled
SYNOPSIS
indexes_are_disabled()
RETURN VALUES
0 Indexes are enabled
!= 0 Indexes are disabled
*/
int ha_partition::indexes_are_disabled(void)
{
handler **file;
int error= 0;
for (file= m_file; *file; file++)
{
if ((error= (*file)->indexes_are_disabled()))
break;
}
return error;
}
/**************************************************************************** /****************************************************************************
MODULE Partition Share MODULE Partition Share
****************************************************************************/ ****************************************************************************/
......
...@@ -938,17 +938,18 @@ class ha_partition :public handler ...@@ -938,17 +938,18 @@ class ha_partition :public handler
virtual uint checksum() const; virtual uint checksum() const;
virtual bool is_crashed() const; virtual bool is_crashed() const;
virtual bool auto_repair() const; virtual bool auto_repair() const;
*/
/*
------------------------------------------------------------------------- -------------------------------------------------------------------------
MODULE enable/disable indexes MODULE enable/disable indexes
------------------------------------------------------------------------- -------------------------------------------------------------------------
Enable/Disable Indexes are not supported currently (Heap, MyISAM) Enable/Disable Indexes are only supported by HEAP and MyISAM.
This means that the following methods are not implemented:
------------------------------------------------------------------------- -------------------------------------------------------------------------
*/
virtual int disable_indexes(uint mode); virtual int disable_indexes(uint mode);
virtual int enable_indexes(uint mode); virtual int enable_indexes(uint mode);
virtual int indexes_are_disabled(void); virtual int indexes_are_disabled(void);
*/
/* /*
------------------------------------------------------------------------- -------------------------------------------------------------------------
......
...@@ -184,6 +184,7 @@ class partition_info : public Sql_alloc ...@@ -184,6 +184,7 @@ class partition_info : public Sql_alloc
bool list_of_subpart_fields; bool list_of_subpart_fields;
bool linear_hash_ind; bool linear_hash_ind;
bool fixed; bool fixed;
bool is_auto_partitioned;
bool from_openfrm; bool from_openfrm;
bool has_null_value; bool has_null_value;
uint has_null_part_id; uint has_null_part_id;
...@@ -219,6 +220,7 @@ class partition_info : public Sql_alloc ...@@ -219,6 +220,7 @@ class partition_info : public Sql_alloc
list_of_part_fields(FALSE), list_of_subpart_fields(FALSE), list_of_part_fields(FALSE), list_of_subpart_fields(FALSE),
linear_hash_ind(FALSE), linear_hash_ind(FALSE),
fixed(FALSE), fixed(FALSE),
is_auto_partitioned(FALSE),
from_openfrm(FALSE), from_openfrm(FALSE),
has_null_value(FALSE), has_null_value(FALSE),
has_null_part_id(0) has_null_part_id(0)
......
...@@ -2855,6 +2855,17 @@ mysql_execute_command(THD *thd) ...@@ -2855,6 +2855,17 @@ mysql_execute_command(THD *thd)
res= 1; res= 1;
goto end_with_restore_list; goto end_with_restore_list;
} }
#ifdef WITH_PARTITION_STORAGE_ENGINE
{
partition_info *part_info= thd->lex->part_info;
if (part_info && !(part_info= thd->lex->part_info->get_clone()))
{
res= -1;
goto end_with_restore_list;
}
thd->work_part_info= part_info;
}
#endif
if (select_lex->item_list.elements) // With select if (select_lex->item_list.elements) // With select
{ {
select_result *result; select_result *result;
...@@ -2924,15 +2935,6 @@ mysql_execute_command(THD *thd) ...@@ -2924,15 +2935,6 @@ mysql_execute_command(THD *thd)
lex->like_name); lex->like_name);
else else
{ {
#ifdef WITH_PARTITION_STORAGE_ENGINE
partition_info *part_info= thd->lex->part_info;
if (part_info && !(part_info= thd->lex->part_info->get_clone()))
{
res= -1;
goto end_with_restore_list;
}
thd->work_part_info= part_info;
#endif
res= mysql_create_table(thd, create_table->db, res= mysql_create_table(thd, create_table->db,
create_table->table_name, &lex->create_info, create_table->table_name, &lex->create_info,
lex->create_list, lex->create_list,
......
...@@ -4076,6 +4076,7 @@ that are reorganised. ...@@ -4076,6 +4076,7 @@ that are reorganised.
tab_part_info->use_default_partitions= FALSE; tab_part_info->use_default_partitions= FALSE;
} }
tab_part_info->use_default_no_partitions= FALSE; tab_part_info->use_default_no_partitions= FALSE;
tab_part_info->is_auto_partitioned= FALSE;
} }
} }
else if (alter_info->flags == ALTER_DROP_PARTITION) else if (alter_info->flags == ALTER_DROP_PARTITION)
...@@ -4091,6 +4092,8 @@ that are reorganised. ...@@ -4091,6 +4092,8 @@ that are reorganised.
uint no_parts_dropped= alter_info->partition_names.elements; uint no_parts_dropped= alter_info->partition_names.elements;
uint no_parts_found= 0; uint no_parts_found= 0;
List_iterator<partition_element> part_it(tab_part_info->partitions); List_iterator<partition_element> part_it(tab_part_info->partitions);
tab_part_info->is_auto_partitioned= FALSE;
if (!(tab_part_info->part_type == RANGE_PARTITION || if (!(tab_part_info->part_type == RANGE_PARTITION ||
tab_part_info->part_type == LIST_PARTITION)) tab_part_info->part_type == LIST_PARTITION))
{ {
...@@ -4275,7 +4278,10 @@ state of p1. ...@@ -4275,7 +4278,10 @@ state of p1.
tab_part_info->no_parts= no_parts_remain; tab_part_info->no_parts= no_parts_remain;
} }
if (!(alter_info->flags & ALTER_TABLE_REORG)) if (!(alter_info->flags & ALTER_TABLE_REORG))
{
tab_part_info->use_default_no_partitions= FALSE; tab_part_info->use_default_no_partitions= FALSE;
tab_part_info->is_auto_partitioned= FALSE;
}
} }
else if (alter_info->flags == ALTER_REORGANIZE_PARTITION) else if (alter_info->flags == ALTER_REORGANIZE_PARTITION)
{ {
...@@ -4294,6 +4300,8 @@ state of p1. ...@@ -4294,6 +4300,8 @@ state of p1.
uint no_parts_new= thd->work_part_info->partitions.elements; uint no_parts_new= thd->work_part_info->partitions.elements;
partition_info *alt_part_info= thd->work_part_info; partition_info *alt_part_info= thd->work_part_info;
uint check_total_partitions; uint check_total_partitions;
tab_part_info->is_auto_partitioned= FALSE;
if (no_parts_reorged > tab_part_info->no_parts) if (no_parts_reorged > tab_part_info->no_parts)
{ {
my_error(ER_REORG_PARTITION_NOT_EXIST, MYF(0)); my_error(ER_REORG_PARTITION_NOT_EXIST, MYF(0));
...@@ -4510,7 +4518,7 @@ the generated partition syntax in a correct manner. ...@@ -4510,7 +4518,7 @@ the generated partition syntax in a correct manner.
if (alter_info->flags & ALTER_REMOVE_PARTITIONING) if (alter_info->flags & ALTER_REMOVE_PARTITIONING)
{ {
DBUG_PRINT("info", ("Remove partitioning")); DBUG_PRINT("info", ("Remove partitioning"));
if (!(thd->lex->create_info.used_fields & HA_CREATE_USED_ENGINE)) if (!(create_info->used_fields & HA_CREATE_USED_ENGINE))
{ {
DBUG_PRINT("info", ("No explicit engine used")); DBUG_PRINT("info", ("No explicit engine used"));
create_info->db_type= table->part_info->default_engine_type; create_info->db_type= table->part_info->default_engine_type;
...@@ -4527,14 +4535,29 @@ the generated partition syntax in a correct manner. ...@@ -4527,14 +4535,29 @@ the generated partition syntax in a correct manner.
beneath. beneath.
*/ */
thd->work_part_info= table->part_info; thd->work_part_info= table->part_info;
if (thd->lex->create_info.used_fields & HA_CREATE_USED_ENGINE && if (create_info->used_fields & HA_CREATE_USED_ENGINE &&
create_info->db_type != table->part_info->default_engine_type) create_info->db_type != table->part_info->default_engine_type)
{ {
/* /*
Make sure change of engine happens to all partitions. Make sure change of engine happens to all partitions.
*/ */
DBUG_PRINT("info", ("partition changed")); DBUG_PRINT("info", ("partition changed"));
set_engine_all_partitions(thd->work_part_info, create_info->db_type); if (table->part_info->is_auto_partitioned)
{
/*
If the user originally didn't specify partitioning to be
used we can remove it now.
*/
thd->work_part_info= NULL;
}
else
{
/*
Ensure that all partitions have the proper engine set-up
*/
set_engine_all_partitions(thd->work_part_info,
create_info->db_type);
}
*partition_changed= TRUE; *partition_changed= TRUE;
} }
} }
......
...@@ -1286,6 +1286,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet, ...@@ -1286,6 +1286,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
uint part_syntax_len; uint part_syntax_len;
char *part_syntax; char *part_syntax;
if (table->part_info && if (table->part_info &&
(!table->part_info->is_auto_partitioned) &&
((part_syntax= generate_partition_syntax(table->part_info, ((part_syntax= generate_partition_syntax(table->part_info,
&part_syntax_len, &part_syntax_len,
FALSE,FALSE)))) FALSE,FALSE))))
......
...@@ -3078,6 +3078,7 @@ bool mysql_create_table_internal(THD *thd, ...@@ -3078,6 +3078,7 @@ bool mysql_create_table_internal(THD *thd,
} }
file->set_auto_partitions(part_info); file->set_auto_partitions(part_info);
part_info->default_engine_type= create_info->db_type; part_info->default_engine_type= create_info->db_type;
part_info->is_auto_partitioned= TRUE;
} }
if (part_info) if (part_info)
{ {
...@@ -3138,8 +3139,8 @@ bool mysql_create_table_internal(THD *thd, ...@@ -3138,8 +3139,8 @@ bool mysql_create_table_internal(THD *thd,
} }
DBUG_PRINT("info", ("db_type = %d", DBUG_PRINT("info", ("db_type = %d",
ha_legacy_type(part_info->default_engine_type))); ha_legacy_type(part_info->default_engine_type)));
if (part_info->check_partition_info( &engine_type, file, if (part_info->check_partition_info(&engine_type, file,
create_info->max_rows)) create_info->max_rows))
goto err; goto err;
part_info->default_engine_type= engine_type; part_info->default_engine_type= engine_type;
...@@ -3198,6 +3199,12 @@ bool mysql_create_table_internal(THD *thd, ...@@ -3198,6 +3199,12 @@ bool mysql_create_table_internal(THD *thd,
} }
else if (create_info->db_type != engine_type) else if (create_info->db_type != engine_type)
{ {
/*
We come here when we don't use a partitioned handler.
Since we use a partitioned table it must be "native partitioned".
We have switched engine from defaults, most likely only specified
engines in partition clauses.
*/
delete file; delete file;
if (!(file= get_new_handler((TABLE_SHARE*) 0, thd->mem_root, engine_type))) if (!(file= get_new_handler((TABLE_SHARE*) 0, thd->mem_root, engine_type)))
{ {
......
...@@ -656,7 +656,6 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, ...@@ -656,7 +656,6 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
my_free(buff, MYF(0)); my_free(buff, MYF(0));
goto err; goto err;
} }
next_chunk++;
} }
#else #else
if (partition_info_len) if (partition_info_len)
...@@ -680,7 +679,15 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, ...@@ -680,7 +679,15 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
*/ */
next_chunk+= 4; next_chunk+= 4;
} }
else if (share->mysql_version >= 50110)
#endif #endif
{
/* New auto_partitioned indicator introduced in 5.1.11 */
#ifdef WITH_PARTITION_STORAGE_ENGINE
share->auto_partitioned= *next_chunk;
#endif
next_chunk++;
}
keyinfo= share->key_info; keyinfo= share->key_info;
for (i= 0; i < keys; i++, keyinfo++) for (i= 0; i < keys; i++, keyinfo++)
{ {
...@@ -1471,6 +1478,8 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, ...@@ -1471,6 +1478,8 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
Fix the partition functions and ensure they are not constant Fix the partition functions and ensure they are not constant
functions functions
*/ */
outparam->part_info->is_auto_partitioned= share->auto_partitioned;
DBUG_PRINT("info", ("autopartitioned = %u", share->auto_partitioned));
if (fix_partition_func(thd, share->normalized_path.str, outparam, if (fix_partition_func(thd, share->normalized_path.str, outparam,
is_create_table)) is_create_table))
goto err; goto err;
......
...@@ -214,6 +214,7 @@ typedef struct st_table_share ...@@ -214,6 +214,7 @@ typedef struct st_table_share
*/ */
bool log_table; bool log_table;
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
bool auto_partitioned;
const uchar *partition_info; const uchar *partition_info;
uint partition_info_len; uint partition_info_len;
const uchar *part_state; const uchar *part_state;
......
...@@ -130,8 +130,14 @@ bool mysql_create_frm(THD *thd, const char *file_name, ...@@ -130,8 +130,14 @@ bool mysql_create_frm(THD *thd, const char *file_name,
/* str_db_type */ /* str_db_type */
create_info->extra_size= (2 + str_db_type.length + create_info->extra_size= (2 + str_db_type.length +
2 + create_info->connect_string.length); 2 + create_info->connect_string.length);
/* Partition */ /*
create_info->extra_size+= 9; Partition:
Length of partition info = 4 byte
Potential NULL byte at end of partition info string = 1 byte
Indicator if auto-partitioned table = 1 byte
=> Total 6 byte
*/
create_info->extra_size+= 6;
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
if (part_info) if (part_info)
{ {
...@@ -203,17 +209,19 @@ bool mysql_create_frm(THD *thd, const char *file_name, ...@@ -203,17 +209,19 @@ bool mysql_create_frm(THD *thd, const char *file_name,
#ifdef WITH_PARTITION_STORAGE_ENGINE #ifdef WITH_PARTITION_STORAGE_ENGINE
if (part_info) if (part_info)
{ {
char auto_partitioned= part_info->is_auto_partitioned ? 1 : 0;
int4store(buff, part_info->part_info_len); int4store(buff, part_info->part_info_len);
if (my_write(file, (const byte*)buff, 4, MYF_RW) || if (my_write(file, (const byte*)buff, 4, MYF_RW) ||
my_write(file, (const byte*)part_info->part_info_string, my_write(file, (const byte*)part_info->part_info_string,
part_info->part_info_len + 1, MYF_RW)) part_info->part_info_len + 1, MYF_RW) ||
my_write(file, (const byte*)&auto_partitioned, 1, MYF_RW))
goto err; goto err;
} }
else else
#endif #endif
{ {
bzero(buff, 9); bzero(buff, 6);
if (my_write(file, (byte*) buff, 9, MYF_RW)) if (my_write(file, (byte*) buff, 6, MYF_RW))
goto err; goto err;
} }
for (i= 0; i < keys; i++) for (i= 0; i < keys; i++)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment