📄 subsql_8h-source.html
字号:
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->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 > 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->next = curr->next;00254 curr->next = newChunk;00255 } <span class="keywordflow">else</span> { 00256 curr = newChunk;00257 newChunk->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 <= 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->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& 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& 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>*& refTableName, <span class="keywordtype">char</span>*& 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> &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& con);00358 <span class="keywordtype">void</span> queryPage(WWWconnection& con);00359 <span class="keywordtype">void</span> defaultPage(WWWconnection& 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 + -