query_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 682 行 · 第 1/4 页

HTML
682
字号
<!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.15 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><h1>query.h</h1><div class="fragment"><pre>00001 <font class="comment">//-&lt; QUERY.H &gt;-------------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</font>00003 <font class="comment">// (Main Memory Database Management System)                          *   /\|  *</font>00004 <font class="comment">//                                                                   *  /  \  *</font>00005 <font class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</font>00006 <font class="comment">//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// Constructing and hashing database query statements</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __QUERY_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __QUERY_H__</font>00013 <font class="preprocessor"></font><a name="l00017"></a><a class="code" href="classdbQueryElement.html">00017</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY <a class="code" href="classdbQueryElement.html">dbQueryElement</a> { 00018     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQuery.html">dbQuery</a>;00019     <font class="keyword">friend</font> <font class="keyword">class </font>dbCompiler;00020     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQueryExpression.html">dbQueryExpression</a>;00021     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQueryElementAllocator.html">dbQueryElementAllocator</a>;00022   <font class="keyword">public</font>:00023     <font class="keyword">enum</font> ElementType { 00024         qExpression, <font class="comment">// part of SQL expression</font>00025         qVarBool,00026         qVarInt1,00027         qVarInt2,00028         qVarInt4,00029         qVarInt8,00030         qVarReal4,00031         qVarReal8,00032         qVarString,00033         qVarStringPtr,00034         qVarReference,00035         qVarArrayOfRef, 00036         qVarArrayOfRefPtr,00037         qVarRawData00038 <font class="preprocessor">#ifdef USE_STD_STRING</font>00039 <font class="preprocessor"></font>        ,qVarStdString00040 <font class="preprocessor">#endif</font>00041 <font class="preprocessor"></font>    };00042     00043     <font class="keywordtype">void</font>* operator new (size_t size);00044     <font class="keywordtype">void</font>  operator delete(<font class="keywordtype">void</font>* p) { 00045         <font class="keyword">delete</font>[] (<font class="keywordtype">char</font>*)p;00046     }00047 00048     <font class="keywordtype">char</font>* dump(<font class="keywordtype">char</font>* buf);00049     <font class="keywordtype">char</font>* dumpValues(<font class="keywordtype">char</font>* buf);00050 00051     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(ElementType t, <font class="keywordtype">void</font> <font class="keyword">const</font>* p, 00052                    <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00053     {00054         type = t;00055         ptr  = p;       00056         ref  = table;00057         next = NULL;00058     } 00059   <font class="keyword">private</font>:00060     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>*    next;00061     <font class="keywordtype">void</font> <font class="keyword">const</font>*        ptr;00062     ElementType        type;00063     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* ref;00064 };00065 00066 <a name="l00072"></a><a class="code" href="classdbQueryElementAllocator.html">00072</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbQueryElementAllocator { 00073     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbDatabase.html">dbDatabase</a>;00074 00075     dbMutex&amp;        mutex;00076     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* freeChain;00077     00078   <font class="keyword">public</font>:00079     <font class="keywordtype">void</font> deallocate(<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* first, <a class="code" href="classdbQueryElement.html">dbQueryElement</a>** lastNext) { 00080         dbCriticalSection cs(mutex);00081         <font class="keywordflow">if</font> (first != NULL) { 00082             *lastNext = freeChain;00083             freeChain = first;00084         }00085     }00086         00087     <font class="keywordtype">void</font>* allocate(size_t size) { 00088         dbCriticalSection cs(mutex);00089         <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = freeChain;00090         <font class="keywordflow">if</font> (elem != NULL) {00091             freeChain = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00092             <font class="keywordflow">return</font> elem;00093         } <font class="keywordflow">else</font> {00094             <font class="keywordflow">return</font> <font class="keyword">new</font> byte[size];00095         }00096     }00097     dbQueryElementAllocator();00098     ~dbQueryElementAllocator();00099 00100     <font class="keyword">static</font> dbQueryElementAllocator instance;00101 };00102 00103 <font class="keyword">inline</font> <font class="keywordtype">void</font>* dbQueryElement::operator new(size_t size) {00104     <font class="keywordflow">return</font> dbQueryElementAllocator::instance.<a class="code" href="classdbQueryElementAllocator.html#dbQueryElementAllocatora1">allocate</a>(size);00105 }00106 <a name="l00126"></a><a class="code" href="classdbComponent.html">00126</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbComponent { 00127   <font class="keyword">public</font>:00128     <font class="keywordtype">char</font> <font class="keyword">const</font>* structure;00129     <font class="keywordtype">char</font> <font class="keyword">const</font>* field; 00130 00131     dbComponent(<font class="keywordtype">char</font> <font class="keyword">const</font>* s, <font class="keywordtype">char</font> <font class="keyword">const</font>* f=NULL) : structure(s), field(f) {}00132 };00133 00134 <a name="l00141"></a><a class="code" href="classdbQueryExpression.html">00141</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbQueryExpression { 00142     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQuery.html">dbQuery</a>;00143     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>*  first;00144     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>** last;00145     <font class="keywordtype">bool</font>             operand;00146 00147   <font class="keyword">public</font>:00148     dbQueryExpression&amp; add(dbQueryElement::ElementType type, <font class="keywordtype">void</font> <font class="keyword">const</font>* ptr, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) {00149         last = &amp;(*last = <font class="keyword">new</font> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(type, ptr, table))-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00150         operand = (type == dbQueryElement::qExpression);00151         <font class="keywordflow">return</font> *<font class="keyword">this</font>;00152     }00153         00154     dbQueryExpression&amp; operator = (<font class="keywordtype">char</font> <font class="keyword">const</font>* ptr) { 00155         first = NULL, last = &amp;first;00156         <font class="keywordflow">return</font> add(dbQueryElement::qExpression, ptr);00157     }00158     dbQueryExpression&amp; operator = (dbComponent <font class="keyword">const</font>&amp; comp);00159 00160     dbQueryExpression&amp; operator = (dbQueryExpression <font class="keyword">const</font>&amp; expr);00161 00162     dbQueryExpression&amp; operator,(int1 <font class="keyword">const</font>&amp; ptr) { 00163         <font class="keywordflow">return</font> add(dbQueryElement::qVarInt1, &amp;ptr);00164     }00165     dbQueryExpression&amp; operator,(int2 <font class="keyword">const</font>&amp; ptr) { 00166         <font class="keywordflow">return</font> add(dbQueryElement::qVarInt2, &amp;ptr);00167     }00168     dbQueryExpression&amp; operator,(int4 <font class="keyword">const</font>&amp; ptr) { 00169         <font class="keywordflow">return</font> add(dbQueryElement::qVarInt4, &amp;ptr);00170     }00171     dbQueryExpression&amp; operator,(db_int8 <font class="keyword">const</font>&amp; ptr) { 00172         <font class="keywordflow">return</font> add(dbQueryElement::qVarInt8, &amp;ptr);00173     }00174     dbQueryExpression&amp; operator,(real4 <font class="keyword">const</font>&amp; ptr) { 00175         <font class="keywordflow">return</font> add(dbQueryElement::qVarReal4, &amp;ptr);00176     }00177     dbQueryExpression&amp; operator,(real8 <font class="keyword">const</font>&amp; ptr) { 00178         <font class="keywordflow">return</font> add(dbQueryElement::qVarReal8, &amp;ptr);00179     }00180     dbQueryExpression&amp; operator,(<font class="keywordtype">bool</font> <font class="keyword">const</font>&amp; ptr) { 00181         <font class="keywordflow">return</font> add(dbQueryElement::qVarBool, &amp;ptr);00182     }00183     dbQueryExpression&amp; operator,(<font class="keywordtype">char</font> <font class="keyword">const</font>* ptr) { 00184         <font class="keywordflow">return</font> add(operand ? dbQueryElement::qVarString 00185                    : dbQueryElement::qExpression, ptr);00186     }00187     dbQueryExpression&amp; operator,(<font class="keywordtype">char</font> <font class="keyword">const</font>** ptr) { 00188         <font class="keywordflow">return</font> add(dbQueryElement::qVarStringPtr, ptr);00189     }00190     dbQueryExpression&amp; operator,(<font class="keywordtype">char</font>** ptr) { 00191         <font class="keywordflow">return</font> add(dbQueryElement::qVarStringPtr, ptr);00192     }00193     dbQueryExpression&amp; operator,(<font class="keywordtype">void</font> <font class="keyword">const</font>* ptr) { 00194         <font class="keywordflow">return</font> add(dbQueryElement::qVarRawData, ptr);00195      }00196 <font class="preprocessor">#ifdef USE_STD_STRING</font>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?