?? localcli_8h-source.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: localcli.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 Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><h1>localcli.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< LOCALCLI.H >----------------------------------------------------*--------*</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: 20-Jun-2002 K.A. Knizhnik * / [] \ *</span>00006 <span class="comment">// Last update: 20-Jun-2002 K.A. Knizhnik * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// Header file for local C interface to database</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#include "fastdb.h"</span>00012 <span class="preprocessor">#include "compiler.h"</span>00013 <span class="preprocessor">#include "cli.h"</span>00014 <span class="preprocessor">#include "cliproto.h"</span>00015 <span class="preprocessor">#include "array.h"</span>00016 00017 <span class="keyword">inline</span> <span class="keywordtype">int</span> map_type(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) { 00018 <span class="keywordflow">return</span> (fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a> < dbField::tpArray) 00019 ? fd2cli_type_mapping[fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a>] 00020 : (fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a> == dbField::tpArray && fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a> < dbField::tpArray)00021 ? cli_array_of_oid + fd2cli_type_mapping[fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptoro14">type</a>] 00022 : cli_unknown;00023 }00024 00025 00026 <span class="keyword">struct </span>parameter_binding {00027 parameter_binding* next;00028 <span class="keywordtype">char</span>* name;00029 <span class="keywordtype">int</span> var_type;00030 <span class="keywordtype">int</span> var_len;00031 <span class="keywordtype">void</span>* var_ptr;00032 };00033 00034 <span class="keyword">struct </span>column_binding {00035 column_binding* next;00036 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;00037 <span class="keywordtype">char</span>* name;00038 <span class="keywordtype">int</span> var_type;00039 <span class="keywordtype">int</span>* var_len;00040 <span class="keywordtype">void</span>* var_ptr;00041 cli_column_get_ex get_fnc;00042 cli_column_set_ex set_fnc;00043 };00044 00045 <span class="keyword">struct </span>session_desc;00046 00047 <span class="keyword">struct </span>statement_desc {00048 <span class="keywordtype">int</span> id;00049 statement_desc* next;00050 <a class="code" href="classdbQuery.html">dbQuery</a> query;00051 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a> cursor;00052 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;00053 column_binding* columns;00054 parameter_binding* params;00055 session_desc* session;00056 <span class="keywordtype">bool</span> first_fetch;00057 <span class="keywordtype">bool</span> for_update;00058 <span class="keywordtype">bool</span> prepared;00059 <span class="keywordtype">bool</span> updated;00060 cli_oid_t oid;00061 <span class="keywordtype">int</span> n_params;00062 <span class="keywordtype">int</span> n_columns;00063 <span class="keywordtype">int</span> n_autoincremented_columns;00064 <span class="keywordtype">int</span> param_size;00065 <span class="keywordtype">void</span>* record_struct;00066 dbSmallBuffer sql;00067 00068 statement_desc(<span class="keywordtype">int</span> id, statement_desc* next) 00069 {00070 this->id = id;00071 this->next = next;00072 } 00073 statement_desc() {}00074 };00075 00076 00077 <span class="keyword">class </span>sql_scanner {00078 <span class="keyword">private</span>:00079 <span class="keywordtype">char</span>* p;00080 <span class="keywordtype">char</span>* ident;00081 00082 <span class="keyword">public</span>:00083 <span class="keywordtype">int</span> get();00084 00085 <span class="keywordtype">char</span>* current_position() { 00086 <span class="keywordflow">return</span> p;00087 }00088 00089 <span class="keywordtype">char</span>* identifier() { 00090 <span class="keywordflow">return</span> ident;00091 }00092 00093 sql_scanner(<span class="keywordtype">char</span>* sql) {00094 p = sql;00095 }00096 };00097 00098 <span class="keyword">struct </span>session_desc {00099 <span class="keywordtype">int</span> id;00100 <span class="keywordtype">char</span>* name;00101 session_desc* next;00102 statement_desc* stmts;00103 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;00104 dbMutex mutex;00105 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* dropped_tables;00106 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* existed_tables;00107 00108 session_desc(<span class="keywordtype">int</span> id, session_desc* next) {00109 this->id = id;00110 this->next = next;00111 }00112 session_desc() {}00113 };00114 00115 <span class="keyword">template</span><<span class="keyword">class</span> T>00116 <span class="keyword">class </span>fixed_size_object_allocator { 00117 <span class="keyword">protected</span>:00118 T* free_chain;00119 dbMutex mutex;00120 00121 <span class="keyword">public</span>:00122 T* allocate() {00123 dbCriticalSection cs(mutex);00124 T* obj = free_chain;00125 <span class="keywordflow">if</span> (obj == NULL) {00126 obj = <span class="keyword">new</span> T();00127 } <span class="keywordflow">else</span> { 00128 free_chain = obj->next;00129 }00130 <span class="keywordflow">return</span> obj;00131 }00132 00133 <span class="keywordtype">void</span> free(T* desc) {00134 dbCriticalSection cs(mutex);00135 desc->next = free_chain;00136 free_chain = desc;00137 }00138 00139 fixed_size_object_allocator() {00140 free_chain = NULL;00141 }00142 00143 ~fixed_size_object_allocator() { 00144 T *obj, *next;00145 <span class="keywordflow">for</span> (obj = free_chain; obj != NULL; obj = next) { 00146 next = obj->next;00147 <span class="keyword">delete</span> obj;00148 }00149 }00150 };00151 00152 <span class="keyword">template</span><<span class="keyword">class</span> T>00153 <span class="keyword">class </span>descriptor_table : <span class="keyword">public</span> fixed_size_object_allocator<T> {00154 <span class="keyword">protected</span>:00155 T** table;00156 <span class="keywordtype">int</span> descriptor_table_size;00157 00158 <span class="keyword">public</span>:00159 descriptor_table() {00160 <span class="keywordtype">int</span> i;00161 descriptor_table_size = 16;00162 table = <span class="keyword">new</span> T*[descriptor_table_size];00163 T* next = NULL;00164 <span class="keywordflow">for</span> (i = 0; i < descriptor_table_size; i++) {00165 table[i] = next = <span class="keyword">new</span> T(i, next);00166 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -