summaryrefslogtreecommitdiff
path: root/cpp/src/FreezeScript/Transformer.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2004-12-02 23:18:51 +0000
committerBernard Normier <bernard@zeroc.com>2004-12-02 23:18:51 +0000
commit7e5b25f64e832a9659dc054eef2935284c795a5a (patch)
tree4f9f3ce6eb8ec88d3455b8a07998ed4ab575ce9e /cpp/src/FreezeScript/Transformer.cpp
parentbzip2 fix (diff)
downloadice-7e5b25f64e832a9659dc054eef2935284c795a5a.tar.bz2
ice-7e5b25f64e832a9659dc054eef2935284c795a5a.tar.xz
ice-7e5b25f64e832a9659dc054eef2935284c795a5a.zip
Freeze catalogs
Diffstat (limited to 'cpp/src/FreezeScript/Transformer.cpp')
-rw-r--r--cpp/src/FreezeScript/Transformer.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/cpp/src/FreezeScript/Transformer.cpp b/cpp/src/FreezeScript/Transformer.cpp
index 46c0cd12539..171fc2b54f2 100644
--- a/cpp/src/FreezeScript/Transformer.cpp
+++ b/cpp/src/FreezeScript/Transformer.cpp
@@ -15,6 +15,8 @@
#include <FreezeScript/Functions.h>
#include <FreezeScript/Exception.h>
#include <FreezeScript/Util.h>
+#include <Freeze/Catalog.h>
+#include <Freeze/Initialize.h>
#include <IceXML/Parser.h>
#include <db_cxx.h>
@@ -61,6 +63,13 @@ struct TransformInfoI : public TransformInfo
Db* oldDb;
Db* newDb;
DbTxn* newDbTxn;
+
+ //
+ // Connection to the new environment; not null only if we want to write into the catalog
+ //
+ Freeze::ConnectionPtr connection;
+ string newDbName;
+
string facet;
bool purge;
ErrorReporterPtr errorReporter;
@@ -2085,6 +2094,21 @@ FreezeScript::DatabaseDescriptor::DatabaseDescriptor(const DescriptorPtr& parent
_info->newKeyType = findType(_info->newUnit, newKeyName);
_info->oldValueType = findType(_info->oldUnit, oldValueName);
_info->newValueType = findType(_info->newUnit, newValueName);
+
+ if(_info->connection != 0)
+ {
+ Freeze::Catalog catalog(_info->connection, Freeze::catalogName());
+ Freeze::CatalogData catalogData;
+ catalogData.evictor = false;
+ catalogData.key = _info->newKeyType->typeId();
+ catalogData.value = _info->newValueType->typeId();
+ catalog.put(Freeze::Catalog::value_type(_info->newDbName, catalogData));
+ }
+
+ //
+ // TODO: it looks like _info is not destroyed before the new dbEnv is closed.
+ //
+ _info->connection = 0;
}
void
@@ -2929,8 +2953,8 @@ FreezeScript::assignOrTransform(const DataPtr& dest, const DataPtr& src, bool co
void
FreezeScript::transformDatabase(const Ice::CommunicatorPtr& communicator,
const Slice::UnitPtr& oldUnit, const Slice::UnitPtr& newUnit,
- Db* oldDb, Db* newDb, DbTxn* newDbTxn, const string& facetName, bool purgeObjects,
- ostream& errors, bool suppress, istream& is)
+ Db* oldDb, Db* newDb, DbTxn* newDbTxn, Freeze::ConnectionPtr connection, const string& newDbName,
+ const string& facetName, bool purgeObjects, ostream& errors, bool suppress, istream& is)
{
TransformInfoIPtr info = new TransformInfoI;
info->communicator = communicator;
@@ -2939,6 +2963,8 @@ FreezeScript::transformDatabase(const Ice::CommunicatorPtr& communicator,
info->oldDb = oldDb;
info->newDb = newDb;
info->newDbTxn = newDbTxn;
+ info->connection = connection;
+ info->newDbName = newDbName;
info->facet = facetName;
info->purge = purgeObjects;
info->errorReporter = new ErrorReporter(errors, suppress);