diff options
Diffstat (limited to 'cpp/src/FreezeScript/transformdb.cpp')
-rwxr-xr-x | cpp/src/FreezeScript/transformdb.cpp | 109 |
1 files changed, 75 insertions, 34 deletions
diff --git a/cpp/src/FreezeScript/transformdb.cpp b/cpp/src/FreezeScript/transformdb.cpp index 6a6bd5fe7f5..f4583394b5c 100755 --- a/cpp/src/FreezeScript/transformdb.cpp +++ b/cpp/src/FreezeScript/transformdb.cpp @@ -184,8 +184,7 @@ transformDb(bool evictor, const Ice::CommunicatorPtr& communicator, } Freeze::Catalog catalogNew(connectionNew, Freeze::catalogName()); - Freeze::CatalogData catalogData; - catalogData.evictor = true; + Freeze::CatalogData catalogData = { true, "::Ice::Identity", "Object" }; catalogNew.put(Freeze::Catalog::value_type(dbName, catalogData)); } else @@ -308,6 +307,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator purgeObjects = opts.isSet("p"); catastrophicRecover = opts.isSet("c"); suppress = opts.isSet("w"); + if(opts.isSet("f")) { inputFile = opts.optArg("f"); @@ -490,7 +490,8 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator FreezeScript::TransformAnalyzer analyzer(oldUnit, newUnit, ignoreTypeChanges, out, missingTypes, analyzeErrors); const string evictorKeyName = "::Ice::Identity"; - const string evictorValueName = "::Freeze::ObjectRecord"; + const string oldEvictorValueName = "::Freeze::ObjectRecord"; + const string newEvictorValueName = "Object"; if(allDb) { @@ -503,8 +504,17 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator if(p->second.evictor) { - keyName = evictorKeyName; - valueName = evictorValueName; + keyName = p->second.key; + valueName = p->second.value; + + if(keyName.empty()) + { + keyName = evictorKeyName; + } + if(valueName.empty()) + { + valueName = oldEvictorValueName; + } } else { @@ -533,7 +543,20 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator cerr << appName << ": type `" << valueName << "' from database `" << p->first << "' not found in old Slice definitions" << endl; } - Slice::TypePtr newValueType = findType(newUnit, valueName); + + Slice::TypePtr newValueType; + if(p->second.evictor) + { + // + // The new evictor does not keep stats + // + newValueType = findType(newUnit, newEvictorValueName); + } + else + { + newValueType = findType(newUnit, valueName); + } + if(!newValueType) { cerr << appName << ": type `" << valueName << "' from database `" << p->first @@ -553,46 +576,44 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator { return EXIT_FAILURE; } - + analyzer.addDatabase(p->first, oldKeyType, newKeyType, oldValueType, newValueType); } } else { string oldKeyName, newKeyName, oldValueName, newValueName; - - if(evictor) - { - oldKeyName = newKeyName = evictorKeyName; - oldValueName = newValueName = evictorValueName; - } - else - { - string::size_type pos; - - if(keyTypeNames.empty() || valueTypeNames.empty()) - { - usage(appName); - return EXIT_FAILURE; - } - - pos = keyTypeNames.find(','); - if(pos == 0 || pos == keyTypeNames.size()) - { - usage(appName); - return EXIT_FAILURE; - } - if(pos == string::npos) - { - oldKeyName = keyTypeNames; - newKeyName = keyTypeNames; - } + + string::size_type pos; + + if(!evictor && (keyTypeNames.empty() || valueTypeNames.empty())) + { + usage(appName); + return EXIT_FAILURE; + } + + if(!keyTypeNames.empty()) + { + pos = keyTypeNames.find(','); + if(pos == 0 || pos == keyTypeNames.size()) + { + usage(appName); + return EXIT_FAILURE; + } + if(pos == string::npos) + { + oldKeyName = keyTypeNames; + newKeyName = keyTypeNames; + } else { oldKeyName = keyTypeNames.substr(0, pos); newKeyName = keyTypeNames.substr(pos + 1); } + } + if(!valueTypeNames.empty()) + { pos = valueTypeNames.find(','); if(pos == 0 || pos == valueTypeNames.size()) { @@ -610,6 +631,26 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator newValueName = valueTypeNames.substr(pos + 1); } } + + if(evictor) + { + if(oldKeyName.empty()) + { + oldKeyName = evictorKeyName; + } + if(newKeyName.empty()) + { + newKeyName = evictorKeyName; + } + if(oldValueName.empty()) + { + oldValueName = newEvictorValueName; + } + if(newValueName.empty()) + { + newValueName = newEvictorValueName; + } + } // // Look up the key and value types in the old and new Slice definitions. |