query_8h-source.html
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 682 行 · 第 1/4 页
HTML
682 行
00197 <font class="preprocessor"></font> dbQueryExpression& operator,(std::string <font class="keyword">const</font>& str) {00198 <font class="keywordflow">return</font> add(dbQueryElement::qVarStdString, &str);00199 }00200 <font class="preprocessor">#endif</font>00201 <font class="preprocessor"></font> dbQueryExpression& operator,(dbQueryExpression <font class="keyword">const</font>& expr) { 00202 *last = <font class="keyword">new</font> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(dbQueryElement::qExpression, <font class="stringliteral">"("</font>);00203 (*last)->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 = &(*last)-><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& operator,(dbComponent <font class="keyword">const</font>& 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& operator += (dbComponent <font class="keyword">const</font>& comp) { 00220 <font class="keywordflow">return</font> *<font class="keyword">this</font>,comp;00221 }00222 dbQueryExpression& 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><<font class="keyword">class</font> T>00227 dbQueryExpression& operator,(<a class="code" href="classdbReference.html">dbReference<T></a> <font class="keyword">const</font>& value) { 00228 <font class="keywordflow">return</font> add(dbQueryElement::qVarReference, &value, &T::dbDescriptor);00229 }00230 00231 <font class="keyword">template</font><<font class="keyword">class</font> T>00232 <font class="keyword">inline</font> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray</a>< <a class="code" href="classdbReference.html">dbReference<T></a> > <font class="keyword">const</font>& value) { 00233 <font class="keywordflow">return</font> add(dbQueryElement::qVarArrayOfRef, &value, 00234 &T::dbDescriptor);00235 }00236 00237 <font class="keyword">template</font><<font class="keyword">class</font> T>00238 <font class="keyword">inline</font> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray</a>< <a class="code" href="classdbReference.html">dbReference<T></a> ><font class="keyword">const</font>* <font class="keyword">const</font>& value) { 00239 <font class="keywordflow">return</font> add(dbQueryElement::qVarArrayOfRefPtr, &value, &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>&) {} 00301 dbQuery& operator =(dbQuery <font class="keyword">const</font>&) { <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-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00310 p = elem-><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-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00318 p = elem-><a class="code" href="classdbQueryElement.html#dbQueryElementa3">dumpValues</a>(p);00319 }00320 <font class="keywordflow">return</font> buf;00321 }00322 00323 dbQuery& 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 = &(*nextElement=<font class="keyword">new</font> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(type,ptr,table))-><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& 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<record> cursor;</font>00340 <font class="comment">// q = "x=",x,"and y=",y,"and",dt == "date";</font>00341 <font class="comment">// for (x = 0; x < max_x; x++) { </font>00342 <font class="comment">// for (y = 0; y < 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& add(dbQueryExpression <font class="keyword">const</font>& expr); 00349 00350 dbQuery& 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& 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& 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& 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& add(std::string <font class="keyword">const</font>& str) { 00373 <font class="keywordflow">return</font> append(dbQueryElement::qVarStdString, &str);00374 }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?