Date: Friday, January 13, 2006 @ 12:51:47
  Author: gilles
    Path: /cvsroot/carob/carob

Modified: include/Connection.hpp (1.49 -> 1.50) include/Statement.hpp
          (1.26 -> 1.27) src/Connection.cpp (1.56 -> 1.57)
          src/Statement.cpp (1.24 -> 1.25)

Leak fix: preparedStatementGetMetaData now returns a ResultSet pointer so we 
can destroy it (this is a semi-rollback)


------------------------+
 include/Connection.hpp |    6 +++---
 include/Statement.hpp  |    9 ++++-----
 src/Connection.cpp     |    8 +++-----
 src/Statement.cpp      |   10 +++++++---
 4 files changed, 17 insertions(+), 16 deletions(-)


Index: carob/include/Connection.hpp
diff -u carob/include/Connection.hpp:1.49 carob/include/Connection.hpp:1.50
--- carob/include/Connection.hpp:1.49   Fri Jan 13 11:31:32 2006
+++ carob/include/Connection.hpp        Fri Jan 13 12:51:47 2006
@@ -99,7 +99,6 @@
 
 class Statement;
 class ParameterStatement;
-class ResultSetMetaData;
 
 /**
  * This class implements the communication protocol to the Controller.
@@ -292,10 +291,11 @@
                         ProtocolException, BackendException,
                         UnexpectedException);
   /**
-   * Returns the metadata of the sql template as a resultset.
+   * Returns the metadata of the sql template as a resultset (which will 
contain
+   * the metadata).
    * @param sqlTemplate sql template of the PreparedStatement
    */
-  ResultSetMetaData*  preparedStatementGetMetaData(const std::wstring 
&sqlTemplate)
+  DriverResultSet*  preparedStatementGetMetaData(const std::wstring 
&sqlTemplate)
                           throw (SocketIOException, BackendException, 
ProtocolException, 
                             NotImplementedException, UnexpectedException);
     
Index: carob/include/Statement.hpp
diff -u carob/include/Statement.hpp:1.26 carob/include/Statement.hpp:1.27
--- carob/include/Statement.hpp:1.26    Thu Jan 12 18:05:05 2006
+++ carob/include/Statement.hpp Fri Jan 13 12:51:47 2006
@@ -375,12 +375,11 @@
   /** Current result for a read request */
   DriverResultSet*        lastResultPtr;
   /**
-   * Metadata corresponding either to the lastResultPtr's metadata (if
-   * <code>getMetaData()</code> was called right after a read request) or to 
this
-   * statement metadata (thus becoming a prepared statement) if 
-   * <code>getMetaData()</code> was called before a read query that returned a
-   * valid resultset
+   * ResultSet containing the metadata got from
+   * Connection#preparedStatementGetMetaData(Request)
    */
+  DriverResultSet*        metadata_holder_ptr;
+  /** metadata got from #getMetaData() */
   ResultSetMetaData*      rs_metadata_ptr;
   /** Update count for a write request */
   int                     lastUpdateCount;
Index: carob/src/Connection.cpp
diff -u carob/src/Connection.cpp:1.56 carob/src/Connection.cpp:1.57
--- carob/src/Connection.cpp:1.56       Fri Jan 13 11:31:32 2006
+++ carob/src/Connection.cpp    Fri Jan 13 12:51:47 2006
@@ -22,7 +22,6 @@
 #include "Connection.hpp"
 #include "Statement.hpp"
 #include "ParameterStatement.hpp"
-#include "ResultSetMetaData.hpp"
 
 using std::wstring;
 
@@ -495,13 +494,13 @@
         L"Request cannot be processed : connection is closed!");
 }
 
-ResultSetMetaData* Connection::preparedStatementGetMetaData(const wstring 
&sqlTemplate)
+DriverResultSet* Connection::preparedStatementGetMetaData(const wstring 
&sqlTemplate)
     throw (SocketIOException, BackendException, ProtocolException, 
NotImplementedException,
     UnexpectedException)
 {
   checkIfConnected();
   wstring fctName(L"Connection::PreparedStatementGetMetaData");
-  
+
   LockScope ls(&connectionCS);
 
   sendCommand(*driverSocketPtr, PreparedStatementGetMetaData);
@@ -510,8 +509,7 @@
   if (isDebugEnabled())
     logDebug(fctName, L"Statement sent successfully");
 
-  DriverResultSet* drsPtr = receiveResultSet();
-  return new ResultSetMetaData(drsPtr);
+  return receiveResultSet();
 }
 
 void Connection::setConnectionParametersOnRequest(Request &request)
Index: carob/src/Statement.cpp
diff -u carob/src/Statement.cpp:1.24 carob/src/Statement.cpp:1.25
--- carob/src/Statement.cpp:1.24        Thu Jan 12 17:33:46 2006
+++ carob/src/Statement.cpp     Fri Jan 13 12:51:47 2006
@@ -35,6 +35,7 @@
 sql_request(L""),
 connectionPtr(c),
 lastResultPtr(NULL),
+metadata_holder_ptr(NULL),
 rs_metadata_ptr(NULL),
 lastUpdateCount(-1),
 timeout(0),
@@ -65,8 +66,8 @@
   resultList.clear();
   lastResultPtr = NULL;
   lastUpdateCount = -1;
-  delete rs_metadata_ptr;
-  rs_metadata_ptr = NULL;
+  delete rs_metadata_ptr; rs_metadata_ptr = NULL;
+  delete metadata_holder_ptr; metadata_holder_ptr = NULL;
 }
 
 void Statement::removeResultSetFromList(DriverResultSet* drsPtr)
@@ -274,14 +275,17 @@
     UnexpectedException)
 {
   // clean-up old one (if none, won't do anything)
+  delete metadata_holder_ptr; metadata_holder_ptr = NULL;
   delete rs_metadata_ptr; rs_metadata_ptr = NULL;
+
   if (lastResultPtr != NULL)
   {
     rs_metadata_ptr = new ResultSetMetaData(lastResultPtr);
   }
   else
   {
-    rs_metadata_ptr = connectionPtr->preparedStatementGetMetaData(sql_request);
+    metadata_holder_ptr = 
connectionPtr->preparedStatementGetMetaData(sql_request);
+    rs_metadata_ptr = new ResultSetMetaData(metadata_holder_ptr);
   }
   return rs_metadata_ptr;
 }

_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits

Reply via email to