diff --git a/Crypto/Crypto.progen b/Crypto/Crypto.progen index 769b622c4..d9b676d7a 100644 --- a/Crypto/Crypto.progen +++ b/Crypto/Crypto.progen @@ -30,5 +30,3 @@ vc.project.prebuild.release_static_md = xcopy /y ${openssl}\\build\\win${bits}\\ vc.project.prebuild.release_static_mt = xcopy /y ${openssl}\\build\\win${bits}\\lib\\release\\*.lib ..\\lib${dirbits}\\* 1>nul\nexit 0 vc.solution.create = true vc.solution.include = testsuite\\TestSuite -vc.solution.create = true -vc.solution.include = testsuite\\TestSuite diff --git a/Data/Data_x64_vs90.vcproj b/Data/Data_x64_vs90.vcproj index 87ca5e1a3..4703b9b53 100644 --- a/Data/Data_x64_vs90.vcproj +++ b/Data/Data_x64_vs90.vcproj @@ -1,35 +1,46 @@ + Keyword="Win32Proj" + TargetFrameworkVersion="0" + > + Name="x64" + /> - + + + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCPostBuildEventTool" + /> + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCManifestTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCAppVerifierTool" + /> + Name="VCPostBuildEventTool" + /> + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCPostBuildEventTool" + /> + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCPostBuildEventTool" + /> + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCPostBuildEventTool" + /> + CharacterSet="2" + > + Name="VCPreBuildEventTool" + /> + Name="VCCustomBuildTool" + /> + Name="VCXMLDataGeneratorTool" + /> + Name="VCWebServiceProxyGeneratorTool" + /> + Name="VCMIDLTool" + /> + /> + Name="VCManagedResourceCompilerTool" + /> + Name="VCResourceCompilerTool" + /> + Name="VCPreLinkEventTool" + /> + /> + Name="VCALinkTool" + /> + Name="VCXDCMakeTool" + /> + Name="VCBscMakeTool" + /> + Name="VCFxCopTool" + /> + Name="VCPostBuildEventTool" + /> - + + + Name="DataCore" + > + Name="Header Files" + > + RelativePath=".\include\Poco\Data\AbstractBinder.h" + > + + RelativePath=".\include\Poco\Data\AbstractBinding.h" + > + + RelativePath=".\include\Poco\Data\AbstractExtraction.h" + > + + RelativePath=".\include\Poco\Data\AbstractExtractor.h" + > + + RelativePath=".\include\Poco\Data\AbstractPreparation.h" + > + + RelativePath=".\include\Poco\Data\AbstractPreparator.h" + > + + RelativePath=".\include\Poco\Data\AbstractSessionImpl.h" + > + + RelativePath=".\include\Poco\Data\AutoTransaction.h" + > + + RelativePath=".\include\Poco\Data\Binding.h" + > + + RelativePath=".\include\Poco\Data\Bulk.h" + > + + RelativePath=".\include\Poco\Data\BulkBinding.h" + > + + RelativePath=".\include\Poco\Data\BulkExtraction.h" + > + + RelativePath=".\include\Poco\Data\Column.h" + > + + RelativePath=".\include\Poco\Data\Connector.h" + > + + RelativePath=".\include\Poco\Data\Constants.h" + > + + RelativePath=".\include\Poco\Data\Data.h" + > + + RelativePath=".\include\Poco\Data\DataException.h" + > + + RelativePath=".\include\Poco\Data\Date.h" + > + + RelativePath=".\include\Poco\Data\DynamicDateTime.h" + > + + RelativePath=".\include\Poco\Data\DynamicLOB.h" + > + + RelativePath=".\include\Poco\Data\Extraction.h" + > + + RelativePath=".\include\Poco\Data\Limit.h" + > + + RelativePath=".\include\Poco\Data\LOB.h" + > + + RelativePath=".\include\Poco\Data\LOBStream.h" + > + + RelativePath=".\include\Poco\Data\MetaColumn.h" + > + + RelativePath=".\include\Poco\Data\Position.h" + > + + RelativePath=".\include\Poco\data\Preparation.h" + > + + RelativePath=".\include\Poco\Data\Range.h" + > + + RelativePath=".\include\Poco\Data\RecordSet.h" + > + + RelativePath=".\include\Poco\Data\Row.h" + > + + RelativePath=".\include\Poco\Data\RowFilter.h" + > + + RelativePath=".\include\Poco\Data\RowFormatter.h" + > + + RelativePath=".\include\Poco\Data\RowIterator.h" + > + + RelativePath=".\include\Poco\Data\Session.h" + > + + RelativePath=".\include\Poco\Data\SessionFactory.h" + > + + RelativePath=".\include\Poco\Data\SessionImpl.h" + > + + RelativePath=".\include\Poco\Data\SimpleRowFormatter.h" + > + + RelativePath=".\include\Poco\Data\Statement.h" + > + + RelativePath=".\include\Poco\Data\StatementCreator.h" + > + + RelativePath=".\include\Poco\Data\StatementImpl.h" + > + + RelativePath=".\include\Poco\Data\Time.h" + > + + RelativePath=".\include\Poco\Data\Transaction.h" + > + + RelativePath=".\include\Poco\Data\TypeHandler.h" + > + + Name="Source Files" + > + RelativePath=".\src\AbstractBinder.cpp" + > + + RelativePath=".\src\AbstractBinding.cpp" + > + + RelativePath=".\src\AbstractExtraction.cpp" + > + + RelativePath=".\src\AbstractExtractor.cpp" + > + + RelativePath=".\src\AbstractPreparation.cpp" + > + + RelativePath=".\src\AbstractPreparator.cpp" + > + + RelativePath=".\src\Bulk.cpp" + > + + RelativePath=".\src\Connector.cpp" + > + + RelativePath=".\src\DataException.cpp" + > + + RelativePath=".\src\Date.cpp" + > + + RelativePath=".\src\DynamicLOB.cpp" + > + + RelativePath=".\src\Limit.cpp" + > + + RelativePath=".\src\MetaColumn.cpp" + > + + RelativePath=".\src\Position.cpp" + > + + RelativePath=".\src\Range.cpp" + > + + RelativePath=".\src\RecordSet.cpp" + > + + RelativePath=".\src\Row.cpp" + > + + RelativePath=".\src\RowFilter.cpp" + > + + RelativePath=".\src\RowFormatter.cpp" + > + + RelativePath=".\src\RowIterator.cpp" + > + + RelativePath=".\src\Session.cpp" + > + + RelativePath=".\src\SessionFactory.cpp" + > + + RelativePath=".\src\SessionImpl.cpp" + > + + RelativePath=".\src\SimpleRowFormatter.cpp" + > + + RelativePath=".\src\Statement.cpp" + > + + RelativePath=".\src\StatementCreator.cpp" + > + + RelativePath=".\src\StatementImpl.cpp" + > + + RelativePath=".\src\Time.cpp" + > + + RelativePath=".\src\Transaction.cpp" + > + + Name="SessionPooling" + > + Name="Header Files" + > + RelativePath=".\include\Poco\Data\PooledSessionHolder.h" + > + + RelativePath=".\include\Poco\Data\PooledSessionImpl.h" + > + + RelativePath=".\include\Poco\Data\SessionPool.h" + > + + RelativePath=".\include\Poco\Data\SessionPoolContainer.h" + > + + Name="Source Files" + > + RelativePath=".\src\PooledSessionHolder.cpp" + > + + RelativePath=".\src\PooledSessionImpl.cpp" + > + + RelativePath=".\src\SessionPool.cpp" + > + + RelativePath=".\src\SessionPoolContainer.cpp" + > + + Name="Logging" + > + Name="Header Files" + > + RelativePath=".\include\Poco\Data\ArchiveStrategy.h" + > + + RelativePath=".\include\Poco\Data\SQLChannel.h" + > + + Name="Source Files" + > + RelativePath=".\src\ArchiveStrategy.cpp" + > + + RelativePath=".\src\SQLChannel.cpp" + > + - + + diff --git a/Data/ODBC/include/Poco/Data/ODBC/Binder.h b/Data/ODBC/include/Poco/Data/ODBC/Binder.h index fd3241fbf..0d3c38e34 100644 --- a/Data/ODBC/include/Poco/Data/ODBC/Binder.h +++ b/Data/ODBC/include/Poco/Data/ODBC/Binder.h @@ -71,7 +71,7 @@ public: Binder(const StatementHandle& rStmt, std::size_t maxFieldSize, ParameterBinding dataBinding = PB_IMMEDIATE, - TypeInfo* pDataTypes = 0); + const TypeInfo* pDataTypes = 0); /// Creates the Binder. ~Binder(); diff --git a/Data/ODBC/include/Poco/Data/ODBC/ConnectionHandle.h b/Data/ODBC/include/Poco/Data/ODBC/ConnectionHandle.h index 466ad937d..a1a2390e3 100644 --- a/Data/ODBC/include/Poco/Data/ODBC/ConnectionHandle.h +++ b/Data/ODBC/include/Poco/Data/ODBC/ConnectionHandle.h @@ -30,6 +30,7 @@ namespace Poco { namespace Data { namespace ODBC { +class SessionImpl; class ODBC_API ConnectionHandle /// ODBC connection handle class @@ -60,6 +61,8 @@ private: const EnvironmentHandle* _pEnvironment; SQLHDBC _hdbc; bool _ownsEnvironment; + + friend class Poco::Data::ODBC::SessionImpl; }; diff --git a/Data/ODBC/include/Poco/Data/ODBC/SessionImpl.h b/Data/ODBC/include/Poco/Data/ODBC/SessionImpl.h index 72937bfac..53b08dd11 100644 --- a/Data/ODBC/include/Poco/Data/ODBC/SessionImpl.h +++ b/Data/ODBC/include/Poco/Data/ODBC/SessionImpl.h @@ -70,7 +70,7 @@ public: ~SessionImpl(); /// Destroys the SessionImpl. - Poco::Data::StatementImpl* createStatementImpl(); + Poco::SharedPtr createStatementImpl(); /// Returns an ODBC StatementImpl void open(const std::string& connect = ""); @@ -79,13 +79,13 @@ public: void close(); /// Closes the connection - bool isConnected(); + bool isConnected() const; /// Returns true if session is connected void setConnectionTimeout(std::size_t timeout); /// Sets the session connection timeout value. - std::size_t getConnectionTimeout(); + std::size_t getConnectionTimeout() const; /// Returns the session connection timeout value. void begin(); @@ -97,61 +97,61 @@ public: void rollback(); /// Aborts a transaction - bool isTransaction(); + bool isTransaction() const; /// Returns true iff a transaction is in progress. const std::string& connectorName() const; /// Returns the name of the connector. - bool canTransact(); + bool canTransact() const; /// Returns true if connection is transaction-capable. void setTransactionIsolation(Poco::UInt32 ti); /// Sets the transaction isolation level. - Poco::UInt32 getTransactionIsolation(); + Poco::UInt32 getTransactionIsolation() const; /// Returns the transaction isolation level. - bool hasTransactionIsolation(Poco::UInt32); + bool hasTransactionIsolation(Poco::UInt32) const; /// Returns true iff the transaction isolation level corresponding /// to the supplied bitmask is supported. - bool isTransactionIsolation(Poco::UInt32); + bool isTransactionIsolation(Poco::UInt32) const; /// Returns true iff the transaction isolation level corresponds /// to the supplied bitmask. void autoCommit(const std::string&, bool val); /// Sets autocommit property for the session. - bool isAutoCommit(const std::string& name=""); + bool isAutoCommit(const std::string& name="") const; /// Returns autocommit property value. void autoBind(const std::string&, bool val); /// Sets automatic binding for the session. - bool isAutoBind(const std::string& name=""); + bool isAutoBind(const std::string& name="") const; /// Returns true if binding is automatic for this session. void autoExtract(const std::string&, bool val); /// Sets automatic extraction for the session. - bool isAutoExtract(const std::string& name=""); + bool isAutoExtract(const std::string& name="") const; /// Returns true if extraction is automatic for this session. void setMaxFieldSize(const std::string& rName, const Poco::Any& rValue); /// Sets the max field size (the default used when column size is unknown). - Poco::Any getMaxFieldSize(const std::string& rName=""); + Poco::Any getMaxFieldSize(const std::string& rName="") const; /// Returns the max field size (the default used when column size is unknown). - int maxStatementLength(); + int maxStatementLength() const; /// Returns maximum length of SQL statement allowed by driver. void setQueryTimeout(const std::string&, const Poco::Any& value); /// Sets the timeout (in seconds) for queries. /// Value must be of type int. - Poco::Any getQueryTimeout(const std::string&); + Poco::Any getQueryTimeout(const std::string&) const; /// Returns the timeout (in seconds) for queries, /// or -1 if no timeout has been set. @@ -162,7 +162,7 @@ public: const ConnectionHandle& dbc() const; /// Returns the connection handle. - Poco::Any dataTypeInfo(const std::string& rName=""); + Poco::Any dataTypeInfo(const std::string& rName="") const; /// Returns the data types information. private: @@ -171,19 +171,23 @@ private: static const int FUNCTIONS = SQL_API_ODBC3_ALL_FUNCTIONS_SIZE; - void checkError(SQLRETURN rc, const std::string& msg=""); + void checkError(SQLRETURN rc, const std::string& msg="") const; - Poco::UInt32 getDefaultTransactionIsolation(); + Poco::UInt32 getDefaultTransactionIsolation() const; - Poco::UInt32 transactionIsolation(SQLULEN isolation); + static Poco::UInt32 transactionIsolation(SQLULEN isolation); + + void setTransactionIsolationImpl(Poco::UInt32 ti) const; + /// Sets the transaction isolation level. + /// Called internally from getTransactionIsolation() std::string _connector; - const ConnectionHandle _db; + mutable ConnectionHandle _db; Poco::Any _maxFieldSize; bool _autoBind; bool _autoExtract; TypeInfo _dataTypes; - char _canTransact; + mutable char _canTransact; bool _inTransaction; int _queryTimeout; Poco::FastMutex _mutex; @@ -193,7 +197,7 @@ private: /// /// inlines /// -inline void SessionImpl::checkError(SQLRETURN rc, const std::string& msg) +inline void SessionImpl::checkError(SQLRETURN rc, const std::string& msg) const { if (Utility::isError(rc)) throw ConnectionException(_db, msg); @@ -212,7 +216,7 @@ inline void SessionImpl::setMaxFieldSize(const std::string& rName, const Poco::A } -inline Poco::Any SessionImpl::getMaxFieldSize(const std::string& rName) +inline Poco::Any SessionImpl::getMaxFieldSize(const std::string& rName) const { return _maxFieldSize; } @@ -224,7 +228,7 @@ inline void SessionImpl::setDataTypeInfo(const std::string& rName, const Poco::A } -inline Poco::Any SessionImpl::dataTypeInfo(const std::string& rName) +inline Poco::Any SessionImpl::dataTypeInfo(const std::string& rName) const { return &_dataTypes; } @@ -236,7 +240,7 @@ inline void SessionImpl::autoBind(const std::string&, bool val) } -inline bool SessionImpl::isAutoBind(const std::string& name) +inline bool SessionImpl::isAutoBind(const std::string& name) const { return _autoBind; } @@ -248,7 +252,7 @@ inline void SessionImpl::autoExtract(const std::string&, bool val) } -inline bool SessionImpl::isAutoExtract(const std::string& name) +inline bool SessionImpl::isAutoExtract(const std::string& name) const { return _autoExtract; } @@ -260,7 +264,7 @@ inline const std::string& SessionImpl::connectorName() const } -inline bool SessionImpl::isTransactionIsolation(Poco::UInt32 ti) +inline bool SessionImpl::isTransactionIsolation(Poco::UInt32 ti) const { return 0 != (ti & getTransactionIsolation()); } @@ -272,7 +276,7 @@ inline void SessionImpl::setQueryTimeout(const std::string&, const Poco::Any& va } -inline Poco::Any SessionImpl::getQueryTimeout(const std::string&) +inline Poco::Any SessionImpl::getQueryTimeout(const std::string&) const { return _queryTimeout; } diff --git a/Data/ODBC/src/Binder.cpp b/Data/ODBC/src/Binder.cpp index 63fdedcb3..1031b77ec 100644 --- a/Data/ODBC/src/Binder.cpp +++ b/Data/ODBC/src/Binder.cpp @@ -29,7 +29,7 @@ namespace ODBC { Binder::Binder(const StatementHandle& rStmt, std::size_t maxFieldSize, Binder::ParameterBinding dataBinding, - TypeInfo* pDataTypes): + const TypeInfo* pDataTypes): _rStmt(rStmt), _paramBinding(dataBinding), _pTypeInfo(pDataTypes), diff --git a/Data/ODBC/src/Extractor.cpp b/Data/ODBC/src/Extractor.cpp index 0961fa2b5..fe08a86fa 100644 --- a/Data/ODBC/src/Extractor.cpp +++ b/Data/ODBC/src/Extractor.cpp @@ -68,7 +68,24 @@ bool Extractor::extractBoundImpl(std::size_t pos, UTF16String& val) typedef UTF16String::value_type CharT; if (isNull(pos)) return false; std::size_t dataSize = _pPreparator->actualDataSize(pos); - CharT* sp = AnyCast(_pPreparator->at(pos)); + //CharT* sp = AnyCast(_pPreparator->at(pos)); + CharT* sp = 0; + UTF16String us; + const type_info& ti = _pPreparator->at(pos).type(); + if (ti == typeid(CharT*)) + { + sp = AnyCast(_pPreparator->at(pos)); + } + else if (ti == typeid(char*)) + { + std::string s(AnyCast(_pPreparator->at(pos))); + Poco::UnicodeConverter::convert(s, us); + sp = const_cast(us.c_str()); + } + else + { + throw Poco::Data::ExtractException("Unsupported string type: " + std::string(ti.name())); + } std::size_t len = Poco::UnicodeConverter::UTFStrlen(sp); if (len < dataSize) dataSize = len; checkDataSize(dataSize); diff --git a/Data/ODBC/src/ODBCStatementImpl.cpp b/Data/ODBC/src/ODBCStatementImpl.cpp index b209fe772..11f5ed09f 100644 --- a/Data/ODBC/src/ODBCStatementImpl.cpp +++ b/Data/ODBC/src/ODBCStatementImpl.cpp @@ -86,11 +86,11 @@ void ODBCStatementImpl::compileImpl() Binder::ParameterBinding bind = session().getFeature("autoBind") ? Binder::PB_IMMEDIATE : Binder::PB_AT_EXEC; - TypeInfo* pDT = 0; + const TypeInfo* pDT = 0; try { Poco::Any dti = session().getProperty("dataTypeInfo"); - pDT = AnyCast(dti); + pDT = AnyCast(dti); } catch (NotSupportedException&) { diff --git a/Data/ODBC/src/SessionImpl.cpp b/Data/ODBC/src/SessionImpl.cpp index 99e7ff340..aeae5266a 100644 --- a/Data/ODBC/src/SessionImpl.cpp +++ b/Data/ODBC/src/SessionImpl.cpp @@ -85,7 +85,7 @@ SessionImpl::~SessionImpl() } -Poco::Data::StatementImpl* SessionImpl::createStatementImpl() +Poco::Data::StatementImpl::Ptr SessionImpl::createStatementImpl() { return new ODBCStatementImpl(*this); } @@ -164,7 +164,7 @@ void SessionImpl::open(const std::string& connect) } -bool SessionImpl::isConnected() +bool SessionImpl::isConnected() const { SQLULEN value = 0; @@ -189,7 +189,7 @@ void SessionImpl::setConnectionTimeout(std::size_t timeout) } -std::size_t SessionImpl::getConnectionTimeout() +std::size_t SessionImpl::getConnectionTimeout() const { SQLULEN value = 0; @@ -203,7 +203,7 @@ std::size_t SessionImpl::getConnectionTimeout() } -bool SessionImpl::canTransact() +bool SessionImpl::canTransact() const { if (ODBC_TXN_CAPABILITY_UNKNOWN == _canTransact) { @@ -221,6 +221,12 @@ bool SessionImpl::canTransact() void SessionImpl::setTransactionIsolation(Poco::UInt32 ti) +{ + setTransactionIsolationImpl(ti); +} + + +void SessionImpl::setTransactionIsolationImpl(Poco::UInt32 ti) const { #if POCO_PTR_IS_64_BIT Poco::UInt64 isolation = 0; @@ -244,7 +250,7 @@ void SessionImpl::setTransactionIsolation(Poco::UInt32 ti) } -Poco::UInt32 SessionImpl::getTransactionIsolation() +Poco::UInt32 SessionImpl::getTransactionIsolation() const { SQLULEN isolation = 0; checkError(SQLGetConnectAttr(_db, SQL_ATTR_TXN_ISOLATION, @@ -256,20 +262,20 @@ Poco::UInt32 SessionImpl::getTransactionIsolation() } -bool SessionImpl::hasTransactionIsolation(Poco::UInt32 ti) +bool SessionImpl::hasTransactionIsolation(Poco::UInt32 ti) const { if (isTransaction()) throw InvalidAccessException(); bool retval = true; Poco::UInt32 old = getTransactionIsolation(); - try { setTransactionIsolation(ti); } + try { setTransactionIsolationImpl(ti); } catch (Poco::Exception&) { retval = false; } - setTransactionIsolation(old); + setTransactionIsolationImpl(old); return retval; } -Poco::UInt32 SessionImpl::getDefaultTransactionIsolation() +Poco::UInt32 SessionImpl::getDefaultTransactionIsolation() const { SQLUINTEGER isolation = 0; checkError(SQLGetInfo(_db, SQL_DEFAULT_TXN_ISOLATION, @@ -317,7 +323,7 @@ void SessionImpl::autoCommit(const std::string&, bool val) } -bool SessionImpl::isAutoCommit(const std::string&) +bool SessionImpl::isAutoCommit(const std::string&) const { SQLULEN value = 0; @@ -331,7 +337,7 @@ bool SessionImpl::isAutoCommit(const std::string&) } -bool SessionImpl::isTransaction() +bool SessionImpl::isTransaction() const { if (!canTransact()) return false; @@ -397,7 +403,7 @@ void SessionImpl::close() } -int SessionImpl::maxStatementLength() +int SessionImpl::maxStatementLength() const { SQLUINTEGER info; SQLRETURN rc = 0; diff --git a/Data/ODBC/testsuite/src/ODBCOracleTest.cpp b/Data/ODBC/testsuite/src/ODBCOracleTest.cpp index dbf805811..fc90a070e 100644 --- a/Data/ODBC/testsuite/src/ODBCOracleTest.cpp +++ b/Data/ODBC/testsuite/src/ODBCOracleTest.cpp @@ -41,11 +41,11 @@ using Poco::DynamicAny; using Poco::DateTime; -#define ORACLE_ODBC_DRIVER "Oracle in OraDB12Home1" +#define ORACLE_ODBC_DRIVER "Oracle in XE" #define ORACLE_DSN "PocoDataOracleTest" #define ORACLE_SERVER POCO_ODBC_TEST_DATABASE_SERVER #define ORACLE_PORT "1521" -#define ORACLE_SID "ORCL" +#define ORACLE_SID "XE" #define ORACLE_UID "poco" #define ORACLE_PWD "poco" diff --git a/Data/SQLite/include/Poco/Data/SQLite/SessionImpl.h b/Data/SQLite/include/Poco/Data/SQLite/SessionImpl.h index 6e8c749a2..655b8aae3 100644 --- a/Data/SQLite/include/Poco/Data/SQLite/SessionImpl.h +++ b/Data/SQLite/include/Poco/Data/SQLite/SessionImpl.h @@ -48,7 +48,7 @@ public: ~SessionImpl(); /// Destroys the SessionImpl. - Poco::Data::StatementImpl* createStatementImpl(); + Poco::SharedPtr createStatementImpl(); /// Returns an SQLite StatementImpl. void open(const std::string& connect = ""); @@ -68,14 +68,14 @@ public: void close(); /// Closes the session. - bool isConnected(); + bool isConnected() const; /// Returns true if connected, false otherwise. void setConnectionTimeout(std::size_t timeout); /// Sets the session connection timeout value. /// Timeout value is in seconds. - std::size_t getConnectionTimeout(); + std::size_t getConnectionTimeout() const; /// Returns the session connection timeout value. /// Timeout value is in seconds. @@ -88,30 +88,30 @@ public: void rollback(); /// Aborts a transaction. - bool canTransact(); + bool canTransact() const; /// Returns true if session has transaction capabilities. - bool isTransaction(); + bool isTransaction() const; /// Returns true iff a transaction is a transaction is in progress, false otherwise. void setTransactionIsolation(Poco::UInt32 ti); /// Sets the transaction isolation level. - Poco::UInt32 getTransactionIsolation(); + Poco::UInt32 getTransactionIsolation() const; /// Returns the transaction isolation level. - bool hasTransactionIsolation(Poco::UInt32 ti); + bool hasTransactionIsolation(Poco::UInt32 ti) const; /// Returns true iff the transaction isolation level corresponding /// to the supplied bitmask is supported. - bool isTransactionIsolation(Poco::UInt32 ti); + bool isTransactionIsolation(Poco::UInt32 ti) const; /// Returns true iff the transaction isolation level corresponds /// to the supplied bitmask. void autoCommit(const std::string&, bool val); /// Sets autocommit property for the session. - bool isAutoCommit(const std::string& name=""); + bool isAutoCommit(const std::string& name="") const; /// Returns autocommit property value. const std::string& connectorName() const; @@ -119,7 +119,7 @@ public: protected: void setConnectionTimeout(const std::string& prop, const Poco::Any& value); - Poco::Any getConnectionTimeout(const std::string& prop); + Poco::Any getConnectionTimeout(const std::string& prop) const; private: std::string _connector; @@ -127,6 +127,7 @@ private: bool _connected; bool _isTransaction; int _timeout; + mutable Poco::Mutex _mutex; static const std::string DEFERRED_BEGIN_TRANSACTION; @@ -138,13 +139,13 @@ private: // // inlines // -inline bool SessionImpl::canTransact() +inline bool SessionImpl::canTransact() const { return true; } -inline bool SessionImpl::isTransaction() +inline bool SessionImpl::isTransaction() const { return _isTransaction; } @@ -156,7 +157,7 @@ inline const std::string& SessionImpl::connectorName() const } -inline std::size_t SessionImpl::getConnectionTimeout() +inline std::size_t SessionImpl::getConnectionTimeout() const { return static_cast(_timeout/1000); } diff --git a/Data/SQLite/src/SessionImpl.cpp b/Data/SQLite/src/SessionImpl.cpp index 4975f40a1..88da57159 100644 --- a/Data/SQLite/src/SessionImpl.cpp +++ b/Data/SQLite/src/SessionImpl.cpp @@ -74,7 +74,7 @@ SessionImpl::~SessionImpl() } -Poco::Data::StatementImpl* SessionImpl::createStatementImpl() +Poco::Data::StatementImpl::Ptr SessionImpl::createStatementImpl() { poco_check_ptr (_pDB); return new SQLiteStatementImpl(*this, _pDB); @@ -118,20 +118,20 @@ void SessionImpl::setTransactionIsolation(Poco::UInt32 ti) } -Poco::UInt32 SessionImpl::getTransactionIsolation() +Poco::UInt32 SessionImpl::getTransactionIsolation() const { return Session::TRANSACTION_READ_COMMITTED; } -bool SessionImpl::hasTransactionIsolation(Poco::UInt32 ti) +bool SessionImpl::hasTransactionIsolation(Poco::UInt32 ti) const { if (ti == Session::TRANSACTION_READ_COMMITTED) return true; return false; } -bool SessionImpl::isTransactionIsolation(Poco::UInt32 ti) +bool SessionImpl::isTransactionIsolation(Poco::UInt32 ti) const { if (ti == Session::TRANSACTION_READ_COMMITTED) return true; return false; @@ -182,7 +182,7 @@ void SessionImpl::close() { if (_pDB) { - sqlite3_close(_pDB); + sqlite3_close_v2(_pDB); _pDB = 0; } @@ -190,7 +190,7 @@ void SessionImpl::close() } -bool SessionImpl::isConnected() +bool SessionImpl::isConnected() const { return _connected; } @@ -211,7 +211,7 @@ void SessionImpl::setConnectionTimeout(const std::string& prop, const Poco::Any& } -Poco::Any SessionImpl::getConnectionTimeout(const std::string& prop) +Poco::Any SessionImpl::getConnectionTimeout(const std::string& prop) const { return Poco::Any(_timeout/1000); } @@ -227,7 +227,7 @@ void SessionImpl::autoCommit(const std::string&, bool) } -bool SessionImpl::isAutoCommit(const std::string&) +bool SessionImpl::isAutoCommit(const std::string&) const { Poco::Mutex::ScopedLock l(_mutex); return (0 != sqlite3_get_autocommit(_pDB)); diff --git a/Data/include/Poco/Data/AbstractSessionImpl.h b/Data/include/Poco/Data/AbstractSessionImpl.h index 97b4fe149..7cd76cdea 100644 --- a/Data/include/Poco/Data/AbstractSessionImpl.h +++ b/Data/include/Poco/Data/AbstractSessionImpl.h @@ -41,13 +41,13 @@ public: typedef void (C::*FeatureSetter)(const std::string&, bool); /// The setter method for a feature. - typedef bool (C::*FeatureGetter)(const std::string&); + typedef bool (C::*FeatureGetter)(const std::string&) const; /// The getter method for a feature. typedef void (C::*PropertySetter)(const std::string&, const Poco::Any&); /// The setter method for a property. - typedef Poco::Any (C::*PropertyGetter)(const std::string&); + typedef Poco::Any (C::*PropertyGetter)(const std::string&) const; /// The getter method for a property. AbstractSessionImpl(const std::string& connectionString, @@ -187,7 +187,7 @@ public: _storage = Poco::RefAnyCast(value); } - Poco::Any getStorage(const std::string& name="") + Poco::Any getStorage(const std::string& name="") const /// Returns the storage type { return _storage; @@ -199,7 +199,7 @@ public: _handle = handle; } - Poco::Any getHandle(const std::string& name="") + Poco::Any getHandle(const std::string& name="") const /// Returns the native session handle. { return _handle; @@ -211,7 +211,7 @@ public: _bulk = bulk; } - bool getBulk(const std::string& name="") + bool getBulk(const std::string& name="") const /// Returns the execution type { return _bulk; @@ -229,7 +229,7 @@ public: _emptyStringIsNull = emptyStringIsNull; } - bool getEmptyStringIsNull(const std::string& name="") + bool getEmptyStringIsNull(const std::string& name="") const /// Returns the setting for the behavior regarding empty variable /// length strings. See setEmptyStringIsNull(const std::string&, bool) /// and this class documentation for feature rationale and details. @@ -250,7 +250,7 @@ public: _forceEmptyString = forceEmptyString; } - bool getForceEmptyString(const std::string& name="") + bool getForceEmptyString(const std::string& name="") const /// Returns the setting for the behavior regarding empty variable /// length strings. See setForceEmptyString(const std::string&, bool) /// and this class documentation for feature rationale and details. diff --git a/Data/include/Poco/Data/PooledSessionImpl.h b/Data/include/Poco/Data/PooledSessionImpl.h index 1d11028ee..6c1b9f2f1 100644 --- a/Data/include/Poco/Data/PooledSessionImpl.h +++ b/Data/include/Poco/Data/PooledSessionImpl.h @@ -21,6 +21,7 @@ #include "Poco/Data/Data.h" #include "Poco/Data/SessionImpl.h" #include "Poco/Data/PooledSessionHolder.h" +#include "Poco/Data/StatementImpl.h" #include "Poco/AutoPtr.h" @@ -43,22 +44,21 @@ public: ~PooledSessionImpl(); /// Destroys the PooledSessionImpl. - // SessionImpl - StatementImpl* createStatementImpl(); + StatementImpl::Ptr createStatementImpl(); void begin(); void commit(); void rollback(); void open(const std::string& connect = ""); void close(); - bool isConnected(); + bool isConnected() const; void setConnectionTimeout(std::size_t timeout); - std::size_t getConnectionTimeout(); - bool canTransact(); - bool isTransaction(); + std::size_t getConnectionTimeout() const; + bool canTransact() const; + bool isTransaction()const ; void setTransactionIsolation(Poco::UInt32); - Poco::UInt32 getTransactionIsolation(); - bool hasTransactionIsolation(Poco::UInt32); - bool isTransactionIsolation(Poco::UInt32); + Poco::UInt32 getTransactionIsolation() const; + bool hasTransactionIsolation(Poco::UInt32) const; + bool isTransactionIsolation(Poco::UInt32) const; const std::string& connectorName() const; void setFeature(const std::string& name, bool state); bool getFeature(const std::string& name); diff --git a/Data/include/Poco/Data/Session.h b/Data/include/Poco/Data/Session.h index bf96efefa..817ce6835 100644 --- a/Data/include/Poco/Data/Session.h +++ b/Data/include/Poco/Data/Session.h @@ -23,6 +23,7 @@ #include "Poco/Data/Statement.h" #include "Poco/Data/StatementCreator.h" #include "Poco/Data/Binding.h" +#include "Poco/SharedPtr.h" #include "Poco/AutoPtr.h" #include "Poco/Any.h" #include @@ -191,7 +192,7 @@ public: return _statementCreator << t; } - StatementImpl* createStatementImpl(); + SharedPtr createStatementImpl(); /// Creates a StatementImpl. void open(const std::string& connect = ""); @@ -313,7 +314,7 @@ private: // // inlines // -inline StatementImpl* Session::createStatementImpl() +inline SharedPtr Session::createStatementImpl() { return _pImpl->createStatementImpl(); } diff --git a/Data/include/Poco/Data/SessionImpl.h b/Data/include/Poco/Data/SessionImpl.h index 223c2bf97..8875eebcb 100644 --- a/Data/include/Poco/Data/SessionImpl.h +++ b/Data/include/Poco/Data/SessionImpl.h @@ -22,6 +22,8 @@ #include "Poco/RefCountedObject.h" #include "Poco/String.h" #include "Poco/Format.h" +#include "Poco/SharedPtr.h" +#include "Poco/AutoPtr.h" #include "Poco/Any.h" @@ -37,6 +39,8 @@ class Data_API SessionImpl: public Poco::RefCountedObject /// SessionImpl objects are noncopyable. { public: + typedef Poco::AutoPtr Ptr; + static const std::size_t LOGIN_TIMEOUT_INFINITE = 0; /// Infinite connection/login timeout. @@ -56,7 +60,7 @@ public: virtual ~SessionImpl(); /// Destroys the SessionImpl. - virtual StatementImpl* createStatementImpl() = 0; + virtual Poco::SharedPtr createStatementImpl() = 0; /// Creates a StatementImpl. virtual void open(const std::string& connectionString = "") = 0; @@ -70,7 +74,7 @@ public: virtual void close() = 0; /// Closes the connection. - virtual bool isConnected() = 0; + virtual bool isConnected() const = 0; /// Returns true if session is connected, false otherwise. void setLoginTimeout(std::size_t timeout); @@ -82,7 +86,7 @@ public: virtual void setConnectionTimeout(std::size_t timeout) = 0; /// Sets the session connection timeout value. - virtual std::size_t getConnectionTimeout() = 0; + virtual std::size_t getConnectionTimeout() const = 0; /// Returns the session connection timeout value. void reconnect(); @@ -97,23 +101,23 @@ public: virtual void rollback() = 0; /// Aborts a transaction. - virtual bool canTransact() = 0; + virtual bool canTransact() const = 0; /// Returns true if session has transaction capabilities. - virtual bool isTransaction() = 0; + virtual bool isTransaction() const = 0; /// Returns true iff a transaction is a transaction is in progress, false otherwise. virtual void setTransactionIsolation(Poco::UInt32) = 0; /// Sets the transaction isolation level. - virtual Poco::UInt32 getTransactionIsolation() = 0; + virtual Poco::UInt32 getTransactionIsolation() const = 0; /// Returns the transaction isolation level. - virtual bool hasTransactionIsolation(Poco::UInt32) = 0; + virtual bool hasTransactionIsolation(Poco::UInt32) const = 0; /// Returns true iff the transaction isolation level corresponding /// to the supplied bitmask is supported. - virtual bool isTransactionIsolation(Poco::UInt32) = 0; + virtual bool isTransactionIsolation(Poco::UInt32) const = 0; /// Returns true iff the transaction isolation level corresponds /// to the supplied bitmask. diff --git a/Data/src/PooledSessionImpl.cpp b/Data/src/PooledSessionImpl.cpp index 2acf2f9d8..7d238ccc3 100644 --- a/Data/src/PooledSessionImpl.cpp +++ b/Data/src/PooledSessionImpl.cpp @@ -42,7 +42,7 @@ PooledSessionImpl::~PooledSessionImpl() } -StatementImpl* PooledSessionImpl::createStatementImpl() +StatementImpl::Ptr PooledSessionImpl::createStatementImpl() { return access()->createStatementImpl(); } @@ -60,7 +60,7 @@ void PooledSessionImpl::commit() } -bool PooledSessionImpl::isConnected() +bool PooledSessionImpl::isConnected() const { return access()->isConnected(); } @@ -72,19 +72,19 @@ void PooledSessionImpl::setConnectionTimeout(std::size_t timeout) } -std::size_t PooledSessionImpl::getConnectionTimeout() +std::size_t PooledSessionImpl::getConnectionTimeout() const { return access()->getConnectionTimeout(); } -bool PooledSessionImpl::canTransact() +bool PooledSessionImpl::canTransact() const { return access()->canTransact(); } -bool PooledSessionImpl::isTransaction() +bool PooledSessionImpl::isTransaction() const { return access()->isTransaction(); } @@ -96,19 +96,19 @@ void PooledSessionImpl::setTransactionIsolation(Poco::UInt32 ti) } -Poco::UInt32 PooledSessionImpl::getTransactionIsolation() +Poco::UInt32 PooledSessionImpl::getTransactionIsolation() const { return access()->getTransactionIsolation(); } -bool PooledSessionImpl::hasTransactionIsolation(Poco::UInt32 ti) +bool PooledSessionImpl::hasTransactionIsolation(Poco::UInt32 ti) const { return access()->hasTransactionIsolation(ti); } -bool PooledSessionImpl::isTransactionIsolation(Poco::UInt32 ti) +bool PooledSessionImpl::isTransactionIsolation(Poco::UInt32 ti) const { return access()->isTransactionIsolation(ti); } diff --git a/Data/testsuite/src/SessionImpl.cpp b/Data/testsuite/src/SessionImpl.cpp index 837b315e5..4e34412b2 100644 --- a/Data/testsuite/src/SessionImpl.cpp +++ b/Data/testsuite/src/SessionImpl.cpp @@ -50,7 +50,7 @@ void SessionImpl::close() } -bool SessionImpl::isConnected() +bool SessionImpl::isConnected() const { return _connected; } @@ -61,13 +61,13 @@ void SessionImpl::setConnectionTimeout(std::size_t timeout) } -std::size_t SessionImpl::getConnectionTimeout() +std::size_t SessionImpl::getConnectionTimeout() const { return 0; } -Poco::Data::StatementImpl* SessionImpl::createStatementImpl() +StatementImpl::Ptr SessionImpl::createStatementImpl() { return new TestStatementImpl(*this); } @@ -88,13 +88,13 @@ void SessionImpl::rollback() } -bool SessionImpl::canTransact() +bool SessionImpl::canTransact() const { return false; } -bool SessionImpl::isTransaction() +bool SessionImpl::isTransaction() const { return false; } @@ -105,19 +105,19 @@ void SessionImpl::setTransactionIsolation(Poco::UInt32) } -Poco::UInt32 SessionImpl::getTransactionIsolation() +Poco::UInt32 SessionImpl::getTransactionIsolation() const { return 0; } -bool SessionImpl::hasTransactionIsolation(Poco::UInt32) +bool SessionImpl::hasTransactionIsolation(Poco::UInt32) const { return false; } -bool SessionImpl::isTransactionIsolation(Poco::UInt32) +bool SessionImpl::isTransactionIsolation(Poco::UInt32) const { return false; } @@ -129,7 +129,7 @@ const std::string& SessionImpl::connectorName() const } -bool SessionImpl::getConnected(const std::string& name) +bool SessionImpl::getConnected(const std::string& name) const { return _connected; } @@ -147,7 +147,7 @@ void SessionImpl::setF(const std::string& name, bool value) } -bool SessionImpl::getF(const std::string& name) +bool SessionImpl::getF(const std::string& name) const { return _f; } @@ -159,7 +159,7 @@ void SessionImpl::setP(const std::string& name, const Poco::Any& value) } -Poco::Any SessionImpl::getP(const std::string& name) +Poco::Any SessionImpl::getP(const std::string& name) const { return _p; } diff --git a/Data/testsuite/src/SessionImpl.h b/Data/testsuite/src/SessionImpl.h index f10ccc415..3ed3ec6fa 100644 --- a/Data/testsuite/src/SessionImpl.h +++ b/Data/testsuite/src/SessionImpl.h @@ -15,6 +15,7 @@ #include "Poco/Data/AbstractSessionImpl.h" +#include "Poco/Data/StatementImpl.h" #include "Poco/SharedPtr.h" #include "Binder.h" @@ -35,7 +36,7 @@ public: ~SessionImpl(); /// Destroys the SessionImpl. - Poco::Data::StatementImpl* createStatementImpl(); + StatementImpl::Ptr createStatementImpl(); /// Returns an test StatementImpl. void open(const std::string& connectionString = ""); @@ -44,14 +45,14 @@ public: void close(); /// Closes the session. - bool isConnected(); + bool isConnected() const; /// Returns true if session is connected to the database, /// false otherwise. void setConnectionTimeout(std::size_t timeout); /// Sets the session connection timeout value. - std::size_t getConnectionTimeout(); + std::size_t getConnectionTimeout() const; /// Returns the session connection timeout value. void begin(); @@ -63,23 +64,23 @@ public: void rollback(); /// Aborts a transaction. - bool canTransact(); + bool canTransact() const; /// Returns true if session has transaction capabilities. - bool isTransaction(); + bool isTransaction() const; /// Returns true iff a transaction is a transaction is in progress, false otherwise. void setTransactionIsolation(Poco::UInt32); /// Sets the transaction isolation level. - Poco::UInt32 getTransactionIsolation(); + Poco::UInt32 getTransactionIsolation() const; /// Returns the transaction isolation level. - bool hasTransactionIsolation(Poco::UInt32); + bool hasTransactionIsolation(Poco::UInt32) const; /// Returns true iff the transaction isolation level corresponding /// to the supplied bitmask is supported. - bool isTransactionIsolation(Poco::UInt32); + bool isTransactionIsolation(Poco::UInt32) const; /// Returns true iff the transaction isolation level corresponds /// to the supplied bitmask. @@ -87,15 +88,15 @@ public: /// Returns the name of the connector. void setConnected(const std::string& name, bool value); - bool getConnected(const std::string& name); + bool getConnected(const std::string& name) const; /// Sets/gets the connected property. /// This is normally done by implementation /// when a database connection loss is detected. void setF(const std::string& name, bool value); - bool getF(const std::string& name); + bool getF(const std::string& name) const; void setP(const std::string& name, const Poco::Any& value); - Poco::Any getP(const std::string& name); + Poco::Any getP(const std::string& name) const; private: bool _f; diff --git a/Foundation/Foundation_x64_vs90.sln b/Foundation/Foundation_x64_vs90.sln index 5a370de10..14e40256c 100644 --- a/Foundation/Foundation_x64_vs90.sln +++ b/Foundation/Foundation_x64_vs90.sln @@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Foundation", "Foundation_x64_vs90.vcproj", "{B01196CC-B693-4548-8464-2FF60499E73F}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_x64_vs90.vcproj", "{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_x64_vs90.vcproj", "{F1EE93DF-347F-4CB3-B191-C4E63F38E972}" ProjectSection(ProjectDependencies) = postProject {B01196CC-B693-4548-8464-2FF60499E73F} = {B01196CC-B693-4548-8464-2FF60499E73F} EndProjectSection @@ -10,49 +10,49 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution debug_shared|x64 = debug_shared|x64 - release_shared|x64 = release_shared|x64 - debug_static_mt|x64 = debug_static_mt|x64 - release_static_mt|x64 = release_static_mt|x64 debug_static_md|x64 = debug_static_md|x64 + debug_static_mt|x64 = debug_static_mt|x64 + release_shared|x64 = release_shared|x64 release_static_md|x64 = release_static_md|x64 + release_static_mt|x64 = release_static_mt|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B01196CC-B693-4548-8464-2FF60499E73F}.debug_shared|x64.ActiveCfg = debug_shared|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.debug_shared|x64.Build.0 = debug_shared|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.ActiveCfg = release_shared|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.Build.0 = release_shared|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.Deploy.0 = release_shared|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_md|x64.Build.0 = debug_static_md|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.ActiveCfg = release_shared|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.Build.0 = release_shared|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_shared|x64.Deploy.0 = release_shared|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_md|x64.ActiveCfg = release_static_md|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_md|x64.Build.0 = release_static_md|x64 {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_md|x64.Deploy.0 = release_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.ActiveCfg = debug_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.Build.0 = debug_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.Deploy.0 = debug_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.ActiveCfg = release_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.Build.0 = release_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.Deploy.0 = release_shared|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.Build.0 = release_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.Build.0 = debug_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.ActiveCfg = release_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.Build.0 = release_static_md|x64 - {C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.ActiveCfg = debug_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.Build.0 = debug_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.Deploy.0 = debug_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.ActiveCfg = debug_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.Build.0 = debug_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.Deploy.0 = debug_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.Build.0 = debug_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.ActiveCfg = release_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.Build.0 = release_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.Deploy.0 = release_shared|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.ActiveCfg = release_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.Build.0 = release_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.Deploy.0 = release_static_md|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.ActiveCfg = release_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.Build.0 = release_static_mt|x64 + {F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.Deploy.0 = release_static_mt|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE