summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/transformdb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/FreezeScript/transformdb.cpp')
-rwxr-xr-xcpp/src/FreezeScript/transformdb.cpp109
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.