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

📄 query_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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> &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 <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>
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&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) {
00147         last = &amp;(*last = <span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(type, ptr, table))-&gt;<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&amp; operator = (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 
00153         first = NULL, last = &amp;first;
00154         <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);
00155     }
00156     dbQueryExpression&amp; operator = (dbComponent <span class="keyword">const</span>&amp; comp);
00157 
00158     dbQueryExpression&amp; operator = (dbQueryExpression <span class="keyword">const</span>&amp; expr);
00159 
00160     dbQueryExpression&amp; operator,(int1 <span class="keyword">const</span>&amp; ptr) { 
00161         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &amp;ptr);
00162     }
00163     dbQueryExpression&amp; operator,(int2 <span class="keyword">const</span>&amp; ptr) { 
00164         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &amp;ptr);
00165     }
00166     dbQueryExpression&amp; operator,(int4 <span class="keyword">const</span>&amp; ptr) { 
00167         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);
00168     }
00169     dbQueryExpression&amp; operator,(db_int8 <span class="keyword">const</span>&amp; ptr) { 
00170         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &amp;ptr);
00171     }
00172     dbQueryExpression&amp; operator,(nat1 <span class="keyword">const</span>&amp; ptr) {
00173         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt1, &amp;ptr);
00174     }
00175     dbQueryExpression&amp; operator,(nat2 <span class="keyword">const</span>&amp; ptr) {
00176         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt2, &amp;ptr);
00177     }
00178     dbQueryExpression&amp; operator,(nat4 <span class="keyword">const</span>&amp; ptr) {
00179         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);
00180     }
00181     dbQueryExpression&amp; operator,(db_nat8 <span class="keyword">const</span>&amp; ptr) {
00182         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt8, &amp;ptr);
00183     }
00184 <span class="preprocessor">#if SIZEOF_LONG != 8</span>
00185 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(<span class="keywordtype">long</span> <span class="keyword">const</span>&amp; ptr) {
00186         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);
00187     }
00188     dbQueryExpression&amp; operator,(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">const</span>&amp; ptr) {
00189         <span class="keywordflow">return</span> add(dbQueryElement::qVarInt4, &amp;ptr);
00190     }
00191 <span class="preprocessor">#endif</span>
00192 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(real4 <span class="keyword">const</span>&amp; ptr) { 
00193         <span class="keywordflow">return</span> add(dbQueryElement::qVarReal4, &amp;ptr);
00194     }
00195     dbQueryExpression&amp; operator,(real8 <span class="keyword">const</span>&amp; ptr) { 
00196         <span class="keywordflow">return</span> add(dbQueryElement::qVarReal8, &amp;ptr);
00197     }
00198     dbQueryExpression&amp; operator,(<span class="keywordtype">bool</span> <span class="keyword">const</span>&amp; ptr) { 
00199         <span class="keywordflow">return</span> add(dbQueryElement::qVarBool, &amp;ptr);
00200     }
00201     dbQueryExpression&amp; 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&amp; 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&amp; operator,(<span class="keywordtype">char</span>** ptr) { 
00209         <span class="keywordflow">return</span> add(dbQueryElement::qVarStringPtr, ptr);
00210     }
00211     dbQueryExpression&amp; 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&amp; operator,(<a class="code" href="classrectangle.html">rectangle</a> <span class="keyword">const</span>&amp; rect) {
00215         <span class="keywordflow">return</span> add(dbQueryElement::qVarRectangle, &amp;rect);
00216     }
00217 <span class="preprocessor">#ifdef USE_STD_STRING</span>
00218 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(std::string <span class="keyword">const</span>&amp; str) {
00219         <span class="keywordflow">return</span> add(dbQueryElement::qVarStdString, &amp;str);
00220     }
00221 <span class="preprocessor">#endif</span>
00222 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(dbQueryExpression <span class="keyword">const</span>&amp; expr) { 
00223         *last = <span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <span class="stringliteral">"("</span>);
00224         (*last)-&gt;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 = &amp;(*last)-&gt;<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&amp; operator,(dbComponent <span class="keyword">const</span>&amp; comp) { 

⌨️ 快捷键说明

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