📄 compiler_8h-source.html
字号:
00254 }00255 ~dbExprNode();00256 00257 <span class="keywordtype">void</span>* operator new(size_t size EXTRA_DEBUG_NEW_PARAMS) { 00258 <span class="keywordflow">return</span> dbExprNodeAllocator::instance.allocate();00259 }00260 00261 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* ptr EXTRA_DEBUG_NEW_PARAMS) { 00262 dbExprNodeAllocator::instance.deallocate((dbExprNode*)ptr);00263 }00264 };00265 00266 00267 <span class="keyword">class </span>dbExprNodeSegment { 00268 <span class="keyword">public</span>:00269 <span class="keyword">enum</span> { allocationQuantum = 1024};00270 <span class="keywordtype">char</span> buf[<span class="keyword">sizeof</span>(dbExprNode)*allocationQuantum];00271 dbExprNodeSegment* next;00272 };00273 00274 00275 <span class="keyword">class </span>dbBinding { 00276 <span class="keyword">public</span>:00277 dbBinding* next;00278 <span class="keywordtype">char</span> <span class="keyword">const</span>* name;00279 <span class="keywordtype">bool</span> used;00280 <span class="keywordtype">int</span> index;00281 };00282 00283 <span class="keyword">class </span>dbOrderByNode { 00284 <span class="keyword">public</span>:00285 dbOrderByNode* next;00286 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00287 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00288 dbExprNode* expr;00289 <span class="keywordtype">bool</span> ascent; <span class="comment">// true for ascent order, false for descent </span>00290 00291 ~dbOrderByNode() { 00292 <span class="keyword">delete</span> expr;00293 }00294 };00295 00296 <span class="keyword">class </span>dbFollowByNode { 00297 <span class="keyword">public</span>:00298 dbFollowByNode* next;00299 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00300 };00301 00302 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbCompiler { 00303 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00304 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryElement.html">dbQueryElement</a>;00305 <span class="keyword">public</span>:00306 <span class="keyword">enum</span> { 00307 maxStrLen = 4096,00308 maxFreeVars = 400309 };00310 00311 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00312 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* queryElement;00313 <span class="keywordtype">int</span> currPos;00314 <span class="keywordtype">int</span> firstPos;00315 <span class="keywordtype">int</span> offsetWithinStatement;00316 <span class="keywordtype">int</span> bvalue;00317 db_int8 ivalue;00318 real8 fvalue;00319 dbStrLiteral svalue;00320 <span class="keywordtype">bool</span> hasToken;00321 <span class="keywordtype">int</span> lex;00322 <span class="keywordtype">char</span>* name;00323 dbBinding* bindings;00324 <span class="keywordtype">int</span> nFreeVars;00325 <span class="keywordtype">int</span> varType;00326 <span class="keywordtype">void</span> <span class="keyword">const</span>* varPtr;00327 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* varRefTable;00328 00329 jmp_buf abortCompilation;00330 <span class="keyword">static</span> <span class="keywordtype">bool</span> initialized;00331 00332 <span class="keywordtype">void</span> compare(dbExprNode* expr, dbExprNode* list);00333 00334 <span class="keywordtype">int</span> scan();00335 <span class="keywordtype">void</span> ungetToken(<span class="keywordtype">int</span> tkn) {00336 lex = tkn;00337 hasToken = <span class="keyword">true</span>;00338 }00339 <span class="keywordtype">void</span> error(<span class="keyword">const</span> <span class="keywordtype">char</span>* msg, <span class="keywordtype">int</span> pos = -1);00340 dbExprNode* conjunction(); 00341 dbExprNode* disjunction();00342 dbExprNode* comparison(); 00343 dbExprNode* addition(); 00344 dbExprNode* multiplication(); 00345 dbExprNode* power();00346 dbExprNode* term();00347 dbExprNode* buildList();00348 dbExprNode* userDefinedOperator();00349 dbExprNode* field(dbExprNode* expr, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* refTable,00350 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00351 00352 <span class="keywordtype">bool</span> compile(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00353 dbExprNode* compileExpression(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <span class="keywordtype">char</span> <span class="keyword">const</span>* expr, <span class="keywordtype">int</span> startPos);00354 <span class="keywordtype">void</span> compileOrderByPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00355 <span class="keywordtype">void</span> compileLimitPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00356 <span class="keywordtype">void</span> compileStartFollowPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00357 00358 <span class="keywordtype">void</span> deleteNode(dbExprNode* node);00359 dbExprNode* rectangleConstant(dbExprNode* head); 00360 00361 dbCompiler();00362 };00363 00364 <span class="keyword">class </span>dbDatabaseThreadContext : <span class="keyword">public</span> <a class="code" href="classdbL2List.html">dbL2List</a> { 00365 <span class="keyword">public</span>:00366 <span class="keywordtype">int</span> readAccess;00367 <span class="keywordtype">int</span> writeAccess;00368 <span class="keywordtype">int</span> concurrentId;00369 <span class="keywordtype">int</span> mutatorCSLocked;00370 <span class="keywordtype">int</span> isMutator;00371 00372 <a class="code" href="classdbL2List.html">dbL2List</a> cursors; 00373 00374 dbCompiler compiler;00375 00376 dbProcessId currPid;00377 00378 <span class="keywordtype">bool</span> interactive;00379 <span class="keywordtype">bool</span> catched;00380 <span class="keywordtype">bool</span> commitDelayed;00381 <span class="keywordtype">bool</span> removeContext;00382 jmp_buf unwind;00383 00384 dbDatabaseThreadContext() { 00385 concurrentId = 0;00386 readAccess = <span class="keyword">false</span>;00387 writeAccess = <span class="keyword">false</span>;00388 mutatorCSLocked = <span class="keyword">false</span>;00389 isMutator = <span class="keyword">false</span>;00390 interactive = <span class="keyword">false</span>;00391 catched = <span class="keyword">false</span>;00392 commitDelayed = <span class="keyword">false</span>;00393 removeContext = <span class="keyword">false</span>;00394 currPid = dbProcessId::getCurrent();00395 }00396 };00397 00398 <span class="keyword">union </span>dbSynthesizedAttribute { 00399 byte* base;00400 <span class="keywordtype">int</span> bvalue;00401 db_int8 ivalue;00402 real8 fvalue;00403 <a class="code" href="classrectangle.html">rectangle</a> rvalue;00404 <span class="keywordtype">void</span>* raw;00405 oid_t oid;00406 00407 <span class="keyword">struct </span>{ 00408 <span class="keywordtype">char</span>* base;00409 <span class="keywordtype">int</span> size;00410 } array;00411 };00412 00413 <span class="keyword">struct </span>dbStringValue;00414 00415 <span class="keyword">struct </span>FASTDB_DLL_ENTRY dbInheritedAttribute { 00416 byte* record;00417 oid_t oid;00418 <a class="code" href="classdbTable.html">dbTable</a>* table;00419 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00420 dbStringValue* tempStrings;00421 size_t paramBase;00422 <span class="keyword">enum</span> { 00423 internalStrBufSize = 8*1024 00424 };00425 size_t strBufPos;00426 <span class="keywordtype">char</span> strBuf[internalStrBufSize];00427 00428 <span class="keyword">struct </span>{ 00429 <span class="keywordtype">int</span> index;00430 jmp_buf unwind;00431 } exists_iterator[dbCompiler::maxFreeVars];00432 00433 <span class="keywordtype">void</span> removeTemporaries();00434 00435 dbInheritedAttribute() { 00436 tempStrings = NULL;00437 strBufPos = 0;00438 }00439 00440 ~dbInheritedAttribute() { 00441 removeTemporaries(); 00442 }00443 };00444 00445 <span class="keyword">struct </span>dbStringValue { 00446 dbStringValue* next;00447 <span class="keywordtype">char</span> str[1];00448 00449 <span class="keyword">static</span> <span class="keywordtype">char</span>* create(size_t size, dbInheritedAttribute& attr) { 00450 <span class="keywordflow">if</span> (attr.strBufPos + size > <span class="keyword">sizeof</span>(attr.strBuf)) { 00451 dbStringValue* sv = 00452 (dbStringValue*)<span class="keyword">new</span> <span class="keywordtype">char</span>[offsetof(dbStringValue, str) + size];00453 sv->next = attr.tempStrings;00454 attr.tempStrings = sv;00455 <span class="keywordflow">return</span> sv->str;00456 } <span class="keywordflow">else</span> { 00457 <span class="keywordtype">char</span>* p = attr.strBuf + attr.strBufPos;00458 attr.strBufPos += size;00459 <span class="keywordflow">return</span> p;00460 }00461 }00462 00463 <span class="keyword">static</span> <span class="keywordtype">char</span>* create(<span class="keywordtype">char</span> <span class="keyword">const</span>* s, dbInheritedAttribute& attr) {00464 size_t len = strlen(s) + 1;00465 <span class="keywordtype">char</span>* buf;00466 <span class="keywordflow">if</span> (attr.strBufPos + len > <span class="keyword">sizeof</span>(attr.strBuf)) { 00467 dbStringValue* sv = 00468 (dbStringValue*)<span class="keyword">new</span> <span class="keywordtype">char</span>[offsetof(dbStringValue,str)+len];00469 sv->next = attr.tempStrings;00470 attr.tempStrings = sv;00471 buf = sv->str;00472 } <span class="keywordflow">else</span> { 00473 buf = attr.strBuf + attr.strBufPos;00474 attr.strBufPos += len;00475 }00476 <span class="keywordflow">return</span> strcpy(buf, s);00477 }00478 };00479 00480 <span class="keyword">inline</span> <span class="keywordtype">char</span>* findWildcard(<span class="keywordtype">char</span>* pattern, <span class="keywordtype">char</span>* escape = NULL) 00481 {00482 <span class="keywordflow">if</span> (escape == NULL) { 00483 <span class="keywordflow">while</span> (*pattern != dbMatchAnyOneChar &&00484 *pattern != dbMatchAnySubstring)00485 {00486 <span class="keywordflow">if</span> (*pattern++ == <span class="charliteral">'\0'</span>) { 00487 <span class="keywordflow">return</span> NULL;00488 }00489 }00490 } <span class="keywordflow">else</span> { 00491 <span class="keywordtype">char</span> esc = *escape;00492 <span class="keywordflow">while</span> (*pattern != dbMatchAnyOneChar &&00493 *pattern != dbMatchAnySubstring &&00494 *pattern != esc)00495 {00496 <span class="keywordflow">if</span> (*pattern++ == <span class="charliteral">'\0'</span>) { 00497 <span class="keywordflow">return</span> NULL;00498 }00499 }00500 }00501 <span class="keywordflow">return</span> pattern;00502 }00503 00504 END_FASTDB_NAMESPACE00505 00506 <span class="preprocessor">#endif</span></pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:58 2006 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -