⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 query_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>query.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; QUERY.H &gt;-------------------------------------------------------*--------*</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&amp; 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 = &amp;(*last = <span class="keyword">new</span> dbQueryElement(type, ptr, table))-&gt;next;00140         operand = (type == dbQueryElement::qExpression);00141         <span class="keywordflow">return</span> *<span class="keyword">this</span>;00142     }00143         00144     dbQueryExpression&amp; operator = (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00145         first = NULL, last = &amp;first;00146         <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);00147     }00148     dbQueryExpression&amp; operator = (dbComponent <span class="keyword">const</span>&amp; comp);00149 00150     dbQueryExpression&amp; operator = (dbQueryExpression <span class="keyword">const</span>&amp; expr);00151 00152     dbQueryExpression&amp; operator,(int1 <span class="keyword">const</span>&amp; ptr) { 00153         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &amp;ptr);00154     }00155     dbQueryExpression&amp; operator,(int2 <span class="keyword">const</span>&amp; ptr) { 00156         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &amp;ptr);00157     }00158     dbQueryExpression&amp; operator,(int4 <span class="keyword">const</span>&amp; ptr) { 00159         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);00160     }00161     dbQueryExpression&amp; operator,(db_int8 <span class="keyword">const</span>&amp; ptr) { 00162         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &amp;ptr);00163     }00164     dbQueryExpression&amp; operator,(nat1 <span class="keyword">const</span>&amp; ptr) {00165         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &amp;ptr);00166     }00167     dbQueryExpression&amp; operator,(nat2 <span class="keyword">const</span>&amp; ptr) {00168         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &amp;ptr);00169     }00170     dbQueryExpression&amp; operator,(nat4 <span class="keyword">const</span>&amp; ptr) {00171         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);00172     }00173     dbQueryExpression&amp; operator,(db_nat8 <span class="keyword">const</span>&amp; ptr) {00174         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &amp;ptr);00175     }00176 <span class="preprocessor">#if SIZEOF_LONG != 8</span>00177 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(<span class="keywordtype">long</span> <span class="keyword">const</span>&amp; ptr) {00178         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);00179     }00180     dbQueryExpression&amp; operator,(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">const</span>&amp; ptr) {00181         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);00182     }00183 <span class="preprocessor">#endif</span>00184 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(real4 <span class="keyword">const</span>&amp; ptr) { 00185         <span class="keywordflow">return</span> add(dbQueryElement::qVarReal4, &amp;ptr);00186     }00187     dbQueryExpression&amp; operator,(real8 <span class="keyword">const</span>&amp; ptr) { 00188         <span class="keywordflow">return</span> add(dbQueryElement::qVarReal8, &amp;ptr);00189     }00190     dbQueryExpression&amp; operator,(<span class="keywordtype">bool</span> <span class="keyword">const</span>&amp; ptr) { 00191         <span class="keywordflow">return</span> add(dbQueryElement::qVarBool, &amp;ptr);00192     }00193     dbQueryExpression&amp; 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&amp; 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&amp; operator,(<span class="keywordtype">char</span>** ptr) { 00201         <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);00202     }00203     dbQueryExpression&amp; 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&amp; operator,(std::string <span class="keyword">const</span>&amp; str) {00208         <span class="keywordflow">return</span> add(dbQueryElement::qVarStdString, &amp;str);

⌨️ 快捷键说明

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