summaryrefslogtreecommitdiff
path: root/ndb/tools
diff options
context:
space:
mode:
authorjoreland@mysql.com <>2004-12-09 13:36:23 +0100
committerjoreland@mysql.com <>2004-12-09 13:36:23 +0100
commit4614cdfad90fbeee35f2dda565e86d0a4952db2e (patch)
treec5f6b8420836069b90b96c0e8442ec3e261c235b /ndb/tools
parent0ab8c723fa57bde1fd6d844fc4373c32f286395a (diff)
downloadmariadb-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.cpp35
-rw-r--r--ndb/tools/restore/Restore.hpp4
-rw-r--r--ndb/tools/restore/main.cpp9
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");