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

📄 query_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00232         add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponentm0">structure</a>);
00233         <span class="keywordflow">if</span> (comp.<a class="code" href="classdbComponent.html#dbComponentm1">field</a> != NULL) { 
00234             add(dbQueryElement::qExpression, <span class="stringliteral">"."</span>);
00235             add(dbQueryElement::qExpression, comp.<a class="code" href="classdbComponent.html#dbComponentm1">field</a>);
00236         }
00237         operand = <span class="keyword">false</span>;
00238         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00239     }
00240     dbQueryExpression&amp; operator += (dbComponent <span class="keyword">const</span>&amp; comp) { 
00241         <span class="keywordflow">return</span> *<span class="keyword">this</span>,comp;
00242     }
00243     dbQueryExpression&amp; operator += (<span class="keywordtype">char</span> <span class="keyword">const</span>* ptr) { 
00244         <span class="keywordflow">return</span> add(dbQueryElement::qExpression, ptr);
00245     }
00246 <span class="preprocessor">#ifndef NO_MEMBER_TEMPLATES</span>
00247 <span class="preprocessor"></span>    <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
00248     dbQueryExpression&amp; operator,(<a class="code" href="classdbReference.html">dbReference&lt;T&gt;</a> <span class="keyword">const</span>&amp; value) { 
00249         <span class="keywordflow">return</span> add(dbQueryElement::qVarReference, &amp;value, &amp;T::dbDescriptor);
00250     }
00251 
00252     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
00253     <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) { 
00254         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRef, &amp;value, &amp;T::dbDescriptor);
00255     }
00256 
00257     <span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt;
00258     <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) { 
00259         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRefPtr, &amp;value, &amp;T::dbDescriptor);
00260     }
00261 <span class="preprocessor">#endif</span>
00262 <span class="preprocessor"></span><span class="preprocessor">#if !defined(_MSC_VER) || _MSC_VER+0 &gt;= 1300</span>
00263 <span class="preprocessor"></span>    <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray&lt;db_int4&gt;</a> <span class="keyword">const</span>&amp; value) { 
00264         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt4, &amp;value);
00265     }
00266 
00267     <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray&lt;db_int4&gt;</a><span class="keyword">const</span>* <span class="keyword">const</span>&amp; value) { 
00268         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt4Ptr, &amp;value);
00269     }
00270 
00271     <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray&lt;db_int8&gt;</a> <span class="keyword">const</span>&amp; value) { 
00272         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt8, &amp;value);
00273     }
00274 
00275     <span class="keyword">inline</span> dbQueryExpression&amp; operator,(<a class="code" href="classdbArray.html">dbArray&lt;db_int8&gt;</a><span class="keyword">const</span>* <span class="keyword">const</span>&amp; value) { 
00276         <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt8Ptr, &amp;value);
00277     }
00278 <span class="preprocessor">#endif</span>
00279 <span class="preprocessor"></span>};
00280 
00281 <span class="keyword">class </span>dbOrderByNode;
00282 <span class="keyword">class </span>dbFollowByNode;
00283 
00284 
<a name="l00288"></a><a class="code" href="classdbCompiledQuery.html">00288</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbCompiledQuery { 
00289   <span class="keyword">public</span>:
00290     dbExprNode*        tree;
00291     dbOrderByNode*     order;
00292     dbFollowByNode*    follow;
00293     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;
00294     <span class="keywordtype">int</span>                schemeVersion;
00295 
00296     size_t             stmtLimitStart;
00297     size_t             stmtLimitLen;
00298     int4*              stmtLimitStartPtr;
00299     int4*              stmtLimitLenPtr;
00300     <span class="keywordtype">bool</span>               limitSpecified;
00301 
00302     <span class="keyword">enum</span> IteratorInit { 
00303         StartFromAny,
00304         StartFromFirst,
00305         StartFromLast,
00306         StartFromRef, 
00307         StartFromArray,
00308         StartFromArrayPtr
00309     };
00310     IteratorInit       startFrom;
00311     <span class="keywordtype">void</span> <span class="keyword">const</span>*        root;
00312 
00313     <span class="keywordtype">void</span> destroy();
00314 
00315     <span class="keywordtype">bool</span> compiled() { <span class="keywordflow">return</span> tree != NULL; }
00316 
00317     <span class="keywordtype">bool</span> compileError() { <span class="keywordflow">return</span> !compiled(); }
00318 
00319     dbCompiledQuery() { 
00320         tree = NULL;
00321         order = NULL;
00322         follow = NULL;
00323         table = NULL;
00324         startFrom = StartFromAny;
00325         limitSpecified = <span class="keyword">false</span>;
00326     }
00327 };
00328 
<a name="l00333"></a><a class="code" href="classdbQuery.html">00333</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQuery : <span class="keyword">public</span> dbCompiledQuery { 
00334     <span class="keyword">friend</span> <span class="keyword">class </span>dbCompiler;
00335     <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;
00336     <span class="keyword">friend</span> <span class="keyword">class </span>dbSubSql;
00337     <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;
00338   <span class="keyword">private</span>:
00339     dbMutex            mutex;
00340     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>*    elements;
00341     <a class="code" href="classdbQueryElement.html">dbQueryElement</a>**   nextElement;
00342     <span class="keywordtype">bool</span>               operand;
00343     <span class="keywordtype">bool</span>               mutexLocked;
00344 
00345     <span class="comment">//</span>
00346     <span class="comment">// Prohibite query copying</span>
00347     <span class="comment">//</span>
00348     dbQuery(dbQuery <span class="keyword">const</span>&amp;) : dbCompiledQuery() {} 
00349     dbQuery&amp; operator =(dbQuery <span class="keyword">const</span>&amp;) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }
00350 
00351   <span class="keyword">public</span>:
00352     <span class="keywordtype">int</span>                pos; <span class="comment">// position of condition in statement</span>
00353 
00354 
00355     <span class="keywordtype">char</span>* dump(<span class="keywordtype">char</span>* buf) { 
00356         <span class="keywordtype">char</span>* p = buf;
00357         <span class="keywordflow">for</span> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 
00358             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa4">dump</a>(p);
00359         }
00360         <span class="keywordflow">return</span> buf;
00361     }
00362 
00363     <span class="keywordtype">char</span>* dumpValues(<span class="keywordtype">char</span>* buf) { 
00364         <span class="keywordtype">char</span>* p = buf;
00365         <span class="keywordflow">for</span> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 
00366             p = elem-&gt;<a class="code" href="classdbQueryElement.html#dbQueryElementa5">dumpValues</a>(p);
00367         }
00368         <span class="keywordflow">return</span> buf;
00369     }
00370 
00371     dbQuery&amp; append(dbQueryElement::ElementType type, <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr,
00372                     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 
00373     { 
00374         nextElement = &amp;(*nextElement=<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>;
00375         operand = (type == dbQueryElement::qExpression);
00376         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00377     }
00378 
00379     dbQuery&amp; reset();
00380 
00381     <span class="comment">//</span>
00382     <span class="comment">// Redefined operator = and , make it possible to specify query in the</span>
00383     <span class="comment">// following way:</span>
00384     <span class="comment">//         int x, y;</span>
00385     <span class="comment">//         dbDataTime dt;</span>
00386     <span class="comment">//         dbQuery q; </span>
00387     <span class="comment">//         dbCursor&lt;record&gt; cursor;</span>
00388     <span class="comment">//         q = "x=",x,"and y=",y,"and",dt == "date";</span>
00389     <span class="comment">//         for (x = 0; x &lt; max_x; x++) { </span>
00390     <span class="comment">//             for (y = 0; y &lt; max_y; y++) { </span>
00391     <span class="comment">//                 cursor.select(q);</span>
00392     <span class="comment">//                 ...</span>
00393     <span class="comment">//             }</span>
00394     <span class="comment">//         }</span>
00395 
00396     dbQuery&amp; add(dbQueryExpression <span class="keyword">const</span>&amp; expr); 
00397 
00398     dbQuery&amp; And(dbQueryExpression <span class="keyword">const</span>&amp; expr) { 
00399         <span class="keywordflow">if</span> (elements != NULL) { 
00400             append(dbQueryElement::qExpression, <span class="stringliteral">"and"</span>);
00401         }
00402         <span class="keywordflow">return</span> add(expr);
00403     }
00404 
00405     dbQuery&amp; Or(dbQueryExpression <span class="keyword">const</span>&amp; expr) { 
00406         <span class="keywordflow">if</span> (elements != NULL) { 
00407             append(dbQueryElement::qExpression, <span class="stringliteral">"or"</span>);
00408         }
00409         <span class="keywordflow">return</span> add(expr);
00410     }
00411 
00412     dbQuery&amp; And(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 
00413         <span class="keywordflow">if</span> (elements != NULL) { 
00414             append(dbQueryElement::qExpression, <span class="stringliteral">"and"</span>);
00415         }
00416         <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);
00417     }
00418 
00419     dbQuery&amp; Or(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 
00420         <span class="keywordflow">if</span> (elements != NULL) { 
00421             append(dbQueryElement::qExpression, <span class="stringliteral">"or"</span>);
00422         }
00423         <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);
00424     }
00425 
00426     dbQuery&amp; add(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 
00427         <span class="keywordflow">return</span> append(operand ? dbQueryElement::qVarString 
00428                       : dbQueryElement::qExpression, str);
00429     }
00430     dbQuery&amp; add(<span class="keywordtype">char</span> <span class="keyword">const</span>** str) { 
00431         <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);
00432     }
00433     dbQuery&amp; add(<a class="code" href="classrectangle.html">rectangle</a> <span class="keyword">const</span>&amp; rect) {
00434         <span class="keywordflow">return</span> append(dbQueryElement::qVarRectangle, &amp;rect);
00435     }
00436 <span class="preprocessor">#ifdef USE_STD_STRING</span>
00437 <span class="preprocessor"></span>    dbQuery&amp; add(std::string <span class="keyword">const</span>&amp; str) { 
00438         <span class="keywordflow">return</span> append(dbQueryElement::qVarStdString, &amp;str);
00439     }
00440     dbQuery&amp; operator,(std::string <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> add(str); }
00441 <span class="preprocessor">#endif</span>
00442 <span class="preprocessor"></span>    dbQuery&amp; add(<span class="keywordtype">char</span>** str) { 
00443         <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);
00444     }

⌨️ 快捷键说明

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