compiler_8h-source.html
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 437 行 · 第 1/2 页
HTML
437 行
00212 00213 <font class="keywordtype">void</font>* operator new(size_t size);00214 00215 <font class="keywordtype">void</font> operator delete(<font class="keywordtype">void</font>* ptr) { 00216 <font class="keywordflow">if</font> (ptr != NULL) { 00217 dbExprNode* node = (dbExprNode*)ptr;00218 node->next = freeNodeList;00219 freeNodeList = node;00220 }00221 }00222 00223 <font class="keyword">static</font> <font class="keywordtype">void</font> cleanup();00224 };00225 00226 00227 <font class="keyword">class </font>dbExprNodeSegment { 00228 <font class="keyword">public</font>:00229 <font class="keyword">enum</font> { allocationQuantum = 1024};00230 <font class="keywordtype">char</font> buf[<font class="keyword">sizeof</font>(dbExprNode)*allocationQuantum];00231 dbExprNodeSegment* next;00232 };00233 00234 00235 <font class="keyword">class </font>dbBinding { 00236 <font class="keyword">public</font>:00237 dbBinding* next;00238 <font class="keywordtype">char</font> <font class="keyword">const</font>* name;00239 <font class="keywordtype">bool</font> used;00240 <font class="keywordtype">int</font> index;00241 };00242 00243 <font class="keyword">class </font>dbOrderByNode { 00244 <font class="keyword">public</font>:00245 dbOrderByNode* next;00246 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00247 <font class="keywordtype">bool</font> stringLength; <font class="comment">// true if order by length of string instead of string value</font>00248 <font class="keywordtype">bool</font> ascent; <font class="comment">// true for ascent order, false for descent </font>00249 };00250 00251 <font class="keyword">class </font>dbFollowByNode { 00252 <font class="keyword">public</font>:00253 dbFollowByNode* next;00254 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00255 };00256 00257 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbCompiler { 00258 <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQuery.html">dbQuery</a>;00259 <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="classdbQueryElement.html">dbQueryElement</a>;00260 <font class="keyword">public</font>:00261 <font class="keyword">enum</font> { 00262 maxStrLen = 4096,00263 maxFreeVars = 400264 };00265 00266 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00267 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* queryElement;00268 <font class="keywordtype">int</font> currPos;00269 <font class="keywordtype">int</font> firstPos;00270 <font class="keywordtype">int</font> offsetWithinStatement;00271 <font class="keywordtype">int</font> bvalue;00272 db_int8 ivalue;00273 real8 fvalue;00274 dbStrLiteral svalue;00275 <font class="keywordtype">int</font> lex;00276 <font class="keywordtype">char</font>* name;00277 dbBinding* bindings;00278 <font class="keywordtype">int</font> nFreeVars;00279 <font class="keywordtype">int</font> varType;00280 <font class="keywordtype">void</font> <font class="keyword">const</font>* varPtr;00281 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* varRefTable;00282 00283 jmp_buf abortCompilation;00284 <font class="keyword">static</font> <font class="keywordtype">bool</font> initialized;00285 00286 <font class="keywordtype">int</font> compare(dbExprNode* expr, dbExprNode* list);00287 00288 <font class="keywordtype">int</font> scan();00289 <font class="keywordtype">void</font> error(<font class="keyword">const</font> <font class="keywordtype">char</font>* msg, <font class="keywordtype">int</font> pos = -1);00290 dbExprNode* conjunction(); 00291 dbExprNode* disjunction();00292 dbExprNode* comparison(); 00293 dbExprNode* addition(); 00294 dbExprNode* multiplication(); 00295 dbExprNode* power();00296 dbExprNode* term();00297 dbExprNode* userDefinedOperator();00298 dbExprNode* field(dbExprNode* expr, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* refTable,00299 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00300 00301 <font class="keywordtype">bool</font> compile(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00302 dbExprNode* compileExpression(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <font class="keywordtype">char</font> <font class="keyword">const</font>* expr, <font class="keywordtype">int</font> startPos);00303 <font class="keywordtype">void</font> compileOrderByPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00304 <font class="keywordtype">void</font> compileStartFollowPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00305 00306 dbCompiler();00307 };00308 00309 <font class="keyword">class </font>dbDatabaseThreadContext : <font class="keyword">public</font> <a class="code" href="classdbL2List.html">dbL2List</a> { 00310 <font class="keyword">public</font>:00311 <font class="keywordtype">int</font> readAccess;00312 <font class="keywordtype">int</font> writeAccess;00313 <font class="keywordtype">int</font> concurrentId;00314 <font class="keywordtype">int</font> mutatorCSLocked;00315 00316 <a class="code" href="classdbL2List.html">dbL2List</a> cursors; 00317 00318 dbCompiler compiler;00319 00320 dbProcessId currPid;00321 00322 <font class="keywordtype">bool</font> interactive;00323 <font class="keywordtype">bool</font> catched;00324 <font class="keywordtype">bool</font> commitDelayed;00325 <font class="keywordtype">bool</font> removeContext;00326 jmp_buf unwind;00327 00328 dbDatabaseThreadContext() { 00329 concurrentId = 0;00330 readAccess = <font class="keyword">false</font>;00331 writeAccess = <font class="keyword">false</font>;00332 mutatorCSLocked = <font class="keyword">false</font>;00333 interactive = <font class="keyword">false</font>;00334 catched = <font class="keyword">false</font>;00335 commitDelayed = <font class="keyword">false</font>;00336 removeContext = <font class="keyword">false</font>;00337 currPid = dbProcessId::getCurrent();00338 }00339 };00340 00341 <font class="keyword">union </font>dbSynthesizedAttribute { 00342 byte* base;00343 <font class="keywordtype">int</font> bvalue;00344 db_int8 ivalue;00345 real8 fvalue;00346 <font class="keywordtype">void</font>* raw;00347 oid_t oid;00348 00349 <font class="keyword">struct </font>{ 00350 <font class="keywordtype">char</font>* base;00351 <font class="keywordtype">int</font> size;00352 } array;00353 };00354 00355 <font class="keyword">struct </font>dbStringValue;00356 00357 <font class="keyword">struct </font>FASTDB_DLL_ENTRY dbInheritedAttribute { 00358 byte* record;00359 oid_t oid;00360 <a class="code" href="classdbTable.html">dbTable</a>* table;00361 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00362 dbStringValue* tempStrings;00363 size_t paramBase;00364 <font class="keyword">enum</font> { 00365 internalStrBufSize = 8*1024 00366 };00367 size_t strBufPos;00368 <font class="keywordtype">char</font> strBuf[internalStrBufSize];00369 00370 <font class="keyword">struct </font>{ 00371 <font class="keywordtype">int</font> index;00372 jmp_buf unwind;00373 } exists_iterator[dbCompiler::maxFreeVars];00374 00375 <font class="keywordtype">void</font> removeTemporaries();00376 00377 dbInheritedAttribute() { 00378 tempStrings = NULL;00379 strBufPos = 0;00380 }00381 00382 ~dbInheritedAttribute() { 00383 removeTemporaries(); 00384 }00385 };00386 00387 <font class="keyword">struct </font>dbStringValue { 00388 dbStringValue* next;00389 <font class="keywordtype">char</font> str[1];00390 00391 <font class="keyword">static</font> <font class="keywordtype">char</font>* create(size_t size, dbInheritedAttribute& attr) { 00392 <font class="keywordflow">if</font> (attr.strBufPos + size > <font class="keyword">sizeof</font>(attr.strBuf)) { 00393 dbStringValue* sv = 00394 (dbStringValue*)<font class="keyword">new</font> <font class="keywordtype">char</font>[offsetof(dbStringValue, str) + size];00395 sv->next = attr.tempStrings;00396 attr.tempStrings = sv;00397 <font class="keywordflow">return</font> sv->str;00398 } <font class="keywordflow">else</font> { 00399 <font class="keywordtype">char</font>* p = attr.strBuf + attr.strBufPos;00400 attr.strBufPos += size;00401 <font class="keywordflow">return</font> p;00402 }00403 }00404 00405 <font class="keyword">static</font> <font class="keywordtype">char</font>* create(<font class="keywordtype">char</font> <font class="keyword">const</font>* s, dbInheritedAttribute& attr) {00406 size_t len = strlen(s) + 1;00407 <font class="keywordtype">char</font>* buf;00408 <font class="keywordflow">if</font> (attr.strBufPos + len > <font class="keyword">sizeof</font>(attr.strBuf)) { 00409 dbStringValue* sv = 00410 (dbStringValue*)<font class="keyword">new</font> <font class="keywordtype">char</font>[offsetof(dbStringValue,str)+len];00411 sv->next = attr.tempStrings;00412 attr.tempStrings = sv;00413 buf = sv->str;00414 } <font class="keywordflow">else</font> { 00415 buf = attr.strBuf + attr.strBufPos;00416 attr.strBufPos += len;00417 }00418 <font class="keywordflow">return</font> strcpy(buf, s);00419 }00420 };00421 00422 <font class="preprocessor">#endif</font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:28 2002 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.15 </small></address></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?