Date: Wednesday, February 8, 2006 @ 18:21:12
Author: marc
Path: /cvsroot/carob/odbsequoia/src
Modified: abstract_item.cpp (1.7 -> 1.8) abstract_item.hpp (1.13 -> 1.14)
Simplified _PROTECT_SQLRETURN macro: CarobException identification is now done
in push_diag_chain() method instead.
-------------------+
abstract_item.cpp | 13 +++++++++++--
abstract_item.hpp | 10 +++-------
2 files changed, 14 insertions(+), 9 deletions(-)
Index: odbsequoia/src/abstract_item.cpp
diff -u odbsequoia/src/abstract_item.cpp:1.7
odbsequoia/src/abstract_item.cpp:1.8
--- odbsequoia/src/abstract_item.cpp:1.7 Mon Jan 23 13:00:44 2006
+++ odbsequoia/src/abstract_item.cpp Wed Feb 8 18:21:12 2006
@@ -166,13 +166,22 @@
void
-ODBCItem::push_diag_chain(const std::wstring& prefix, const
CarobNS::CarobException& ce)
+ODBCItem::push_diag_chain(const CarobNS::CarobException& head)
{
- for (const CarobNS::CarobException *current = &ce;
+
+ std::wstring prefix = get_diagids();
+
+ // can't rethrow and catch, (even by pointer) because of slicing
+ if (0 != dynamic_cast<const CarobNS::BackendException*>(&head))
+ prefix = get_backend_diagids();
+
+ for (const CarobNS::CarobException *current = &head;
NULL != current; current = current->getNext())
+ {
diag_records.push_back(
DiagRecord::DiagRecord(prefix, *current)
);
+ }
}
/*
Index: odbsequoia/src/abstract_item.hpp
diff -u odbsequoia/src/abstract_item.hpp:1.13
odbsequoia/src/abstract_item.hpp:1.14
--- odbsequoia/src/abstract_item.hpp:1.13 Wed Feb 8 16:45:30 2006
+++ odbsequoia/src/abstract_item.hpp Wed Feb 8 18:21:12 2006
@@ -38,14 +38,9 @@
#define _PROTECT_SQLRETURN(slf, method) \
try { return slf->method; } \
- catch (const BackendException& ce) \
- { \
- slf->push_diag_chain(slf->get_backend_diagids(), ce); \
- return SQL_ERROR; \
- } \
catch (const CarobException& ce) \
{ \
- slf->push_diag_chain(slf->get_diagids(), ce); \
+ slf->push_diag_chain(ce); \
return SQL_ERROR; \
}
@@ -93,8 +88,9 @@
clear_diags() { diag_records.clear(); };
void
- push_diag_chain(const std::wstring& prefix, const CarobNS::CarobException&
ce);
+ 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. */
virtual const std::wstring&
get_diagids() const { return diagids; };
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits