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

📄 server_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: server.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><h1>server.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; SERVER.CPP &gt;----------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>00004 <span class="comment">//                                                                   *  /  \  *</span>00005 <span class="comment">//                          Created:     13-Jan-2000  K.A. Knizhnik  * / [] \ *</span>00006 <span class="comment">//                          Last update: 13-Jan-2000  K.A. Knizhnik  * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// CLI multithreaded server class</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __SERVER_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __SERVER_H__</span>00013 <span class="preprocessor"></span>00014 <span class="preprocessor">#include "sockio.h"</span>00015 00016 <span class="keyword">class </span>dbColumnBinding { 00017   <span class="keyword">public</span>:00018     dbColumnBinding*   next;00019     <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd;00020     <span class="keywordtype">int</span>                cliType;00021     <span class="keywordtype">int</span>                len;00022     <span class="keywordtype">char</span>*              ptr;00023 00024     <span class="keywordtype">int</span>  unpackArray(<span class="keywordtype">char</span>* dst, size_t offs);00025     <span class="keywordtype">void</span> unpackScalar(<span class="keywordtype">char</span>* dst);00026 00027     dbColumnBinding(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field, <span class="keywordtype">int</span> type) { 00028         fd = field;00029         cliType = type;00030         next = NULL;00031     }00032 };00033 00034 <span class="keyword">struct </span>dbParameterBinding { 00035     <span class="keyword">union </span>{ 00036         int1       i1;00037         int2       i2;00038         int4       i4;00039         db_int8    i8;00040         real4      r4;00041         real8      r8;00042         oid_t      oid;00043         <span class="keywordtype">bool</span>       b;00044         <span class="keywordtype">char</span>*      str;00045     } u;00046     <span class="keywordtype">int</span> type;00047 };00048 00049 <span class="keyword">const</span> <span class="keywordtype">int</span> dbQueryMaxIdLength = 256;00050 00051 <span class="keyword">class </span>dbQueryScanner { 00052   <span class="keyword">public</span>:00053     <span class="keywordtype">char</span>*    p;00054     db_int8     ival;00055     real8    fval;00056     <span class="keywordtype">char</span>     buf[dbQueryMaxIdLength];00057     <span class="keywordtype">char</span>*    ident;00058 00059     <span class="keywordtype">int</span>  get();00060 00061     <span class="keywordtype">void</span> reset(<span class="keywordtype">char</span>* stmt) { 00062         p = stmt;00063     }00064 };00065     00066 <span class="keyword">class </span>dbStatement { 00067   <span class="keyword">public</span>:00068     <span class="keywordtype">int</span>                 id;00069     <span class="keywordtype">bool</span>                firstFetch;00070     dbStatement*        next;00071     <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a>*        cursor; 00072     <a class="code" href="classdbQuery.html">dbQuery</a>             query;00073     dbColumnBinding*    columns;00074     <span class="keywordtype">char</span>*               buf;00075     <span class="keywordtype">int</span>                 buf_size;00076     <span class="keywordtype">int</span>                 n_params;00077     <span class="keywordtype">int</span>                 n_columns;00078     dbParameterBinding* params;00079     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>*  table;00080     00081     <span class="keywordtype">void</span> reset();00082 00083     dbStatement(<span class="keywordtype">int</span> stmt_id) { 00084         id = stmt_id;00085         columns = NULL;00086         params = NULL;00087         buf = NULL;00088         buf_size = 0;00089         table = NULL;00090         cursor = NULL;00091     }00092     ~dbStatement() { 00093         reset(); 00094         <span class="keyword">delete</span>[] buf;00095     }00096 };00097 00098 <span class="keyword">class </span>dbSession { 00099   <span class="keyword">public</span>:00100     dbSession*         next;  00101     dbStatement*       stmts;00102     dbQueryScanner     scanner;00103     socket_t*          sock;00104     <span class="keywordtype">bool</span>               in_transaction;00105     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* dropped_tables;00106     <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* existed_tables;00107 };00108 00109 <span class="keyword">class </span>dbServer {     00110   <span class="keyword">protected</span>:00111     <span class="keyword">static</span> dbServer* chain;00112     dbServer*        next;00113     <span class="keywordtype">char</span>*            URL;00114     dbSession*       freeList;00115     dbSession*       waitList;00116     dbSession*       activeList;00117     <span class="keywordtype">int</span>              optimalNumberOfThreads;00118     <span class="keywordtype">int</span>              nActiveThreads;00119     <span class="keywordtype">int</span>              nIdleThreads;00120     <span class="keywordtype">int</span>              waitListLength;00121     <span class="keywordtype">bool</span>             cancelWait;00122     <span class="keywordtype">bool</span>             cancelAccept;00123     <span class="keywordtype">bool</span>             cancelSession;00124     dbMutex          mutex;00125     dbLocalSemaphore go;00126     dbLocalSemaphore done;00127     socket_t*        globalAcceptSock;00128     socket_t*        localAcceptSock;00129     dbThread         localAcceptThread;00130     dbThread         globalAcceptThread;00131     <a class="code" href="classdbDatabase.html">dbDatabase</a>*      db;00132 00133     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc serverThread(<span class="keywordtype">void</span>* arg);00134     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc acceptLocalThread(<span class="keywordtype">void</span>* arg);00135     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc acceptGlobalThread(<span class="keywordtype">void</span>* arg);00136 00137     <span class="keywordtype">void</span> serveClient();00138     <span class="keywordtype">void</span> acceptConnection(socket_t* sock);00139     00140     00141     <span class="keywordtype">bool</span> freeze(dbSession* session, <span class="keywordtype">int</span> stmt_id);00142     <span class="keywordtype">bool</span> unfreeze(dbSession* session, <span class="keywordtype">int</span> stmt_id);00143     <span class="keywordtype">bool</span> get_first(dbSession* session, <span class="keywordtype">int</span> stmt_id);00144     <span class="keywordtype">bool</span> get_last(dbSession* session, <span class="keywordtype">int</span> stmt_id);00145     <span class="keywordtype">bool</span> get_next(dbSession* session, <span class="keywordtype">int</span> stmt_id);00146     <span class="keywordtype">bool</span> get_prev(dbSession* session, <span class="keywordtype">int</span> stmt_id);00147     <span class="keywordtype">bool</span> seek(dbSession* session, <span class="keywordtype">int</span> stmt_id, <span class="keywordtype">char</span>* buf);00148     <span class="keywordtype">bool</span> skip(dbSession* session, <span class="keywordtype">int</span> stmt_id, <span class="keywordtype">char</span>* buf);00149     <span class="keywordtype">bool</span> fetch(dbSession* session, dbStatement* stmt, oid_t result);00150     <span class="keywordtype">bool</span> fetch(dbSession* session, dbStatement* stmt) { 00151         <span class="keywordflow">return</span> fetch(session, stmt, stmt-&gt;cursor-&gt;currId);00152     }00153     <span class="keywordtype">bool</span> remove(dbSession* session, <span class="keywordtype">int</span> stmt_id);00154     <span class="keywordtype">bool</span> update(dbSession* session, <span class="keywordtype">int</span> stmt_id, <span class="keywordtype">char</span>* new_data);00155     <span class="keywordtype">bool</span> insert(dbSession* session, <span class="keywordtype">int</span> stmt_id, <span class="keywordtype">char</span>* data, <span class="keywordtype">bool</span> prepare);00156     <span class="keywordtype">bool</span> select(dbSession* session, <span class="keywordtype">int</span> stmt_id, <span class="keywordtype">char</span>* data, <span class="keywordtype">bool</span> prepare);00157     <span class="keywordtype">bool</span> show_tables(dbSession* session); 00158     <span class="keywordtype">bool</span> describe_table(dbSession* session, <span class="keywordtype">char</span> <span class="keyword">const</span>* table);00159     <span class="keywordtype">bool</span> create_table(dbSession* session, <span class="keywordtype">char</span>* data, <span class="keywordtype">bool</span> create);00160     <span class="keywordtype">bool</span> drop_table(dbSession* session, <span class="keywordtype">char</span>* data);00161     <span class="keywordtype">bool</span> alter_index(dbSession* session, <span class="keywordtype">char</span>* data);00162 00163     <span class="keywordtype">char</span>* checkColumns(dbStatement* stmt, <span class="keywordtype">int</span> n_columns, 00164                        <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* desc, <span class="keywordtype">char</span>* data, 00165                        int4&amp; reponse);00166       00167     dbStatement* findStatement(dbSession* stmt, <span class="keywordtype">int</span> stmt_id);00168 00169   <span class="keyword">public</span>:00170     <span class="keyword">static</span> dbServer* find(<span class="keywordtype">char</span> <span class="keyword">const</span>* serverURL);00171     <span class="keyword">static</span> <span class="keywordtype">void</span>      cleanup();00172 00173     <span class="keywordtype">void</span> stop();00174     <span class="keywordtype">void</span> start();00175 00176     dbServer(<a class="code" href="classdbDatabase.html">dbDatabase</a>* db,00177              <span class="keywordtype">char</span> <span class="keyword">const</span>* serverURL, 00178              <span class="keywordtype">int</span> optimalNumberOfThreads = 8,  00179              <span class="keywordtype">int</span> connectionQueueLen = 64);00180     ~dbServer();00181 };00182 00183 <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 + -