1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>MySQL++ Reference Manual</title>
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1">
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="refman.css" rel="stylesheet" type="text/css">
</head>
<body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
</ul></div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File List</span></a></li>
<li><a href="globals.html"><span>File Members</span></a></li>
</ul></div>
<h1>common.h</h1><a href="common_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
<a name="l00002"></a>00002
<a name="l00003"></a>00003
<a name="l00004"></a>00004
<a name="l00005"></a>00005
<a name="l00006"></a>00006
<a name="l00007"></a>00007 <span class="comment">/***********************************************************************</span>
<a name="l00008"></a>00008 <span class="comment"> Copyright (c) 1998 by Kevin Atkinson, (c) 1999-2001 by MySQL AB,</span>
<a name="l00009"></a>00009 <span class="comment"> (c) 2004-2009 by Educational Technology Resources, Inc., and</span>
<a name="l00010"></a>00010 <span class="comment"> (c) 2009 by Warren Young. Others may also hold copyrights on code</span>
<a name="l00011"></a>00011 <span class="comment"> in this file. See the CREDITS.txt file in the top directory of the</span>
<a name="l00012"></a>00012 <span class="comment"> distribution for details.</span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment"> This file is part of MySQL++.</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> MySQL++ is free software; you can redistribute it and/or modify it</span>
<a name="l00017"></a>00017 <span class="comment"> under the terms of the GNU Lesser General Public License as published</span>
<a name="l00018"></a>00018 <span class="comment"> by the Free Software Foundation; either version 2.1 of the License, or</span>
<a name="l00019"></a>00019 <span class="comment"> (at your option) any later version.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment"> MySQL++ is distributed in the hope that it will be useful, but WITHOUT</span>
<a name="l00022"></a>00022 <span class="comment"> ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or</span>
<a name="l00023"></a>00023 <span class="comment"> FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public</span>
<a name="l00024"></a>00024 <span class="comment"> License for more details.</span>
<a name="l00025"></a>00025 <span class="comment"></span>
<a name="l00026"></a>00026 <span class="comment"> You should have received a copy of the GNU Lesser General Public</span>
<a name="l00027"></a>00027 <span class="comment"> License along with MySQL++; if not, write to the Free Software</span>
<a name="l00028"></a>00028 <span class="comment"> Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301</span>
<a name="l00029"></a>00029 <span class="comment"> USA</span>
<a name="l00030"></a>00030 <span class="comment">***********************************************************************/</span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#if !defined(MYSQLPP_COMMON_H)</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define MYSQLPP_COMMON_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="preprocessor">#if !defined(DOXYGEN_IGNORE)</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">// Doxygen will not generate documentation for the following stuff.</span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="comment">// Enable SSQLS by default. Turned off below on platforms where we</span>
<a name="l00039"></a>00039 <span class="comment">// know it doesn't work.</span>
<a name="l00040"></a>00040 <span class="preprocessor">#define MYSQLPP_SSQLS_COMPATIBLE</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a>00042 <span class="comment">// For all platforms but Visual C++ 2003, the following macro is just</span>
<a name="l00043"></a>00043 <span class="comment">// an alias for "*this". It needs a more complicated definition on</span>
<a name="l00044"></a>00044 <span class="comment">// VC++ 2003 to work around an error in the overloaded operator lookup</span>
<a name="l00045"></a>00045 <span class="comment">// logic. For an explanation of the problem, see:</span>
<a name="l00046"></a>00046 <span class="comment">// http://groups.google.com/group/microsoft.public.vc.stl/browse_thread/thread/9a68d84644e64f15</span>
<a name="l00047"></a>00047 <span class="preprocessor">#define MYSQLPP_QUERY_THISPTR *this</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
<a name="l00049"></a>00049 <span class="comment">// Work out major platform-specific stuff here.</span>
<a name="l00050"></a>00050 <span class="preprocessor">#if defined(__WIN32__) || defined(_WIN32)</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor"># define MYSQLPP_PLATFORM_WINDOWS</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span> <span class="comment">// Windows compiler support. Tested with Microsoft Visual C++,</span>
<a name="l00053"></a>00053 <span class="comment">// Borland C++ Builder, and MinGW GCC.</span>
<a name="l00054"></a>00054 <span class="preprocessor"># include <winsock.h></span>
<a name="l00055"></a>00055
<a name="l00056"></a>00056 <span class="comment">// Stuff for Visual C++ only</span>
<a name="l00057"></a>00057 <span class="preprocessor"># if defined(_MSC_VER)</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor"># define MYSQLPP_PLATFORM_VISUAL_CPP</span>
<a name="l00059"></a>00059 <span class="preprocessor"></span> <span class="comment">// MS *still* doesn't ship stdint.h, through VC++ 2008 at least.</span>
<a name="l00060"></a>00060 <span class="comment">// This means we have to take a wild guess at appropriate</span>
<a name="l00061"></a>00061 <span class="comment">// integer types in lib/sql_types.h. See test/inttypes.cpp for</span>
<a name="l00062"></a>00062 <span class="comment">// tests that check whether we've guessed well.</span>
<a name="l00063"></a>00063 <span class="preprocessor"># define MYSQLPP_NO_STDINT_H</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor"># if _MSC_VER < 1400</span>
<a name="l00065"></a>00065 <span class="preprocessor"></span> <span class="comment">// Workarounds for limitations of VC++ 2003 that are fixed</span>
<a name="l00066"></a>00066 <span class="comment">// in 2005 and later.</span>
<a name="l00067"></a>00067 <span class="preprocessor"># undef MYSQLPP_QUERY_THISPTR</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor"># define MYSQLPP_QUERY_THISPTR dynamic_cast<std::ostream&>(*this)</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor"># undef MYSQLPP_SSQLS_COMPATIBLE</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor"># elif !defined(_STLP_VERSION) && !defined(_STLP_VERSION_STR)</span>
<a name="l00071"></a>00071 <span class="preprocessor"></span> <span class="comment">// VC++ 2005 or newer and not using STLport, so #define</span>
<a name="l00072"></a>00072 <span class="comment">// portability flags indicating features we can use from</span>
<a name="l00073"></a>00073 <span class="comment">// the compiler's native RTL.</span>
<a name="l00074"></a>00074 <span class="preprocessor"># define MYSQLPP_HAVE_LOCALTIME_S</span>
<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor"># define MYSQLPP_HAVE_STD__NOINIT</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span>
<a name="l00078"></a>00078 <span class="comment">// Disable complaints about STL data members: VC++ believes</span>
<a name="l00079"></a>00079 <span class="comment">// these need to be __declspec(dllexport) for some reason.</span>
<a name="l00080"></a>00080 <span class="preprocessor"># pragma warning(disable: 4251)</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span> <span class="comment">// Disable complaint that VC++ doesn't grok throw specs</span>
<a name="l00082"></a>00082 <span class="preprocessor"># pragma warning(disable: 4290)</span>
<a name="l00083"></a>00083 <span class="preprocessor"></span> <span class="comment">// Disable whining about using 'this' as a member initializer on VC++.</span>
<a name="l00084"></a>00084 <span class="preprocessor"># pragma warning(disable: 4355)</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span> <span class="comment">// Disable whining about implicit conversions to bool</span>
<a name="l00086"></a>00086 <span class="preprocessor"># pragma warning(disable: 4800)</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span> <span class="comment">// Disable nagging about new "secure" functions like strncpy_s()</span>
<a name="l00088"></a>00088 <span class="preprocessor"># pragma warning(disable: 4996)</span>
<a name="l00089"></a>00089 <span class="preprocessor"></span> <span class="comment">// Call _snprintf() for VC++ version of snprintf() function</span>
<a name="l00090"></a>00090 <span class="preprocessor"># define snprintf _snprintf</span>
<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span>
<a name="l00093"></a>00093 <span class="comment">// Define DLL import/export tags for Windows compilers, where we build</span>
<a name="l00094"></a>00094 <span class="comment">// the library into a DLL, for LGPL license compatibility reasons.</span>
<a name="l00095"></a>00095 <span class="comment">// (This is based on a similar mechanism in wxWindows.)</span>
<a name="l00096"></a>00096
<a name="l00097"></a>00097 <span class="preprocessor"> #ifdef MYSQLPP_MAKING_DLL</span>
<a name="l00098"></a>00098 <span class="preprocessor"></span> <span class="comment">// When making the DLL, export tagged symbols, so they appear</span>
<a name="l00099"></a>00099 <span class="comment">// in the import library.</span>
<a name="l00100"></a>00100 <span class="preprocessor"> #define MYSQLPP_EXPORT __declspec(dllexport)</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor"> #elif !defined(MYSQLPP_NO_DLL)</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span> <span class="comment">// We must be _using_ the DLL, so import symbols instead.</span>
<a name="l00103"></a>00103 <span class="preprocessor"> #define MYSQLPP_EXPORT __declspec(dllimport)</span>
<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor"> #else</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span> <span class="comment">// Not making a DLL at all, so no-op these declspecs</span>
<a name="l00106"></a>00106 <span class="preprocessor"> #define MYSQLPP_EXPORT</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor"> #endif</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span>
<a name="l00109"></a>00109 <span class="comment">// We need to use the DOS/Windows path separator here</span>
<a name="l00110"></a>00110 <span class="preprocessor"> #define MYSQLPP_PATH_SEPARATOR '\\'</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span> <span class="comment">// If not VC++, MinGW, or Xcode, we assume we're on a system using</span>
<a name="l00113"></a>00113 <span class="comment">// autoconf, so bring in the config.h file it wrote containing the</span>
<a name="l00114"></a>00114 <span class="comment">// config test results. Only do this during the library build, and</span>
<a name="l00115"></a>00115 <span class="comment">// even then, not if included from a MySQL++ header file, since</span>
<a name="l00116"></a>00116 <span class="comment">// config.h cannot be safely installed with the other headers.</span>
<a name="l00117"></a>00117 <span class="preprocessor"># if defined(MYSQLPP_NOT_HEADER) && !defined(MYSQLPP_XCODE)</span>
<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor"># include "config.h"</span>
<a name="l00119"></a>00119 <span class="preprocessor"># endif</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>
<a name="l00121"></a>00121 <span class="comment">// Make DLL stuff a no-op on this platform.</span>
<a name="l00122"></a>00122 <span class="preprocessor"> #define MYSQLPP_EXPORT</span>
<a name="l00123"></a>00123 <span class="preprocessor"></span>
<a name="l00124"></a>00124 <span class="comment">// Assume POSIX path separator</span>
<a name="l00125"></a>00125 <span class="preprocessor"> #define MYSQLPP_PATH_SEPARATOR '/'</span>
<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00127"></a>00127 <span class="preprocessor"></span>
<a name="l00128"></a>00128 <span class="preprocessor">#if defined(MYSQLPP_MYSQL_HEADERS_BURIED)</span>
<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor"># include <mysql/mysql_version.h></span>
<a name="l00130"></a>00130 <span class="preprocessor">#else</span>
<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor"># include <mysql_version.h></span>
<a name="l00132"></a>00132 <span class="preprocessor">#endif</span>
<a name="l00133"></a>00133 <span class="preprocessor"></span>
<a name="l00134"></a>00134 <span class="keyword">namespace </span>mysqlpp {
<a name="l00135"></a>00135
<a name="l00138"></a>00138 <span class="keyword">const</span> <span class="keywordtype">bool</span> use_exceptions = <span class="keyword">true</span>;
<a name="l00139"></a>00139
<a name="l00141"></a>00141 <span class="keyword">enum</span> sql_cmp_type { sql_use_compare };
<a name="l00142"></a>00142
<a name="l00143"></a>00143 <span class="preprocessor">#if !defined(DOXYGEN_IGNORE)</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="comment">// Figure out how to get large integer support on this system. Suppress</span>
<a name="l00145"></a>00145 <span class="comment">// refman documentation for these typedefs, as they're system-dependent.</span>
<a name="l00146"></a>00146 <span class="preprocessor">#if defined(MYSQLPP_NO_LONG_LONGS)</span>
<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="comment">// Alias "longlong" and "ulonglong" to the regular "long" counterparts</span>
<a name="l00148"></a>00148 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ulonglong;
<a name="l00149"></a>00149 <span class="keyword">typedef</span> <span class="keywordtype">long</span> longlong;
<a name="l00150"></a>00150 <span class="preprocessor">#elif defined(_MSC_VER)</span>
<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="comment">// It's VC++, so we'll use Microsoft's 64-bit integer types</span>
<a name="l00152"></a>00152 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 ulonglong;
<a name="l00153"></a>00153 <span class="keyword">typedef</span> __int64 longlong;
<a name="l00154"></a>00154 <span class="preprocessor">#else</span>
<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="comment">// No better idea, so assume the C99 convention. If your compiler</span>
<a name="l00156"></a>00156 <span class="comment">// doesn't support this, please provide a patch to extend this ifdef, or</span>
<a name="l00157"></a>00157 <span class="comment">// define MYSQLPP_NO_LONG_LONGS.</span>
<a name="l00158"></a>00158 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> ulonglong;
<a name="l00159"></a>00159 <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> longlong;
<a name="l00160"></a>00160 <span class="preprocessor">#endif</span>
<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#endif // !defined(DOXYGEN_IGNORE)</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span>
<a name="l00163"></a>00163 <span class="preprocessor">#if !defined(MYSQLPP_NO_UNSIGNED_INT_TYPES)</span>
<a name="l00169"></a>00169 <span class="preprocessor">typedef unsigned long ulong;</span>
<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00171"></a>00171 <span class="preprocessor"></span>
<a name="l00172"></a>00172 } <span class="comment">// end namespace mysqlpp</span>
<a name="l00173"></a>00173
<a name="l00174"></a>00174 <span class="comment">// The MySQL headers define these macros, which is completely wrong in a</span>
<a name="l00175"></a>00175 <span class="comment">// C++ project. Undo the damage.</span>
<a name="l00176"></a>00176 <span class="preprocessor">#undef min</span>
<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">#undef max</span>
<a name="l00178"></a>00178 <span class="preprocessor"></span>
<a name="l00179"></a>00179 <span class="preprocessor">#endif // !defined(DOXYGEN_IGNORE)</span>
<a name="l00180"></a>00180 <span class="preprocessor"></span>
<a name="l00181"></a>00181
<a name="l00182"></a>00182 <span class="comment">// Now that we've defined all the stuff above, we can pull in the full</span>
<a name="l00183"></a>00183 <span class="comment">// MySQL header. Basically, the above largely replaces MySQL's my_global.h</span>
<a name="l00184"></a>00184 <span class="comment">// while actually working with C++. This is why we disobey the MySQL</span>
<a name="l00185"></a>00185 <span class="comment">// developer docs, which recommend including my_global.h before mysql.h.</span>
<a name="l00186"></a>00186 <span class="preprocessor">#if defined(MYSQLPP_MYSQL_HEADERS_BURIED)</span>
<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor"># include <mysql/mysql.h></span>
<a name="l00188"></a>00188 <span class="preprocessor">#else</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor"># include <mysql.h></span>
<a name="l00190"></a>00190 <span class="preprocessor">#endif</span>
<a name="l00191"></a>00191 <span class="preprocessor"></span>
<a name="l00192"></a>00192 <span class="preprocessor">#endif // !defined(MYSQLPP_COMMON_H)</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Jun 3 11:59:12 2010 for MySQL++ by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>
|