summaryrefslogtreecommitdiff
path: root/libodb/odb/statement.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libodb/odb/statement.hxx')
-rw-r--r--libodb/odb/statement.hxx108
1 files changed, 108 insertions, 0 deletions
diff --git a/libodb/odb/statement.hxx b/libodb/odb/statement.hxx
new file mode 100644
index 0000000..83513c0
--- /dev/null
+++ b/libodb/odb/statement.hxx
@@ -0,0 +1,108 @@
+// file : odb/statement.hxx
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef ODB_STATEMENT_HXX
+#define ODB_STATEMENT_HXX
+
+#include <odb/pre.hxx>
+
+#include <string>
+#include <cstddef> // std::size_t
+
+#include <odb/forward.hxx> // connection
+
+#include <odb/details/export.hxx>
+#include <odb/details/shared-ptr.hxx>
+
+namespace odb
+{
+ class LIBODB_EXPORT statement: public details::shared_base
+ {
+ private:
+ statement (const statement&);
+ statement& operator= (const statement&);
+
+ public:
+ typedef odb::connection connection_type;
+
+ virtual const char*
+ text () const = 0;
+
+ virtual connection_type&
+ connection () = 0;
+
+ virtual
+ ~statement () = 0;
+
+ protected:
+ statement () {}
+
+ // Statement processing. Kept public only for testing.
+ //
+ public:
+ // Expected statement structure:
+ //
+ // INSERT INTO table\n
+ // [(a,\n
+ // b)\n]
+ // [OUTPUT ...\n]
+ // [VALUES\n
+ // ($1,\n
+ // $2)[\n]]
+ // [DEFAULT VALUES[\n]]
+ // [RETURNING ...]
+ // [; SELECT ...]
+ //
+ static void
+ process_insert (std::string& result,
+ const char* statement,
+ const void* const* bind, // Array of bind buffer pointers.
+ std::size_t bind_size, // Number of bind elements.
+ std::size_t bind_skip, // Offset to the next bind.
+ char param_symbol, // $, ?, :, etc.
+ char param_symbol2 = '\0');
+
+ // Expected statement structure:
+ //
+ // UPDATE table\n
+ // SET\n
+ // a=$1,\n
+ // b=$2[\n]
+ // [OUTPUT ...]
+ // [WHERE ...]
+ //
+ static void
+ process_update (std::string& result,
+ const char* statement,
+ const void* const* bind, // Array of bind buffer pointers.
+ std::size_t bind_size, // Number of bind elements.
+ std::size_t bind_skip, // Offset to the next bind.
+ char param_symbol, // $, ?, :, etc.
+ char param_symbol2 = '\0');
+
+
+ // Expected statement structure:
+ //
+ // SELECT\n
+ // [schema.]table.a [AS b],\n
+ // alias.b\n
+ // FROM [schema.]table[\n]
+ // [{A-Z }* JOIN [schema.]table [AS alias][ ON ...][\n]]*
+ // [WHERE ...]
+ //
+ static void
+ process_select (std::string& result,
+ const char* statement,
+ const void* const* bind, // Array of bind buffer pointers.
+ std::size_t bind_size, // Number of bind elements.
+ std::size_t bind_skip, // Offset to the next bind.
+ char quote_open, // Identifier opening quote.
+ char quote_close, // Identifier closing quote.
+ bool optimize, // Remove unused JOINs.
+ bool as = true); // JOINs use AS keyword.
+ };
+}
+
+#include <odb/post.hxx>
+
+#endif // ODB_STATEMENT_HXX