You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2009/10/30 01:12:57 UTC

svn commit: r831167 - in /qpid/trunk/qpid/cpp/src/qpid/store/ms-sql: BlobRecordset.cpp Recordset.cpp

Author: shuston
Date: Fri Oct 30 00:12:57 2009
New Revision: 831167

URL: http://svn.apache.org/viewvc?rev=831167&view=rev
Log:
Ensure a client-side cursor is used, and change to static cursor to improve performance. When adding a new record that has a persistence ID, wait until after the Update to retrieve the new id from the new record.
Fixes QPID-2168.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/BlobRecordset.cpp
    qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/Recordset.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/BlobRecordset.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/BlobRecordset.cpp?rev=831167&r1=831166&r2=831167&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/BlobRecordset.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/BlobRecordset.cpp Fri Oct 30 00:12:57 2009
@@ -49,9 +49,10 @@
 {
     BlobEncoder blob (item);   // Marshall item info to a blob
     rs->AddNew();
-    item.setPersistenceId(rs->Fields->Item["persistenceId"]->Value);
     rs->Fields->GetItem("fieldTableBlob")->AppendChunk(blob);
     rs->Update();
+    uint64_t id = rs->Fields->Item["persistenceId"]->Value;
+    item.setPersistenceId(id);
 }
 
 void

Modified: qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/Recordset.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/Recordset.cpp?rev=831167&r1=831166&r2=831167&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/Recordset.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/store/ms-sql/Recordset.cpp Fri Oct 30 00:12:57 2009
@@ -82,9 +82,13 @@
 {
     _ConnectionPtr p = *conn;
     TESTHR(rs.CreateInstance(__uuidof(::Recordset)));
+    // Client-side cursors needed to get access to newly added
+    // identity column immediately. Recordsets need this to get the
+    // persistence ID for the broker objects.
+    rs->CursorLocation = adUseClient;
     rs->Open(table.c_str(),
              _variant_t((IDispatch *)p, true), 
-             adOpenKeyset,
+             adOpenStatic,
              adLockOptimistic,
              adCmdTable);
     tableName = table;



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org