Loading mysql-test/r/ndb_alter_table.result +1 −2 Original line number Diff line number Diff line Loading @@ -179,8 +179,7 @@ a b c 2 two two alter table t1 drop index c; select * from t1 where b = 'two'; a b c 2 two two ERROR HY000: Table definition has changed, please retry transaction select * from t1 where b = 'two'; a b c 2 two two Loading mysql-test/t/ndb_alter_table.test +2 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,8 @@ select * from t1 where b = 'two'; connection server1; alter table t1 drop index c; connection server2; # This should fail since index information is not automatically refreshed --error 1412 select * from t1 where b = 'two'; select * from t1 where b = 'two'; connection server1; Loading sql/ha_ndbcluster.cc +38 −5 Original line number Diff line number Diff line Loading @@ -78,6 +78,8 @@ handlerton ndbcluster_hton = { #define NDB_FAILED_AUTO_INCREMENT ~(Uint64)0 #define NDB_AUTO_INCREMENT_RETRIES 10 #define NDB_INVALID_SCHEMA_OBJECT 241 #define ERR_PRINT(err) \ DBUG_PRINT("error", ("%d message: %s", err.code, err.message)) Loading Loading @@ -296,7 +298,21 @@ Thd_ndb::Thd_ndb() Thd_ndb::~Thd_ndb() { if (ndb) { #ifndef DBUG_OFF Ndb::Free_list_usage tmp; tmp.m_name= 0; while (ndb->get_free_list_usage(&tmp)) { uint leaked= (uint) tmp.m_created - tmp.m_free; if (leaked) fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n", leaked, tmp.m_name, (leaked == 1)?"":"'s", (leaked == 1)?"has":"have"); } #endif delete ndb; } ndb= NULL; changed_tables.empty(); } Loading Loading @@ -3316,15 +3332,18 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) DBUG_PRINT("info", ("Table schema version: %d", tab->getObjectVersion())); } if (m_table != (void *)tab || m_table_version < tab->getObjectVersion()) if (m_table != (void *)tab) { /* The table has been altered, refresh the index list */ build_index_list(ndb, table, ILBP_OPEN); m_table= (void *)tab; m_table_version = tab->getObjectVersion(); } else if (m_table_version < tab->getObjectVersion()) { /* The table has been altered, caller has to retry */ DBUG_RETURN(my_errno= HA_ERR_TABLE_DEF_CHANGED); } m_table_info= tab_info; } no_uncommitted_rows_init(thd); Loading Loading @@ -4862,7 +4881,21 @@ bool ndbcluster_end() (void) pthread_mutex_unlock(&LOCK_ndb_util_thread); if (g_ndb) { #ifndef DBUG_OFF Ndb::Free_list_usage tmp; tmp.m_name= 0; while (g_ndb->get_free_list_usage(&tmp)) { uint leaked= (uint) tmp.m_created - tmp.m_free; if (leaked) fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n", leaked, tmp.m_name, (leaked == 1)?"":"'s", (leaked == 1)?"has":"have"); } #endif delete g_ndb; } g_ndb= NULL; if (g_ndb_cluster_connection) delete g_ndb_cluster_connection; Loading Loading
mysql-test/r/ndb_alter_table.result +1 −2 Original line number Diff line number Diff line Loading @@ -179,8 +179,7 @@ a b c 2 two two alter table t1 drop index c; select * from t1 where b = 'two'; a b c 2 two two ERROR HY000: Table definition has changed, please retry transaction select * from t1 where b = 'two'; a b c 2 two two Loading
mysql-test/t/ndb_alter_table.test +2 −0 Original line number Diff line number Diff line Loading @@ -151,6 +151,8 @@ select * from t1 where b = 'two'; connection server1; alter table t1 drop index c; connection server2; # This should fail since index information is not automatically refreshed --error 1412 select * from t1 where b = 'two'; select * from t1 where b = 'two'; connection server1; Loading
sql/ha_ndbcluster.cc +38 −5 Original line number Diff line number Diff line Loading @@ -78,6 +78,8 @@ handlerton ndbcluster_hton = { #define NDB_FAILED_AUTO_INCREMENT ~(Uint64)0 #define NDB_AUTO_INCREMENT_RETRIES 10 #define NDB_INVALID_SCHEMA_OBJECT 241 #define ERR_PRINT(err) \ DBUG_PRINT("error", ("%d message: %s", err.code, err.message)) Loading Loading @@ -296,7 +298,21 @@ Thd_ndb::Thd_ndb() Thd_ndb::~Thd_ndb() { if (ndb) { #ifndef DBUG_OFF Ndb::Free_list_usage tmp; tmp.m_name= 0; while (ndb->get_free_list_usage(&tmp)) { uint leaked= (uint) tmp.m_created - tmp.m_free; if (leaked) fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n", leaked, tmp.m_name, (leaked == 1)?"":"'s", (leaked == 1)?"has":"have"); } #endif delete ndb; } ndb= NULL; changed_tables.empty(); } Loading Loading @@ -3316,15 +3332,18 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) DBUG_PRINT("info", ("Table schema version: %d", tab->getObjectVersion())); } if (m_table != (void *)tab || m_table_version < tab->getObjectVersion()) if (m_table != (void *)tab) { /* The table has been altered, refresh the index list */ build_index_list(ndb, table, ILBP_OPEN); m_table= (void *)tab; m_table_version = tab->getObjectVersion(); } else if (m_table_version < tab->getObjectVersion()) { /* The table has been altered, caller has to retry */ DBUG_RETURN(my_errno= HA_ERR_TABLE_DEF_CHANGED); } m_table_info= tab_info; } no_uncommitted_rows_init(thd); Loading Loading @@ -4862,7 +4881,21 @@ bool ndbcluster_end() (void) pthread_mutex_unlock(&LOCK_ndb_util_thread); if (g_ndb) { #ifndef DBUG_OFF Ndb::Free_list_usage tmp; tmp.m_name= 0; while (g_ndb->get_free_list_usage(&tmp)) { uint leaked= (uint) tmp.m_created - tmp.m_free; if (leaked) fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n", leaked, tmp.m_name, (leaked == 1)?"":"'s", (leaked == 1)?"has":"have"); } #endif delete g_ndb; } g_ndb= NULL; if (g_ndb_cluster_connection) delete g_ndb_cluster_connection; Loading