summaryrefslogtreecommitdiff
path: root/odb/mysql/statement.hxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2024-01-25 18:52:59 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2024-01-25 18:52:59 +0300
commit3a160a80c788d81e48acf19a2cf68f29cf125dae (patch)
tree8bf000b3ae959d56367c15aa214a95d24b096905 /odb/mysql/statement.hxx
parent35bdfb3e3604527f36f046928324346e8b37b46b (diff)
Turn libodb-mysql repository into package for muti-package repositorylibodb-mysql
Diffstat (limited to 'odb/mysql/statement.hxx')
-rw-r--r--odb/mysql/statement.hxx327
1 files changed, 0 insertions, 327 deletions
diff --git a/odb/mysql/statement.hxx b/odb/mysql/statement.hxx
deleted file mode 100644
index b1465ea..0000000
--- a/odb/mysql/statement.hxx
+++ /dev/null
@@ -1,327 +0,0 @@
-// file : odb/mysql/statement.hxx
-// license : GNU GPL v2; see accompanying LICENSE file
-
-#ifndef ODB_MYSQL_STATEMENT_HXX
-#define ODB_MYSQL_STATEMENT_HXX
-
-#include <odb/pre.hxx>
-
-#include <string>
-#include <cstddef> // std::size_t
-
-#include <odb/statement.hxx>
-
-#include <odb/mysql/mysql.hxx>
-#include <odb/mysql/version.hxx>
-#include <odb/mysql/forward.hxx>
-#include <odb/mysql/binding.hxx>
-#include <odb/mysql/connection.hxx>
-#include <odb/mysql/auto-handle.hxx>
-
-#include <odb/mysql/details/export.hxx>
-
-namespace odb
-{
- namespace mysql
- {
- class connection;
-
- class LIBODB_MYSQL_EXPORT statement: public odb::statement
- {
- public:
- typedef mysql::connection connection_type;
-
- virtual
- ~statement () = 0;
-
- MYSQL_STMT*
- handle () const
- {
- return stmt_;
- }
-
- virtual const char*
- text () const;
-
- virtual connection_type&
- connection ()
- {
- return conn_;
- }
-
- // A statement can be empty. This is used to handle situations
- // where a SELECT or UPDATE statement ends up not having any
- // columns after processing. An empty statement cannot be
- // executed.
- //
- bool
- empty () const
- {
- return stmt_ == 0;
- }
-
- // Cancel the statement execution (e.g., result fetching) so
- // that another statement can be executed on the connection.
- //
- virtual void
- cancel ();
-
- protected:
- // We keep two versions to take advantage of std::string COW.
- //
- statement (connection_type&,
- const std::string& text,
- statement_kind,
- const binding* process,
- bool optimize);
-
- statement (connection_type&,
- const char* text,
- statement_kind,
- const binding* process,
- bool optimize,
- bool copy_text);
-
- // Process the bind array so that all non-NULL entries are at
- // the beginning. Return the actual number of bound columns.
- //
- static std::size_t
- process_bind (MYSQL_BIND*, std::size_t n);
-
- // Restore the original locations of the NULL entries in the bind
- // array.
- //
- static void
- restore_bind (MYSQL_BIND*, std::size_t n);
-
- private:
- void
- init (std::size_t text_size,
- statement_kind,
- const binding* process,
- bool optimize);
-
- protected:
- connection_type& conn_;
- std::string text_copy_;
- const char* text_;
- auto_handle<MYSQL_STMT> stmt_;
- };
-
- class LIBODB_MYSQL_EXPORT select_statement: public statement
- {
- public:
- virtual
- ~select_statement ();
-
- select_statement (connection_type& conn,
- const std::string& text,
- bool process_text,
- bool optimize_text,
- binding& param,
- binding& result);
-
- select_statement (connection_type& conn,
- const char* text,
- bool process_text,
- bool optimize_text,
- binding& param,
- binding& result,
- bool copy_text = true);
-
- select_statement (connection_type& conn,
- const std::string& text,
- bool process_text,
- bool optimize_text,
- binding& result);
-
- select_statement (connection_type& conn,
- const char* text,
- bool process_text,
- bool optimize_text,
- binding& result,
- bool copy_text = true);
-
- enum result
- {
- success,
- no_data,
- truncated
- };
-
- void
- execute ();
-
- void
- cache ();
-
- bool
- cached () const
- {
- return cached_;
- }
-
- // Can only be called on a cached result.
- //
- std::size_t
- result_size () const
- {
- return size_;
- }
-
- // Number of rows already fetched.
- //
- std::size_t
- fetched () const
- {
- return rows_;
- }
-
- // Fetch next or current row depending on the next argument.
- // Note that fetching of the current row is only supported
- // if the result is cached.
- //
- result
- fetch (bool next = true);
-
- void
- refetch ();
-
- void
- free_result ();
-
- virtual void
- cancel ();
-
- private:
- select_statement (const select_statement&);
- select_statement& operator= (const select_statement&);
-
- private:
- bool end_;
- bool cached_;
- bool freed_;
- std::size_t rows_;
- std::size_t size_;
-
-#if MYSQL_VERSION_ID >= 50503
- bool out_params_;
-#endif
-
- binding* param_;
- std::size_t param_version_;
-
- binding& result_;
- std::size_t result_version_;
- };
-
- struct LIBODB_MYSQL_EXPORT auto_result
- {
- explicit auto_result (select_statement& s): s_ (s) {}
- ~auto_result () {s_.free_result ();}
-
- private:
- auto_result (const auto_result&);
- auto_result& operator= (const auto_result&);
-
- private:
- select_statement& s_;
- };
-
- class LIBODB_MYSQL_EXPORT insert_statement: public statement
- {
- public:
- virtual
- ~insert_statement ();
-
- insert_statement (connection_type& conn,
- const std::string& text,
- bool process_text,
- binding& param,
- binding* returning);
-
- insert_statement (connection_type& conn,
- const char* text,
- bool process_text,
- binding& param,
- binding* returning,
- bool copy_text = true);
-
- // Return true if successful and false if the row is a duplicate.
- // All other errors are reported by throwing exceptions.
- //
- bool
- execute ();
-
- private:
- insert_statement (const insert_statement&);
- insert_statement& operator= (const insert_statement&);
-
- private:
- binding& param_;
- std::size_t param_version_;
-
- binding* returning_;
- };
-
- class LIBODB_MYSQL_EXPORT update_statement: public statement
- {
- public:
- virtual
- ~update_statement ();
-
- update_statement (connection_type& conn,
- const std::string& text,
- bool process_text,
- binding& param);
-
- update_statement (connection_type& conn,
- const char* text,
- bool process_text,
- binding& param,
- bool copy_text = true);
-
- unsigned long long
- execute ();
-
- private:
- update_statement (const update_statement&);
- update_statement& operator= (const update_statement&);
-
- private:
- binding& param_;
- std::size_t param_version_;
- };
-
- class LIBODB_MYSQL_EXPORT delete_statement: public statement
- {
- public:
- virtual
- ~delete_statement ();
-
- delete_statement (connection_type& conn,
- const std::string& text,
- binding& param);
-
- delete_statement (connection_type& conn,
- const char* text,
- binding& param,
- bool copy_text = true);
-
- unsigned long long
- execute ();
-
- private:
- delete_statement (const delete_statement&);
- delete_statement& operator= (const delete_statement&);
-
- private:
- binding& param_;
- std::size_t param_version_;
- };
- }
-}
-
-#include <odb/post.hxx>
-
-#endif // ODB_MYSQL_STATEMENT_HXX