From e70a7bb7fbed5533690fa0fcea1e157867b2b1fa Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Wed, 28 Oct 2009 23:47:03 +0000 Subject: Change StorageProvider::Exception to inherit from qpid::Exception instead of std::exception; allows the broker to catch them and do something other than die without a message. Fixed exception handling around more ADO ops and correctly handle com exceptions without associated ErrorInfo. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@830797 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp | 49 ++++++++++++++++------------- 1 file changed, 27 insertions(+), 22 deletions(-) (limited to 'cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp') diff --git a/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp b/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp index cb92e2fd80..b8c020fabe 100644 --- a/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp +++ b/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp @@ -954,28 +954,33 @@ MSSqlProvider::createDb(_ConnectionPtr conn, const std::string &name) " (messageId bigint REFERENCES tblMessage(persistenceId) NOT NULL," " queueId bigint REFERENCES tblQueue(persistenceId) NOT NULL)"; _variant_t unused; - _bstr_t dbStr = dbCmd.c_str(); - conn->Execute(dbStr, &unused, adExecuteNoRecords); - _bstr_t useStr = useCmd.c_str(); - conn->Execute(useStr, &unused, adExecuteNoRecords); - std::string makeTable = tableCmd + TblQueue + colSpecs; - _bstr_t makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); - makeTable = tableCmd + TblExchange + colSpecs; - makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); - makeTable = tableCmd + TblConfig + colSpecs; - makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); - makeTable = tableCmd + TblMessage + colSpecs; - makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); - makeTable = tableCmd + TblBinding + bindingSpecs; - makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); - makeTable = tableCmd + TblMessageMap + messageMapSpecs; - makeTableStr = makeTable.c_str(); - conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + _bstr_t dbStr = dbCmd.c_str(); + try { + conn->Execute(dbStr, &unused, adExecuteNoRecords); + _bstr_t useStr = useCmd.c_str(); + conn->Execute(useStr, &unused, adExecuteNoRecords); + std::string makeTable = tableCmd + TblQueue + colSpecs; + _bstr_t makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + makeTable = tableCmd + TblExchange + colSpecs; + makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + makeTable = tableCmd + TblConfig + colSpecs; + makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + makeTable = tableCmd + TblMessage + colSpecs; + makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + makeTable = tableCmd + TblBinding + bindingSpecs; + makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + makeTable = tableCmd + TblMessageMap + messageMapSpecs; + makeTableStr = makeTable.c_str(); + conn->Execute(makeTableStr, &unused, adExecuteNoRecords); + } + catch(_com_error &e) { + throw ADOException("MSSQL can't create " + name, e); + } } void -- cgit v1.2.1