📄 query_8h-source.html
字号:
00209 }00210 <span class="preprocessor">#endif</span>00211 <span class="preprocessor"></span> dbQueryExpression& operator,(dbQueryExpression <span class="keyword">const</span>& expr) { 00212 *last = <span class="keyword">new</span> dbQueryElement(dbQueryElement::qExpression, <span class="stringliteral">"("</span>);00213 (*last)->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 = &(*last)->next;00217 operand = <span class="keyword">false</span>;00218 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00219 }00220 dbQueryExpression& operator,(dbComponent <span class="keyword">const</span>& 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& operator += (dbComponent <span class="keyword">const</span>& comp) { 00230 <span class="keywordflow">return</span> *<span class="keyword">this</span>,comp;00231 }00232 dbQueryExpression& 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><<span class="keyword">class</span> T>00237 dbQueryExpression& operator,(<a class="code" href="classdbReference.html">dbReference<T></a> <span class="keyword">const</span>& value) { 00238 <span class="keywordflow">return</span> add(dbQueryElement::qVarReference, &value, &T::dbDescriptor);00239 }00240 00241 <span class="keyword">template</span><<span class="keyword">class</span> T>00242 <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray</a>< <a class="code" href="classdbReference.html">dbReference<T></a> > <span class="keyword">const</span>& value) { 00243 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRef, &value, 00244 &T::dbDescriptor);00245 }00246 00247 <span class="keyword">template</span><<span class="keyword">class</span> T>00248 <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray</a>< <a class="code" href="classdbReference.html">dbReference<T></a> ><span class="keyword">const</span>* <span class="keyword">const</span>& value) { 00249 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRefPtr, &value, &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>&) {} 00313 dbQuery& operator =(dbQuery <span class="keyword">const</span>&) { <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-><a class="code" href="classdbQueryElement.html#dbQueryElementr0">next</a>) { 00322 p = elem-><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-><a class="code" href="classdbQueryElement.html#dbQueryElementr0">next</a>) { 00330 p = elem-><a class="code" href="classdbQueryElement.html#dbQueryElementa5">dumpValues</a>(p);00331 }00332 <span class="keywordflow">return</span> buf;00333 }00334 00335 dbQuery& 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 = &(*nextElement=<span class="keyword">new</span> dbQueryElement(type,ptr,table))->next;00339 operand = (type == dbQueryElement::qExpression);00340 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00341 }00342 00343 dbQuery& 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<record> cursor;</span>00352 <span class="comment">// q = "x=",x,"and y=",y,"and",dt == "date";</span>00353 <span class="comment">// for (x = 0; x < max_x; x++) { </span>00354 <span class="comment">// for (y = 0; y < 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& add(dbQueryExpression <span class="keyword">const</span>& expr); 00361 00362 dbQuery& 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& 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& 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& 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& add(std::string <span class="keyword">const</span>& str) { 00385 <span class="keywordflow">return</span> append(dbQueryElement::qVarStdString, &str);00386 }00387 dbQuery& operator,(std::string <span class="keyword">const</span>& str) { <span class="keywordflow">return</span> add(str); }00388 <span class="preprocessor">#endif</span>00389 <span class="preprocessor"></span> dbQuery& add(<span class="keywordtype">char</span>** str) { 00390 <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);00391 }00392 dbQuery& add(int1 <span class="keyword">const</span>& value) { 00393 <span class="keywordflow">return</span> append(dbQueryElement::qVarInt1, &value);00394 }00395 dbQuery& add (int2 <span class="keyword">const</span>& value) { 00396 <span class="keywordflow">return</span> append(dbQueryElement::qVarInt2, &value);00397 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -