summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2006-02-07 16:31:20 +0100
committerunknown <tomas@poseidon.ndb.mysql.com>2006-02-07 16:31:20 +0100
commit3e463ddad49bd315b3e2d4752295623759be3f88 (patch)
tree7b1a816b2f5d7aeb677471d13516816e0ba86541
parent76d8dd3e4dbe4d5a2e4c1cf99ff441dc7ef30aab (diff)
downloadmariadb-git-3e463ddad49bd315b3e2d4752295623759be3f88.tar.gz
Bug #17005 Ndb partition handling for create table like is broken
-rw-r--r--sql/ha_ndbcluster.cc1
-rw-r--r--sql/sql_partition.cc22
2 files changed, 15 insertions, 8 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 361401e22d6..f1fdfe86930 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -9592,6 +9592,7 @@ bool ha_ndbcluster::get_no_parts(const char *name, uint *no_parts)
break;
}
ndb= get_ndb();
+ ndb->setDatabaseName(m_dbname);
dict= ndb->getDictionary();
if (!(tab= dict->getTable(m_tabname)))
ERR_BREAK(dict->getNdbError(), err);
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index aec0d2108ed..c6df76f2674 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -250,14 +250,14 @@ char *are_partitions_in_table(partition_info *new_part_info,
FALSE Success
*/
-bool partition_default_handling(TABLE *table, partition_info *part_info)
+bool partition_default_handling(TABLE *table, partition_info *part_info,
+ const char *normalized_path)
{
DBUG_ENTER("partition_default_handling");
if (part_info->use_default_no_partitions)
{
- if (table->file->get_no_parts(table->s->normalized_path.str,
- &part_info->no_parts))
+ if (table->file->get_no_parts(normalized_path, &part_info->no_parts))
{
DBUG_RETURN(TRUE);
}
@@ -266,8 +266,7 @@ bool partition_default_handling(TABLE *table, partition_info *part_info)
part_info->use_default_no_subpartitions)
{
uint no_parts;
- if (table->file->get_no_parts(table->s->normalized_path.str,
- &no_parts))
+ if (table->file->get_no_parts(normalized_path, &no_parts))
{
DBUG_RETURN(TRUE);
}
@@ -2005,7 +2004,8 @@ bool fix_partition_func(THD *thd, const char* name, TABLE *table,
if (!is_create_table_ind)
{
- if (partition_default_handling(table, part_info))
+ if (partition_default_handling(table, part_info,
+ table->s->normalized_path.str))
{
DBUG_RETURN(TRUE);
}
@@ -3901,9 +3901,15 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
old_lex->name contains the t2 and the table we are opening has
name t1.
*/
- if (partition_default_handling(table, part_info))
+ Table_ident *table_ident= (Table_ident *)old_lex->name;
+ char *src_db= table_ident->db.str ? table_ident->db.str : thd->db;
+ char *src_table= table_ident->table.str;
+ char buf[FN_REFLEN];
+ build_table_filename(buf, sizeof(buf), src_db, src_table, "");
+ if (partition_default_handling(table, part_info, buf))
{
- DBUG_RETURN(TRUE);
+ result= TRUE;
+ goto end;
}
}
else