Loading storage/ndb/include/kernel/signaldata/DictTabInfo.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,10 @@ public: Undofile = 23 ///< Undofile }; // used 1) until type BlobTable added 2) in upgrade code static bool isBlobTableName(const char* name, Uint32* ptab_id = 0, Uint32* pcol_no = 0); static inline bool isTable(int tableType) { return Loading storage/ndb/include/ndbapi/NdbDictionary.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -1602,6 +1602,12 @@ public: const Table * getTable(const char * name) const; #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL /** * Given main table, get blob table. */ const Table * getBlobTable(const Table *, const char * col_name); const Table * getBlobTable(const Table *, Uint32 col_no); /* * Save a table definition in dictionary cache * @param table Object to put into cache Loading storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -260,3 +260,33 @@ DictFilegroupInfo::File::init(){ FileSizeLo = 0; FileFreeExtents = 0; } // blob table name hack bool DictTabInfo::isBlobTableName(const char* name, Uint32* ptab_id, Uint32* pcol_no) { const char* const prefix = "NDB$BLOB_"; const char* s = strrchr(name, table_name_separator); s = (s == NULL ? name : s + 1); if (strncmp(s, prefix, strlen(prefix)) != 0) return false; s += strlen(prefix); uint i, n; for (i = 0, n = 0; '0' <= s[i] && s[i] <= '9'; i++) n = 10 * n + (s[i] - '0'); if (i == 0 || s[i] != '_') return false; const uint tab_id = n; s = &s[i + 1]; for (i = 0, n = 0; '0' <= s[i] && s[i] <= '9'; i++) n = 10 * n + (s[i] - '0'); if (i == 0 || s[i] != 0) return false; const uint col_no = n; if (ptab_id) *ptab_id = tab_id; if (pcol_no) *pcol_no = col_no; return true; } storage/ndb/src/ndbapi/DictCache.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ static NdbTableImpl f_altered_table; Ndb_local_table_info * Ndb_local_table_info::create(NdbTableImpl *table_impl, Uint32 sz) { assert(! is_ndb_blob_table(table_impl)); Uint32 tot_size= sizeof(Ndb_local_table_info) - sizeof(Uint64) + ((sz+7) & ~7); // round to Uint64 void *data= malloc(tot_size); Loading @@ -44,6 +45,7 @@ void Ndb_local_table_info::destroy(Ndb_local_table_info *info) Ndb_local_table_info::Ndb_local_table_info(NdbTableImpl *table_impl) { assert(! is_ndb_blob_table(table_impl)); m_table_impl= table_impl; } Loading @@ -61,18 +63,21 @@ LocalDictCache::~LocalDictCache(){ Ndb_local_table_info * LocalDictCache::get(const char * name){ assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); return m_tableHash.getData(name, len); } void LocalDictCache::put(const char * name, Ndb_local_table_info * tab_info){ assert(! is_ndb_blob_table(name)); const Uint32 id = tab_info->m_table_impl->m_id; m_tableHash.insertKey(name, strlen(name), id, tab_info); } void LocalDictCache::drop(const char * name){ assert(! is_ndb_blob_table(name)); Ndb_local_table_info *info= m_tableHash.deleteKey(name, strlen(name)); DBUG_ASSERT(info != 0); Ndb_local_table_info::destroy(info); Loading Loading @@ -142,6 +147,7 @@ GlobalDictCache::get(const char * name) { DBUG_ENTER("GlobalDictCache::get"); DBUG_PRINT("enter", ("name: %s", name)); assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * versions = 0; Loading Loading @@ -196,6 +202,7 @@ GlobalDictCache::put(const char * name, NdbTableImpl * tab) tab ? tab->m_internalName.c_str() : "tab NULL", tab ? tab->m_version & 0xFFFFFF : 0, tab ? tab->m_version >> 24 : 0)); assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * vers = m_tableHash.getData(name, len); Loading Loading @@ -261,6 +268,7 @@ GlobalDictCache::drop(NdbTableImpl * tab) { DBUG_ENTER("GlobalDictCache::drop"); DBUG_PRINT("enter", ("internal_name: %s", tab->m_internalName.c_str())); assert(! is_ndb_blob_table(tab)); unsigned i; const Uint32 len = strlen(tab->m_internalName.c_str()); Loading Loading @@ -316,6 +324,7 @@ GlobalDictCache::release(NdbTableImpl * tab) { DBUG_ENTER("GlobalDictCache::release"); DBUG_PRINT("enter", ("internal_name: %s", tab->m_internalName.c_str())); assert(! is_ndb_blob_table(tab)); unsigned i; const Uint32 len = strlen(tab->m_internalName.c_str()); Loading Loading @@ -365,6 +374,7 @@ GlobalDictCache::alter_table_rep(const char * name, Uint32 tableVersion, bool altered) { assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * vers = m_tableHash.getData(name, len); Loading storage/ndb/src/ndbapi/Ndb.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -754,7 +754,7 @@ Ndb::getAutoIncrementValue(const char* aTableName, Uint32 cacheSize) BaseString internal_tabname(internalize_table_name(aTableName)); Ndb_local_table_info *info= theDictionary->get_local_table_info(internal_tabname, false); theDictionary->get_local_table_info(internal_tabname); if (info == 0) DBUG_RETURN(~(Uint64)0); const NdbTableImpl *table= info->m_table_impl; Loading Loading @@ -846,7 +846,7 @@ Ndb::setAutoIncrementValue(const char* aTableName, Uint64 val, bool increase) BaseString internal_tabname(internalize_table_name(aTableName)); Ndb_local_table_info *info= theDictionary->get_local_table_info(internal_tabname, false); theDictionary->get_local_table_info(internal_tabname); if (info == 0) { theError= theDictionary->getNdbError(); DBUG_RETURN(false); Loading Loading
storage/ndb/include/kernel/signaldata/DictTabInfo.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,10 @@ public: Undofile = 23 ///< Undofile }; // used 1) until type BlobTable added 2) in upgrade code static bool isBlobTableName(const char* name, Uint32* ptab_id = 0, Uint32* pcol_no = 0); static inline bool isTable(int tableType) { return Loading
storage/ndb/include/ndbapi/NdbDictionary.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -1602,6 +1602,12 @@ public: const Table * getTable(const char * name) const; #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL /** * Given main table, get blob table. */ const Table * getBlobTable(const Table *, const char * col_name); const Table * getBlobTable(const Table *, Uint32 col_no); /* * Save a table definition in dictionary cache * @param table Object to put into cache Loading
storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -260,3 +260,33 @@ DictFilegroupInfo::File::init(){ FileSizeLo = 0; FileFreeExtents = 0; } // blob table name hack bool DictTabInfo::isBlobTableName(const char* name, Uint32* ptab_id, Uint32* pcol_no) { const char* const prefix = "NDB$BLOB_"; const char* s = strrchr(name, table_name_separator); s = (s == NULL ? name : s + 1); if (strncmp(s, prefix, strlen(prefix)) != 0) return false; s += strlen(prefix); uint i, n; for (i = 0, n = 0; '0' <= s[i] && s[i] <= '9'; i++) n = 10 * n + (s[i] - '0'); if (i == 0 || s[i] != '_') return false; const uint tab_id = n; s = &s[i + 1]; for (i = 0, n = 0; '0' <= s[i] && s[i] <= '9'; i++) n = 10 * n + (s[i] - '0'); if (i == 0 || s[i] != 0) return false; const uint col_no = n; if (ptab_id) *ptab_id = tab_id; if (pcol_no) *pcol_no = col_no; return true; }
storage/ndb/src/ndbapi/DictCache.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ static NdbTableImpl f_altered_table; Ndb_local_table_info * Ndb_local_table_info::create(NdbTableImpl *table_impl, Uint32 sz) { assert(! is_ndb_blob_table(table_impl)); Uint32 tot_size= sizeof(Ndb_local_table_info) - sizeof(Uint64) + ((sz+7) & ~7); // round to Uint64 void *data= malloc(tot_size); Loading @@ -44,6 +45,7 @@ void Ndb_local_table_info::destroy(Ndb_local_table_info *info) Ndb_local_table_info::Ndb_local_table_info(NdbTableImpl *table_impl) { assert(! is_ndb_blob_table(table_impl)); m_table_impl= table_impl; } Loading @@ -61,18 +63,21 @@ LocalDictCache::~LocalDictCache(){ Ndb_local_table_info * LocalDictCache::get(const char * name){ assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); return m_tableHash.getData(name, len); } void LocalDictCache::put(const char * name, Ndb_local_table_info * tab_info){ assert(! is_ndb_blob_table(name)); const Uint32 id = tab_info->m_table_impl->m_id; m_tableHash.insertKey(name, strlen(name), id, tab_info); } void LocalDictCache::drop(const char * name){ assert(! is_ndb_blob_table(name)); Ndb_local_table_info *info= m_tableHash.deleteKey(name, strlen(name)); DBUG_ASSERT(info != 0); Ndb_local_table_info::destroy(info); Loading Loading @@ -142,6 +147,7 @@ GlobalDictCache::get(const char * name) { DBUG_ENTER("GlobalDictCache::get"); DBUG_PRINT("enter", ("name: %s", name)); assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * versions = 0; Loading Loading @@ -196,6 +202,7 @@ GlobalDictCache::put(const char * name, NdbTableImpl * tab) tab ? tab->m_internalName.c_str() : "tab NULL", tab ? tab->m_version & 0xFFFFFF : 0, tab ? tab->m_version >> 24 : 0)); assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * vers = m_tableHash.getData(name, len); Loading Loading @@ -261,6 +268,7 @@ GlobalDictCache::drop(NdbTableImpl * tab) { DBUG_ENTER("GlobalDictCache::drop"); DBUG_PRINT("enter", ("internal_name: %s", tab->m_internalName.c_str())); assert(! is_ndb_blob_table(tab)); unsigned i; const Uint32 len = strlen(tab->m_internalName.c_str()); Loading Loading @@ -316,6 +324,7 @@ GlobalDictCache::release(NdbTableImpl * tab) { DBUG_ENTER("GlobalDictCache::release"); DBUG_PRINT("enter", ("internal_name: %s", tab->m_internalName.c_str())); assert(! is_ndb_blob_table(tab)); unsigned i; const Uint32 len = strlen(tab->m_internalName.c_str()); Loading Loading @@ -365,6 +374,7 @@ GlobalDictCache::alter_table_rep(const char * name, Uint32 tableVersion, bool altered) { assert(! is_ndb_blob_table(name)); const Uint32 len = strlen(name); Vector<TableVersion> * vers = m_tableHash.getData(name, len); Loading
storage/ndb/src/ndbapi/Ndb.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -754,7 +754,7 @@ Ndb::getAutoIncrementValue(const char* aTableName, Uint32 cacheSize) BaseString internal_tabname(internalize_table_name(aTableName)); Ndb_local_table_info *info= theDictionary->get_local_table_info(internal_tabname, false); theDictionary->get_local_table_info(internal_tabname); if (info == 0) DBUG_RETURN(~(Uint64)0); const NdbTableImpl *table= info->m_table_impl; Loading Loading @@ -846,7 +846,7 @@ Ndb::setAutoIncrementValue(const char* aTableName, Uint64 val, bool increase) BaseString internal_tabname(internalize_table_name(aTableName)); Ndb_local_table_info *info= theDictionary->get_local_table_info(internal_tabname, false); theDictionary->get_local_table_info(internal_tabname); if (info == 0) { theError= theDictionary->getNdbError(); DBUG_RETURN(false); Loading