📄 query_8h-source.html
字号:
00227 last = &(*last)-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00228 operand = <span class="keyword">false</span>;00229 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00230 }00231 dbQueryExpression& operator,(dbComponent <span class="keyword">const</span>& comp) { 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& operator += (dbComponent <span class="keyword">const</span>& comp) { 00241 <span class="keywordflow">return</span> *<span class="keyword">this</span>,comp;00242 }00243 dbQueryExpression& 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><<span class="keyword">class</span> T>00248 dbQueryExpression& operator,(<a class="code" href="classdbReference.html">dbReference<T></a> <span class="keyword">const</span>& value) { 00249 <span class="keywordflow">return</span> add(dbQueryElement::qVarReference, &value, &T::dbDescriptor);00250 }00251 00252 <span class="keyword">template</span><<span class="keyword">class</span> T>00253 <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) { 00254 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRef, &value, &T::dbDescriptor);00255 }00256 00257 <span class="keyword">template</span><<span class="keyword">class</span> T>00258 <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) { 00259 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfRefPtr, &value, &T::dbDescriptor);00260 }00261 <span class="preprocessor">#endif</span>00262 <span class="preprocessor"></span><span class="preprocessor">#if !defined(_MSC_VER) || _MSC_VER+0 >= 1300</span>00263 <span class="preprocessor"></span> <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray<db_int4></a> <span class="keyword">const</span>& value) { 00264 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt4, &value);00265 }00266 00267 <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray<db_int4></a><span class="keyword">const</span>* <span class="keyword">const</span>& value) { 00268 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt4Ptr, &value);00269 }00270 00271 <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray<db_int8></a> <span class="keyword">const</span>& value) { 00272 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt8, &value);00273 }00274 00275 <span class="keyword">inline</span> dbQueryExpression& operator,(<a class="code" href="classdbArray.html">dbArray<db_int8></a><span class="keyword">const</span>* <span class="keyword">const</span>& value) { 00276 <span class="keywordflow">return</span> add(dbQueryElement::qVarArrayOfInt8Ptr, &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 StartFromArrayPtr00309 };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 dbCompiledQuery() { 00318 tree = NULL;00319 order = NULL;00320 follow = NULL;00321 table = NULL;00322 startFrom = StartFromAny;00323 limitSpecified = <span class="keyword">false</span>;00324 }00325 };00326 <a name="l00331"></a><a class="code" href="classdbQuery.html">00331</a> <span class="keyword">class </span>FASTDB_DLL_ENTRY dbQuery : <span class="keyword">public</span> dbCompiledQuery { 00332 <span class="keyword">friend</span> <span class="keyword">class </span>dbCompiler;00333 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbDatabase.html">dbDatabase</a>;00334 <span class="keyword">friend</span> <span class="keyword">class </span>dbSubSql;00335 <span class="keyword">friend</span> <span class="keyword">class </span>dbCLI;00336 <span class="keyword">private</span>:00337 dbMutex mutex;00338 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elements;00339 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>** nextElement;00340 <span class="keywordtype">bool</span> operand;00341 <span class="keywordtype">bool</span> mutexLocked;00342 00343 <span class="comment">//</span>00344 <span class="comment">// Prohibite query copying</span>00345 <span class="comment">//</span>00346 dbQuery(dbQuery <span class="keyword">const</span>&) : dbCompiledQuery() {} 00347 dbQuery& operator =(dbQuery <span class="keyword">const</span>&) { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }00348 00349 <span class="keyword">public</span>:00350 <span class="keywordtype">int</span> pos; <span class="comment">// position of condition in statement</span>00351 00352 00353 <span class="keywordtype">char</span>* dump(<span class="keywordtype">char</span>* buf) { 00354 <span class="keywordtype">char</span>* p = buf;00355 <span class="keywordflow">for</span> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00356 p = elem-><a class="code" href="classdbQueryElement.html#dbQueryElementa4">dump</a>(p);00357 }00358 <span class="keywordflow">return</span> buf;00359 }00360 00361 <span class="keywordtype">char</span>* dumpValues(<span class="keywordtype">char</span>* buf) { 00362 <span class="keywordtype">char</span>* p = buf;00363 <span class="keywordflow">for</span> (<a class="code" href="classdbQueryElement.html">dbQueryElement</a>* elem = elements; elem != NULL; elem = elem-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) { 00364 p = elem-><a class="code" href="classdbQueryElement.html#dbQueryElementa5">dumpValues</a>(p);00365 }00366 <span class="keywordflow">return</span> buf;00367 }00368 00369 dbQuery& append(dbQueryElement::ElementType type, <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr,00370 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table = NULL) 00371 { 00372 nextElement = &(*nextElement=<span class="keyword">new</span> <a class="code" href="classdbQueryElement.html">dbQueryElement</a>(type,ptr,table))-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>;00373 operand = (type == dbQueryElement::qExpression);00374 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00375 }00376 00377 dbQuery& reset();00378 00379 <span class="comment">//</span>00380 <span class="comment">// Redefined operator = and , make it possible to specify query in the</span>00381 <span class="comment">// following way:</span>00382 <span class="comment">// int x, y;</span>00383 <span class="comment">// dbDataTime dt;</span>00384 <span class="comment">// dbQuery q; </span>00385 <span class="comment">// dbCursor<record> cursor;</span>00386 <span class="comment">// q = "x=",x,"and y=",y,"and",dt == "date";</span>00387 <span class="comment">// for (x = 0; x < max_x; x++) { </span>00388 <span class="comment">// for (y = 0; y < max_y; y++) { </span>00389 <span class="comment">// cursor.select(q);</span>00390 <span class="comment">// ...</span>00391 <span class="comment">// }</span>00392 <span class="comment">// }</span>00393 00394 dbQuery& add(dbQueryExpression <span class="keyword">const</span>& expr); 00395 00396 dbQuery& And(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00397 <span class="keywordflow">if</span> (elements != NULL) { 00398 append(dbQueryElement::qExpression, <span class="stringliteral">"and"</span>);00399 }00400 <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);00401 }00402 00403 dbQuery& Or(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00404 <span class="keywordflow">if</span> (elements != NULL) { 00405 append(dbQueryElement::qExpression, <span class="stringliteral">"or"</span>);00406 }00407 <span class="keywordflow">return</span> append(dbQueryElement::qExpression, str);00408 }00409 00410 dbQuery& add(<span class="keywordtype">char</span> <span class="keyword">const</span>* str) { 00411 <span class="keywordflow">return</span> append(operand ? dbQueryElement::qVarString 00412 : dbQueryElement::qExpression, str);00413 }00414 dbQuery& add(<span class="keywordtype">char</span> <span class="keyword">const</span>** str) { 00415 <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);00416 }00417 dbQuery& add(<a class="code" href="classrectangle.html">rectangle</a> <span class="keyword">const</span>& rect) {00418 <span class="keywordflow">return</span> append(dbQueryElement::qVarRectangle, &rect);00419 }00420 <span class="preprocessor">#ifdef USE_STD_STRING</span>00421 <span class="preprocessor"></span> dbQuery& add(std::string <span class="keyword">const</span>& str) { 00422 <span class="keywordflow">return</span> append(dbQueryElement::qVarStdString, &str);00423 }00424 dbQuery& operator,(std::string <span class="keyword">const</span>& str) { <span class="keywordflow">return</span> add(str); }00425 <span class="preprocessor">#endif</span>00426 <span class="preprocessor"></span> dbQuery& add(<span class="keywordtype">char</span>** str) { 00427 <span class="keywordflow">return</span> append(dbQueryElement::qVarStringPtr, str);00428 }00429 dbQuery& add(int1 <span class="keyword">const</span>& value) { 00430 <span class="keywordflow">return</span> append(dbQueryElement::qVarInt1, &value);00431 }00432 dbQuery& add (int2 <span class="keyword">const</span>& value) { 00433 <span class="keywordflow">return</span> append(dbQueryElement::qVarInt2, &value);00434 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -