Date: Friday, February 24, 2006 @ 15:55:45
  Author: marc
    Path: /cvsroot/carob/odbsequoia/src

Modified: abstract_item.cpp (1.8 -> 1.9) abstract_item.hpp (1.15 -> 1.16)
          connect.cpp (1.13 -> 1.14) stmt.hpp (1.9 -> 1.10) util.hpp (1.3
          -> 1.4)

Implemented our own ODBSeqException derived from CarobException, 
as well as the corresponding odbc_diag_ids different prefix in SQL diagnostics.


-------------------+
 abstract_item.cpp |   11 ++++++++---
 abstract_item.hpp |   19 +++++++++++++------
 connect.cpp       |    7 +++++--
 stmt.hpp          |   19 +++++++++++++++++--
 util.hpp          |   11 +++++++++++
 5 files changed, 54 insertions(+), 13 deletions(-)


Index: odbsequoia/src/abstract_item.cpp
diff -u odbsequoia/src/abstract_item.cpp:1.8 
odbsequoia/src/abstract_item.cpp:1.9
--- odbsequoia/src/abstract_item.cpp:1.8        Wed Feb  8 18:21:12 2006
+++ odbsequoia/src/abstract_item.cpp    Fri Feb 24 15:55:45 2006
@@ -137,8 +137,8 @@
         *StringLengthPtr = wlen*sizeof(SQLWCHAR);
         return SQL_SUCCESS;
 
-        // 2. fields that cannot be get using get_diag_recw() above
-        // TODO
+        // TODO: 2. fields that cannot be get using get_diag_recw() above
+
 
     default:
             return SQL_ERROR;
@@ -168,13 +168,18 @@
 void
 ODBCItem::push_diag_chain(const CarobNS::CarobException& head)
 {
+    // Generic ids for generic CarobException
+    std::wstring prefix = get_carob_diagids();
 
-    std::wstring prefix = get_diagids();
+    // Now change prefix ids for more specific exceptions
 
     // can't rethrow and catch, (even by pointer) because of slicing
     if (0 != dynamic_cast<const CarobNS::BackendException*>(&head))
         prefix = get_backend_diagids();
 
+    if (0 != dynamic_cast<const ODBSeqException*>(&head))
+        prefix = get_odbc_diagids();
+
     for (const CarobNS::CarobException *current = &head;
          NULL != current; current = current->getNext())
     {        
Index: odbsequoia/src/abstract_item.hpp
diff -u odbsequoia/src/abstract_item.hpp:1.15 
odbsequoia/src/abstract_item.hpp:1.16
--- odbsequoia/src/abstract_item.hpp:1.15       Thu Feb  9 18:07:31 2006
+++ odbsequoia/src/abstract_item.hpp    Fri Feb 24 15:55:45 2006
@@ -65,8 +65,9 @@
 public:
     ODBCItem(const ODBCItem& creator) :
         owner(creator),
-        diagids(L"[Continuent][odbsequoia]"),
-        backend_diagids(L"[INVALID_NOT_CONNECTED]")
+        carob_diagids(L"[Continuent][carob]"),
+        backend_diagids(L"[INVALID_NOT_CONNECTED]"),
+        odbc_diagids(L"[Continuent][odbsequoia]")
     { }
 
     virtual SQLRETURN
@@ -92,10 +93,11 @@
     void
     push_diag_chain(const CarobNS::CarobException& ce);
 
-    // get___diagids() need to be public because we want to call: 
owner.get_diagids() 
-    /** Returns our own vendor and component IDs, used to prefix the diag 
message. */
+    // get_X_diagids() need to be public because we want to call: 
owner.get_diagids() 
+
+    /** Returns our own vendor and carob component IDs, used to prefix the 
diag message. */
     virtual const std::wstring&
-    get_diagids() const { return diagids; };
+    get_carob_diagids() const { return carob_diagids; };
 
     /** Returns the vendor, component and data source IDs of the
      backend we are faking. Used to prefix the diag message. Defined
@@ -103,9 +105,14 @@
     virtual const std::wstring&
     get_backend_diagids() const { return backend_diagids; };
 
+    /** Returns our own vendor and odbc component IDs */
+    virtual const std::wstring&
+    get_odbc_diagids() const { return odbc_diagids; };
+
 protected:
-    std::wstring diagids;
+    std::wstring carob_diagids;
     std::wstring backend_diagids;
+    std::wstring odbc_diagids;
 
     virtual SQLRETURN
     get_header_diag_fieldw(SQLSMALLINT DiagIdentifier,
Index: odbsequoia/src/connect.cpp
diff -u odbsequoia/src/connect.cpp:1.13 odbsequoia/src/connect.cpp:1.14
--- odbsequoia/src/connect.cpp:1.13     Thu Jan 26 12:21:36 2006
+++ odbsequoia/src/connect.cpp  Fri Feb 24 15:55:45 2006
@@ -66,8 +66,11 @@
 {
 
     std::wstring wide_dsn(fromSQLW(sqlwdsn, dsnlen));
-    this->diagids += L"[";
-    this->diagids += wide_dsn + L"]";
+    {
+        std::wstring diag_suffix(std::wstring(L"[") + wide_dsn + L"]");
+        this->carob_diagids += diag_suffix;
+        this->odbc_diagids += diag_suffix;
+    }
 
     char temp[MAX_VALUE_LEN];
 
Index: odbsequoia/src/stmt.hpp
diff -u odbsequoia/src/stmt.hpp:1.9 odbsequoia/src/stmt.hpp:1.10
--- odbsequoia/src/stmt.hpp:1.9 Mon Jan 23 13:00:44 2006
+++ odbsequoia/src/stmt.hpp     Fri Feb 24 15:55:45 2006
@@ -46,10 +46,25 @@
     exec_directw(const SQLWCHAR *StatementText, SQLINTEGER TextLength);
     
     const std::wstring&
-    get_diagids() const { return owner.get_diagids(); }; // connection has the 
prefix/knows the source
+    get_carob_diagids() const
+    {   // the owning connection has the prefix/knows the source 
+        return owner.get_carob_diagids();
+    };
 
     const std::wstring&
-    get_backend_diagids() const { return owner.get_backend_diagids(); }; // 
idem
+    get_backend_diagids() const
+    {   // idem
+        return owner.get_backend_diagids();
+    };
+
+    const std::wstring&
+    get_odbc_diagids() const
+    {   // idem
+        return owner.get_odbc_diagids();
+    };
+
+    SQLRETURN
+    fetch();
 
 protected:
     SQLRETURN
Index: odbsequoia/src/util.hpp
diff -u odbsequoia/src/util.hpp:1.3 odbsequoia/src/util.hpp:1.4
--- odbsequoia/src/util.hpp:1.3 Thu Jan 12 21:15:20 2006
+++ odbsequoia/src/util.hpp     Fri Feb 24 15:55:45 2006
@@ -22,6 +22,8 @@
 #ifndef ODBSEQ_UTIL
 #define ODBSEQ_UTIL
 
+#include "CarobException.hpp"
+
 #include <sql.h>
 #include <sqlucode.h>
 
@@ -44,6 +46,15 @@
 toSQLW(const std::wstring& in,
        SQLWCHAR * const outbuf, const SQLSMALLINT bufsize, SQLSMALLINT * 
outsize);
 
+class ODBSeqException : public CarobNS::CarobException
+{
+public:
+    ODBSeqException(std::wstring state, std::wstring msg) :
+        CarobException(msg)
+    { SQLState = state; };
+};
+
+
 #endif // include only once
 
 /*

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

Reply via email to