[odb-users] Print SQL statement before they are sent to server

Boris Kolpackov boris at codesynthesis.com
Mon Sep 15 10:21:16 EDT 2014


Hi Quentin,

Quentin Deldycke <quentindeldycke at gmail.com> writes:

> I have a problem with a request where it fails with error: 1054.
> My request is quite complicated. And i would like to have a trace
> before it is sent to the server. Is this possible? I have enabled trace
> as in chapter 3.13. but it is not shown!

The reason it is not printed is because the error is probably detected
during preparation, not execution. And the default stderr_tracer only
traces statement executions.

So what you can do is create your own tracer that prints the statements
being prepared. Something along these lines:

#include <odb/tracer.hxx>

struct diag_tracer: odb::tracer
{
  virtual void
  prepare (odb::connection&, const odb::statement& s)
  {
    cerr << "PREPARE " << s.text () << endl;
  }

  virtual void
  execute (odb::connection&, const char* statement)
  {
    cerr << statement << endl;
  }
};

I've also added an entry to our TODO to support this with stderr_tracer
somehow since this is probably a fairly common scenario.

Boris



More information about the odb-users mailing list