📄 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_NAMESPACE
00015
<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> qVarUnknown
00050 };
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>);
00227 last = &(*last)-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;
00228 operand = <span class="keyword">false</span>;
00229 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00230 }
00231 dbQueryExpression& operator,(dbComponent <span class="keyword">const</span>& comp) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -