From f79c211abba8839cb363279c3b0152a64e79a9a7 Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Mon, 19 Apr 2010 19:18:32 +0000 Subject: 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 --- cpp/src/qpid/store/ms-sql/MSSqlProvider.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (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 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()); -- cgit v1.2.1