-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDatabaseHelper.h
More file actions
152 lines (141 loc) · 3.13 KB
/
Copy pathDatabaseHelper.h
File metadata and controls
152 lines (141 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#pragma once
#include "Public.h"
#include <map>
#include <list>
#include <memory>
#include <vector>
class _Table_;
using PTable = std::shared_ptr<_Table_>;
using KeyValue = std::map<Buffer, Buffer>;
using Result = std::list<PTable>;
class CDatabaseClient
{
public:
CDatabaseClient(const CDatabaseClient&) = delete;
CDatabaseClient& operator=(const CDatabaseClient&) = delete;
public:
CDatabaseClient() {}
virtual ~CDatabaseClient() {}
public:
//连接
virtual int Connect(const KeyValue& args) = 0;
//执行
virtual int Exec(const Buffer& sql) = 0;
//带结果的执行
virtual int Exec(const Buffer& sql, Result& result, const _Table_& table) = 0;
//开启事务
virtual int StartTransaction() = 0;
//提交事务
virtual int CommitTransaction() = 0;
//回滚事务
virtual int RollbackTransaction() = 0;
//关闭连接
virtual int Close() = 0;
//是否连接
virtual bool IsConnected() = 0;
};
//表和列的基类的实现
class _Field_;
using PField = std::shared_ptr<_Field_>;
using FieldArray = std::vector<PField>;
using FieldMap = std::map<Buffer, PField>;
class _Table_ {
public:
_Table_() {}
virtual ~_Table_() {}
//返回创建的SQL语句
virtual Buffer Create() = 0;
//删除表
virtual Buffer Drop() = 0;
//增删改查
//TODO:参数进行优化
virtual Buffer Insert(const _Table_& values) = 0;
virtual Buffer Delete(const _Table_& values) = 0;
//TODO:参数进行优化
virtual Buffer Modify(const _Table_& values) = 0;
virtual Buffer Query(const Buffer& condition = "") = 0;
//创建一个基于表的对象
virtual PTable Copy()const = 0;
virtual void ClearFieldUsed() = 0;
public:
//获取表的全名
virtual operator const Buffer() const = 0;
public:
//表所属的DB的名称
Buffer Database;
Buffer Name;
FieldArray FieldDefine;//列的定义(存储查询结果)
FieldMap Fields;//列的定义映射表
};
enum {
SQL_INSERT = 1,//插入的列
SQL_MODIFY = 2,//修改的列
SQL_CONDITION = 4//查询条件列
};
enum {
NONE = 0,
NOT_NULL = 1,
DEFAULT = 2,
UNIQUE = 4,
PRIMARY_KEY = 8,
CHECK = 16,
AUTOINCREMENT = 32
};
using SqlType = enum {
TYPE_NULL = 0,
TYPE_BOOL = 1,
TYPE_INT = 2,
TYPE_DATETIME = 4,
TYPE_REAL = 8,
TYPE_VARCHAR = 16,
TYPE_TEXT = 32,
TYPE_BLOB = 64
};
class _Field_
{
public:
_Field_() {}
_Field_(const _Field_& field) {
Name = field.Name;
Type = field.Type;
Attr = field.Attr;
Default = field.Default;
Check = field.Check;
}
virtual _Field_& operator=(const _Field_& field) {
if (this != &field) {
Name = field.Name;
Type = field.Type;
Attr = field.Attr;
Default = field.Default;
Check = field.Check;
}
return *this;
}
virtual ~_Field_() {}
public:
virtual Buffer Create() = 0;
virtual void LoadFromStr(const Buffer& str) = 0;
//where 语句使用的
virtual Buffer toEqualExp() const = 0;
virtual Buffer toSqlStr() const = 0;
//列的全名
virtual operator const Buffer() const = 0;
public:
Buffer Name;
Buffer Type;
Buffer Size;
unsigned Attr;
Buffer Default;
Buffer Check;
public:
//操作条件
unsigned Condition;
union {
bool Bool;
int Integer;
double Double;
Buffer* String;
}Value;
int nType;
};