mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MySQL Bugs: #16466: DD: SHOW CREATE TABLE does not show TABLESPACE table_space1 STORAGE DISK
This commit is contained in:
@ -21,6 +21,14 @@ CREATE TABLE t1
|
|||||||
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
||||||
TABLESPACE ts1 STORAGE DISK
|
TABLESPACE ts1 STORAGE DISK
|
||||||
ENGINE=NDB;
|
ENGINE=NDB;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`pk1` int(11) NOT NULL,
|
||||||
|
`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 ()
|
||||||
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
|
||||||
|
@ -54,6 +54,8 @@ CREATE TABLE t1
|
|||||||
TABLESPACE ts1 STORAGE DISK
|
TABLESPACE ts1 STORAGE DISK
|
||||||
ENGINE=NDB;
|
ENGINE=NDB;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (0, 0, 0);
|
INSERT INTO t1 VALUES (0, 0, 0);
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
@ -8905,28 +8905,41 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack,
|
|||||||
/*
|
/*
|
||||||
get table space info for SHOW CREATE TABLE
|
get table space info for SHOW CREATE TABLE
|
||||||
*/
|
*/
|
||||||
char* ha_ndbcluster::get_tablespace_create_info()
|
char* ha_ndbcluster::get_tablespace_name()
|
||||||
{
|
{
|
||||||
const char tablespace_key[]= " TABLESPACE ";
|
|
||||||
const char storage_key[]= " STORAGE DISK";
|
|
||||||
char* str= 0;
|
|
||||||
|
|
||||||
Ndb *ndb= get_ndb();
|
Ndb *ndb= get_ndb();
|
||||||
NDBDICT *ndbdict= ndb->getDictionary();
|
NDBDICT *ndbdict= ndb->getDictionary();
|
||||||
|
NdbError ndberr;
|
||||||
|
Uint32 id;
|
||||||
ndb->setDatabaseName(m_dbname);
|
ndb->setDatabaseName(m_dbname);
|
||||||
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
||||||
if (ndbtab == 0)
|
if (ndbtab == 0)
|
||||||
|
{
|
||||||
|
ndberr= ndbdict->getNdbError();
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (!ndbtab->getTablespace(&id))
|
||||||
|
{
|
||||||
|
ndberr= ndbdict->getNdbError();
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
NdbDictionary::Tablespace ts= ndbdict->getTablespace(id);
|
||||||
|
ndberr= ndbdict->getNdbError();
|
||||||
|
if(ndberr.classification != ndberror_cl_none)
|
||||||
|
goto err;
|
||||||
|
return (my_strdup(ts.getName(), MYF(0)));
|
||||||
|
}
|
||||||
|
err:
|
||||||
|
if (ndberr.status == NdbError::TemporaryError)
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_GET_TEMPORARY_ERRMSG, ER(ER_GET_TEMPORARY_ERRMSG),
|
||||||
|
ndberr.code, ndberr.message, "NDB");
|
||||||
|
else
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_GET_ERRMSG, ER(ER_GET_ERRMSG),
|
||||||
|
ndberr.code, ndberr.message, "NDB");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// TODO retrieve table space name if there is one
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
const char *tablespace_name= "<name>";
|
|
||||||
|
|
||||||
uint len= sizeof(tablespace_key) + strlen(tablespace_name) + sizeof(storage_key);
|
|
||||||
str= my_malloc(len, MYF(0));
|
|
||||||
strxnmov(str, len, tablespace_key, tablespace_name, storage_key, NullS);
|
|
||||||
return(str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -701,7 +701,7 @@ private:
|
|||||||
uint set_up_partition_info(partition_info *part_info,
|
uint set_up_partition_info(partition_info *part_info,
|
||||||
TABLE *table,
|
TABLE *table,
|
||||||
void *tab);
|
void *tab);
|
||||||
char* get_tablespace_create_info();
|
char* get_tablespace_name();
|
||||||
int set_range_data(void *tab, partition_info* part_info);
|
int set_range_data(void *tab, partition_info* part_info);
|
||||||
int set_list_data(void *tab, partition_info* part_info);
|
int set_list_data(void *tab, partition_info* part_info);
|
||||||
int complemented_pk_read(const byte *old_data, byte *new_data,
|
int complemented_pk_read(const byte *old_data, byte *new_data,
|
||||||
|
@ -1713,8 +1713,8 @@ public:
|
|||||||
{ return FALSE; }
|
{ return FALSE; }
|
||||||
virtual char* get_foreign_key_create_info()
|
virtual char* get_foreign_key_create_info()
|
||||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||||
virtual char* get_tablespace_create_info()
|
virtual char* get_tablespace_name()
|
||||||
{ return(NULL);} /* gets tablespace create string from handler */
|
{ return(NULL);} /* gets tablespace name from handler */
|
||||||
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
||||||
virtual bool can_switch_engines() { return 1; }
|
virtual bool can_switch_engines() { return 1; }
|
||||||
/* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
/* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
||||||
|
@ -1140,9 +1140,11 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
|||||||
to the CREATE TABLE statement
|
to the CREATE TABLE statement
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((for_str= file->get_tablespace_create_info()))
|
if ((for_str= file->get_tablespace_name()))
|
||||||
{
|
{
|
||||||
|
packet->append(" TABLESPACE ");
|
||||||
packet->append(for_str, strlen(for_str));
|
packet->append(for_str, strlen(for_str));
|
||||||
|
packet->append(" STORAGE DISK");
|
||||||
my_free(for_str, MYF(0));
|
my_free(for_str, MYF(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,7 +783,7 @@ public:
|
|||||||
void setTablespace(const char * name);
|
void setTablespace(const char * name);
|
||||||
void setTablespace(const class Tablespace &);
|
void setTablespace(const class Tablespace &);
|
||||||
const char * getTablespace() const;
|
const char * getTablespace() const;
|
||||||
Uint32 getTablespaceId() const;
|
bool getTablespace(Uint32 *id= 0, Uint32 *version= 0) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get table object type
|
* Get table object type
|
||||||
@ -1736,6 +1736,7 @@ public:
|
|||||||
int createTablespace(const Tablespace &);
|
int createTablespace(const Tablespace &);
|
||||||
int dropTablespace(const Tablespace&);
|
int dropTablespace(const Tablespace&);
|
||||||
Tablespace getTablespace(const char * name);
|
Tablespace getTablespace(const char * name);
|
||||||
|
Tablespace getTablespace(Uint32 tablespaceId);
|
||||||
|
|
||||||
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
||||||
int dropDatafile(const Datafile&);
|
int dropDatafile(const Datafile&);
|
||||||
|
@ -600,10 +600,16 @@ NdbDictionary::Table::createTableInDb(Ndb* pNdb, bool equalOk) const {
|
|||||||
return pNdb->getDictionary()->createTable(* this);
|
return pNdb->getDictionary()->createTable(* this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint32
|
bool
|
||||||
NdbDictionary::Table::getTablespaceId() const
|
NdbDictionary::Table::getTablespace(Uint32 *id, Uint32 *version) const
|
||||||
{
|
{
|
||||||
return m_impl.m_tablespace_id;
|
if (m_impl.m_tablespace_id == RNIL)
|
||||||
|
return false;
|
||||||
|
if (id)
|
||||||
|
*id= m_impl.m_tablespace_id;
|
||||||
|
if (version)
|
||||||
|
*version= m_impl.m_version;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1687,6 +1693,15 @@ NdbDictionary::Dictionary::getTablespace(const char * name){
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NdbDictionary::Tablespace
|
||||||
|
NdbDictionary::Dictionary::getTablespace(Uint32 tablespaceId){
|
||||||
|
NdbDictionary::Tablespace tmp;
|
||||||
|
m_impl.m_receiver.get_filegroup(NdbTablespaceImpl::getImpl(tmp),
|
||||||
|
NdbDictionary::Object::Tablespace,
|
||||||
|
tablespaceId);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
||||||
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
||||||
|
@ -658,11 +658,11 @@ BackupRestore::table(const TableS & table){
|
|||||||
NdbDictionary::Table copy(*table.m_dictTable);
|
NdbDictionary::Table copy(*table.m_dictTable);
|
||||||
|
|
||||||
copy.setName(split[2].c_str());
|
copy.setName(split[2].c_str());
|
||||||
if (copy.getTablespaceId() != RNIL)
|
Uint32 id;
|
||||||
|
if (copy.getTablespace(&id))
|
||||||
{
|
{
|
||||||
Uint32 id = copy.getTablespaceId();
|
|
||||||
debug << "Connecting " << name << " to tablespace oldid: " << id << flush;
|
debug << "Connecting " << name << " to tablespace oldid: " << id << flush;
|
||||||
NdbDictionary::Tablespace* ts = m_tablespaces[copy.getTablespaceId()];
|
NdbDictionary::Tablespace* ts = m_tablespaces[id];
|
||||||
debug << " newid: " << ts->getObjectId() << endl;
|
debug << " newid: " << ts->getObjectId() << endl;
|
||||||
copy.setTablespace(* ts);
|
copy.setTablespace(* ts);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user