12#if __DCL_HAVE_ALLOC_DEBUG
13#undef __DCL_ALLOC_LEVEL
14#define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
62 __count = hQuery->fieldCount();
67 for(
size_t i = 0; i < hQuery->fieldCount(); i++) {
68 _field = &(__fields[i]);
70 if (!hQuery->getField(i, &(_field->
__handle))) {
86 if (__fieldMap.isEmpty()) {
87 __fieldMap.initBuckets(__count);
88 for(
size_t i = 0; i < __count; i++)
89 __fieldMap[__fields[i].name()] = &__fields[i];
91 _field = (
SQLField*)(__fieldMap[_name]);
94 for(
size_t i = 0; i < __count; i++) {
96 if (String::compare(__fields[i].name(), _name) == 0) {
97 _field = &__fields[i];
103 if (_field ==
NULL) {
142 __count = hQuery->paramCount();
146 for(
size_t i = 0; i < hQuery->paramCount(); i++) {
166 if (__paramMap.isEmpty()) {
167 __paramMap.initBuckets(__count);
168 for (
size_t i = 0; i < __count; i++) {
170 __paramMap[p->name()] = p;
176 for(
size_t i = 0; i < __count; i++) {
177 if (String::compare(__params[i].name(), _name) == 0) {
191static void __sql_transform__(
const String& _sql,
192 wchar_t _placeholder, String& _newsql, StringArray& _names)
194 StringBuilder newsql(_sql.length());
195 const wchar_t* s = _sql.data();
196 const wchar_t* e = s + _sql.length();
197 const wchar_t* p = s;
201 if ((*p == L
':' && !wcschr(L
":=", *(p + 1))) || *p == L
'?') {
203 if (_placeholder == L
'?')
207 newsql.format(L
":%zd", _names.size() + 1);
213 if (wcschr(L
",);:", *p) || iswspace(*p)) {
219 _names.add(String(s, p));
223 else if (*p == L
'\'') {
240 _newsql = newsql.toString();
254 if (!_conn->handle()->createQueryInstance(&hQuery)) {
260 __connection = _conn;
291 __sql_transform__(_sql, __handle->placeholder(),
sql,
names);
303 if (__handle->paramCount() > 0)
304 __params.initialize(
this,
names);
311 throw new SQLException(this, __sql);
313 throw new SQLException(this);
332 throw new SQLException(this);
339 throw new SQLException(this);
#define __DCL_THROWS2(e1, e2)
#define __DCL_ASSERT(expr)
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
if(!__handle->open(bs, bs.length()))
void CharsetConvertException * execute()
void initialize(SQLQuery *_query)
_CONST SQLField & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
void initialize(SQLQuery *_query, const StringArray _names)
SQLParam & byName(const wchar_t *_name) _CONST __DCL_THROWS1(InvalidIndexException *)
SQLQuery(SQLConnection *_conn) __DCL_THROWS1(SQLException *)
void prepare(const String &_sql) __DCL_THROWS2(SQLException *
void CharsetConvertException *void execute() __DCL_THROWS1(SQLException *)
void CharsetConvertException *void fetch() __DCL_THROWS1(SQLException *)
SQL::Query * handle() const
bool nextResult() __DCL_THROWS1(SQLException *)
SQLConnection * __connection