DCL 3.7.4
Loading...
Searching...
No Matches
SqQuery Class Reference

#include <SqQuery.h>

Inheritance diagram for SqQuery:
SQL::Query Object

Public Member Functions

 SqQuery (SqConnection *pConnection)
virtual ~SqQuery ()
virtual void __destroy ()
virtual bool __prepare (const char *_sql, size_t _sqllen, size_t _paramCount)
virtual bool __execute ()
virtual bool __fetch ()
virtual bool __getField (size_t _index, SQL::Field **_fieldHandleOut)
virtual bool __getParam (size_t _index, SQL::Param **_paramHandleOut)
Public Member Functions inherited from Object
virtual String toString () const
virtual void destroy ()
String className () const
bool isInstanceOf (const std::type_info &typeinfo) const
virtual const std::type_info & typeInfo () const

Protected Member Functions

bool reset ()
Protected Member Functions inherited from SQL::Query
 Query (Connection *_connHandle)
virtual ~Query ()
virtual bool __moreResults (bool *_moreResults)
Protected Member Functions inherited from Object
virtual ~Object ()
 Object ()

Protected Attributes

sqlite3_stmt * __stmt
bool __first
SqField__fields
SqParam__params
Protected Attributes inherited from SQL::Query
Connection__connHandle
bool __eof
int64_t __affectedRows
size_t __fieldCount
size_t __paramCount
wchar_t __placeholder
unsigned int __states

Additional Inherited Members

Public Types inherited from SQL::Query
enum  State { stStandBy = (unsigned int) 0x0001 , stPrepared = 0x0002 , stExecuted = 0x0004 , stFetched = 0x0008 }

Detailed Description

Definition at line 9 of file SqQuery.h.

Constructor & Destructor Documentation

◆ SqQuery()

SqQuery::SqQuery ( SqConnection * pConnection)

◆ ~SqQuery()

SqQuery::~SqQuery ( )
virtual

Definition at line 64 of file SqQuery.cpp.

65{
66#ifdef __DCL_DEBUG
67 if (!reset()) {
68 char buf[256];
69 size_t buflen = sizeof(buf) - 1;
70 bool b = conn()->__getErrorMessage(buf, &buflen);
71 buf[b ? buflen : 0] = '\0';
72 __DCL_TRACE1(L"Warning! Query reset error! %hs\n", buf);
73 }
74#else
75 (void)reset();
76#endif
77}
#define __DCL_TRACE1(fmt, arg1)
Definition Object.h:399
bool reset()
Definition SqQuery.cpp:84

Member Function Documentation

◆ __destroy()

void SqQuery::__destroy ( )
virtual

Implements SQL::Query.

Definition at line 79 of file SqQuery.cpp.

80{
81 delete this;
82}

◆ __execute()

bool SqQuery::__execute ( )
virtual

Implements SQL::Query.

Definition at line 167 of file SqQuery.cpp.

168{
170
171 for (size_t i = 0; i < Query::__paramCount; i++) {
172 if (!(__params[i].onBeforeExecute()))
173 return false;
174 }
175
176 int rc = sqlite3_step(__stmt);
177 switch (rc) {
178 case SQLITE_ROW: {
180 (__fields == NULL)
181 && (Query::__fieldCount == 0)
182 );
183 Query::__fieldCount = sqlite3_column_count(__stmt);
184 __fields = new SqField[Query::__fieldCount];
185 if (__fields == NULL) {
187 return false;
188 }
189
190 for (size_t i = 0; i < Query::__fieldCount; i++) {
191 if (!__fields[i].init(this, (int) i))
192 return false;
193 }
194 Query::__eof = false;
195 __first = true;
196 break;
197 }
198 case SQLITE_OK:
199 case SQLITE_DONE: {
200#if SQLITE_VERSION_NUMBER >= 3037000
201 Query::__affectedRows = sqlite3_changes64(conn()->connHandle());
202#else
203 Query::__affectedRows = sqlite3_changes(conn()->connHandle());
204#endif
205 __DCL_TRACE2_N(L"__execute sqlite3_step[%d][%lld]\n",
206 rc, Query::__affectedRows
207 );
208 break;
209 }
210 default: {
211 __SET_ERROR_MSG(sqlite3_errmsg(conn()->connHandle()));
212 return false;
213 }
214 }
215
216 if (Query::__paramCount) {
217 for (size_t i = 0; i < Query::__paramCount; i++) {
218 if (!(__params[i].onAfterExecute()))
219 return false;
220 }
221 rc = sqlite3_reset(__stmt);
222 if (rc != SQLITE_OK) {
223 __SET_ERROR_MSG(sqlite3_errmsg(conn()->connHandle()));
224 return false;
225 }
226 }
227
228 return true;
229}
#define NULL
Definition Config.h:312
#define __DCL_TRACE2_N(fmt, arg1, arg2)
#define __SET_ERROR_MSG(_message)
#define __DCL_ASSERT(expr)
Definition Object.h:394
#define __SET_ERROR(_errorCode)
Definition SQLCore.cpp:149
@ eOutOfMemory
Definition SQLCore.h:24
sqlite3_stmt * __stmt
Definition SqQuery.h:17
SqField * __fields
Definition SqQuery.h:20
bool __first
Definition SqQuery.h:18
SqParam * __params
Definition SqQuery.h:21

◆ __fetch()

bool SqQuery::__fetch ( )
virtual

Implements SQL::Query.

Definition at line 231 of file SqQuery.cpp.

232{
233 if (__first) {
234 __first = false;
235 }
236 else {
237 int rc = sqlite3_step(__stmt);
238 __DCL_TRACE1_N(L"sqlite3_step [%d]\n", rc);
239 switch (rc) {
240 case SQLITE_ROW:
241 break;
242 case SQLITE_DONE:
243 Query::__eof = true;
244 break;
245 default: {
246 __SET_ERROR_MSG(sqlite3_errmsg(conn()->connHandle()));
247 return false;
248 }
249 }
250 }
251 return true;
252}
#define __DCL_TRACE1_N(fmt, arg)

◆ __getField()

bool SqQuery::__getField ( size_t _index,
SQL::Field ** _fieldHandleOut )
virtual

Implements SQL::Query.

Definition at line 254 of file SqQuery.cpp.

255{
256 __DCL_ASSERT(Query::__fieldCount > 0);
257 __DCL_ASSERT((0 <= _index) && (_index < Query::__fieldCount));
258 *_fieldHandleOut = &__fields[_index];
259 return true;
260}

◆ __getParam()

bool SqQuery::__getParam ( size_t _index,
SQL::Param ** _paramHandleOut )
virtual

Implements SQL::Query.

Definition at line 262 of file SqQuery.cpp.

263{
264 __DCL_ASSERT(Query::__paramCount > 0);
265 __DCL_ASSERT((0 <= _index) && (_index < Query::__paramCount));
266 *_paramHandleOut = &__params[_index];
267 return true;
268}

◆ __prepare()

bool SqQuery::__prepare ( const char * _sql,
size_t _sqllen,
size_t _paramCount )
virtual

Implements SQL::Query.

Definition at line 117 of file SqQuery.cpp.

120{
121 if(!reset())
122 return false;
123
124 sqlite3_stmt* stmt = NULL;
125 const char* pzTail = NULL;
126 int rc = sqlite3_prepare_v2(conn()->connHandle(),
127 _sql, (int)_sqllen, &stmt, &pzTail);
128 if (rc != SQLITE_OK) {
129 __SET_ERROR_MSG(sqlite3_errmsg(conn()->connHandle()));
130 return false;
131 }
132
133#if defined(__DCL_DEBUG) && __TRACE_THIS
134 __DCL_TRACE1_N(L"bind_parameter_count [%d]\n",
135 sqlite3_bind_parameter_count(stmt)
136 );
137 __DCL_TRACE1_N(L"column_count [%d]\n",
138 sqlite3_column_count(stmt)
139 );
140#endif
141
143 && (Query::__paramCount == 0)
144 );
145
146 Query::__paramCount = sqlite3_bind_parameter_count(stmt);
147 if (Query::__paramCount) {
148 __params = new SqParam[Query::__paramCount];
149 if (__params == NULL) {
151 return false;
152 }
153
154 for (size_t i = 0; i < Query::__paramCount; i++) {
155 int number = (int) i + 1;
156 const char* name = sqlite3_bind_parameter_name(stmt, number);
157 if (!__params[i].init(this, number, name)) {
158 return false;
159 }
160 }
161 }
162
163 __stmt = stmt;
164 return true;
165}

◆ reset()

bool SqQuery::reset ( )
protected

Definition at line 84 of file SqQuery.cpp.

85{
86 Query::__eof = true;
87 Query::__affectedRows = -1;
88
89 // clear fields
90 if (__fields) {
91 __DCL_ASSERT(Query::__fieldCount > 0);
92 delete[] __fields;
93 __fields = NULL;
94 Query::__fieldCount = 0;
95 }
96
97 // clear binds
98 if (__params) {
99 __DCL_ASSERT(Query::__paramCount > 0);
100 delete[] __params;
101 __params = NULL;
102 Query::__paramCount = 0;
103 }
104
105 bool r = true;
106 if (__stmt) {
107 int rc = sqlite3_finalize(__stmt);
108 if (rc != SQLITE_OK) {
109 __SET_ERROR_MSG(sqlite3_errmsg(conn()->connHandle()));
110 r = false;
111 }
112 }
113
114 return r;
115}
IOException *size_t r
Definition MediaInfo.cpp:82

Member Data Documentation

◆ __fields

SqField* SqQuery::__fields
protected

Definition at line 20 of file SqQuery.h.

◆ __first

bool SqQuery::__first
protected

Definition at line 18 of file SqQuery.h.

◆ __params

SqParam* SqQuery::__params
protected

Definition at line 21 of file SqQuery.h.

◆ __stmt

sqlite3_stmt* SqQuery::__stmt
protected

Definition at line 17 of file SqQuery.h.


The documentation for this class was generated from the following files: