VSQLite++  0.3
include/sqlite/command.hpp
Go to the documentation of this file.
00001 /*##############################################################################
00002  VSQLite++ - virtuosic bytes SQLite3 C++ wrapper
00003 
00004  Copyright (c) 2006-2014 Vinzenz Feenstra vinzenz.feenstra@gmail.com
00005  All rights reserved.
00006 
00007  Redistribution and use in source and binary forms, with or without modification,
00008  are permitted provided that the following conditions are met:
00009 
00010  * Redistributions of source code must retain the above copyright notice,
00011    this list of conditions and the following disclaimer.
00012  * Redistributions in binary form must reproduce the above copyright notice,
00013    this list of conditions and the following disclaimer in the documentation
00014    and/or other materials provided with the distribution.
00015  * Neither the name of virtuosic bytes nor the names of its contributors may
00016    be used to endorse or promote products derived from this software without
00017    specific prior written permission.
00018 
00019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00020  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00023  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  POSSIBILITY OF SUCH DAMAGE.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends