📄 query_8h-source.html
字号:
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 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>&) : dbCompiledQuery() {}
00349 dbQuery& operator =(dbQuery <span class="keyword">const</span>&) { <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-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) {
00358 p = elem-><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-><a class="code" href="classdbQueryElement.html#dbQueryElemento0">next</a>) {
00366 p = elem-><a class="code" href="classdbQueryElement.html#dbQueryElementa5">dumpValues</a>(p);
00367 }
00368 <span class="keywordflow">return</span> buf;
00369 }
00370
00371 dbQuery& 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 = &(*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>;
00375 operand = (type == dbQueryElement::qExpression);
00376 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00377 }
00378
00379 dbQuery& 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<record> cursor;</span>
00388 <span class="comment">// q = "x=",x,"and y=",y,"and",dt == "date";</span>
00389 <span class="comment">// for (x = 0; x < max_x; x++) { </span>
00390 <span class="comment">// for (y = 0; y < 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& add(dbQueryExpression <span class="keyword">const</span>& expr);
00397
00398 dbQuery& And(dbQueryExpression <span class="keyword">const</span>& 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& Or(dbQueryExpression <span class="keyword">const</span>& 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& 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& 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& 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& 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& add(<a class="code" href="classrectangle.html">rectangle</a> <span class="keyword">const</span>& rect) {
00434 <span class="keywordflow">return</span> append(dbQueryElement::qVarRectangle, &rect);
00435 }
00436 <span class="preprocessor">#ifdef USE_STD_STRING</span>
00437 <span class="preprocessor"></span> dbQuery& add(std::string <span class="keyword">const</span>& str) {
00438 <span class="keywordflow">return</span> append(dbQueryElement::qVarStdString, &str);
00439 }
00440 dbQuery& operator,(std::string <span class="keyword">const</span>& str) { <span class="keywordflow">return</span> add(str); }
00441 <span class="preprocessor">#endif</span>
00442 <span class="preprocessor"></span> dbQuery& 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 + -