summaryrefslogtreecommitdiffstats
path: root/src/sql/drivers/mysql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-10-30 10:51:25 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-09 00:37:42 +0100
commit593b8f7f0b35ddc424d8ccbd5df11fcf2442858e (patch)
tree881067d0f230ff94da8d819e50e81a56788ee05a /src/sql/drivers/mysql
parentb009ed0cc87a3b16e5c4554f07875177366d1dba (diff)
fix binding of bool type in mysql driver
MYSQL_TYPE_TINY should be used for binding bool input value. MYSQL_TYPE_LONG might be too big for bool, resulting in bools being saved in the database as int 127. The problem was not specific to the vendor's BOOL column type. http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html http://dev.mysql.com/doc/refman/5.0/en/c-api-prepared-statement-type-codes.html Added generic autotest to make sure that binding bool works. All drivers should pass this test. Task-number: QTBUG-27763 Change-Id: I4e69f8e3b32fffb702ec9fa8a80ff5c50dea954b Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/drivers/mysql')
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index 6cc9edffa8..182b0a4dd3 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -987,11 +987,16 @@ bool QMYSQLResult::exec()
break; }
case QVariant::UInt:
case QVariant::Int:
- case QVariant::Bool:
currBind->buffer_type = MYSQL_TYPE_LONG;
currBind->buffer = data;
currBind->buffer_length = sizeof(int);
currBind->is_unsigned = (val.type() != QVariant::Int);
+ break;
+ case QVariant::Bool:
+ currBind->buffer_type = MYSQL_TYPE_TINY;
+ currBind->buffer = data;
+ currBind->buffer_length = sizeof(bool);
+ currBind->is_unsigned = false;
break;
case QVariant::Double:
currBind->buffer_type = MYSQL_TYPE_DOUBLE;