MySQL Bugs: #16466: DD: SHOW CREATE TABLE does not show TABLESPACE table_space1 STORAGE DISK

parent f90661e4
...@@ -21,6 +21,14 @@ CREATE TABLE t1 ...@@ -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 ...@@ -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, ...@@ -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)
return 0; {
ndberr= ndbdict->getNdbError();
// TODO retrieve table space name if there is one 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;
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: ...@@ -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: ...@@ -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, ...@@ -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: ...@@ -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: ...@@ -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 { ...@@ -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){ ...@@ -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){ ...@@ -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);
} }
......
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