[MDEV-33226] ALTER TABLE IMPORT enhancement for Partitioned tables Created: 2024-01-12  Updated: 2024-01-17

Status: Open
Project: MariaDB Server
Component/s: Partitioning, Storage Engine - InnoDB
Fix Version/s: None

Type: New Feature Priority: Major
Reporter: Daniel Black Assignee: Unassigned
Resolution: Unresolved Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-26137 ALTER TABLE IMPORT enhancement Closed

 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)


Generated at Thu Feb 08 10:37:20 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.