query_8h-source.html

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

HTML
682
字号
00197 <font class="preprocessor"></font>    dbQueryExpression&amp; operator,(std::string <font class="keyword">const</font>&amp; str) {00198         <font class="keywordflow">return</font> add(dbQueryElement::qVarStdString, &amp;str);00199     }00200 <font class="preprocessor">#endif</font>00201 <font class="preprocessor"></font>    dbQueryExpression&amp; operator,(dbQueryExpression <font class="keyword">const</font>&amp; expr) { 00202         *last = <font class="keyword">new</font> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <font class="stringliteral">"("</font>);00203         (*last)-&gt;next = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressiono0">first</a>;00204         last = expr.<a class="code" href="classdbQueryExpression.html#dbQueryExpressiono1">last</a>;00205         *last = <font class="keyword">new</font> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <font class="stringliteral">")"</font>);00206         last = &amp;(*last)-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00207         operand = <font class="keyword">false</font>;00208         <font class="keywordflow">return</font> *<font class="keyword">this</font>;00209     }00210     dbQueryExpression&amp; operator,(dbComponent <font class="keyword">const</font>&amp; comp) { 00211         add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponentm0">structure</a>);00212         <font class="keywordflow">if</font> (comp.<a class="code" href="classdbComponent.html#dbComponentm1">field</a> != NULL) { 00213             add(dbQueryElement::qExpression, <font class="stringliteral">"."</font>);00214             add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponentm1">field</a>);00215         }00216         operand = <font class="keyword">false</font>;00217         <font class="keywordflow">return</font> *<font class="keyword">this</font>;00218     }00219     dbQueryExpression&amp; operator += (dbComponent <font class="keyword">const</font>&amp; comp) { 00220         <font class="keywordflow">return</font> *<font class="keyword">this</font>,comp;00221     }00222     dbQueryExpression&amp; operator += (<font class="keywordtype">char</font> <font class="keyword">const</font>* ptr) { 00223         <font class="keywordflow">return</font> add(dbQueryElement::qExpression, ptr);00224     }00225 <font class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</font>00226 <font class="preprocessor"></font>    <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;00227     dbQueryExpression&amp; operator,(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <font class="keyword">const</font>&amp; value) { 00228         <font class="keywordflow">return</font> add(dbQueryElement::qVarReference, &amp;value, &amp;T::dbDescriptor);00229     }00230 00231     <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;00232     <font class="keyword">inline</font> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt; <font class="keyword">const</font>&amp; value) { 00233         <font class="keywordflow">return</font> add(dbQueryElement::qVarArrayOfRef, &amp;value, 00234                       &amp;T::dbDescriptor);00235     }00236 00237     <font class="keyword">template</font>&lt;<font class="keyword">class</font> T&gt;00238     <font class="keyword">inline</font> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray</a>&lt; <a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> &gt;<font class="keyword">const</font>* <font class="keyword">const</font>&amp; value) { 00239         <font class="keywordflow">return</font> add(dbQueryElement::qVarArrayOfRefPtr, &amp;value, &amp;T::dbDescriptor);00240     }00241 <font class="preprocessor">#endif</font>00242 <font class="preprocessor"></font>};00243 00244 <font class="keyword">class </font>dbOrderByNode;00245 <font class="keyword">class </font>dbFollowByNode;00246 00247 <a name="l00251"></a><a class="code" href="classdbCompiledQuery.html">00251</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbCompiledQuery { 00252   <font class="keyword">public</font>:00253     dbExprNode*        tree;00254     dbOrderByNode*     order;00255     dbFollowByNode*    follow;00256     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00257     00258     <font class="keyword">enum</font> IteratorInit { 00259         StartFromAny,00260         StartFromFirst,00261         StartFromLast,00262         StartFromRef, 00263         StartFromArray,00264         StartFromArrayPtr00265     };00266     IteratorInit       startFrom;00267     <font class="keywordtype">void</font> <font class="keyword">const</font>*        root;00268 00269     <font class="keywordtype">void</font> destroy();00270 00271     <font class="keywordtype">bool</font> compiled() { <font class="keywordflow">return</font> tree != NULL; }00272 00273     dbCompiledQuery() { 00274         tree = NULL;00275         order = NULL;00276         follow = NULL;00277         table = NULL;00278         startFrom = StartFromAny;00279     }00280 };00281 <a name="l00286"></a><a class="code" href="classdbQuery.html">00286</a> <font class="keyword">class </font>FASTDB_DLL_ENTRY dbQuery : <font class="keyword">public</font> dbCompiledQuery { 00287     <font class="keyword">friend</font> <font class="keyword">class </font>dbCompiler;00288     <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbDatabase.html">dbDatabase</a>;00289     <font class="keyword">friend</font> <font class="keyword">class </font>dbSubSql;00290   <font class="keyword">private</font>:00291     dbMutex            mutex;00292     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>*    elements;00293     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>**   nextElement;00294     <font class="keywordtype">bool</font>               operand;00295     <font class="keywordtype">bool</font>               mutexLocked;00296 00297     <font class="comment">//</font>00298     <font class="comment">// Prohibite query copying</font>00299     <font class="comment">//</font>00300     dbQuery(dbQuery <font class="keyword">const</font>&amp;) {} 00301     dbQuery&amp; operator =(dbQuery <font class="keyword">const</font>&amp;) { <font class="keywordflow">return</font> *<font class="keyword">this</font>; }00302 00303   <font class="keyword">public</font>:00304     <font class="keywordtype">int</font>                pos; <font class="comment">// position of condition in statement</font>00305 00306 00307     <font class="keywordtype">char</font>* dump(<font class="keywordtype">char</font>* buf) { 00308         <font class="keywordtype">char</font>* p = buf;00309         <font class="keywordflow">for</font> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00310             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa2">dump</a>(p);00311         }00312         <font class="keywordflow">return</font> buf;00313     }00314 00315     <font class="keywordtype">char</font>* dumpValues(<font class="keywordtype">char</font>* buf) { 00316         <font class="keywordtype">char</font>* p = buf;00317         <font class="keywordflow">for</font> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00318             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa3">dumpValues</a>(p);00319         }00320         <font class="keywordflow">return</font> buf;00321     }00322 00323     dbQuery&amp; append(dbQueryElement::ElementType type, <font class="keywordtype">void</font> <font class="keyword">const</font>* ptr,00324                     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00325     { 00326         nextElement = &amp;(*nextElement=<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>;00327         operand = (type == dbQueryElement::qExpression);00328         <font class="keywordflow">return</font> *<font class="keyword">this</font>;00329     }00330 00331     dbQuery&amp; reset();00332 00333     <font class="comment">//</font>00334     <font class="comment">// Redefined operator = and , make it possible to specify query in the</font>00335     <font class="comment">// following way:</font>00336     <font class="comment">//         int x, y;</font>00337     <font class="comment">//         dbDataTime dt;</font>00338     <font class="comment">//         dbQuery q; </font>00339     <font class="comment">//         dbCursor&lt;record&gt; cursor;</font>00340     <font class="comment">//         q = "x=",x,"and y=",y,"and",dt == "date";</font>00341     <font class="comment">//         for (x = 0; x &lt; max_x; x++) { </font>00342     <font class="comment">//             for (y = 0; y &lt; max_y; y++) { </font>00343     <font class="comment">//                 cursor.select(q);</font>00344     <font class="comment">//                 ...</font>00345     <font class="comment">//             }</font>00346     <font class="comment">//         }</font>00347 00348     dbQuery&amp; add(dbQueryExpression <font class="keyword">const</font>&amp; expr); 00349 00350     dbQuery&amp; And(<font class="keywordtype">char</font> <font class="keyword">const</font>* str) { 00351         <font class="keywordflow">if</font> (elements != NULL) { 00352             append(dbQueryElement::qExpression, <font class="stringliteral">"and"</font>);00353         }00354         <font class="keywordflow">return</font> append(dbQueryElement::qExpression, str);00355     }00356 00357     dbQuery&amp; Or(<font class="keywordtype">char</font> <font class="keyword">const</font>* str) { 00358         <font class="keywordflow">if</font> (elements != NULL) { 00359             append(dbQueryElement::qExpression, <font class="stringliteral">"or"</font>);00360         }00361         <font class="keywordflow">return</font> append(dbQueryElement::qExpression, str);00362     }00363 00364     dbQuery&amp; add(<font class="keywordtype">char</font> <font class="keyword">const</font>* str) { 00365         <font class="keywordflow">return</font> append(operand ? dbQueryElement::qVarString 00366                       : dbQueryElement::qExpression, str);00367     }00368     dbQuery&amp; add(<font class="keywordtype">char</font> <font class="keyword">const</font>** str) { 00369         <font class="keywordflow">return</font> append(dbQueryElement::qVarStringPtr, str);00370     }00371 <font class="preprocessor">#ifdef USE_STD_STRING</font>00372 <font class="preprocessor"></font>    dbQuery&amp; add(std::string <font class="keyword">const</font>&amp; str) { 00373         <font class="keywordflow">return</font> append(dbQueryElement::qVarStdString, &amp;str);00374     }

⌨️ 快捷键说明

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