📄 query_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: query.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><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><a name="l00017"></a><a class="code" href="classdbQueryElement.html">00017</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQueryElement { 00018 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00019 <span class="keyword">friend</span> <span class="keyword">class </span>dbCompiler;00020 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryExpression.html">dbQueryExpression</a>;00021 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryElementAllocator.html">dbQueryElementAllocator</a>;00022 <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00023 <span class="keyword">public</span>:00024 <span class="keyword">enum</span> ElementType { 00025 qExpression, <span class="comment">// part of SQL expression</span>00026 qVarBool,00027 qVarInt1,00028 qVarInt2,00029 qVarInt4,00030 qVarInt8,00031 qVarReal4,00032 qVarReal8,00033 qVarString,00034 qVarStringPtr,00035 qVarReference,00036 qVarArrayOfRef, 00037 qVarArrayOfRefPtr,00038 qVarRawData00039 <span class="preprocessor">#ifdef USE_STD_STRING</span>00040 <span class="preprocessor"></span> ,qVarStdString00041 <span class="preprocessor">#endif</span>00042 <span class="preprocessor"></span> };00043 00044 ElementType getType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type; }00045 dbQueryElement* nextElement()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> next; }00046 00047 <span class="keywordtype">void</span>* operator new (size_t size EXTRA_DEBUG_NEW_PARAMS);00048 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* p EXTRA_DEBUG_NEW_PARAMS);00049 00050 <span class="keywordtype">char</span>* dump(<span class="keywordtype">char</span>* buf);00051 <span class="keywordtype">char</span>* dumpValues(<span class="keywordtype">char</span>* buf);00052 00053 dbQueryElement(ElementType t, <span class="keywordtype">void</span> <span class="keyword">const</span>* p, 00054 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00055 {00056 type = t;00057 ptr = p; 00058 ref = table;00059 next = NULL;00060 } 00061 <span class="keyword">private</span>:00062 dbQueryElement* next;00063 <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr;00064 ElementType type;00065 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* ref;00066 };00067 00068 <a name="l00074"></a><a class="code" href="classdbQueryElementAllocator.html">00074</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQueryElementAllocator { 00075 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;00076 00077 dbMutex mutex;00078 dbQueryElement* freeChain;00079 00080 <span class="keyword">public</span>:00081 <span class="keywordtype">void</span> deallocate(dbQueryElement* first, dbQueryElement** lastNext) { 00082 dbCriticalSection cs(mutex);00083 <span class="keywordflow">if</span> (first != NULL) { 00084 *lastNext = freeChain;00085 freeChain = first;00086 }00087 }00088 00089 <span class="keywordtype">void</span>* allocate(size_t size);00090 00091 dbQueryElementAllocator();00092 ~dbQueryElementAllocator();00093 00094 <span class="keyword">static</span> dbQueryElementAllocator instance;00095 };00096 <a name="l00116"></a><a class="code" href="classdbComponent.html">00116</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbComponent { 00117 <span class="keyword">public</span>:00118 <span class="keywordtype">char</span> <span class="keyword">const</span>* structure;00119 <span class="keywordtype">char</span> <span class="keyword">const</span>* field; 00120 00121 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) {}00122 };00123 00124 <a name="l00131"></a><a class="code" href="classdbQueryExpression.html">00131</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQueryExpression { 00132 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00133 dbQueryElement* first;00134 dbQueryElement** last;00135 <span class="keywordtype">bool</span> operand;00136 00137 <span class="keyword">public</span>:00138 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) {00139 last = &(*last = <span class="keyword">new</span> dbQueryElement(type, ptr, table))->next;00140 operand = (type == dbQueryElement::qExpression);00141 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00142 }00143 00144 dbQueryExpression& operator = (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00145 first = NULL, last = &first;00146 <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);00147 }00148 dbQueryExpression& operator = (dbComponent <span class="keyword">const</span>& comp);00149 00150 dbQueryExpression& operator = (dbQueryExpression <span class="keyword">const</span>& expr);00151 00152 dbQueryExpression& operator,(int1 <span class="keyword">const</span>& ptr) { 00153 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &ptr);00154 }00155 dbQueryExpression& operator,(int2 <span class="keyword">const</span>& ptr) { 00156 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &ptr);00157 }00158 dbQueryExpression& operator,(int4 <span class="keyword">const</span>& ptr) { 00159 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00160 }00161 dbQueryExpression& operator,(db_int8 <span class="keyword">const</span>& ptr) { 00162 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &ptr);00163 }00164 dbQueryExpression& operator,(nat1 <span class="keyword">const</span>& ptr) {00165 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &ptr);00166 }00167 dbQueryExpression& operator,(nat2 <span class="keyword">const</span>& ptr) {00168 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &ptr);00169 }00170 dbQueryExpression& operator,(nat4 <span class="keyword">const</span>& ptr) {00171 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00172 }00173 dbQueryExpression& operator,(db_nat8 <span class="keyword">const</span>& ptr) {00174 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &ptr);00175 }00176 <span class="preprocessor">#if SIZEOF_LONG != 8</span>00177 <span class="preprocessor"></span> dbQueryExpression& operator,(<span class="keywordtype">long</span> <span class="keyword">const</span>& ptr) {00178 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00179 }00180 dbQueryExpression& operator,(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">const</span>& ptr) {00181 <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &ptr);00182 }00183 <span class="preprocessor">#endif</span>00184 <span class="preprocessor"></span> dbQueryExpression& operator,(real4 <span class="keyword">const</span>& ptr) { 00185 <span class="keywordflow">return</span> add(dbQueryElement::qVarReal4, &ptr);00186 }00187 dbQueryExpression& operator,(real8 <span class="keyword">const</span>& ptr) { 00188 <span class="keywordflow">return</span> add(dbQueryElement::qVarReal8, &ptr);00189 }00190 dbQueryExpression& operator,(<span class="keywordtype">bool</span> <span class="keyword">const</span>& ptr) { 00191 <span class="keywordflow">return</span> add(dbQueryElement::qVarBool, &ptr);00192 }00193 dbQueryExpression& operator,(<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00194 <span class="keywordflow">return</span> add(operand ? dbQueryElement::qVarString 00195 : dbQueryElement::qExpression, ptr);00196 }00197 dbQueryExpression& operator,(<span class="keywordtype">char</span> <span class="keyword">const</span>** ptr) { 00198 <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);00199 }00200 dbQueryExpression& operator,(<span class="keywordtype">char</span>** ptr) { 00201 <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);00202 }00203 dbQueryExpression& operator,(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr) { 00204 <span class="keywordflow">return</span> add(dbQueryElement::qVarRawData, ptr);00205 }00206 <span class="preprocessor">#ifdef USE_STD_STRING</span>00207 <span class="preprocessor"></span> dbQueryExpression& operator,(std::string <span class="keyword">const</span>& str) {00208 <span class="keywordflow">return</span> add(dbQueryElement::qVarStdString, &str);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -