summaryrefslogtreecommitdiff
path: root/cpp/src/XMLTransform
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/XMLTransform')
-rw-r--r--cpp/src/XMLTransform/.depend4
-rw-r--r--cpp/src/XMLTransform/Makefile4
-rw-r--r--cpp/src/XMLTransform/TransformDB.cpp97
-rw-r--r--cpp/src/XMLTransform/XMLTransform.cpp135
-rw-r--r--cpp/src/XMLTransform/xmltransform.dsp4
-rw-r--r--cpp/src/XMLTransform/xmltransformC.dsp4
6 files changed, 122 insertions, 126 deletions
diff --git a/cpp/src/XMLTransform/.depend b/cpp/src/XMLTransform/.depend
index 9e5c87f1736..2f8044b68a5 100644
--- a/cpp/src/XMLTransform/.depend
+++ b/cpp/src/XMLTransform/.depend
@@ -1,3 +1,3 @@
ErrorReporter.o: ErrorReporter.cpp ../../include/IceUtil/Config.h ../XMLTransform/ErrorReporter.h ../../include/Ice/Xerces.h
-XMLTransform.o: XMLTransform.cpp ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Config.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Application.h ../../include/XMLTransform/XMLTransform.h ../../include/Freeze/DB.h ../../include/Freeze/DBException.h ../../include/Freeze/DBF.h ../../include/Freeze/EvictorF.h ../../include/Freeze/StrategyF.h ../../include/IceUtil/OutputUtil.h ../../include/Ice/Xerces.h ../XMLTransform/ErrorReporter.h
-TransformDB.o: TransformDB.cpp ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Application.h ../../include/XMLTransform/XMLTransform.h ../../include/Freeze/DB.h ../../include/Freeze/DBException.h ../../include/Freeze/DBF.h ../../include/Freeze/EvictorF.h ../../include/Freeze/StrategyF.h ../../include/IceUtil/OutputUtil.h ../../include/Ice/Xerces.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/Evictor.h ../../include/Freeze/ObjectRecord.h ../../include/Freeze/Strategy.h ../../include/Freeze/Map.h
+XMLTransform.o: XMLTransform.cpp ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Config.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Application.h ../../include/XMLTransform/XMLTransform.h ../../include/IceUtil/OutputUtil.h ../../include/Ice/Xerces.h ../XMLTransform/ErrorReporter.h
+TransformDB.o: TransformDB.cpp ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/StatsF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocator.h ../../include/Ice/IdentityUtil.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Application.h ../../include/XMLTransform/XMLTransform.h ../../include/IceUtil/OutputUtil.h ../../include/Ice/Xerces.h
diff --git a/cpp/src/XMLTransform/Makefile b/cpp/src/XMLTransform/Makefile
index 63cd4ddb048..52f40ab5f91 100644
--- a/cpp/src/XMLTransform/Makefile
+++ b/cpp/src/XMLTransform/Makefile
@@ -35,7 +35,7 @@ SDIR = $(slicedir)/XMLTransform
include $(top_srcdir)/config/Make.rules
-CPPFLAGS := -I.. $(CPPFLAGS) -DXML_TRANSFORM_API_EXPORTS $(XERCESC_FLAGS)
+CPPFLAGS := -I.. $(CPPFLAGS) -DXML_TRANSFORM_API_EXPORTS $(XERCESC_FLAGS) $(DB_FLAGS)
$(libdir)/$(LIBFILENAME): $(OBJS)
rm -f $@
@@ -51,7 +51,7 @@ $(libdir)/$(LIBNAME): $(libdir)/$(SONAME)
$(TRANSFORM_DB): $(TRANSFORM_OBJS) $(libdir)/$(LIBNAME)
rm -f $@
- $(CXX) $(LDFLAGS) -o $@ $(TRANSFORM_OBJS) -lFreeze -lIceXML -lXMLTransform $(LIBS) $(XERCESC_LIBS) $(DB_LIBS)
+ $(CXX) $(LDFLAGS) -o $@ $(TRANSFORM_OBJS) -lIceXML -lXMLTransform $(LIBS) $(XERCESC_LIBS) $(DB_LIBS)
clean::
rm -f $(TRANSFORM_DB)
diff --git a/cpp/src/XMLTransform/TransformDB.cpp b/cpp/src/XMLTransform/TransformDB.cpp
index ff7825a7176..e517b249aa8 100644
--- a/cpp/src/XMLTransform/TransformDB.cpp
+++ b/cpp/src/XMLTransform/TransformDB.cpp
@@ -14,7 +14,14 @@
#include <Ice/Ice.h>
#include <XMLTransform/XMLTransform.h>
-#include <Freeze/Freeze.h>
+#include <db_cxx.h>
+#include <sys/stat.h>
+
+#ifdef _WIN32
+# define FREEZE_DB_MODE 0
+#else
+# define FREEZE_DB_MODE (S_IRUSR | S_IWUSR)
+#endif
using namespace std;
@@ -41,8 +48,7 @@ int
main(int argc, char* argv[])
{
Ice::CommunicatorPtr communicator;
- Freeze::DBEnvironmentPtr dbEnv;
- Freeze::DBPtr db;
+
bool failure = false;
try
@@ -169,8 +175,22 @@ main(int argc, char* argv[])
try
{
- dbEnv = Freeze::initializeWithTxn(communicator, argv[1]);
- db = dbEnv->openDBWithTxn(0, argv[2], false);
+ DbEnv dbEnv(0);
+ dbEnv.set_flags(DB_TXN_NOSYNC, true);
+
+ u_int32_t flags = DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN |
+ DB_PRIVATE | DB_THREAD;
+
+ //
+ // TODO: DB_RECOVER_FATAL option
+ //
+ flags |= DB_RECOVER | DB_CREATE;
+
+ dbEnv.open(argv[1], flags, FREEZE_DB_MODE);
+
+ Db db(&dbEnv, 0);
+ flags = DB_AUTO_COMMIT | DB_THREAD;
+ db.open(0, argv[2], 0, DB_UNKNOWN, flags, FREEZE_DB_MODE);
XMLTransform::DBTransformer transformer(dbEnv, db, loadOld, loadNew, pathOld, pathNew, force);
@@ -200,15 +220,19 @@ main(int argc, char* argv[])
{
transformer.transform(argv[3], argv[4]);
}
+
+ db.close(0);
+ dbEnv.close(0);
+
}
- catch(const Freeze::DBNotFoundException&)
- {
- cout << argv[0] << ": database `" << argv[2] << "' not found in environment `" << argv[1] << "'" << endl;
- failure = true;
- }
- catch(const Freeze::DBException& ex)
+ catch(const DbException& ex)
{
- cout << argv[0] << ": database failure: " << ex << ": " << ex.message << endl;
+ //
+ // Note: from Berkeley DB 4.1 on, ~Db and ~DbEnv close their respective
+ // handles if not done before.
+ //
+
+ cout << argv[0] << ": database failure: " << ex.what() << endl;
failure = true;
}
}
@@ -218,54 +242,7 @@ main(int argc, char* argv[])
failure = true;
}
- if(db)
- {
- try
- {
- db->close();
- }
- catch(const Freeze::DBException& ex)
- {
- cerr << argv[0] << ": " << ex << ": " << ex.message << endl;
- failure = true;
- }
- catch(const Ice::Exception& ex)
- {
- cerr << argv[0] << ": " << ex << endl;
- failure = true;
- }
- catch(...)
- {
- cerr << argv[0] << ": unknown exception" << endl;
- failure = true;
- }
- db = 0;
- }
-
- if(dbEnv)
- {
- try
- {
- dbEnv->close();
- }
- catch(const Freeze::DBException& ex)
- {
- cerr << argv[0] << ": " << ex << ": " << ex.message << endl;
- failure = true;
- }
- catch(const Ice::Exception& ex)
- {
- cerr << argv[0] << ": " << ex << endl;
- failure = true;
- }
- catch(...)
- {
- cerr << argv[0] << ": unknown exception" << endl;
- failure = true;
- }
- dbEnv = 0;
- }
-
+
try
{
communicator->destroy();
diff --git a/cpp/src/XMLTransform/XMLTransform.cpp b/cpp/src/XMLTransform/XMLTransform.cpp
index 9a82b790a44..489be2fb76f 100644
--- a/cpp/src/XMLTransform/XMLTransform.cpp
+++ b/cpp/src/XMLTransform/XMLTransform.cpp
@@ -21,8 +21,7 @@
#include <Ice/Ice.h>
#include <XMLTransform/XMLTransform.h>
#include <XMLTransform/ErrorReporter.h>
-#include <Freeze/DB.h>
-
+#include <db_cxx.h>
#include <Ice/Xerces.h>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
@@ -48,7 +47,6 @@
#endif
using namespace std;
-using namespace Freeze;
using namespace XMLTransform;
//
@@ -2888,7 +2886,7 @@ XMLTransform::Transformer::transform(::IceUtil::XMLOutput& os, ICE_XERCES_NS DOM
}
}
-XMLTransform::DBTransformer::DBTransformer(const DBEnvironmentPtr& dbEnv, const DBPtr& db,
+XMLTransform::DBTransformer::DBTransformer(DbEnv& dbEnv, Db& db,
const Ice::StringSeq& loadOld, const Ice::StringSeq& loadNew,
const Ice::StringSeq& pathOld, const Ice::StringSeq& pathNew,
bool force) :
@@ -2921,9 +2919,15 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
parser.setDoNamespaces(true);
parser.setErrorHandler(&errReporter);
- DBCursorPtr cursor;
- DBTransactionPtr txn;
string reason;
+ vector<Dbt> keys(1);
+ keys[0].set_flags(DB_DBT_MALLOC);
+
+ Dbt value;
+ value.set_flags(DB_DBT_REALLOC);
+
+ DbTxn* txn = 0;
+
try
{
Transformer transformer(_loadOld, _loadNew, _pathOld, _pathNew, oldSchema, newSchema);
@@ -2942,25 +2946,33 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
// we can't use a cursor to perform the changes. We collect all of the
// keys first, then update the records.
//
- vector<Key> keys;
- cursor = _db->getCursor();
- do
- {
- Key k;
- Value v;
- cursor->curr(k, v);
- keys.push_back(k);
- }
- while(cursor->next());
- cursor->close();
- cursor = 0;
+ {
+ Dbc* dbc = 0;
+ _db.cursor(0, &dbc, 0);
+
+ //
+ // Not interested in value
+ //
+ Dbt dummy;
+ dummy.set_flags(DB_DBT_USERMEM | DB_DBT_PARTIAL);
+
+ while(dbc->get(&keys[keys.size() - 1], &dummy, DB_NEXT) == 0)
+ {
+ size_t index = keys.size();
+ keys.resize(index + 1);
+ keys[index].set_flags(DB_DBT_MALLOC);
+ }
+ keys.resize(keys.size() - 1);
+ dbc->close();
+ }
- txn = _dbEnv->startTransaction();
+ _dbEnv.txn_begin(0, &txn, 0);
+
+ vector<Dbt>::iterator p;
- vector<Key>::const_iterator p;
for(p = keys.begin(); p != keys.end(); ++p)
{
- const Key& k = *p;
+ Dbt& k = *p;
try
{
@@ -2969,7 +2981,7 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
//
string fullKey;
fullKey.append(header);
- fullKey.append(reinterpret_cast<const char*>(&k[0]), k.size());
+ fullKey.append(static_cast<const char*>(k.get_data()), k.get_size());
fullKey.append(footer);
ICE_XERCES_NS MemBufInputSource keySource((const XMLByte*)fullKey.data(), static_cast<unsigned int>(fullKey.size()), "key");
parser.parse(keySource);
@@ -2978,19 +2990,18 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
ostringstream keyStream;
IceUtil::XMLOutput keyOut(keyStream);
transformer.transform(keyOut, keyDoc, "Key", _force, false);
-
- Key newKey;
+
const std::string& keyStr = keyStream.str();
- newKey.resize(keyStr.size());
- std::copy(keyStr.begin(), keyStr.end(), newKey.begin());
+ Dbt newKey(const_cast<char*>(keyStr.data()), keyStr.size());
//
// Transform value
//
- Value value = _db->getWithTxn(txn, k);
+ _db.get(txn, &k, &value, 0);
+
string fullValue;
fullValue.append(header);
- fullValue.append(reinterpret_cast<const char*>(&value[0]), value.size());
+ fullValue.append(static_cast<const char*>(value.get_data()), value.get_size());
fullValue.append(footer);
ICE_XERCES_NS MemBufInputSource valueSource((const XMLByte*)fullValue.data(),
static_cast<unsigned int>(fullValue.size()),
@@ -3002,24 +3013,21 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
IceUtil::XMLOutput valueOut(valueStream);
transformer.transform(valueOut, valueDoc, "Value", _force, false);
- Value newValue;
const std::string& valueStr = valueStream.str();
- newValue.resize(valueStr.size());
- std::copy(valueStr.begin(), valueStr.end(), newValue.begin());
-
+ Dbt newValue(const_cast<char*>(valueStr.data()), valueStr.size());
//
// Update database - only insert new key,value pair if the transformed
// key doesn't match an existing key.
//
- _db->delWithTxn(txn, k);
- if(_db->containsWithTxn(txn, newKey))
- {
+ _db.del(txn, &k, 0);
+
+ if(_db.put(txn, &newKey, &newValue, DB_NOOVERWRITE) != 0)
+ {
reason = "transformed key matches an existing record:\n" + keyStr;
txn->abort();
- txn = 0;
+ txn = 0;
break;
}
- _db->putWithTxn(txn, newKey, newValue);
}
catch(const MissingTypeException&)
{
@@ -3029,7 +3037,7 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
//
if(_force)
{
- _db->delWithTxn(txn, k);
+ _db.del(txn, &k, 0);
}
else
{
@@ -3038,16 +3046,12 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
}
}
- if(txn)
+ if(txn != 0)
{
- txn->commit();
+ txn->commit(0);
txn = 0;
}
}
- catch(const DBNotFoundException&)
- {
- // Database is empty
- }
catch(const ICE_XERCES_NS XMLException& ex)
{
reason = "XML exception: " + toString(ex.getMessage());
@@ -3062,29 +3066,44 @@ XMLTransform::DBTransformer::transform(ICE_XERCES_NS DOMDocument* oldSchema, ICE
out << "DOM exception (" << ex.code << ") " << toString(ex.msg);
reason = out.str();
}
+ catch(const DbException& ex)
+ {
+ ostringstream out;
+ out << "DbException: " << ex.what();
+ reason = out.str();
+ }
catch(...)
{
- if(cursor)
- {
- cursor->close();
- }
- if(txn)
- {
- txn->abort();
- }
- throw;
+ //
+ // Clean up
+ //
+ for(vector<Dbt>::iterator p = keys.begin(); p != keys.end(); p++)
+ {
+ free(p->get_data());
+ }
+ free(value.get_data());
+
+ if(txn != 0)
+ {
+ txn->abort();
+ }
+ throw;
}
- if(cursor)
+ //
+ // Clean up
+ //
+ for(vector<Dbt>::iterator p = keys.begin(); p != keys.end(); p++)
{
- cursor->close();
+ free(p->get_data());
}
-
- if(txn)
+ free(value.get_data());
+ if(txn != 0)
{
- txn->abort();
+ txn->abort();
}
+
if(!reason.empty())
{
TransformException ex(__FILE__, __LINE__);
diff --git a/cpp/src/XMLTransform/xmltransform.dsp b/cpp/src/XMLTransform/xmltransform.dsp
index 262dafce7fa..97df0dcfc78 100644
--- a/cpp/src/XMLTransform/xmltransform.dsp
+++ b/cpp/src/XMLTransform/xmltransform.dsp
@@ -54,7 +54,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 xerces-c_2.lib /nologo /dll /machine:I386 /out:"Release/xmltransform11.dll" /implib:"Release/xmltransform.lib" /libpath:"../../../lib"
+# ADD LINK32 xerces-c_2.lib libdb41.lib /nologo /dll /machine:I386 /out:"Release/xmltransform11.dll" /implib:"Release/xmltransform.lib" /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
OutDir=.\Release
@@ -87,7 +87,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386
-# ADD LINK32 xerces-c_2D.lib /nologo /dll /debug /machine:I386 /out:"Debug/xmltransform11d.dll" /implib:"Debug/xmltransformd.lib" /libpath:"../../../lib"
+# ADD LINK32 xerces-c_2D.lib libdb41d.lib /nologo /dll /debug /machine:I386 /out:"Debug/xmltransform11d.dll" /implib:"Debug/xmltransformd.lib" /libpath:"../../../lib"
# SUBTRACT LINK32 /pdb:none /nodefaultlib
# Begin Special Build Tool
OutDir=.\Debug
diff --git a/cpp/src/XMLTransform/xmltransformC.dsp b/cpp/src/XMLTransform/xmltransformC.dsp
index 83772235df2..388686c62c3 100644
--- a/cpp/src/XMLTransform/xmltransformC.dsp
+++ b/cpp/src/XMLTransform/xmltransformC.dsp
@@ -51,7 +51,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 setargv.obj /nologo /subsystem:console /machine:I386 /out:"Release/transformdb.exe" /libpath:"../../../lib"
+# ADD LINK32 setargv.obj libdb41.lib /nologo /subsystem:console /machine:I386 /out:"Release/transformdb.exe" /libpath:"../../../lib"
# SUBTRACT LINK32 /debug /nodefaultlib
# Begin Special Build Tool
OutDir=.\Release
@@ -83,7 +83,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"Debug/transformdb.exe" /pdbtype:sept /libpath:"../../../lib"
+# ADD LINK32 setargv.obj libdb41d.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/transformdb.exe" /pdbtype:sept /libpath:"../../../lib"
# SUBTRACT LINK32 /nodefaultlib
# Begin Special Build Tool
OutDir=.\Debug