diff options
author | joreland@mysql.com <> | 2004-12-09 13:36:23 +0100 |
---|---|---|
committer | joreland@mysql.com <> | 2004-12-09 13:36:23 +0100 |
commit | 4614cdfad90fbeee35f2dda565e86d0a4952db2e (patch) | |
tree | c5f6b8420836069b90b96c0e8442ec3e261c235b /ndb/tools | |
parent | 0ab8c723fa57bde1fd6d844fc4373c32f286395a (diff) | |
download | mariadb-git-4614cdfad90fbeee35f2dda565e86d0a4952db2e.tar.gz |
bug#6995 - fixed so that ndb_restore 4.1.8 can read files
created by 4.1.7 as bugfix changed binary format
Diffstat (limited to 'ndb/tools')
-rw-r--r-- | ndb/tools/restore/Restore.cpp | 35 | ||||
-rw-r--r-- | ndb/tools/restore/Restore.hpp | 4 | ||||
-rw-r--r-- | ndb/tools/restore/main.cpp | 9 |
3 files changed, 42 insertions, 6 deletions
diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp index de769b4c880..277cdc72532 100644 --- a/ndb/tools/restore/Restore.cpp +++ b/ndb/tools/restore/Restore.cpp @@ -192,14 +192,15 @@ RestoreMetaData::readGCPEntry() { return true; } -TableS::TableS(NdbTableImpl* tableImpl) +TableS::TableS(Uint32 version, NdbTableImpl* tableImpl) : m_dictTable(tableImpl) { m_dictTable = tableImpl; m_noOfNullable = m_nullBitmaskSize = 0; m_auto_val_id= ~(Uint32)0; m_max_auto_val= 0; - + backupVersion = version; + for (int i = 0; i < tableImpl->getNoOfColumns(); i++) createAttr(tableImpl->getColumn(i)); } @@ -226,11 +227,10 @@ RestoreMetaData::parseTableDescriptor(const Uint32 * data, Uint32 len) debug << "parseTableInfo " << tableImpl->getName() << " done" << endl; - TableS * table = new TableS(tableImpl); + TableS * table = new TableS(m_fileHeader.NdbVersion, tableImpl); if(table == NULL) { return false; } - table->setBackupVersion(m_fileHeader.NdbVersion); debug << "Parsed table id " << table->getTableId() << endl; debug << "Parsed table #attr " << table->getNoOfAttributes() << endl; @@ -334,6 +334,27 @@ RestoreDataIterator::getNextTuple(int & res) Uint32 *buf_ptr = (Uint32*)_buf_ptr, *ptr = buf_ptr; ptr += m_currentTable->m_nullBitmaskSize; Uint32 i; + for(i= 0; i < m_currentTable->m_fixedKeys.size(); i++){ + assert(ptr < buf_ptr + dataLength); + + const Uint32 attrId = m_currentTable->m_fixedKeys[i]->attrId; + + AttributeData * attr_data = m_tuple.getData(attrId); + const AttributeDesc * attr_desc = m_tuple.getDesc(attrId); + + const Uint32 sz = attr_desc->getSizeInWords(); + + attr_data->null = false; + attr_data->void_value = ptr; + + if(!Twiddle(attr_desc, attr_data)) + { + res = -1; + return NULL; + } + ptr += sz; + } + for(i = 0; i < m_currentTable->m_fixedAttribs.size(); i++){ assert(ptr < buf_ptr + dataLength); @@ -678,6 +699,12 @@ void TableS::createAttr(NdbDictionary::Column *column) if (d->m_column->getAutoIncrement()) m_auto_val_id= d->attrId; + if(d->m_column->getPrimaryKey() && backupVersion <= MAKE_VERSION(4,1,7)) + { + m_fixedKeys.push_back(d); + return; + } + if(!d->m_column->getNullable()) { m_fixedAttribs.push_back(d); diff --git a/ndb/tools/restore/Restore.hpp b/ndb/tools/restore/Restore.hpp index a7d4fc174c7..e0b06c1774c 100644 --- a/ndb/tools/restore/Restore.hpp +++ b/ndb/tools/restore/Restore.hpp @@ -123,6 +123,8 @@ class TableS { Uint32 schemaVersion; Uint32 backupVersion; Vector<AttributeDesc *> allAttributesDesc; + Vector<AttributeDesc *> m_fixedKeys; + //Vector<AttributeDesc *> m_variableKey; Vector<AttributeDesc *> m_fixedAttribs; Vector<AttributeDesc *> m_variableAttribs; @@ -138,7 +140,7 @@ class TableS { public: class NdbDictionary::Table* m_dictTable; - TableS (class NdbTableImpl* dictTable); + TableS (Uint32 version, class NdbTableImpl* dictTable); ~TableS(); Uint32 getTableId() const { diff --git a/ndb/tools/restore/main.cpp b/ndb/tools/restore/main.cpp index 482212911cb..575cd9b3b2f 100644 --- a/ndb/tools/restore/main.cpp +++ b/ndb/tools/restore/main.cpp @@ -247,11 +247,18 @@ main(int argc, char** argv) ndbout << "Failed to read " << metaData.getFilename() << endl << endl; return -1; } + + const BackupFormat::FileHeader & tmp = metaData.getFileHeader(); + const Uint32 version = tmp.NdbVersion; + + ndbout << "Ndb version in backup files: " + << getVersionString(version, 0) << endl; + /** * check wheater we can restore the backup (right version). */ int res = metaData.loadContent(); - + if (res == 0) { ndbout_c("Restore: Failed to load content"); |