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

📄 subsql_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00184     }00185 00186     <span class="keywordtype">bool</span> expect(<span class="keywordtype">int</span> sourcePos, <span class="keywordtype">char</span>* expected) { 00187         token tkn = scan();00188         <span class="keywordflow">if</span> (tkn != xml_ident) { 00189             fprintf(stderr, <span class="stringliteral">"subsql.cpp:%d: line %d, column %d: Get token %d instead of expected identifier\n"</span>, 00190                     sourcePos, line, pos, tkn);00191             <span class="keywordflow">return</span> <span class="keyword">false</span>;00192         }00193         <span class="keywordflow">if</span> (strcmp(ident, expected) != 0) { 00194             fprintf(stderr, <span class="stringliteral">"subsql.cpp:%d: line %d, column %d: Get tag '%s' instead of expected '%s'\n"</span>, 00195                     sourcePos, line, pos, ident, expected);00196             <span class="keywordflow">return</span> <span class="keyword">false</span>;00197         }00198         <span class="keywordflow">return</span> <span class="keyword">true</span>;00199     }00200 00201   <span class="keyword">private</span>:00202     <span class="keywordtype">int</span>   get();00203     <span class="keywordtype">void</span>  unget(<span class="keywordtype">int</span> ch);00204 00205     <span class="keywordtype">int</span>       line;00206     <span class="keywordtype">int</span>       pos;00207     FILE*     in;00208     <span class="keywordtype">char</span>*     sconst;00209     size_t    size;00210     size_t    slen;00211     db_int8   iconst;00212     <span class="keywordtype">double</span>    fconst;00213     <span class="keywordtype">char</span>      ident[MaxIdentSize];00214 };00215 00216 <span class="keyword">class </span>dbTmpAllocator { 00217     <span class="keyword">enum</span> { 00218         CHUNK_SIZE = 409600219     };00220     <span class="keyword">struct </span>Chunk { 00221         Chunk* next;00222         Chunk* prev; <span class="comment">// is not used, added for alignment</span>00223     };00224     Chunk* curr;00225     size_t used;00226 00227   <span class="keyword">public</span>:00228     dbTmpAllocator() { 00229         curr = NULL;00230         used = CHUNK_SIZE;00231     }00232 00233     ~dbTmpAllocator() { 00234         reset();00235     }00236 00237     <span class="keywordtype">void</span> reset() { 00238         Chunk *c, *next; 00239         <span class="keywordflow">for</span> (c = curr; c != NULL; c = next) { 00240             next = c-&gt;next;00241             dbFree(c);00242         }00243         curr = NULL;00244         used = CHUNK_SIZE;00245     }00246 00247 00248     <span class="keywordtype">void</span>* alloc(size_t size) { 00249         size = DOALIGN(size, 8);00250         <span class="keywordflow">if</span> (size &gt; CHUNK_SIZE/2) { 00251             Chunk* newChunk = (Chunk*)dbMalloc(size + <span class="keyword">sizeof</span>(Chunk));00252             <span class="keywordflow">if</span> (curr != NULL) { 00253                 newChunk-&gt;next = curr-&gt;next;00254                 curr-&gt;next = newChunk;00255             } <span class="keywordflow">else</span> { 00256                 curr = newChunk;00257                 newChunk-&gt;next = NULL;00258                 used = CHUNK_SIZE;00259             }00260             <span class="keywordflow">return</span> newChunk+1;00261         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size &lt;= CHUNK_SIZE - used) { 00262             used += size;00263             <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*)(curr+1) + used - size;00264         } <span class="keywordflow">else</span> { 00265             Chunk* newChunk = (Chunk*)dbMalloc(CHUNK_SIZE);00266             used = <span class="keyword">sizeof</span>(Chunk) + size;00267             newChunk-&gt;next = curr;00268             curr = newChunk;00269             <span class="keywordflow">return</span> newChunk+1;00270         }00271     }00272 };00273 00274 <span class="keyword">class </span>dbSubSql : <span class="keyword">public</span> <a class="code" href="classdbDatabase.html">dbDatabase</a> { 00275   <span class="keyword">private</span>:00276     <span class="keywordtype">int</span>   pos;00277     <span class="keywordtype">int</span>   line;00278     <span class="keywordtype">int</span>   tknPos;00279     <span class="keywordtype">char</span>* buf;00280     <span class="keywordtype">int</span>   buflen;00281     FILE* in;00282     <span class="keywordtype">bool</span>  opened;00283     db_int8  ival;00284     real8 fval;00285     <span class="keywordtype">char</span>* name;00286 00287     oid_t*  oidMap;00288     oid_t   oidMapSize;00289 00290     dbTmpAllocator tmpAlloc;00291  00292     <span class="keyword">static</span> <span class="keywordtype">char</span>* prompt;00293 00294     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* droppedTables;00295     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* existedTables;00296 00297     <a class="code" href="classdbQuery.html">dbQuery</a> query;00298     dbCompiler compiler;00299 00300     <span class="keywordtype">int</span>      ungetToken;00301     <span class="keywordtype">bool</span>     autocommit;00302 00303     dbThread httpServerThread;00304     HTTPapi* httpServer;00305     <span class="keywordtype">bool</span>     httpServerRunning;00306     <span class="keywordtype">char</span>*    queryHistory[MAX_HISTORY_SIZE];00307     <span class="keywordtype">unsigned</span> historyUsed;00308     <span class="keywordtype">unsigned</span> historyCurr;00309     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc httpServerThreadProc(<span class="keywordtype">void</span>* arg);00310     00311     <span class="keywordtype">void</span> httpServerLoop();00312 00313     <span class="keywordtype">void</span> startHttpServer(<span class="keywordtype">char</span> <span class="keyword">const</span>* address);00314     <span class="keywordtype">void</span> stopHttpServer(<span class="keywordtype">char</span> <span class="keyword">const</span>* address);00315 00316     <span class="keywordtype">void</span> <a class="code" href="classdbDatabase.html#dbDatabasea21">handleError</a>(dbErrorClass error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg = NULL,  <span class="keywordtype">int</span> arg = 0);00317 00318     <span class="keywordtype">void</span> error(<span class="keywordtype">char</span> <span class="keyword">const</span>* msg);00319     <span class="keywordtype">void</span> warning(<span class="keywordtype">char</span> <span class="keyword">const</span>* msg);00320 00321     <span class="keywordtype">int</span>  <a class="code" href="classdbDatabase.html#dbSubSqlb7">get</a>();00322     <span class="keywordtype">void</span> unget(<span class="keywordtype">int</span> ch);00323     <span class="keywordtype">int</span>  scan();00324     <span class="keywordtype">bool</span> parse();00325 00326     <span class="keywordtype">bool</span> expect(<span class="keywordtype">char</span>* expected, <span class="keywordtype">int</span> token);00327     00328     <span class="keywordtype">void</span> <a class="code" href="classdbDatabase.html#dbDatabaseb26">recovery</a>();00329 00330     <span class="keywordtype">void</span> exportDatabase(FILE* out);00331     <span class="keywordtype">bool</span> importDatabase(FILE* in);00332    00333     oid_t mapId(<span class="keywordtype">long</span> id);00334     <span class="keywordtype">bool</span> importField(<span class="keywordtype">char</span>* terminator, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd, byte* rec, dbXmlScanner&amp; scanner);00335     <span class="keywordtype">bool</span> importRecord(<span class="keywordtype">char</span>* terminator, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fieldList, byte* rec, dbXmlScanner&amp; scanner);00336     <span class="keywordtype">void</span> <a class="code" href="classdbDatabase.html#dbSubSqla27">insertRecord</a>(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, oid_t oid, <span class="keywordtype">void</span> <span class="keyword">const</span>* record);00337 00338     <span class="keywordtype">bool</span> isValidOid(oid_t oid);00339 00340     <span class="keyword">static</span> <span class="keywordtype">void</span> dumpRecord(byte* record, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00341     <span class="keyword">static</span> <span class="keywordtype">int</span> calculateRecordSize(dbList* list, <span class="keywordtype">int</span> offs,00342                                    <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00343     <span class="keywordtype">int</span>  initializeRecordFields(dbList* node, byte* dst, <span class="keywordtype">int</span> offs, 00344                                       <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00345     <span class="keywordtype">bool</span> <a class="code" href="classdbDatabase.html#dbSubSqla27">insertRecord</a>(dbList* list, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00346     <span class="keywordtype">bool</span> readCondition();00347     <span class="keywordtype">int</span>  readExpression();00348     <span class="keywordtype">int</span>  readValues(dbList** chain);00349     <span class="keywordtype">bool</span> updateFields(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, dbUpdateElement* elems);00350     <span class="keywordtype">bool</span> updateTable(<span class="keywordtype">bool</span> create);00351     <span class="keywordtype">int</span>  parseType(<span class="keywordtype">char</span>*&amp; refTableName, <span class="keywordtype">char</span>*&amp; inverseRefName);00352     <span class="keywordtype">int</span>  updateRecords(<a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, dbList *fields, dbList *values, <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a> &amp;cursor, byte *buf);00353     <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* readFieldName();00354 00355   <span class="keyword">public</span>:00356     <span class="keywordtype">void</span> run(<span class="keywordtype">int</span> firstParam, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]);00357     <span class="keywordtype">void</span> selectionPage(WWWconnection&amp; con);00358     <span class="keywordtype">void</span> queryPage(WWWconnection&amp; con);00359     <span class="keywordtype">void</span> defaultPage(WWWconnection&amp; con);00360     00361     dbSubSql(dbAccessType accessType);00362     <span class="keyword">virtual</span>~dbSubSql();00363 };   00364 00365 00366 <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 + -