Details
- 
    New Feature 
- 
    Status: Open (View Workflow)
- 
    Major 
- 
    Resolution: Unresolved
- 
    None
- 
    None
Description
Import tablespace for partitioned tables is a horrible fragile procedure.
MDEV-26317 implemented for InnoDB the pure ALTER TABLE t2 IMPORT TABLESPACE.
Extending the partition starts with:
| diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc | 
| index 5b6cbd35e25..ba33526662f 100644 | 
| --- a/sql/ha_partition.cc | 
| +++ b/sql/ha_partition.cc | 
| @@ -740,6 +740,12 @@ int ha_partition::create_partitioning_metadata(const char *path, | 
|  } | 
|   | 
|   | 
| +int ha_partition::discard_or_import_tablespace(my_bool discard) | 
| +{ | 
| +  if (m_innodb) return 0; | 
| +  return handler::discard_or_import_tablespace(discard); | 
| +} | 
| + | 
|  /* | 
|    Create a partitioned table | 
|   | 
| diff --git a/sql/ha_partition.h b/sql/ha_partition.h | 
| index d450f96f4f9..7676b1887bb 100644 | 
| --- a/sql/ha_partition.h | 
| +++ b/sql/ha_partition.h | 
| @@ -545,6 +545,7 @@ class ha_partition final :public handler | 
|    */ | 
|    int delete_table(const char *from) override; | 
|    int rename_table(const char *from, const char *to) override; | 
| +  int discard_or_import_tablespace(my_bool discard) override; | 
|    int create(const char *name, TABLE *form, | 
|               HA_CREATE_INFO *create_info) override; | 
|    int create_partitioning_metadata(const char *name, | 
| 
 | 
But there seems to be a bit more to iron out:
| MariaDB [import]> show tables; | 
|  | 
| +------------------+ | 
| | Tables_in_import | | 
| +------------------+ | 
| | t1               | | 
| +------------------+ | 
| 1 row in set (0.004 sec) | 
|  | 
| MariaDB [import]> alter table t2 import tablespace; | 
| Query OK, 0 rows affected (0.001 sec) | 
|  | 
| MariaDB [import]> select * from t2; | 
| ERROR 1814 (HY000): Tablespace has been discarded for table `t2` | 
|  | 
| MariaDB [import]> show create table t2\G | 
| *************************** 1. row *************************** | 
|        Table: t2 | 
| Create Table: CREATE TABLE `t2` ( | 
|   `employee_id` int(11) DEFAULT NULL, | 
|   `name` varchar(50) DEFAULT NULL | 
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci | 
|  PARTITION BY RANGE (`employee_id`) | 
| (PARTITION `p0` VALUES LESS THAN (6) ENGINE = InnoDB, | 
|  PARTITION `p1` VALUES LESS THAN (11) ENGINE = InnoDB, | 
|  PARTITION `p2` VALUES LESS THAN (16) ENGINE = InnoDB, | 
|  PARTITION `p3` VALUES LESS THAN MAXVALUE ENGINE = InnoDB) | 
| 1 row in set (0.000 sec)
 | 
Attachments
Issue Links
- relates to
- 
                    MDEV-26137 ALTER TABLE IMPORT enhancement -         
- Closed
 
-