📄 compiler_8h-source.html
字号:
00221 func.arg[1] = expr2;00222 func.arg[2] = expr3;00223 func.fptr = fptr;00224 type = nodeTypes[cop];00225 }00226 ~dbExprNode();00227 00228 <span class="keywordtype">void</span>* operator new(size_t size EXTRA_DEBUG_NEW_PARAMS) { 00229 <span class="keywordflow">return</span> dbExprNodeAllocator::instance.allocate();00230 }00231 00232 <span class="keywordtype">void</span> operator delete(<span class="keywordtype">void</span>* ptr EXTRA_DEBUG_NEW_PARAMS) { 00233 dbExprNodeAllocator::instance.deallocate((dbExprNode*)ptr);00234 }00235 };00236 00237 00238 <span class="keyword">class </span>dbExprNodeSegment { 00239 <span class="keyword">public</span>:00240 <span class="keyword">enum</span> { allocationQuantum = 1024};00241 <span class="keywordtype">char</span> buf[<span class="keyword">sizeof</span>(dbExprNode)*allocationQuantum];00242 dbExprNodeSegment* next;00243 };00244 00245 00246 <span class="keyword">class </span>dbBinding { 00247 <span class="keyword">public</span>:00248 dbBinding* next;00249 <span class="keywordtype">char</span> <span class="keyword">const</span>* name;00250 <span class="keywordtype">bool</span> used;00251 <span class="keywordtype">int</span> index;00252 };00253 00254 <span class="keyword">class </span>dbOrderByNode { 00255 <span class="keyword">public</span>:00256 dbOrderByNode* next;00257 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00258 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00259 dbExprNode* expr;00260 <span class="keywordtype">bool</span> ascent; <span class="comment">// true for ascent order, false for descent </span>00261 };00262 00263 <span class="keyword">class </span>dbFollowByNode { 00264 <span class="keyword">public</span>:00265 dbFollowByNode* next;00266 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00267 };00268 00269 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbCompiler { 00270 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQuery.html">dbQuery</a>;00271 <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classdbQueryElement.html">dbQueryElement</a>;00272 <span class="keyword">public</span>:00273 <span class="keyword">enum</span> { 00274 maxStrLen = 4096,00275 maxFreeVars = 400276 };00277 00278 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00279 <a class="code" href="classdbQueryElement.html">dbQueryElement</a>* queryElement;00280 <span class="keywordtype">int</span> currPos;00281 <span class="keywordtype">int</span> firstPos;00282 <span class="keywordtype">int</span> offsetWithinStatement;00283 <span class="keywordtype">int</span> bvalue;00284 db_int8 ivalue;00285 real8 fvalue;00286 dbStrLiteral svalue;00287 <span class="keywordtype">bool</span> hasToken;00288 <span class="keywordtype">int</span> lex;00289 <span class="keywordtype">char</span>* name;00290 dbBinding* bindings;00291 <span class="keywordtype">int</span> nFreeVars;00292 <span class="keywordtype">int</span> varType;00293 <span class="keywordtype">void</span> <span class="keyword">const</span>* varPtr;00294 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* varRefTable;00295 00296 jmp_buf abortCompilation;00297 <span class="keyword">static</span> <span class="keywordtype">bool</span> initialized;00298 00299 <span class="keywordtype">int</span> compare(dbExprNode* expr, dbExprNode* list);00300 00301 <span class="keywordtype">int</span> scan();00302 <span class="keywordtype">void</span> ungetToken(<span class="keywordtype">int</span> tkn) {00303 lex = tkn;00304 hasToken = <span class="keyword">true</span>;00305 }00306 <span class="keywordtype">void</span> error(<span class="keyword">const</span> <span class="keywordtype">char</span>* msg, <span class="keywordtype">int</span> pos = -1);00307 dbExprNode* conjunction(); 00308 dbExprNode* disjunction();00309 dbExprNode* comparison(); 00310 dbExprNode* addition(); 00311 dbExprNode* multiplication(); 00312 dbExprNode* power();00313 dbExprNode* term();00314 dbExprNode* userDefinedOperator();00315 dbExprNode* field(dbExprNode* expr, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* refTable,00316 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd);00317 00318 <span class="keywordtype">bool</span> compile(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table, <a class="code" href="classdbQuery.html">dbQuery</a>& query);00319 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);00320 <span class="keywordtype">void</span> compileOrderByPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00321 <span class="keywordtype">void</span> compileStartFollowPart(<a class="code" href="classdbQuery.html">dbQuery</a>& query);00322 00323 dbCompiler();00324 };00325 00326 <span class="keyword">class </span>dbDatabaseThreadContext : <span class="keyword">public</span> <a class="code" href="classdbL2List.html">dbL2List</a> { 00327 <span class="keyword">public</span>:00328 <span class="keywordtype">int</span> readAccess;00329 <span class="keywordtype">int</span> writeAccess;00330 <span class="keywordtype">int</span> concurrentId;00331 <span class="keywordtype">int</span> mutatorCSLocked;00332 00333 <a class="code" href="classdbL2List.html">dbL2List</a> cursors; 00334 00335 dbCompiler compiler;00336 00337 dbProcessId currPid;00338 00339 <span class="keywordtype">bool</span> interactive;00340 <span class="keywordtype">bool</span> catched;00341 <span class="keywordtype">bool</span> commitDelayed;00342 <span class="keywordtype">bool</span> removeContext;00343 jmp_buf unwind;00344 00345 dbDatabaseThreadContext() { 00346 concurrentId = 0;00347 readAccess = <span class="keyword">false</span>;00348 writeAccess = <span class="keyword">false</span>;00349 mutatorCSLocked = <span class="keyword">false</span>;00350 interactive = <span class="keyword">false</span>;00351 catched = <span class="keyword">false</span>;00352 commitDelayed = <span class="keyword">false</span>;00353 removeContext = <span class="keyword">false</span>;00354 currPid = dbProcessId::getCurrent();00355 }00356 };00357 00358 <span class="keyword">union </span>dbSynthesizedAttribute { 00359 byte* base;00360 <span class="keywordtype">int</span> bvalue;00361 db_int8 ivalue;00362 real8 fvalue;00363 <span class="keywordtype">void</span>* raw;00364 oid_t oid;00365 00366 <span class="keyword">struct </span>{ 00367 <span class="keywordtype">char</span>* base;00368 <span class="keywordtype">int</span> size;00369 } array;00370 };00371 00372 <span class="keyword">struct </span>dbStringValue;00373 00374 <span class="keyword">struct </span>FASTDB_DLL_ENTRY dbInheritedAttribute { 00375 byte* record;00376 oid_t oid;00377 <a class="code" href="classdbTable.html">dbTable</a>* table;00378 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00379 dbStringValue* tempStrings;00380 size_t paramBase;00381 <span class="keyword">enum</span> { 00382 internalStrBufSize = 8*1024 00383 };00384 size_t strBufPos;00385 <span class="keywordtype">char</span> strBuf[internalStrBufSize];00386 00387 <span class="keyword">struct </span>{ 00388 <span class="keywordtype">int</span> index;00389 jmp_buf unwind;00390 } exists_iterator[dbCompiler::maxFreeVars];00391 00392 <span class="keywordtype">void</span> removeTemporaries();00393 00394 dbInheritedAttribute() { 00395 tempStrings = NULL;00396 strBufPos = 0;00397 }00398 00399 ~dbInheritedAttribute() { 00400 removeTemporaries(); 00401 }00402 };00403 00404 <span class="keyword">struct </span>dbStringValue { 00405 dbStringValue* next;00406 <span class="keywordtype">char</span> str[1];00407 00408 <span class="keyword">static</span> <span class="keywordtype">char</span>* create(size_t size, dbInheritedAttribute& attr) { 00409 <span class="keywordflow">if</span> (attr.strBufPos + size > <span class="keyword">sizeof</span>(attr.strBuf)) { 00410 dbStringValue* sv = 00411 (dbStringValue*)<span class="keyword">new</span> <span class="keywordtype">char</span>[offsetof(dbStringValue, str) + size];00412 sv->next = attr.tempStrings;00413 attr.tempStrings = sv;00414 <span class="keywordflow">return</span> sv->str;00415 } <span class="keywordflow">else</span> { 00416 <span class="keywordtype">char</span>* p = attr.strBuf + attr.strBufPos;00417 attr.strBufPos += size;00418 <span class="keywordflow">return</span> p;00419 }00420 }00421 00422 <span class="keyword">static</span> <span class="keywordtype">char</span>* create(<span class="keywordtype">char</span> <span class="keyword">const</span>* s, dbInheritedAttribute& attr) {00423 size_t len = strlen(s) + 1;00424 <span class="keywordtype">char</span>* buf;00425 <span class="keywordflow">if</span> (attr.strBufPos + len > <span class="keyword">sizeof</span>(attr.strBuf)) { 00426 dbStringValue* sv = 00427 (dbStringValue*)<span class="keyword">new</span> <span class="keywordtype">char</span>[offsetof(dbStringValue,str)+len];00428 sv->next = attr.tempStrings;00429 attr.tempStrings = sv;00430 buf = sv->str;00431 } <span class="keywordflow">else</span> { 00432 buf = attr.strBuf + attr.strBufPos;00433 attr.strBufPos += len;00434 }00435 <span class="keywordflow">return</span> strcpy(buf, s);00436 }00437 };00438 00439 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -