00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef GUARD_SQLITE_COMMAND_HPP_INCLUDED
00033 #define GUARD_SQLITE_COMMAND_HPP_INCLUDED
00034
00035 #include <boost/cstdint.hpp>
00036 #include <boost/noncopyable.hpp>
00037 #include <sqlite/connection.hpp>
00038 #include <vector>
00039
00040 struct sqlite3_stmt;
00041
00042 namespace sqlite{
00046 struct null_type{};
00047
00051 extern null_type nil;
00052
00053
00057 struct command : boost::noncopyable{
00066 command(connection & con, std::string const & sql);
00067
00070 virtual ~command();
00071
00074 void clear();
00075
00080 bool emit();
00081
00085 bool operator()();
00086
00090 void bind(int idx);
00091
00096 void bind(int idx, int v);
00097
00102 void bind(int idx, boost::int64_t v);
00103
00108 void bind(int idx, double v);
00109
00114 void bind(int idx, std::string const & v);
00115
00121 void bind(int idx, void const * buf, size_t buf_size);
00122
00128 void bind(int idx, std::vector<unsigned char> const & v);
00129
00137 command & operator % (null_type const & p);
00138
00144 command & operator % (int p);
00145
00151 command & operator % (boost::int64_t p);
00152
00158 command & operator % (double p);
00159
00166 command & operator % (std::string const & p);
00167
00174 command & operator % (std::vector<unsigned char> const & p);
00175
00176 protected:
00177 void access_check();
00178 bool step();
00179 struct sqlite3 * get_handle();
00180 private:
00181 void prepare();
00182 void finalize();
00183 private:
00184 connection & m_con;
00185 std::string m_sql;
00186 protected:
00187 sqlite3_stmt * stmt;
00188 private:
00189 int last_arg_idx;
00190 };
00191 }
00192
00193 #endif //GUARD_SQLITE_COMMAND_HPP_INCLUDED
00194