VSQLite++
0.3
|
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