summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2010-04-19 19:18:32 +0000
committerStephen D. Huston <shuston@apache.org>2010-04-19 19:18:32 +0000
commitf79c211abba8839cb363279c3b0152a64e79a9a7 (patch)
tree404f0da0aa08d55d9c74215ac6ddb3845ce11cbe /cpp/src/qpid
parent28988707799e2f5a0efe08ea9094e91d61f95ec7 (diff)
downloadqpid-python-f79c211abba8839cb363279c3b0152a64e79a9a7.tar.gz
Add store test executions if building the store module. Add trigger on messageMap table deletes to remove orphaned messages from message table; part of QPID-2420.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@935710 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp b/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp
index 323bc94c5c..bc3584dd57 100644
--- a/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp
+++ b/cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp
@@ -1203,6 +1203,20 @@ MSSqlProvider::createDb(DatabaseConnection *db, const std::string &name)
" xid varbinary(512) REFERENCES tblTPL(xid)"
" CONSTRAINT CK_NoDups UNIQUE NONCLUSTERED (messageId, queueId) )";
const std::string tplSpecs = " (xid varbinary(512) PRIMARY KEY NOT NULL)";
+ // SET NOCOUNT ON added to prevent extra result sets from
+ // interfering with SELECT statements. (Added by SQL Management)
+ const std::string removeUnrefMsgsTrigger =
+ "CREATE TRIGGER dbo.RemoveUnreferencedMessages "
+ "ON tblMessageMap AFTER DELETE AS BEGIN "
+ "SET NOCOUNT ON; "
+ "DELETE FROM tblMessage "
+ "WHERE tblMessage.persistenceId IN "
+ " (SELECT messageId FROM deleted) AND"
+ " NOT EXISTS(SELECT * FROM tblMessageMap"
+ " WHERE tblMessageMap.messageId IN"
+ " (SELECT messageId FROM deleted)) "
+ "END";
+
_variant_t unused;
_bstr_t dbStr = dbCmd.c_str();
_ConnectionPtr conn(*db);
@@ -1231,6 +1245,8 @@ MSSqlProvider::createDb(DatabaseConnection *db, const std::string &name)
makeTable = tableCmd + TblMessageMap + messageMapSpecs;
makeTableStr = makeTable.c_str();
conn->Execute(makeTableStr, &unused, adExecuteNoRecords);
+ _bstr_t addTriggerStr = removeUnrefMsgsTrigger.c_str();
+ conn->Execute(addTriggerStr, &unused, adExecuteNoRecords);
}
catch(_com_error &e) {
throw ADOException("MSSQL can't create " + name, e, db->getErrors());