diff options
author | Mark Brand <mabrand@mabrand.nl> | 2012-10-30 09:51:25 (GMT) |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-13 10:54:58 (GMT) |
commit | 8efd01e369d9427db38d9f3c524626607f4f114b (patch) | |
tree | 48c78a23fd0f866ef1dc38b67a9eaba482b368b2 /src/sql/drivers | |
parent | 8f090ffa0eb2949c9b335e42e2ce33bf519ad919 (diff) | |
download | Qt-8efd01e369d9427db38d9f3c524626607f4f114b.zip Qt-8efd01e369d9427db38d9f3c524626607f4f114b.tar.gz Qt-8efd01e369d9427db38d9f3c524626607f4f114b.tar.bz2 |
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: Bill King <bill.king@nokia.com>
(cherry picked from qt5/qtbase commit 593b8f7f0b35ddc424d8ccbd5df11fcf2442858e))
Diffstat (limited to 'src/sql/drivers')
-rw-r--r-- | src/sql/drivers/mysql/qsql_mysql.cpp | 7 |
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 3e00ce2..b820c86 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -991,11 +991,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; |