⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compiler_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
📖 第 1 页 / 共 2 页
字号:
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>&amp; 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>&amp; query);00355     <span class="keywordtype">void</span>        compileLimitPart(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; query);00356     <span class="keywordtype">void</span>        compileStartFollowPart(<a class="code" href="classdbQuery.html">dbQuery</a>&amp; 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&amp; attr) { 00450         <span class="keywordflow">if</span> (attr.strBufPos + size &gt; <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-&gt;next = attr.tempStrings;00454             attr.tempStrings = sv;00455             <span class="keywordflow">return</span> sv-&gt;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&amp; attr) {00464         size_t len = strlen(s) + 1;00465         <span class="keywordtype">char</span>*  buf;00466         <span class="keywordflow">if</span> (attr.strBufPos + len &gt; <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-&gt;next = attr.tempStrings;00470             attr.tempStrings = sv;00471             buf = sv-&gt;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 &amp;&amp;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 &amp;&amp;00493                *pattern != dbMatchAnySubstring &amp;&amp;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 + -