File: common_8h-source.html

package info (click to toggle)
mysql%2B%2B 3.1.0-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 11,640 kB
  • sloc: cpp: 35,569; sh: 3,113; makefile: 946; perl: 786
file content (211 lines) | stat: -rw-r--r-- 20,748 bytes parent folder | download
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&nbsp;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&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>File&nbsp;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 &lt;winsock.h&gt;</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 &lt; 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&lt;std::ostream&amp;&gt;(*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) &amp;&amp; !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) &amp;&amp; !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 &lt;mysql/mysql_version.h&gt;</span>
<a name="l00130"></a>00130 <span class="preprocessor">#else</span>
<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#       include &lt;mysql_version.h&gt;</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 &lt;mysql/mysql.h&gt;</span>
<a name="l00188"></a>00188 <span class="preprocessor">#else</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#       include &lt;mysql.h&gt;</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&nbsp;
<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>