mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
bug#24667 After ALTER TABLE operation ndb_dd table becomes regular ndb: copy tablespace from old table in copying alter table
This commit is contained in:
@ -282,7 +282,13 @@ a1
|
||||
18
|
||||
19
|
||||
20
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default ts
|
||||
ALTER TABLE test.t1 ADD a2 FLOAT, ADD a3 DOUBLE;
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
|
||||
NULL test t1 p0 NULL 1 NULL KEY NULL NULL NULL 0 0 0 NULL 0 0 NULL NULL NULL NULL default default ts
|
||||
SELECT * FROM test.t1 ORDER BY a1;
|
||||
a1 a2 a3
|
||||
1 2.2345 20000001
|
||||
@ -369,7 +375,7 @@ t1 CREATE TABLE `t1` (
|
||||
`a13` text,
|
||||
`a14` blob,
|
||||
PRIMARY KEY (`a1`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
) /*!50100 TABLESPACE ts STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
ALTER TABLE test.t1 ADD INDEX a2_i (a2), ADD INDEX a3_i (a3);
|
||||
SHOW CREATE TABLE test.t1;
|
||||
Table Create Table
|
||||
@ -391,7 +397,7 @@ t1 CREATE TABLE `t1` (
|
||||
PRIMARY KEY (`a1`),
|
||||
KEY `a2_i` (`a2`),
|
||||
KEY `a3_i` (`a3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
) /*!50100 TABLESPACE ts STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
ALTER TABLE test.t1 DROP INDEX a2_i;
|
||||
SHOW CREATE TABLE test.t1;
|
||||
Table Create Table
|
||||
@ -412,7 +418,7 @@ t1 CREATE TABLE `t1` (
|
||||
`a14` blob,
|
||||
PRIMARY KEY (`a1`),
|
||||
KEY `a3_i` (`a3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
) /*!50100 TABLESPACE ts STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
ALTER TABLE test.t1 DROP a14;
|
||||
ALTER TABLE test.t1 DROP a13;
|
||||
ALTER TABLE test.t1 DROP a12;
|
||||
@ -432,7 +438,7 @@ t1 CREATE TABLE `t1` (
|
||||
`a4` bit(1) DEFAULT NULL,
|
||||
`a5` tinyint(4) DEFAULT NULL,
|
||||
KEY `a3_i` (`a3`)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
) /*!50100 TABLESPACE ts STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
|
||||
DROP TABLE test.t1;
|
||||
ALTER TABLESPACE ts
|
||||
DROP DATAFILE './table_space/datafile.dat'
|
||||
|
@ -156,8 +156,12 @@ enable_query_log;
|
||||
|
||||
SELECT * FROM test.t1 ORDER BY a1;
|
||||
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
|
||||
ALTER TABLE test.t1 ADD a2 FLOAT, ADD a3 DOUBLE;
|
||||
|
||||
SELECT * FROM information_schema.partitions WHERE table_name= 't1' AND partition_name = 'p0';
|
||||
|
||||
let $1=20;
|
||||
disable_query_log;
|
||||
while ($1)
|
||||
|
@ -9949,7 +9949,7 @@ int ha_ndbcluster::generate_scan_filter_from_key(NdbScanOperation *op,
|
||||
/*
|
||||
get table space info for SHOW CREATE TABLE
|
||||
*/
|
||||
char* ha_ndbcluster::get_tablespace_name(THD *thd)
|
||||
char* ha_ndbcluster::get_tablespace_name(THD *thd, char* name)
|
||||
{
|
||||
Ndb *ndb= check_ndb_in_thd(thd);
|
||||
NDBDICT *ndbdict= ndb->getDictionary();
|
||||
@ -9967,7 +9967,13 @@ char* ha_ndbcluster::get_tablespace_name(THD *thd)
|
||||
ndberr= ndbdict->getNdbError();
|
||||
if(ndberr.classification != NdbError::NoError)
|
||||
goto err;
|
||||
return (my_strdup(ts.getName(), MYF(0)));
|
||||
if (name)
|
||||
{
|
||||
strxnmov(name, FN_LEN, ts.getName(), NullS);
|
||||
return name;
|
||||
}
|
||||
else
|
||||
return (my_strdup(ts.getName(), MYF(0)));
|
||||
}
|
||||
err:
|
||||
if (ndberr.status == NdbError::TemporaryError)
|
||||
|
@ -824,7 +824,7 @@ private:
|
||||
uint set_up_partition_info(partition_info *part_info,
|
||||
TABLE *table,
|
||||
void *tab);
|
||||
char* get_tablespace_name(THD *thd);
|
||||
char* get_tablespace_name(THD *thd, char *name);
|
||||
int set_range_data(void *tab, partition_info* part_info);
|
||||
int set_list_data(void *tab, partition_info* part_info);
|
||||
int complemented_read(const byte *old_data, byte *new_data,
|
||||
|
@ -1410,7 +1410,7 @@ public:
|
||||
{ return FALSE; }
|
||||
virtual char* get_foreign_key_create_info()
|
||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||
virtual char* get_tablespace_name(THD *thd)
|
||||
virtual char* get_tablespace_name(THD *thd, char *name)
|
||||
{ return(NULL);} /* gets tablespace name from handler */
|
||||
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
||||
virtual bool can_switch_engines() { return 1; }
|
||||
|
@ -1267,7 +1267,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
to the CREATE TABLE statement
|
||||
*/
|
||||
|
||||
if ((for_str= file->get_tablespace_name(thd)))
|
||||
if ((for_str= file->get_tablespace_name(thd,0)))
|
||||
{
|
||||
packet->append(STRING_WITH_LEN(" /*!50100 TABLESPACE "));
|
||||
packet->append(for_str, strlen(for_str));
|
||||
@ -3974,7 +3974,7 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table,
|
||||
strlen(part_elem->tablespace_name), cs);
|
||||
else
|
||||
{
|
||||
char *ts= showing_table->file->get_tablespace_name(thd);
|
||||
char *ts= showing_table->file->get_tablespace_name(thd,0);
|
||||
if(ts)
|
||||
{
|
||||
table->field[24]->store(ts, strlen(ts), cs);
|
||||
|
@ -5307,7 +5307,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
int error;
|
||||
char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN];
|
||||
char new_alias_buff[FN_REFLEN], *table_name, *db, *new_alias, *alias;
|
||||
char index_file[FN_REFLEN], data_file[FN_REFLEN];
|
||||
char index_file[FN_REFLEN], data_file[FN_REFLEN], tablespace[FN_LEN];
|
||||
char path[FN_REFLEN];
|
||||
char reg_path[FN_REFLEN+1];
|
||||
ha_rows copied,deleted;
|
||||
@ -5630,6 +5630,15 @@ view_err:
|
||||
if (!(used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE))
|
||||
create_info->key_block_size= table->s->key_block_size;
|
||||
|
||||
if (!create_info->tablespace)
|
||||
{
|
||||
/*
|
||||
Regular alter table of disk stored table (no tablespace change)
|
||||
Copy tablespace name
|
||||
*/
|
||||
if (table->file->get_tablespace_name(thd, (char *) &tablespace))
|
||||
create_info->tablespace= (char *) &tablespace;
|
||||
}
|
||||
restore_record(table, s->default_values); // Empty record for DEFAULT
|
||||
List_iterator<Alter_drop> drop_it(alter_info->drop_list);
|
||||
List_iterator<create_field> def_it(fields);
|
||||
|
Reference in New Issue
Block a user