📄 subsql_8h-source.html
字号:
00196 }00197 00198 <span class="keywordtype">bool</span> expect(<span class="keywordtype">int</span> sourcePos, <span class="keywordtype">char</span>* expected) { 00199 token tkn = scan();00200 <span class="keywordflow">if</span> (tkn != xml_ident) { 00201 fprintf(stderr, <span class="stringliteral">"subsql.cpp:%d: line %d, column %d: Get token %d instead of expected identifier\n"</span>, 00202 sourcePos, line, pos, tkn);00203 <span class="keywordflow">return</span> <span class="keyword">false</span>;00204 }00205 <span class="keywordflow">if</span> (strcmp(ident, expected) != 0) { 00206 fprintf(stderr, <span class="stringliteral">"subsql.cpp:%d: line %d, column %d: Get tag '%s' instead of expected '%s'\n"</span>, 00207 sourcePos, line, pos, ident, expected);00208 <span class="keywordflow">return</span> <span class="keyword">false</span>;00209 }00210 <span class="keywordflow">return</span> <span class="keyword">true</span>;00211 }00212 00213 <span class="keyword">private</span>:00214 <span class="keywordtype">int</span> get();00215 <span class="keywordtype">void</span> unget(<span class="keywordtype">int</span> ch);00216 00217 <span class="keywordtype">int</span> line;00218 <span class="keywordtype">int</span> pos;00219 FILE* in;00220 <span class="keywordtype">char</span>* sconst;00221 size_t size;00222 size_t slen;00223 db_int8 iconst;00224 <span class="keywordtype">double</span> fconst;00225 <span class="keywordtype">char</span> ident[MaxIdentSize];00226 };00227 00228 <span class="keyword">class </span>dbTmpAllocator { 00229 <span class="keyword">enum</span> { 00230 CHUNK_SIZE = 409600231 };00232 <span class="keyword">struct </span>Chunk { 00233 Chunk* next;00234 Chunk* prev; <span class="comment">// is not used, added for alignment</span>00235 };00236 Chunk* curr;00237 size_t used;00238 00239 <span class="keyword">public</span>:00240 dbTmpAllocator() { 00241 curr = NULL;00242 used = CHUNK_SIZE;00243 }00244 00245 ~dbTmpAllocator() { 00246 reset();00247 }00248 00249 <span class="keywordtype">void</span> reset() { 00250 Chunk *c, *next; 00251 <span class="keywordflow">for</span> (c = curr; c != NULL; c = next) { 00252 next = c->next;00253 dbFree(c);00254 }00255 curr = NULL;00256 used = CHUNK_SIZE;00257 }00258 00259 00260 <span class="keywordtype">void</span>* alloc(size_t size) { 00261 size = DOALIGN(size, 8);00262 <span class="keywordflow">if</span> (size > CHUNK_SIZE/2) { 00263 Chunk* newChunk = (Chunk*)dbMalloc(size + <span class="keyword">sizeof</span>(Chunk));00264 <span class="keywordflow">if</span> (curr != NULL) { 00265 newChunk->next = curr->next;00266 curr->next = newChunk;00267 } <span class="keywordflow">else</span> { 00268 curr = newChunk;00269 newChunk->next = NULL;00270 used = CHUNK_SIZE;00271 }00272 <span class="keywordflow">return</span> newChunk+1;00273 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size <= CHUNK_SIZE - used) { 00274 used += size;00275 <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*)curr + used - size;00276 } <span class="keywordflow">else</span> { 00277 Chunk* newChunk = (Chunk*)dbMalloc(CHUNK_SIZE);00278 used = <span class="keyword">sizeof</span>(Chunk) + size;00279 newChunk->next = curr;00280 curr = newChunk;00281 <span class="keywordflow">return</span> newChunk+1;00282 }00283 }00284 };00285 00286 <span class="keyword">class </span>dbSubSql : <span class="keyword">public</span> <a class="code" href="classdbDatabase.html">dbDatabase</a> { 00287 <span class="keyword">private</span>:00288 <span class="keywordtype">int</span> pos;00289 <span class="keywordtype">int</span> line;00290 <span class="keywordtype">int</span> tknPos;00291 <span class="keywordtype">char</span>* buf;00292 <span class="keywordtype">int</span> buflen;00293 FILE* in;00294 <span class="keywordtype">bool</span> opened;00295 db_int8 ival;00296 real8 fval;00297 <span class="keywordtype">char</span>* name;00298 00299 oid_t* oidMap;00300 oid_t oidMapSize;00301 00302 dbTmpAllocator tmpAlloc;00303 00304 <span class="keyword">static</span> <span class="keywordtype">char</span>* prompt;00305 00306 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* droppedTables;00307 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* existedTables;00308 00309 <a class="code" href="classdbQuery.html">dbQuery</a> query;00310 dbCompiler compiler;00311 00312 <span class="keywordtype">int</span> ungetToken;00313 <span class="keywordtype">bool</span> autocommit;00314 00315 <span class="keywordtype">bool</span> dotIsPartOfIdentifier;00316 <span class="keywordtype">char</span>* dateFormat;00317 00318 dbThread httpServerThread;00319 HTTPapi* httpServer;00320 <span class="keywordtype">bool</span> httpServerRunning;00321 <span class="keywordtype">char</span>* queryHistory[MAX_HISTORY_SIZE];00322 <span class="keywordtype">unsigned</span> historyUsed;00323 <span class="keywordtype">unsigned</span> historyCurr;00324 <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc httpServerThreadProc(<span class="keywordtype">void</span>* arg);00325 00326 <span class="keywordtype">void</span> deleteColumns(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* columns);00327 00328 <span class="keywordtype">void</span> httpServerLoop();00329 00330 <span class="keywordtype">void</span> startHttpServer(<span class="keywordtype">char</span> <span class="keyword">const</span>* address);00331 <span class="keywordtype">void</span> stopHttpServer(<span class="keywordtype">char</span> <span class="keyword">const</span>* address);00332 00333 <span class="keywordtype">void</span> handleError(dbErrorClass error, <span class="keywordtype">char</span> <span class="keyword">const</span>* msg = NULL, <span class="keywordtype">int</span> arg = 0);00334 00335 <span class="keywordtype">void</span> error(<span class="keywordtype">char</span> <span class="keyword">const</span>* msg);00336 <span class="keywordtype">void</span> warning(<span class="keywordtype">char</span> <span class="keyword">const</span>* msg);00337 00338 <span class="keywordtype">void</span> profile();00339 00340 <span class="keywordtype">int</span> <a class="code" href="classdbDatabase.html#dbSubSqlb10">get</a>();00341 <span class="keywordtype">void</span> unget(<span class="keywordtype">int</span> ch);00342 <span class="keywordtype">int</span> scan();00343 <span class="keywordtype">bool</span> parse();00344 00345 <span class="keywordtype">bool</span> expect(<span class="keywordtype">char</span>* expected, <span class="keywordtype">int</span> token);00346 00347 <span class="keywordtype">void</span> recovery();00348 00349 <span class="keywordtype">void</span> exportDatabase(FILE* out);00350 <span class="keywordtype">bool</span> importDatabase(FILE* in);00351 00352 <span class="keywordtype">void</span> exportScheme(FILE* out);00353 <span class="keywordtype">void</span> exportClass(FILE* out, <span class="keywordtype">char</span>* name, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fieldList);00354 00355 oid_t mapId(<span class="keywordtype">long</span> id);00356 <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);00357 <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);00358 <span class="keywordtype">void</span> <a class="code" href="classdbDatabase.html#dbSubSqla30">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);00359 00360 <span class="keywordtype">bool</span> isValidOid(oid_t oid);00361 00362 <span class="keywordtype">void</span> dumpRecord(byte* record, <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00363 <span class="keyword">static</span> <span class="keywordtype">int</span> calculateRecordSize(dbList* list, <span class="keywordtype">int</span> offs,00364 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00365 <span class="keywordtype">int</span> initializeRecordFields(dbList* node, byte* dst, <span class="keywordtype">int</span> offs, 00366 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* first);00367 <span class="keywordtype">bool</span> <a class="code" href="classdbDatabase.html#dbSubSqla30">insertRecord</a>(dbList* list, <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc);00368 <span class="keywordtype">bool</span> readCondition();00369 <span class="keywordtype">int</span> readExpression();00370 <span class="keywordtype">int</span> readValues(dbList** chain);00371 <span class="keywordtype">bool</span> updateFields(<a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>* cursor, dbUpdateElement* elems);00372 <span class="keywordtype">bool</span> updateTable(<span class="keywordtype">bool</span> create);00373 <span class="keywordtype">int</span> parseType(<span class="keywordtype">char</span>*& refTableName, <span class="keywordtype">char</span>*& inverseRefName);00374 <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);00375 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* readFieldName();00376 00377 <span class="keyword">public</span>:00378 <span class="keywordtype">void</span> run(<span class="keywordtype">int</span> firstParam, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]);00379 <span class="keywordtype">void</span> selectionPage(WWWconnection& con);00380 <span class="keywordtype">void</span> queryPage(WWWconnection& con);00381 <span class="keywordtype">void</span> defaultPage(WWWconnection& con);00382 00383 dbSubSql(dbAccessType accessType);00384 <span class="keyword">virtual</span>~dbSubSql();00385 }; 00386 00387 00388 END_FASTDB_NAMESPACE00389 00390 <span class="preprocessor">#endif</span></pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:58 2006 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 + -