📄 query_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>query.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>query.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< QUERY.H >-------------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB Version 1.0 (c) 1999 GARRET * ? *</span>00003 <span class="comment">// (Main Memory Database Management System) * /\| *</span>00004 <span class="comment">// * / \ *</span>00005 <span class="comment">// Created: 20-Nov-98 K.A. Knizhnik * / [] \ *</span>00006 <span class="comment">// Last update: 10-Dec-98 K.A. Knizhnik * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Constructing and hashing database query statements</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __QUERY_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __QUERY_H__</span>00013 <span class="preprocessor"></span>00014 BEGIN_FASTDB_NAMESPACE00015 <a name="l00019"></a><a class="code" href="classdbQueryElement.html">00019</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY <a class="code" href="classdbQueryElement.html">dbQueryElement</a> { 00020 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00021 <span class="keyword">friend</span> <span class="keyword">class </span>dbCompiler;00022 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryExpression.html">dbQueryExpression</a>;00023 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryElementAllocator.html">dbQueryElementAllocator</a>;00024 <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00025 <span class="keyword">public</span>:00026 <span class="keyword">enum</span> ElementType { 00027 qExpression, <span class="comment">// part of SQL expression</span>00028 qVarBool,00029 qVarInt1,00030 qVarInt2,00031 qVarInt4,00032 qVarInt8,00033 qVarReal4,00034 qVarReal8,00035 qVarString,00036 qVarStringPtr,00037 qVarReference,00038 qVarRectangle, 00039 qVarArrayOfRef, 00040 qVarArrayOfInt4,00041 qVarArrayOfInt8,00042 qVarArrayOfRefPtr,00043 qVarArrayOfInt4Ptr,00044 qVarArrayOfInt8Ptr,00045 qVarRawData,00046 <span class="preprocessor">#ifdef USE_STD_STRING</span>00047 <span class="preprocessor"></span> qVarStdString,00048 <span class="preprocessor">#endif</span>00049 <span class="preprocessor"></span> qVarUnknown00050 };00051 00052 ElementType getType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type; }00053 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* nextElement()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> next; }00054 00055 <span class="keywordtype">void</span>* operator new (size_t size EXTRA_DEBUG_NEW_PARAMS);00056 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p EXTRA_DEBUG_NEW_PARAMS);00057 00058 <span class="keywordtype">char</span>* dump(<span class="keywordtype">char</span>* buf);00059 <span class="keywordtype">char</span>* dumpValues(<span class="keywordtype">char</span>* buf);00060 00061 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(ElementType t, <span class="keywordtype">void</span> <span class="keyword">const</span>* p, 00062 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00063 {00064 type = t;00065 ptr = p; 00066 ref = table;00067 next = NULL;00068 } 00069 <span class="keyword">private</span>:00070 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* next;00071 <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr;00072 ElementType type;00073 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* ref;00074 };00075 00076 <a name="l00082"></a><a class="code" href="classdbQueryElementAllocator.html">00082</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQueryElementAllocator { 00083 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;00084 00085 dbMutex mutex;00086 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* freeChain;00087 00088 <span class="keyword">public</span>:00089 <span class="keywordtype">void</span> deallocate(<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* first, <a class="code" href="classdbQueryElement.html">dbQueryElement</a>** lastNext) { 00090 dbCriticalSection cs(mutex);00091 <span class="keywordflow">if</span> (first != NULL) { 00092 *lastNext = freeChain;00093 freeChain = first;00094 }00095 }00096 00097 <span class="keywordtype">void</span>* allocate(size_t size);00098 00099 dbQueryElementAllocator();00100 ~dbQueryElementAllocator();00101 00102 <span class="keyword">static</span> dbQueryElementAllocator instance;00103 };00104 <a name="l00124"></a><a class="code" href="classdbComponent.html">00124</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbComponent { 00125 <span class="keyword">public</span>:00126 <span class="keywordtype">char</span> <span class="keyword">const</span>* structure;00127 <span class="keywordtype">char</span> <span class="keyword">const</span>* field; 00128 00129 dbComponent(<span class="keywordtype">char</span> <span class="keyword">const</span>* s, <span class="keywordtype">char</span> <span class="keyword">const</span>* f=NULL) : structure(s), field(f) {}00130 };00131 00132 <a name="l00139"></a><a class="code" href="classdbQueryExpression.html">00139</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQueryExpression { 00140 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00141 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* first;00142 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>** last;00143 <span class="keywordtype">bool</span> operand;00144 00145 <span class="keyword">public</span>:00146 dbQueryExpression& add(dbQueryElement::ElementType type, <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) {00147 last = &(*last = <span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(type, ptr, table))-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00148 operand = (type == dbQueryElement::qExpression);00149 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00150 }00151 00152 dbQueryExpression& operator = (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00153 first = NULL, last = &first;00154 <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);00155 }00156 dbQueryExpression& operator = (dbComponent <span class="keyword">const</span>& comp);00157 00158 dbQueryExpression& operator = (dbQueryExpression <span class="keyword">const</span>& expr);00159 00160 dbQueryExpression& operator,(int1 <span class="keyword">const</span>& ptr) { 00161 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &ptr);00162 }00163 dbQueryExpression& operator,(int2 <span class="keyword">const</span>& ptr) { 00164 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &ptr);00165 }00166 dbQueryExpression& operator,(int4 <span class="keyword">const</span>& ptr) { 00167 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00168 }00169 dbQueryExpression& operator,(db_int8 <span class="keyword">const</span>& ptr) { 00170 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &ptr);00171 }00172 dbQueryExpression& operator,(nat1 <span class="keyword">const</span>& ptr) {00173 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &ptr);00174 }00175 dbQueryExpression& operator,(nat2 <span class="keyword">const</span>& ptr) {00176 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &ptr);00177 }00178 dbQueryExpression& operator,(nat4 <span class="keyword">const</span>& ptr) {00179 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00180 }00181 dbQueryExpression& operator,(db_nat8 <span class="keyword">const</span>& ptr) {00182 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &ptr);00183 }00184 <span class="preprocessor">#if SIZEOF_LONG != 8</span>00185 <span class="preprocessor"></span> dbQueryExpression& operator,(<span class="keywordtype">long</span> <span class="keyword">const</span>& ptr) {00186 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00187 }00188 dbQueryExpression& operator,(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">const</span>& ptr) {00189 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00190 }00191 <span class="preprocessor">#endif</span>00192 <span class="preprocessor"></span> dbQueryExpression& operator,(real4 <span class="keyword">const</span>& ptr) { 00193 <span class="keywordflow">return</span> add(dbQueryElement::qVarReal4, &ptr);00194 }00195 dbQueryExpression& operator,(real8 <span class="keyword">const</span>& ptr) { 00196 <span class="keywordflow">return</span> add(dbQueryElement::qVarReal8, &ptr);00197 }00198 dbQueryExpression& operator,(<span class="keywordtype">bool</span> <span class="keyword">const</span>& ptr) { 00199 <span class="keywordflow">return</span> add(dbQueryElement::qVarBool, &ptr);00200 }00201 dbQueryExpression& operator,(<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00202 <span class="keywordflow">return</span> add(operand ? dbQueryElement::qVarString 00203 : dbQueryElement::qExpression, ptr);00204 }00205 dbQueryExpression& operator,(<span class="keywordtype">char</span> <span class="keyword">const</span>** ptr) { 00206 <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);00207 }00208 dbQueryExpression& operator,(<span class="keywordtype">char</span>** ptr) { 00209 <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);00210 }00211 dbQueryExpression& operator,(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr) { 00212 <span class="keywordflow">return</span> add(dbQueryElement::qVarRawData, ptr);00213 }00214 dbQueryExpression& operator,(<a class="code" href="classrectangle.html">rectangle</a> <span class="keyword">const</span>& rect) {00215 <span class="keywordflow">return</span> add(dbQueryElement::qVarRectangle, &rect);00216 }00217 <span class="preprocessor">#ifdef USE_STD_STRING</span>00218 <span class="preprocessor"></span> dbQueryExpression& operator,(std::string <span class="keyword">const</span>& str) {00219 <span class="keywordflow">return</span> add(dbQueryElement::qVarStdString, &str);00220 }00221 <span class="preprocessor">#endif</span>00222 <span class="preprocessor"></span> dbQueryExpression& operator,(dbQueryExpression <span class="keyword">const</span>& expr) { 00223 *last = <span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <span class="stringliteral">"("</span>);00224 (*last)->next = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressiono0">first</a>;00225 last = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressiono1">last</a>;00226 *last = <span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <span class="stringliteral">")"</span>);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -