107#ifdef KEXI_USE_MYSQL_STMT
108 if (!m_statement || m_realParamCount<=0)
110 if ( mysql_stmt_errno(m_statement) == CR_SERVER_LOST ) {
120 if (m_resetRequired) {
121 mysql_stmt_reset(m_statement);
122 res = sqlite3_reset(prepared_st_handle);
123 if (SQLITE_OK != res) {
127 m_resetRequired =
false;
131 bool dummyNull =
true;
132 unsigned long str_length;
140 itFields = *m_whereFields;
142 itFields = m_fields->fieldsIterator();
146 for (TQValueListConstIterator<TQVariant> it = m_args.constBegin();
147 (field = itFields.current()) && arg < m_realParamCount; ++it, ++itFields, arg++)
149 if (it==m_args.constEnd() || (*it).isNull()) {
155m_stringBuffer[ 1024 ]; ???
156 char *str = tqstrncpy(m_stringBuffer, (
const char*)(*it).toString().utf8(), 1024);
157 m_mysqlBind[arg].buffer_type = MYSQL_TYPE_STRING;
158 m_mysqlBind[arg].buffer = m_stringBuffer;
159 m_mysqlBind[arg].is_null = (my_bool*)0;
160 m_mysqlBind[arg].buffer_length = 1024;
161 m_mysqlBind[arg].length = &str_length;
163 else switch (field->
type()) {
170 const int value = (*it).toInt(&ok);
173 m_mysqlBind[arg].buffer_type = MYSQL_TYPE_TINY;
175 m_mysqlBind[arg].buffer_type = MYSQL_TYPE_SHORT;
177 m_mysqlBind[arg].buffer_type = MYSQL_TYPE_LONG;
179 m_mysqlBind[arg].is_null = (my_bool*)0;
180 m_mysqlBind[arg].length = 0;
182 res = sqlite3_bind_int(prepared_st_handle, arg, value);
183 if (SQLITE_OK != res) {
194 res = sqlite3_bind_double(prepared_st_handle, arg, (*it).toDouble());
195 if (SQLITE_OK != res) {
204 TQ_LLONG value = (*it).toLongLong(&ok);
206 res = sqlite3_bind_int64(prepared_st_handle, arg, value);
207 if (SQLITE_OK != res) {
213 res = sqlite3_bind_null(prepared_st_handle, arg);
214 if (SQLITE_OK != res) {
222 res = sqlite3_bind_text(prepared_st_handle, arg,
223 TQString::number((*it).toBool() ? 1 : 0).latin1(),
224 1, SQLITE_TRANSIENT );
225 if (SQLITE_OK != res) {
230 case KexiDB::Field::Time:
231 res = sqlite3_bind_text(prepared_st_handle, arg,
232 (*it).toTime().toString(TQt::ISODate).latin1(),
233 sizeof(
"HH:MM:SS"), SQLITE_TRANSIENT );
234 if (SQLITE_OK != res) {
239 case KexiDB::Field::Date:
240 res = sqlite3_bind_text(prepared_st_handle, arg,
241 (*it).toDate().toString(TQt::ISODate).latin1(),
242 sizeof(
"YYYY-MM-DD"), SQLITE_TRANSIENT );
243 if (SQLITE_OK != res) {
248 case KexiDB::Field::DateTime:
249 res = sqlite3_bind_text(prepared_st_handle, arg,
250 (*it).toDateTime().toString(TQt::ISODate).latin1(),
251 sizeof(
"YYYY-MM-DDTHH:MM:SS"), SQLITE_TRANSIENT );
252 if (SQLITE_OK != res) {
259 const TQByteArray byteArray((*it).toByteArray());
260 res = sqlite3_bind_blob(prepared_st_handle, arg,
261 (
const char*)byteArray, byteArray.size(), SQLITE_TRANSIENT );
262 if (SQLITE_OK != res) {
269 KexiDBWarn <<
"PreparedStatement::execute(): unsupported field type: "
270 << field->
type() <<
" - NULL value bound to column #" << arg << endl;
271 res = sqlite3_bind_null(prepared_st_handle, arg);
272 if (SQLITE_OK != res) {
280 res = sqlite3_step(prepared_st_handle);
281 m_resetRequired =
true;
291 m_resetRequired =
true;
292 if (connection->insertRecord(*m_fields, m_args)) {