summaryrefslogtreecommitdiff
path: root/libodb/odb/tracer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libodb/odb/tracer.cxx')
-rw-r--r--libodb/odb/tracer.cxx95
1 files changed, 95 insertions, 0 deletions
diff --git a/libodb/odb/tracer.cxx b/libodb/odb/tracer.cxx
new file mode 100644
index 0000000..1e636a7
--- /dev/null
+++ b/libodb/odb/tracer.cxx
@@ -0,0 +1,95 @@
+// file : odb/tracer.cxx
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#include <iostream>
+
+#include <odb/tracer.hxx>
+#include <odb/statement.hxx>
+
+using namespace std;
+
+namespace odb
+{
+ //
+ // tracer
+ //
+
+ tracer::
+ ~tracer ()
+ {
+ }
+
+ void tracer::
+ prepare (connection&, const statement&)
+ {
+ }
+
+ void tracer::
+ execute (connection& c, const statement& s)
+ {
+ execute (c, s.text ());
+ }
+
+ void tracer::
+ deallocate (connection&, const statement&)
+ {
+ }
+
+ //
+ // stderr_tracer
+ //
+
+ class stderr_tracer_type: public tracer
+ {
+ public:
+ stderr_tracer_type (bool full): full_ (full) {}
+
+ virtual void
+ prepare (connection&, const statement&);
+
+ virtual void
+ execute (connection&, const char* statement);
+
+ virtual void
+ deallocate (connection&, const statement&);
+
+ // Override the other version to get rid of a Sun CC warning.
+ //
+ virtual void
+ execute (connection&, const statement&);
+
+ private:
+ bool full_;
+ };
+
+ void stderr_tracer_type::
+ prepare (connection&, const statement& s)
+ {
+ if (full_)
+ cerr << "PREPARE " << s.text () << endl;
+ }
+
+ void stderr_tracer_type::
+ execute (connection&, const char* s)
+ {
+ cerr << s << endl;
+ }
+
+ void stderr_tracer_type::
+ deallocate (connection&, const statement& s)
+ {
+ if (full_)
+ cerr << "DEALLOCATE " << s.text () << endl;
+ }
+
+ void stderr_tracer_type::
+ execute (connection& c, const statement& s)
+ {
+ execute (c, s.text ());
+ }
+
+ static stderr_tracer_type stderr_tracer_ (false);
+ static stderr_tracer_type stderr_full_tracer_ (true);
+ tracer& stderr_tracer = stderr_tracer_;
+ tracer& stderr_full_tracer = stderr_full_tracer_;
+}