📄 localcli_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>localcli.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center>
<hr><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">#ifndef __LOCALCLI_H__</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#define __LOCALCLI_H__</span>
00013 <span class="preprocessor"></span>
00014 <span class="preprocessor">#include "fastdb.h"</span>
00015 <span class="preprocessor">#include "compiler.h"</span>
00016 <span class="preprocessor">#include "cli.h"</span>
00017 <span class="preprocessor">#include "cliproto.h"</span>
00018 <span class="preprocessor">#include "array.h"</span>
00019
00020 BEGIN_FASTDB_NAMESPACE
00021
00022 <span class="keyword">inline</span> <span class="keywordtype">int</span> map_type(<a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* fd) {
00023 <span class="keywordflow">return</span> (fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> < dbField::tpArray)
00024 ? ((fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm16">indexType</a> & DB_TIMESTAMP) ? cli_datetime
00025 : ((fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm16">indexType</a> & AUTOINCREMENT) ? cli_autoincrement : fd2cli_type_mapping[fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a>]))
00026 : ((fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> == dbField::tpArray && fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> < dbField::tpArray)
00027 ? cli_array_of_oid + fd2cli_type_mapping[fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm19">components</a>-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a>]
00028 : ((fd-><a class="code" href="classdbFieldDescriptor.html#dbFieldDescriptorm14">type</a> == dbField::tpRectangle) ? cli_rectangle : cli_unknown));
00029 }
00030
00031
00032 <span class="keyword">struct </span>parameter_binding {
00033 parameter_binding* next;
00034 <span class="keywordtype">char</span>* name;
00035 <span class="keywordtype">int</span> var_type;
00036 <span class="keywordtype">int</span> var_len;
00037 <span class="keywordtype">void</span>* var_ptr;
00038
00039 <span class="keywordtype">void</span> reset() {}
00040 };
00041
00042 <span class="keyword">struct </span>column_binding {
00043 column_binding* next;
00044 <a class="code" href="classdbFieldDescriptor.html">dbFieldDescriptor</a>* field;
00045 <span class="keywordtype">char</span>* name;
00046 <span class="keywordtype">int</span> var_type;
00047 <span class="keywordtype">int</span>* var_len;
00048 <span class="keywordtype">void</span>* var_ptr;
00049 cli_column_get_ex get_fnc;
00050 cli_column_set_ex set_fnc;
00051 <span class="keywordtype">void</span>* user_data;
00052
00053 <span class="keywordtype">void</span> reset() {}
00054 };
00055
00056 <span class="keyword">struct </span>session_desc;
00057
00058 <span class="keyword">struct </span>statement_desc {
00059 <span class="keywordtype">int</span> id;
00060 statement_desc* next;
00061 <a class="code" href="classdbQuery.html">dbQuery</a> query;
00062 <a class="code" href="classdbAnyCursor.html">dbAnyCursor</a> cursor;
00063 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* table;
00064 column_binding* columns;
00065 parameter_binding* params;
00066 session_desc* session;
00067 <span class="keywordtype">bool</span> first_fetch;
00068 <span class="keywordtype">bool</span> for_update;
00069 <span class="keywordtype">bool</span> prepared;
00070 <span class="keywordtype">bool</span> updated;
00071 cli_oid_t oid;
00072 <span class="keywordtype">int</span> n_params;
00073 <span class="keywordtype">int</span> n_columns;
00074 <span class="keywordtype">int</span> n_autoincremented_columns;
00075 <span class="keywordtype">int</span> param_size;
00076 <span class="keywordtype">void</span>* record_struct;
00077 dbSmallBuffer sql;
00078
00079 <span class="keywordtype">void</span> reset()
00080 {
00081 query.<a class="code" href="classdbQuery.html#dbQuerya3">reset</a>();
00082 }
00083
00084 statement_desc(<span class="keywordtype">int</span> id, statement_desc* next)
00085 {
00086 this->id = id;
00087 this->next = next;
00088 }
00089 statement_desc() {}
00090 };
00091
00092
00093 <span class="keyword">class </span>sql_scanner {
00094 <span class="keyword">private</span>:
00095 <span class="keywordtype">char</span>* p;
00096 <span class="keywordtype">char</span>* ident;
00097
00098 <span class="keyword">public</span>:
00099 <span class="keywordtype">int</span> get();
00100
00101 <span class="keywordtype">char</span>* current_position() {
00102 <span class="keywordflow">return</span> p;
00103 }
00104
00105 <span class="keywordtype">char</span>* identifier() {
00106 <span class="keywordflow">return</span> ident;
00107 }
00108
00109 sql_scanner(<span class="keywordtype">char</span>* sql) {
00110 p = sql;
00111 }
00112 };
00113
00114 <span class="keyword">struct </span>session_desc {
00115 <span class="keywordtype">int</span> id;
00116 <span class="keywordtype">char</span>* name;
00117 session_desc* next;
00118 statement_desc* stmts;
00119 <a class="code" href="classdbDatabase.html">dbDatabase</a>* db;
00120 dbMutex mutex;
00121 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* dropped_tables;
00122 <a class="code" href="classdbTableDescriptor.html">dbTableDescriptor</a>* existed_tables;
00123
00124 <span class="keywordtype">void</span> reset() {}
00125
00126 session_desc(<span class="keywordtype">int</span> id, session_desc* next) {
00127 this->id = id;
00128 this->next = next;
00129 }
00130 session_desc() {}
00131 };
00132
00133 <span class="keyword">template</span><<span class="keyword">class</span> T>
00134 <span class="keyword">class </span>fixed_size_object_allocator {
00135 <span class="keyword">protected</span>:
00136 T* free_chain;
00137 dbMutex mutex;
00138
00139 <span class="keyword">public</span>:
00140 T* allocate() {
00141 dbCriticalSection cs(mutex);
00142 T* obj = free_chain;
00143 <span class="keywordflow">if</span> (obj == NULL) {
00144 obj = <span class="keyword">new</span> T();
00145 } <span class="keywordflow">else</span> {
00146 free_chain = obj->next;
00147 }
00148 <span class="keywordflow">return</span> obj;
00149 }
00150
00151 <span class="keywordtype">void</span> free(T* desc) {
00152 dbCriticalSection cs(mutex);
00153 desc->next = free_chain;
00154 free_chain = desc;
00155 desc->reset();
00156 }
00157
00158 fixed_size_object_allocator() {
00159 free_chain = NULL;
00160 }
00161
00162 ~fixed_size_object_allocator() {
00163 T *obj, *next;
00164 <span class="keywordflow">for</span> (obj = free_chain; obj != NULL; obj = next) {
00165 next = obj->next;
00166 <span class="keyword">delete</span> obj;
00167 }
00168 }
00169 };
00170
00171 <span class="keyword">template</span><<span class="keyword">class</span> T>
00172 <span class="keyword">class </span>descriptor_table : <span class="keyword">public</span> fixed_size_object_allocator<T> {
00173 <span class="keyword">protected</span>:
00174 T** table;
00175 <span class="keywordtype">int</span> descriptor_table_size;
00176
00177 <span class="keyword">public</span>:
00178 descriptor_table() {
00179 <span class="keywordtype">int</span> i;
00180 descriptor_table_size = 16;
00181 table = <span class="keyword">new</span> T*[descriptor_table_size];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -