mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
MySQL Bugs: #16466: DD: SHOW CREATE TABLE does not show TABLESPACE table_space1 STORAGE DISK
This commit is contained in:
parent
f90661e443
commit
de2c7c72d9
9 changed files with 67 additions and 26 deletions
|
@ -21,6 +21,14 @@ CREATE TABLE t1
|
|||
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
||||
TABLESPACE ts1 STORAGE DISK
|
||||
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);
|
||||
SELECT * FROM t1;
|
||||
pk1 b c
|
||||
|
|
|
@ -54,6 +54,8 @@ CREATE TABLE t1
|
|||
TABLESPACE ts1 STORAGE DISK
|
||||
ENGINE=NDB;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
INSERT INTO t1 VALUES (0, 0, 0);
|
||||
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
|
||||
*/
|
||||
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();
|
||||
NDBDICT *ndbdict= ndb->getDictionary();
|
||||
NdbError ndberr;
|
||||
Uint32 id;
|
||||
ndb->setDatabaseName(m_dbname);
|
||||
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
||||
if (ndbtab == 0)
|
||||
return 0;
|
||||
|
||||
// TODO retrieve table space name if there is one
|
||||
{
|
||||
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;
|
||||
|
||||
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,
|
||||
TABLE *table,
|
||||
void *tab);
|
||||
char* get_tablespace_create_info();
|
||||
char* get_tablespace_name();
|
||||
int set_range_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,
|
||||
|
|
|
@ -1713,8 +1713,8 @@ public:
|
|||
{ return FALSE; }
|
||||
virtual char* get_foreign_key_create_info()
|
||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||
virtual char* get_tablespace_create_info()
|
||||
{ return(NULL);} /* gets tablespace create string from handler */
|
||||
virtual char* get_tablespace_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; }
|
||||
/* 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
|
||||
*/
|
||||
|
||||
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(" STORAGE DISK");
|
||||
my_free(for_str, MYF(0));
|
||||
}
|
||||
|
||||
|
|
|
@ -783,7 +783,7 @@ public:
|
|||
void setTablespace(const char * name);
|
||||
void setTablespace(const class Tablespace &);
|
||||
const char * getTablespace() const;
|
||||
Uint32 getTablespaceId() const;
|
||||
bool getTablespace(Uint32 *id= 0, Uint32 *version= 0) const;
|
||||
|
||||
/**
|
||||
* Get table object type
|
||||
|
@ -1736,6 +1736,7 @@ public:
|
|||
int createTablespace(const Tablespace &);
|
||||
int dropTablespace(const Tablespace&);
|
||||
Tablespace getTablespace(const char * name);
|
||||
Tablespace getTablespace(Uint32 tablespaceId);
|
||||
|
||||
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
||||
int dropDatafile(const Datafile&);
|
||||
|
|
|
@ -600,10 +600,16 @@ NdbDictionary::Table::createTableInDb(Ndb* pNdb, bool equalOk) const {
|
|||
return pNdb->getDictionary()->createTable(* this);
|
||||
}
|
||||
|
||||
Uint32
|
||||
NdbDictionary::Table::getTablespaceId() const
|
||||
bool
|
||||
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
|
||||
|
@ -1687,6 +1693,15 @@ NdbDictionary::Dictionary::getTablespace(const char * name){
|
|||
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
|
||||
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
||||
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
||||
|
|
|
@ -658,11 +658,11 @@ BackupRestore::table(const TableS & table){
|
|||
NdbDictionary::Table copy(*table.m_dictTable);
|
||||
|
||||
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;
|
||||
NdbDictionary::Tablespace* ts = m_tablespaces[copy.getTablespaceId()];
|
||||
NdbDictionary::Tablespace* ts = m_tablespaces[id];
|
||||
debug << " newid: " << ts->getObjectId() << endl;
|
||||
copy.setTablespace(* ts);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue