summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se <>2006-05-12 12:22:31 -0400
committermikael@c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se <>2006-05-12 12:22:31 -0400
commitc85be97f501c2006322d2c03694770f3f8420937 (patch)
tree19a757ed971dd9d4403a66cca15db1c9bfee8e12
parent9f5c15cfa8cef7769818928b71438ec59584d70c (diff)
parentc558d9d00d50b1226e830f75eed0828840f79d7e (diff)
downloadmariadb-git-c85be97f501c2006322d2c03694770f3f8420937.tar.gz
Merge c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se:/home/pappa/clean-mysql-5.1-new
into c-870ae253.1238-1-64736c10.cust.bredbandsbolaget.se:/home/pappa/bug19010
-rw-r--r--mysql-test/r/ndb_bitfield.result2
-rw-r--r--mysql-test/r/ndb_dd_basic.result2
-rw-r--r--mysql-test/r/ndb_dd_disk2memory.result8
-rw-r--r--mysql-test/r/ndb_gis.result4
-rw-r--r--mysql-test/r/ndb_partition_key.result39
-rw-r--r--mysql-test/r/partition.result26
-rw-r--r--mysql-test/r/rpl_ndb_UUID.result2
-rw-r--r--mysql-test/r/rpl_ndb_dd_advance.result12
-rw-r--r--mysql-test/t/ndb_partition_key.test20
-rw-r--r--mysql-test/t/partition.test33
-rw-r--r--sql/ha_partition.cc80
-rw-r--r--sql/ha_partition.h7
-rw-r--r--sql/partition_info.h2
-rw-r--r--sql/sql_parse.cc20
-rw-r--r--sql/sql_partition.cc25
-rw-r--r--sql/sql_show.cc1
-rw-r--r--sql/sql_table.cc1
-rw-r--r--sql/table.cc11
-rw-r--r--sql/table.h1
-rw-r--r--sql/unireg.cc18
20 files changed, 279 insertions, 35 deletions
diff --git a/mysql-test/r/ndb_bitfield.result b/mysql-test/r/ndb_bitfield.result
index 9a8c571cfba..59c4d420b22 100644
--- a/mysql-test/r/ndb_bitfield.result
+++ b/mysql-test/r/ndb_bitfield.result
@@ -9,7 +9,7 @@ t1 CREATE TABLE `t1` (
`pk1` int(11) NOT NULL,
`b` bit(64) DEFAULT NULL,
PRIMARY KEY (`pk1`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
insert into t1 values
(0,b'1111111111111111111111111111111111111111111111111111111111111111'),
(1,b'1000000000000000000000000000000000000000000000000000000000000000'),
diff --git a/mysql-test/r/ndb_dd_basic.result b/mysql-test/r/ndb_dd_basic.result
index ee1b717e6f1..008be3aa79f 100644
--- a/mysql-test/r/ndb_dd_basic.result
+++ b/mysql-test/r/ndb_dd_basic.result
@@ -49,7 +49,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL,
`c` int(11) NOT NULL,
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);
SELECT * FROM t1;
pk1 b c
diff --git a/mysql-test/r/ndb_dd_disk2memory.result b/mysql-test/r/ndb_dd_disk2memory.result
index 80056b7269d..bd5bbda42f3 100644
--- a/mysql-test/r/ndb_dd_disk2memory.result
+++ b/mysql-test/r/ndb_dd_disk2memory.result
@@ -218,7 +218,7 @@ t2 CREATE TABLE `t2` (
`b2` int(11) NOT NULL,
`c2` int(11) NOT NULL,
PRIMARY KEY (`pk2`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW CREATE TABLE test.t1;
Table Create Table
t1 CREATE TABLE `t1` (
@@ -226,7 +226,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL,
`c` int(11) NOT NULL,
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
ENGINE=NDB;
SHOW CREATE TABLE test.t2;
@@ -236,7 +236,7 @@ t2 CREATE TABLE `t2` (
`b2` int(11) NOT NULL,
`c2` int(11) NOT NULL,
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;
SHOW CREATE TABLE test.t1;
Table Create Table
@@ -245,7 +245,7 @@ t1 CREATE TABLE `t1` (
`b` int(11) NOT NULL,
`c` int(11) NOT NULL,
PRIMARY KEY (`pk1`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
DROP TABLE test.t1;
DROP TABLE test.t2;
diff --git a/mysql-test/r/ndb_gis.result b/mysql-test/r/ndb_gis.result
index f9b9ceb76a5..67447a69242 100644
--- a/mysql-test/r/ndb_gis.result
+++ b/mysql-test/r/ndb_gis.result
@@ -14,7 +14,7 @@ gis_point CREATE TABLE `gis_point` (
`fid` int(11) NOT NULL AUTO_INCREMENT,
`g` point DEFAULT NULL,
PRIMARY KEY (`fid`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW FIELDS FROM gis_point;
Field Type Null Key Default Extra
fid int(11) NO PRI NULL auto_increment
@@ -476,7 +476,7 @@ gis_point CREATE TABLE `gis_point` (
`fid` int(11) NOT NULL AUTO_INCREMENT,
`g` point DEFAULT NULL,
PRIMARY KEY (`fid`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW FIELDS FROM gis_point;
Field Type Null Key Default Extra
fid int(11) NO PRI NULL auto_increment
diff --git a/mysql-test/r/ndb_partition_key.result b/mysql-test/r/ndb_partition_key.result
index 45afcec94c7..1390901b505 100644
--- a/mysql-test/r/ndb_partition_key.result
+++ b/mysql-test/r/ndb_partition_key.result
@@ -137,7 +137,7 @@ show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
alter table t1
partition by key(a)
(partition p0 engine=ndb, partition p1);
@@ -197,3 +197,40 @@ ENGINE=NDB
PARTITION BY KEY(c3);
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
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;
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result
index 0da071374ea..1e2b799b753 100644
--- a/mysql-test/r/partition.result
+++ b/mysql-test/r/partition.result
@@ -886,4 +886,30 @@ s1
2
3
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
+CREATE TABLE t1 (a int, index(a)) PARTITION BY KEY(a);
+ALTER TABLE t1 DISABLE KEYS;
+ALTER TABLE t1 ENABLE KEYS;
+DROP TABLE t1;
End of 5.1 tests
diff --git a/mysql-test/r/rpl_ndb_UUID.result b/mysql-test/r/rpl_ndb_UUID.result
index c768779c49b..422379d4f55 100644
--- a/mysql-test/r/rpl_ndb_UUID.result
+++ b/mysql-test/r/rpl_ndb_UUID.result
@@ -33,7 +33,7 @@ t1 CREATE TABLE `t1` (
`blob_column` longblob,
`vchar_column` varchar(100) DEFAULT NULL,
PRIMARY KEY (`a`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
DROP PROCEDURE test.p1;
DROP FUNCTION test.fn1;
DROP TABLE test.t1;
diff --git a/mysql-test/r/rpl_ndb_dd_advance.result b/mysql-test/r/rpl_ndb_dd_advance.result
index ba89592b532..2cb1cce649b 100644
--- a/mysql-test/r/rpl_ndb_dd_advance.result
+++ b/mysql-test/r/rpl_ndb_dd_advance.result
@@ -69,7 +69,7 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Show first set of ALTERs on SLAVE ****
SHOW CREATE TABLE t1;
Table Create Table
@@ -82,7 +82,7 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`,`c3`),
KEY `c5` (`c5`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
**** Second set of alters test 1 ****
ALTER TABLE t1 RENAME t2;
ALTER TABLE t2 DROP INDEX c5;
@@ -101,7 +101,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL,
PRIMARY KEY (`c1`),
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 CREATE TABLE t1;
Table Create Table
@@ -113,7 +113,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL,
PRIMARY KEY (`c1`),
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 ****
ALTER TABLE t1 CHANGE c1 c1 DOUBLE;
ALTER TABLE t1 CHANGE c2 c2 DECIMAL(10,2);
@@ -135,7 +135,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL,
PRIMARY KEY (`c1`),
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;
c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
@@ -153,7 +153,7 @@ t1 CREATE TABLE `t1` (
`c5` double DEFAULT NULL,
PRIMARY KEY (`c1`),
KEY `t1_i` (`c2`)
-) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
+) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SELECT * FROM t1 where c1 = 1;
c1 c2 c3 c5
1 2.00 b1b1b1b1b1b1b1b1b1b1 NULL
diff --git a/mysql-test/t/ndb_partition_key.test b/mysql-test/t/ndb_partition_key.test
index fb0581eb6f6..dab930974e7 100644
--- a/mysql-test/t/ndb_partition_key.test
+++ b/mysql-test/t/ndb_partition_key.test
@@ -196,3 +196,23 @@ CREATE TABLE t1 (
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
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;
+
diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test
index 272cdc27af6..e2adc8a9d15 100644
--- a/mysql-test/t/partition.test
+++ b/mysql-test/t/partition.test
@@ -1009,4 +1009,37 @@ select auto_increment from information_schema.tables where table_name='t1';
select * from t1;
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
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index b1a5a447b6f..7b9dd00ed56 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -4175,6 +4175,8 @@ void ha_partition::info(uint flag)
index_file_length: Length of index file, in principle bytes in
indexes in the table
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
We calculate this
check_time: Time of last check (only applicable to MyISAM)
@@ -4184,6 +4186,7 @@ void ha_partition::info(uint flag)
deleted= 0;
data_file_length= 0;
index_file_length= 0;
+ delete_length= 0;
check_time= 0;
file_array= m_file;
do
@@ -4196,6 +4199,7 @@ void ha_partition::info(uint flag)
deleted+= file->deleted;
data_file_length+= file->data_file_length;
index_file_length+= file->index_file_length;
+ delete_length+= file->delete_length;
if (file->check_time > check_time)
check_time= file->check_time;
}
@@ -5325,6 +5329,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
****************************************************************************/
/*
diff --git a/sql/ha_partition.h b/sql/ha_partition.h
index b31b9af28a3..1443a20133c 100644
--- a/sql/ha_partition.h
+++ b/sql/ha_partition.h
@@ -938,17 +938,18 @@ public:
virtual uint checksum() const;
virtual bool is_crashed() const;
virtual bool auto_repair() const;
+ */
+ /*
-------------------------------------------------------------------------
MODULE enable/disable indexes
-------------------------------------------------------------------------
- Enable/Disable Indexes are not supported currently (Heap, MyISAM)
- This means that the following methods are not implemented:
+ Enable/Disable Indexes are only supported by HEAP and MyISAM.
-------------------------------------------------------------------------
+ */
virtual int disable_indexes(uint mode);
virtual int enable_indexes(uint mode);
virtual int indexes_are_disabled(void);
- */
/*
-------------------------------------------------------------------------
diff --git a/sql/partition_info.h b/sql/partition_info.h
index 3a1e6be4050..af43f7b7933 100644
--- a/sql/partition_info.h
+++ b/sql/partition_info.h
@@ -184,6 +184,7 @@ public:
bool list_of_subpart_fields;
bool linear_hash_ind;
bool fixed;
+ bool is_auto_partitioned;
bool from_openfrm;
bool has_null_value;
uint has_null_part_id;
@@ -219,6 +220,7 @@ public:
list_of_part_fields(FALSE), list_of_subpart_fields(FALSE),
linear_hash_ind(FALSE),
fixed(FALSE),
+ is_auto_partitioned(FALSE),
from_openfrm(FALSE),
has_null_value(FALSE),
has_null_part_id(0)
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 3ff6b7f4cc6..6bba78a836e 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2855,6 +2855,17 @@ mysql_execute_command(THD *thd)
res= 1;
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
{
select_result *result;
@@ -2924,15 +2935,6 @@ mysql_execute_command(THD *thd)
lex->like_name);
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,
create_table->table_name, &lex->create_info,
lex->create_list,
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 71b8e9b1d95..b3101a1e796 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -4076,6 +4076,7 @@ that are reorganised.
tab_part_info->use_default_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)
@@ -4091,6 +4092,8 @@ that are reorganised.
uint no_parts_dropped= alter_info->partition_names.elements;
uint no_parts_found= 0;
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 ||
tab_part_info->part_type == LIST_PARTITION))
{
@@ -4275,7 +4278,10 @@ state of p1.
tab_part_info->no_parts= no_parts_remain;
}
if (!(alter_info->flags & ALTER_TABLE_REORG))
+ {
tab_part_info->use_default_no_partitions= FALSE;
+ tab_part_info->is_auto_partitioned= FALSE;
+ }
}
else if (alter_info->flags == ALTER_REORGANIZE_PARTITION)
{
@@ -4294,6 +4300,8 @@ state of p1.
uint no_parts_new= thd->work_part_info->partitions.elements;
partition_info *alt_part_info= thd->work_part_info;
uint check_total_partitions;
+
+ tab_part_info->is_auto_partitioned= FALSE;
if (no_parts_reorged > tab_part_info->no_parts)
{
my_error(ER_REORG_PARTITION_NOT_EXIST, MYF(0));
@@ -4534,7 +4542,22 @@ the generated partition syntax in a correct manner.
Make sure change of engine happens to all partitions.
*/
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;
}
}
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 5e4324d0003..5fad0c7e09b 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1286,6 +1286,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
uint part_syntax_len;
char *part_syntax;
if (table->part_info &&
+ (!table->part_info->is_auto_partitioned) &&
((part_syntax= generate_partition_syntax(table->part_info,
&part_syntax_len,
FALSE,FALSE))))
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index f890f504952..73cc126575d 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3078,6 +3078,7 @@ bool mysql_create_table_internal(THD *thd,
}
file->set_auto_partitions(part_info);
part_info->default_engine_type= create_info->db_type;
+ part_info->is_auto_partitioned= TRUE;
}
if (part_info)
{
diff --git a/sql/table.cc b/sql/table.cc
index bacb703a28c..52f41f03d0d 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -656,7 +656,6 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
my_free(buff, MYF(0));
goto err;
}
- next_chunk++;
}
#else
if (partition_info_len)
@@ -680,7 +679,15 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
*/
next_chunk+= 4;
}
+ else if (share->mysql_version >= 50110)
#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;
for (i= 0; i < keys; i++, keyinfo++)
{
@@ -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
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,
is_create_table))
goto err;
diff --git a/sql/table.h b/sql/table.h
index 5fd9cd28585..760e94b5bd5 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -214,6 +214,7 @@ typedef struct st_table_share
*/
bool log_table;
#ifdef WITH_PARTITION_STORAGE_ENGINE
+ bool auto_partitioned;
const uchar *partition_info;
uint partition_info_len;
const uchar *part_state;
diff --git a/sql/unireg.cc b/sql/unireg.cc
index eb38e6c0592..11aa73bb502 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -130,8 +130,14 @@ bool mysql_create_frm(THD *thd, const char *file_name,
/* str_db_type */
create_info->extra_size= (2 + str_db_type.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
if (part_info)
{
@@ -203,17 +209,19 @@ bool mysql_create_frm(THD *thd, const char *file_name,
#ifdef WITH_PARTITION_STORAGE_ENGINE
if (part_info)
{
+ char auto_partitioned= part_info->is_auto_partitioned ? 1 : 0;
int4store(buff, part_info->part_info_len);
if (my_write(file, (const byte*)buff, 4, MYF_RW) ||
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;
}
else
#endif
{
- bzero(buff, 9);
- if (my_write(file, (byte*) buff, 9, MYF_RW))
+ bzero(buff, 6);
+ if (my_write(file, (byte*) buff, 6, MYF_RW))
goto err;
}
for (i= 0; i < keys; i++)