Skip to content

Commit ec39784

Browse files
committed
add double/float supporting for query class of db module
1 parent 1300496 commit ec39784

File tree

5 files changed

+77
-14
lines changed

5 files changed

+77
-14
lines changed

lib_acl_cpp/changes.txt

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
�޸���ʷ�б���
22

33
------------------------------------------------------------------------
4+
329) 2015.7.21
5+
329.1) feature: db ģ��IJ�ѯ�� query ������ double/float ����
6+
47
328) 2015.7.19
58
328.1) bugfix: redis_command.cpp �е� run(redis_client_cluster*, size_t) ����
69
�п��ܴ��ڵ� conn �����ͷź��ٴηǷ����õ����Σ����ڽ��ö�����ͷŷ������õĴ���֮��

lib_acl_cpp/include/acl_cpp/db/db_handle.hpp

+18-4
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,21 @@ class ACL_CPP_API db_row
9999
long long int field_int64(const char* name, long long int null_value = 0) const;
100100
#endif
101101

102-
double field_double(size_t ifield, double null_value = 0) const;
103-
double field_double(const char* name, double null_value = 0) const;
102+
/**
103+
* 从查询结果的记录行中取得字段名的浮点类型的字段值
104+
* @param ifield {size_t} 下标值
105+
* @param null_value {double} 当结果为空时,返回此值表示未有相应结果
106+
* @return {double} 当返回值与用户输入的 null_value 值相同时表明没有查到结果
107+
*/
108+
double field_double(size_t ifield, double null_value = 0.0) const;
109+
110+
/**
111+
* 从查询结果的记录行中取得字段名的浮点类型的字段值
112+
* @param name {const char*} 下标值
113+
* @param null_value {double} 当结果为空时,返回此值表示未有相应结果
114+
* @return {double} 当返回值与用户输入的 null_value 值相同时表明没有查到结果
115+
*/
116+
double field_double(const char* name, double null_value = 0.0) const;
104117

105118
/**
106119
* 从查询结果的记录行中取得对应下标的字符串类型的字段值
@@ -127,7 +140,7 @@ class ACL_CPP_API db_row
127140
* @return {size_t}
128141
*/
129142
size_t length() const;
130-
protected:
143+
131144
private:
132145
// 数据表的字段名集合的引用
133146
const std::vector<const char*>& names_;
@@ -181,6 +194,7 @@ class ACL_CPP_API db_rows
181194
* @return {size_t} 行记录个数
182195
*/
183196
size_t length() const;
197+
184198
protected:
185199
// 数据表字段名
186200
std::vector<const char*> names_;
@@ -191,7 +205,6 @@ class ACL_CPP_API db_rows
191205

192206
// 临时结果行集合
193207
std::vector<const db_row*> rows_tmp_;
194-
private:
195208
};
196209

197210
class db_pool;
@@ -404,6 +417,7 @@ class ACL_CPP_API db_handle
404417
{
405418
return when_;
406419
}
420+
407421
protected:
408422
// 临时结果对象
409423
db_rows* result_;

lib_acl_cpp/include/acl_cpp/db/query.hpp

+20
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@ class ACL_CPP_API query
5757
*/
5858
query& set_parameter(const char* name, int value);
5959

60+
/**
61+
* 设置单精度浮点类型的变量值
62+
* @param name {const char*} 变量名
63+
* @param value {float} 单精度浮点类型
64+
* @return {query&}
65+
*/
66+
query& set_parameter(const char* name, float value);
67+
68+
/**
69+
* 设置双精度浮点类型的变量值
70+
* @param name {const char*} 变量名
71+
* @param value {double} 双精度浮点类型
72+
* @return {query&}
73+
*/
74+
query& set_parameter(const char* name, double value);
75+
6076
/**
6177
* 设置 64 位短整类型的变量值
6278
* @param name {const char*} 变量名
@@ -136,6 +152,8 @@ class ACL_CPP_API query
136152
DB_PARAM_SHORT,
137153
DB_PARAM_INT32,
138154
DB_PARAM_INT64,
155+
DB_PARAM_FLOAT,
156+
DB_PARAM_DOUBLE,
139157
DB_PARAM_STR
140158
} db_param_type;
141159

@@ -149,6 +167,8 @@ class ACL_CPP_API query
149167
short s;
150168
int n;
151169
long long int l;
170+
double d;
171+
float f;
152172
char S[1];
153173
} v;
154174
};

lib_acl_cpp/src/db/db_handle.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ acl_int64 db_row::field_int64(const char* name, acl_int64 null_value /* = 0 */)
113113
return ACL_DB_ATOU(ptr);
114114
}
115115

116-
double db_row::field_double(size_t ifield, double null_value /* = 0 */) const
116+
double db_row::field_double(size_t ifield, double null_value /* = 0.0 */) const
117117
{
118118
const char* ptr = field_value(ifield);
119119
if (ptr == NULL)
@@ -122,7 +122,7 @@ double db_row::field_double(size_t ifield, double null_value /* = 0 */) const
122122
return atof(ptr);
123123
}
124124

125-
double db_row::field_double(const char* name, double null_value /* = 0 */) const
125+
double db_row::field_double(const char* name, double null_value /* = 0.0 */) const
126126
{
127127
const char* ptr = field_value(name);
128128
if (ptr == NULL)

lib_acl_cpp/src/db/query.cpp

+34-8
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,7 @@ query& query::set_parameter(const char* name, char value)
156156
key.lower();
157157
del_param(key);
158158

159-
query_param* param = (query_param*)
160-
acl_mymalloc(sizeof(query_param));
159+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
161160
param->type = DB_PARAM_CHAR;
162161
param->v.c = value;
163162
param->dlen = sizeof(char);
@@ -172,8 +171,7 @@ query& query::set_parameter(const char* name, short value)
172171
key.lower();
173172
del_param(key);
174173

175-
query_param* param = (query_param*)
176-
acl_mymalloc(sizeof(query_param));
174+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
177175
param->type = DB_PARAM_SHORT;
178176
param->v.s = value;
179177
param->dlen = sizeof(short);
@@ -188,8 +186,7 @@ query& query::set_parameter(const char* name, int value)
188186
key.lower();
189187
del_param(key);
190188

191-
query_param* param = (query_param*)
192-
acl_mymalloc(sizeof(query_param));
189+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
193190
param->type = DB_PARAM_INT32;
194191
param->v.n = value;
195192
param->dlen = sizeof(int);
@@ -204,8 +201,7 @@ query& query::set_parameter(const char* name, acl_int64 value)
204201
key.lower();
205202
del_param(key);
206203

207-
query_param* param = (query_param*)
208-
acl_mymalloc(sizeof(query_param));
204+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
209205
param->type = DB_PARAM_INT64;
210206
param->v.l = value;
211207
param->dlen = sizeof(long long int);
@@ -214,6 +210,36 @@ query& query::set_parameter(const char* name, acl_int64 value)
214210
return *this;
215211
}
216212

213+
query& query::set_parameter(const char* name, float value)
214+
{
215+
string key(name);
216+
key.lower();
217+
del_param(key);
218+
219+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
220+
param->type = DB_PARAM_FLOAT;
221+
param->v.f = value;
222+
param->dlen = sizeof(float);
223+
224+
params_[key] = param;
225+
return *this;
226+
}
227+
228+
query& query::set_parameter(const char* name, double value)
229+
{
230+
string key(name);
231+
key.lower();
232+
del_param(key);
233+
234+
query_param* param = (query_param*) acl_mymalloc(sizeof(query_param));
235+
param->type = DB_PARAM_DOUBLE;
236+
param->v.d = value;
237+
param->dlen = sizeof(double);
238+
239+
params_[key] = param;
240+
return *this;
241+
}
242+
217243
query& query::set_date(const char* name, time_t value,
218244
const char* fmt /* = "%Y-%m-%d %H:%M:%S" */)
219245
{

0 commit comments

Comments
 (0)