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

Make drop table work

This commit is contained in:
David Hall
2016-02-18 16:36:15 -06:00
parent deb94b245e
commit f458cb46cc
4 changed files with 18 additions and 25 deletions

View File

@ -159,28 +159,26 @@ static uchar* calpont_get_key(INFINIDB_SHARE *share, size_t *length,
int calpont_discover(handlerton *hton, THD* thd, TABLE_SHARE *share)
{
DBUG_ENTER("calpont_discover");
DBUG_PRINT("calpont_discover", ("db: '%s' name: '%s'", share->db.str,
share->table_name.str));
DBUG_PRINT("calpont_discover", ("db: '%s' name: '%s'", share->db.str, share->table_name.str));
#ifdef INFINIDB_DEBUG
fprintf(stderr, "calpont_discover()\n");
#endif
uchar* frm_data = NULL;
size_t frm_len = 0;
int error = 0;
uchar* frm_data = NULL;
size_t frm_len = 0;
int error = 0;
if (!ha_calpont_impl_discover_existence(share->db.str, share->table_name.str))
DBUG_RETURN(HA_ERR_NO_SUCH_TABLE);
if (!ha_calpont_impl_discover_existence(share->db.str, share->table_name.str))
DBUG_RETURN(HA_ERR_NO_SUCH_TABLE);
error = share->read_frm_image((const uchar**)&frm_data, &frm_len);
error = share->read_frm_image((const uchar**)&frm_data, &frm_len);
if (error)
DBUG_RETURN(HA_ERR_NO_SUCH_TABLE);
DBUG_RETURN(HA_ERR_NO_SUCH_TABLE);
my_errno= share->init_from_binary_frm_image(thd, 1, frm_data, frm_len);
my_free(frm_data);
my_free(frm_data);
DBUG_RETURN(my_errno);
}
@ -215,7 +213,7 @@ static int calpont_init_func(void *p)
calpont_hton->state= SHOW_OPTION_YES;
calpont_hton->create= calpont_create_handler;
calpont_hton->flags= HTON_CAN_RECREATE;
// calpont_hton->discover_table= calpont_discover;
calpont_hton->discover_table= calpont_discover;
calpont_hton->discover_table_existence= calpont_discover_existence;
calpont_hton->commit= calpont_commit;
calpont_hton->rollback= calpont_rollback;
@ -1030,7 +1028,7 @@ int ha_calpont::create(const char *name, TABLE *table_arg,
DBUG_ENTER("ha_calpont::create");
int rc = ha_calpont_impl_create(name, table_arg, create_info);
table_arg->s->write_frm_image();
DBUG_RETURN(rc);
}

View File

@ -2094,13 +2094,14 @@ int ha_calpont_impl_create_(const char *name, TABLE *table_arg, HA_CREATE_INFO *
return rc;
}
int ha_calpont_impl_delete_table_(const char *name, cal_connection_info& ci)
int ha_calpont_impl_delete_table_(const char *db, const char *name, cal_connection_info& ci)
{
#ifdef INFINIDB_DEBUG
cout << "ha_calpont_impl_delete_table: " << name << endl;
cout << "ha_calpont_impl_delete_table: " << db << name << endl;
#endif
THD *thd = current_thd;
std::string tbl(name);
std::string schema(db);
std::string stmt(idb_mysql_query_str(thd));
algorithm::to_upper(stmt);
// @bug 4158 allow table name with 'restrict' in it (but not by itself)
@ -2124,12 +2125,10 @@ int ha_calpont_impl_delete_table_(const char *name, cal_connection_info& ci)
return 1;
}
TABLE_LIST *first_table= (TABLE_LIST*) thd->lex->select_lex.table_list.first;
string db = first_table->table->s->db.str;
string emsg;
stmt = idb_mysql_query_str(thd);
stmt += ";";
int rc = ProcessDDLStatement(stmt, db, tbl, tid2sid(thd->thread_id), emsg);
int rc = ProcessDDLStatement(stmt, schema, tbl, tid2sid(thd->thread_id), emsg);
if (rc != 0)
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 9999, emsg.c_str());
return rc;

View File

@ -3180,10 +3180,6 @@ int ha_calpont_impl_delete_table(const char *name)
setError(thd, ER_INTERNAL_ERROR, "Null table pointer detected when dropping table");
return 1;
}
if (!(first_table->table && first_table->table->s && first_table->table->s->db.str))
return 0;
string db = first_table->table->s->db.str;
if (!ci) return 0;
@ -3193,7 +3189,7 @@ int ha_calpont_impl_delete_table(const char *name)
return 0;
}
// @bug 1793. make vtable droppable in calpontsys. "$vtable" ==> "@0024vtable" passed in as name.
if (db == "calpontsys" && string(name).find("@0024vtable") == string::npos)
if (strcmp(first_table->db, "calpontsys") == 0 && string(name).find("@0024vtable") == string::npos)
{
std::string stmt(idb_mysql_query_str(thd));
algorithm::to_upper(stmt);
@ -3206,7 +3202,7 @@ int ha_calpont_impl_delete_table(const char *name)
return 1;
}
int rc = ha_calpont_impl_delete_table_(name, *ci);
int rc = ha_calpont_impl_delete_table_(first_table->db, name, *ci);
return rc;
}
int ha_calpont_impl_write_row(uchar *buf, TABLE* table)

View File

@ -60,7 +60,7 @@ extern int ha_calpont_impl_write_last_batch(TABLE* table, cal_impl_if::cal_conne
extern int ha_calpont_impl_commit_ (handlerton *hton, THD *thd, bool all, cal_impl_if::cal_connection_info& ci);
extern int ha_calpont_impl_rollback_ (handlerton *hton, THD *thd, bool all, cal_impl_if::cal_connection_info& ci);
extern int ha_calpont_impl_close_connection_ (handlerton *hton, THD *thd, cal_impl_if::cal_connection_info& ci);
extern int ha_calpont_impl_delete_table_(const char *name, cal_impl_if::cal_connection_info& ci);
extern int ha_calpont_impl_delete_table_(const char *db, const char *name, cal_impl_if::cal_connection_info& ci);
extern int ha_calpont_impl_create_(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info,
cal_impl_if::cal_connection_info& ci);
extern std::string ha_calpont_impl_markpartition_ (execplan::CalpontSystemCatalog::TableName tableName, uint32_t partition);