sql_buffer.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 /***********************************************************************
00005  Copyright (c) 2007-2008 by Educational Technology Resources, Inc. and
00006  (c) 2007 by Jonathan Wakely.  Others may also hold copyrights on
00007  code in this file.  See the CREDITS.txt file in the top directory
00008  of the distribution for details.
00009 
00010  This file is part of MySQL++.
00011 
00012  MySQL++ is free software; you can redistribute it and/or modify it
00013  under the terms of the GNU Lesser General Public License as published
00014  by the Free Software Foundation; either version 2.1 of the License, or
00015  (at your option) any later version.
00016 
00017  MySQL++ is distributed in the hope that it will be useful, but WITHOUT
00018  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00019  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00020  License for more details.
00021 
00022  You should have received a copy of the GNU Lesser General Public
00023  License along with MySQL++; if not, write to the Free Software
00024  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
00025  USA
00026 ***********************************************************************/
00027 
00028 #if !defined(MYSQLPP_SQL_BUFFER_H)
00029 #define MYSQLPP_SQL_BUFFER_H
00030 
00031 #include "refcounted.h"
00032 #include "type_info.h"
00033 
00034 #include <string>
00035 
00036 namespace mysqlpp {
00037 
00040 
00041 class SQLBuffer
00042 {
00043 public:
00045         typedef size_t size_type;
00046 
00054         SQLBuffer(const char* data, size_type length, mysql_type_info type,
00055                         bool is_null) : data_(), length_(), type_(type),
00056                         is_null_(is_null)
00057                         { replace_buffer(data, length); }
00058 
00060         SQLBuffer(const std::string& s, mysql_type_info type, bool is_null) :
00061                         data_(), length_(), type_(type), is_null_(is_null)
00062         {
00063                 replace_buffer(s.data(), static_cast<size_type>(s.length()));
00064         }
00065 
00067         ~SQLBuffer() { delete[] data_; }
00068 
00070         SQLBuffer& assign(const char* data, size_type length,
00071                         mysql_type_info type = mysql_type_info::string_type,
00072                         bool is_null = false);
00073 
00075         SQLBuffer& assign(const std::string& s,
00076                         mysql_type_info type = mysql_type_info::string_type,
00077                         bool is_null = false);
00078 
00080         const char* data() const { return data_; }
00081 
00084         bool escape_q() const { return type_.escape_q(); }
00085 
00092         size_type length() const { return length_; }
00093 
00095         bool is_string() { return type_ == mysql_type_info::string_type; }
00096 
00103         bool is_null() const { return is_null_; }
00104 
00107         bool quote_q() const;
00108 
00110         void set_null() { is_null_ = true; }
00111 
00113         const mysql_type_info& type() const { return type_; }
00114 
00115 private:
00116         SQLBuffer(const SQLBuffer&);
00117         SQLBuffer& operator=(const SQLBuffer&);
00118 
00120         void init(const char* pd, size_type len, mysql_type_info type,
00121                         bool is_null);
00123         void replace_buffer(const char* pd, size_type length);
00124 
00125         const char* data_;              
00126         size_type length_;              
00127         mysql_type_info type_;  
00128         bool is_null_;                  
00129 };
00130 
00131 
00136 typedef RefCountedPointer<SQLBuffer> RefCountedBuffer;
00137 
00138 } // end namespace mysqlpp
00139 
00140 #endif // !defined(MYSQLPP_SQL_BUFFER_H)
00141 

Generated on Thu Jun 3 11:59:12 2010 for MySQL++ by  doxygen 1.4.7