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

📄 compiler_8h-source.html

📁 最新版本!fastdb是高效的内存数据库系统
💻 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  = 4
00309     };
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_NAMESPACE
00505     
00506 <span class="preprocessor">#endif</span>
</pre></div><hr><address style="align: right;"><small>Generated on Thu Feb 14 12:42:30 2008 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 + -