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

📄 query_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00209     }00210 <span class="preprocessor">#endif</span>00211 <span class="preprocessor"></span>    dbQueryExpression&amp; operator,(dbQueryExpression <span class="keyword">const</span>&amp; expr) { 00212         *last = <span class="keyword">new</span> dbQueryElement(dbQueryElement::qExpression, <span class="stringliteral">"("</span>);00213         (*last)-&gt;next = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressionr0">first</a>;00214         last = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressionr1">last</a>;00215         *last = <span class="keyword">new</span> dbQueryElement(dbQueryElement::qExpression, <span class="stringliteral">")"</span>);00216         last = &amp;(*last)-&gt;next;00217         operand = <span class="keyword">false</span>;00218         <span class="keywordflow">return</span> *<span class="keyword">this</span>;00219     }00220     dbQueryExpression&amp; operator,(dbComponent <span class="keyword">const</span>&amp; comp) { 00221         add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponento0">structure</a>);00222         <span class="keywordflow">if</span> (comp.<a class="code" href="classdbComponent.html#dbComponento1">field</a> != NULL) { 00223             add(dbQueryElement::qExpression, <span class="stringliteral">"."</span>);00224             add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponento1">field</a>);00225         }00226         operand = <span class="keyword">false</span>;00227         <span class="keywordflow">return</span> *<span class="keyword">this</span>;00228     }00229     dbQueryExpression&amp; operator += (dbComponent <span class="keyword">const</span>&amp; comp) { 00230         <span class="keywordflow">return</span> *<span class="keyword">this</span>,comp;00231     }00232     dbQueryExpression&amp; operator += (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 00233         <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);00234     }00235 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>00236 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00237     dbQueryExpression&amp; operator,(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; value) { 00238         <span class="keywordflow">return</span> add(dbQueryElement::qVarReference, &amp;value, &amp;T::dbDescriptor);00239     }00240 00241     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00242     <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt; <span class="keyword">const</span>&amp; value) { 00243         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRef, &amp;value, 00244                       &amp;T::dbDescriptor);00245     }00246 00247     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;00248     <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt;<span class="keyword">const</span>* <span class="keyword">const</span>&amp; value) { 00249         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRefPtr, &amp;value, &amp;T::dbDescriptor);00250     }00251 <span class="preprocessor">#endif</span>00252 <span class="preprocessor"></span>};00253 00254 <span class="keyword">class </span>dbOrderByNode;00255 <span class="keyword">class </span>dbFollowByNode;00256 00257 <a name="l00261"></a><a class="code" href="classdbCompiledQuery.html">00261</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbCompiledQuery { 00262   <span class="keyword">public</span>:00263     dbExprNode*        tree;00264     dbOrderByNode*     order;00265     dbFollowByNode*    follow;00266     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00267     <span class="keywordtype">int</span>                schemeVersion;00268 00269     <span class="keyword">enum</span> IteratorInit { 00270         StartFromAny,00271         StartFromFirst,00272         StartFromLast,00273         StartFromRef, 00274         StartFromArray,00275         StartFromArrayPtr00276     };00277     IteratorInit       startFrom;00278     <span class="keywordtype">void</span> <span class="keyword">const</span>*        root;00279 00280     <span class="keywordtype">void</span> destroy();00281 00282     <span class="keywordtype">bool</span> compiled() { <span class="keywordflow">return</span> tree != NULL; }00283 00284     dbCompiledQuery() { 00285         tree = NULL;00286         order = NULL;00287         follow = NULL;00288         table = NULL;00289         startFrom = StartFromAny;00290     }00291 };00292 <a name="l00297"></a><a class="code" href="classdbQuery.html">00297</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQuery : <span class="keyword">public</span> dbCompiledQuery { 00298     <span class="keyword">friend</span> <span class="keyword">class </span>dbCompiler;00299     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;00300     <span class="keyword">friend</span> <span class="keyword">class </span>dbSubSql;00301     <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00302   <span class="keyword">private</span>:00303     dbMutex            mutex;00304     dbQueryElement*    elements;00305     dbQueryElement**   nextElement;00306     <span class="keywordtype">bool</span>               operand;00307     <span class="keywordtype">bool</span>               mutexLocked;00308 00309     <span class="comment">//</span>00310     <span class="comment">// Prohibite query copying</span>00311     <span class="comment">//</span>00312     dbQuery(dbQuery <span class="keyword">const</span>&amp;) {} 00313     dbQuery&amp; operator =(dbQuery <span class="keyword">const</span>&amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }00314 00315   <span class="keyword">public</span>:00316     <span class="keywordtype">int</span>                pos; <span class="comment">// position of condition in statement</span>00317 00318 00319     <span class="keywordtype">char</span>* dump(<span class="keywordtype">char</span>* buf) { 00320         <span class="keywordtype">char</span>* p = buf;00321         <span class="keywordflow">for</span> (dbQueryElement* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementr0">next</a>) { 00322             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa4">dump</a>(p);00323         }00324         <span class="keywordflow">return</span> buf;00325     }00326 00327     <span class="keywordtype">char</span>* dumpValues(<span class="keywordtype">char</span>* buf) { 00328         <span class="keywordtype">char</span>* p = buf;00329         <span class="keywordflow">for</span> (dbQueryElement* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementr0">next</a>) { 00330             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa5">dumpValues</a>(p);00331         }00332         <span class="keywordflow">return</span> buf;00333     }00334 00335     dbQuery&amp; append(dbQueryElement::ElementType type, <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr,00336                     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00337     { 00338         nextElement = &amp;(*nextElement=<span class="keyword">new</span> dbQueryElement(type,ptr,table))-&gt;next;00339         operand = (type == dbQueryElement::qExpression);00340         <span class="keywordflow">return</span> *<span class="keyword">this</span>;00341     }00342 00343     dbQuery&amp; reset();00344 00345     <span class="comment">//</span>00346     <span class="comment">// Redefined operator = and , make it possible to specify query in the</span>00347     <span class="comment">// following way:</span>00348     <span class="comment">//         int x, y;</span>00349     <span class="comment">//         dbDataTime dt;</span>00350     <span class="comment">//         dbQuery q; </span>00351     <span class="comment">//         dbCursor&lt;record&gt; cursor;</span>00352     <span class="comment">//         q = "x=",x,"and y=",y,"and",dt == "date";</span>00353     <span class="comment">//         for (x = 0; x &lt; max_x; x++) { </span>00354     <span class="comment">//             for (y = 0; y &lt; max_y; y++) { </span>00355     <span class="comment">//                 cursor.select(q);</span>00356     <span class="comment">//                 ...</span>00357     <span class="comment">//             }</span>00358     <span class="comment">//         }</span>00359 00360     dbQuery&amp; add(dbQueryExpression <span class="keyword">const</span>&amp; expr); 00361 00362     dbQuery&amp; And(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00363         <span class="keywordflow">if</span> (elements != NULL) { 00364             append(dbQueryElement::qExpression, <span class="stringliteral">"and"</span>);00365         }00366         <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);00367     }00368 00369     dbQuery&amp; Or(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00370         <span class="keywordflow">if</span> (elements != NULL) { 00371             append(dbQueryElement::qExpression, <span class="stringliteral">"or"</span>);00372         }00373         <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);00374     }00375 00376     dbQuery&amp; add(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00377         <span class="keywordflow">return</span> append(operand ? dbQueryElement::qVarString 00378                       : dbQueryElement::qExpression, str);00379     }00380     dbQuery&amp; add(<span class="keywordtype">char</span> <span class="keyword">const</span>** str) { 00381         <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);00382     }00383 <span class="preprocessor">#ifdef USE_STD_STRING</span>00384 <span class="preprocessor"></span>    dbQuery&amp; add(std::string <span class="keyword">const</span>&amp; str) { 00385         <span class="keywordflow">return</span> append(dbQueryElement::qVarStdString, &amp;str);00386     }00387     dbQuery&amp; operator,(std::string <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> add(str); }00388 <span class="preprocessor">#endif</span>00389 <span class="preprocessor"></span>    dbQuery&amp; add(<span class="keywordtype">char</span>** str) { 00390         <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);00391     }00392     dbQuery&amp; add(int1 <span class="keyword">const</span>&amp; value) { 00393         <span class="keywordflow">return</span> append(dbQueryElement::qVarInt1, &amp;value);00394     }00395     dbQuery&amp; add (int2 <span class="keyword">const</span>&amp; value) { 00396         <span class="keywordflow">return</span> append(dbQueryElement::qVarInt2, &amp;value);00397     }

⌨️ 快捷键说明

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