1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-4164 Multi-table DROP.

This commit is contained in:
Roman Nozdrin
2020-07-12 17:55:37 +00:00
parent cba638b3a5
commit 9604fc5f10

View File

@ -107,6 +107,31 @@ inline uint32_t tid2sid(const uint32_t tid)
return CalpontSystemCatalog::idb_tid2sid(tid); return CalpontSystemCatalog::idb_tid2sid(tid);
} }
static void decode_objectname(char *buf, const char *path, size_t buf_size)
{
size_t new_path_len = filename_to_tablename(path, buf, buf_size);
buf[new_path_len] = '\0';
}
static void decode_file_path(const char *path, char *decoded_dbname,
char *decoded_tbname)
{
// The format cont ains './' in the beginning of a path.
char *dbname_start = (char*) path + 2;
char *dbname_end = dbname_start;
while (*dbname_end != '/')
dbname_end++;
int cnt = dbname_end - dbname_start;
char *dbname = (char *)my_alloca(cnt + 1);
memcpy(dbname, dbname_start, cnt);
dbname[cnt] = '\0';
decode_objectname(decoded_dbname, dbname, FN_REFLEN);
my_afree(dbname);
char *tbname_start = dbname_end + 1;
decode_objectname(decoded_tbname, tbname_start, FN_REFLEN);
}
uint32_t convertDataType(int dataType) uint32_t convertDataType(int dataType)
{ {
@ -2539,8 +2564,6 @@ int ha_mcs_impl_delete_table_(const char* db, const char* name, cal_connection_i
cout << "ha_mcs_impl_delete_table: " << db << name << endl; cout << "ha_mcs_impl_delete_table: " << db << name << endl;
#endif #endif
THD* thd = current_thd; THD* thd = current_thd;
std::string tbl(name);
std::string schema(db);
char* query = thd->query(); char* query = thd->query();
if (!query) if (!query)
@ -2572,20 +2595,21 @@ int ha_mcs_impl_delete_table_(const char* db, const char* name, cal_connection_i
return 1; return 1;
} }
string emsg; std::string emsg;
if ((thd->lex->sql_command == SQLCOM_DROP_DB) || (thd->lex->sql_command == SQLCOM_ALTER_TABLE)) char decodedSchema[FN_REFLEN];
{ char decodedTbl[FN_REFLEN];
std::string tableName(name); decode_file_path(name, decodedSchema, decodedTbl);
tableName.erase(0, tableName.rfind("/") + 1); std::string schema(decodedSchema);
stmt = std::string("DROP TABLE ") + tableName; std::string tbl(decodedTbl);
}
else stmt.clear();
{ stmt.assign("DROP TABLE `");
stmt = thd->query(); stmt.append(decodedSchema);
} stmt.append("`.`");
stmt.append(decodedTbl);
stmt.append("`;");
stmt += ";";
int rc = ProcessDDLStatement(stmt, schema, tbl, tid2sid(thd->thread_id), emsg); int rc = ProcessDDLStatement(stmt, schema, tbl, tid2sid(thd->thread_id), emsg);
if (rc != 0 && rc != ER_NO_SUCH_TABLE_IN_ENGINE) if (rc != 0 && rc != ER_NO_SUCH_TABLE_IN_ENGINE)