diff options
author | Mark Brand <mabrand@mabrand.nl> | 2013-04-24 19:08:15 (GMT) |
---|---|---|
committer | Mark Brand <mabrand@mabrand.nl> | 2013-04-24 19:08:15 (GMT) |
commit | 1f3719d21dfb379a935ec4be98bd8add0821b067 (patch) | |
tree | dc739c145cef40186ad6065e17f3843a73e88f0c /src/qtbase-1-cherrypicks.patch | |
parent | dfe6aa63812dd9c7a424f6f79b788e96a82642b7 (diff) | |
download | mxe-1f3719d21dfb379a935ec4be98bd8add0821b067.zip mxe-1f3719d21dfb379a935ec4be98bd8add0821b067.tar.gz mxe-1f3719d21dfb379a935ec4be98bd8add0821b067.tar.bz2 |
package qtbase: cherry-picked odbc bugfixes
Diffstat (limited to 'src/qtbase-1-cherrypicks.patch')
-rw-r--r-- | src/qtbase-1-cherrypicks.patch | 206 |
1 files changed, 203 insertions, 3 deletions
diff --git a/src/qtbase-1-cherrypicks.patch b/src/qtbase-1-cherrypicks.patch index db6afd3..93bcb06 100644 --- a/src/qtbase-1-cherrypicks.patch +++ b/src/qtbase-1-cherrypicks.patch @@ -4,7 +4,7 @@ See index.html for further information. From d04c8e88266737b6fb7ed29780905b54ee68eb5e Mon Sep 17 00:00:00 2001 From: Mark Brand <mabrand@mabrand.nl> Date: Tue, 26 Feb 2013 13:23:33 +0100 -Subject: [PATCH 1/3] use pkg-config for freetype +Subject: [PATCH 1/7] use pkg-config for freetype Change-Id: Id2f78ed9dbdcacd570eb25982cbd700d0437542a @@ -27,7 +27,7 @@ index 6b5f6d0..d21f4e3 100644 From b96f92ed207c7039d753e0ba8fffda4d676c3f38 Mon Sep 17 00:00:00 2001 From: Mark Brand <mabrand@mabrand.nl> Date: Sat, 22 Dec 2012 17:45:34 +0100 -Subject: [PATCH 2/3] WIP: qmake writeFile(): work around concurrent +Subject: [PATCH 2/7] WIP: qmake writeFile(): work around concurrent QDir::mkpath() failure This actually happened when building qtimageformats with make -j4. @@ -68,7 +68,7 @@ index f46d66b..4632cf7 100644 From 63f1f49850ac741eb604d6cae959546d73ea9a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20E=2E=20Narv=C3=A1ez?= <david.narvaez@computer.org> Date: Sat, 23 Feb 2013 23:14:50 -0500 -Subject: [PATCH 3/3] Rename qAbs Function for timeval +Subject: [PATCH 3/7] Rename qAbs Function for timeval This decouples it from qAbs which is declared as a constexpr under certain compilation flags and enables for qtbase to be compiled with @@ -104,3 +104,203 @@ index 0eee425..7a29247 100644 -- 1.8.1.4 + +From 1b78b16a6544a5002ce2dbc10c87c6195d7a0a01 Mon Sep 17 00:00:00 2001 +From: Israel Lins <israelins85@yahoo.com.br> +Date: Mon, 11 Feb 2013 16:13:24 -0300 +Subject: [PATCH 4/7] ODBC: fix loss of milliseconds when binding QDateTime + +Caused by operator precedence error. + +Follow-up to commit b8b79a0f37ec74fd5b4ad829e522a384ba3622ae + +Task-number: QTBUG-2192 +Change-Id: I17decd18c469b48a0bc938ae05c16cced8042219 +Reviewed-by: Mark Brand <mabrand@mabrand.nl> +(cherry picked from commit 36b6d4afc970a328cced87af3d39b70d327eb3ad) + +diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp +index 9517d95..5fa4779 100644 +--- a/src/sql/drivers/odbc/qsql_odbc.cpp ++++ b/src/sql/drivers/odbc/qsql_odbc.cpp +@@ -1407,7 +1407,7 @@ bool QODBCResult::exec() + + // (How many leading digits do we want to keep? With SQL Server 2005, this should be 3: 123000000) + int keep = (int)qPow(10.0, 9 - qMin(9, precision)); +- dt->fraction /= keep * keep; ++ dt->fraction = (dt->fraction / keep) * keep; + } + + r = SQLBindParameter(d->hStmt, +diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +index 1d2a605..951d6d7 100644 +--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp ++++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +@@ -3419,14 +3419,19 @@ void tst_QSqlQuery::QTBUG_2192() + QSqlQuery q(db); + QVERIFY_SQL(q, exec(QString("CREATE TABLE " + tableName + " (dt %1)").arg(tst_Databases::dateTimeTypeName(db)))); + ++ QDateTime dt = QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999)); + QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (dt) VALUES (?)")); +- q.bindValue(0, QVariant(QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999)))); ++ q.bindValue(0, dt); + QVERIFY_SQL(q, exec()); + +- // Check if value was stored with at least second precision. + QVERIFY_SQL(q, exec("SELECT dt FROM " + tableName)); + QVERIFY_SQL(q, next()); +- QVERIFY(q.value(0).toDateTime().msecsTo(QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999))) < 1000 ); ++ ++ // Check if retrieved value preserves reported precision ++ int precision = qMax(0, q.record().field("dt").precision()); ++ int diff = qAbs(q.value(0).toDateTime().msecsTo(dt)); ++ int keep = qMin(1000, (int)qPow(10.0, precision)); ++ QVERIFY(diff <= 1000 - keep); + } + } + +-- +1.8.1.4 + + +From c80f315f5e21d1550140e8ac6dd682fcdf50889c Mon Sep 17 00:00:00 2001 +From: Israel Lins <israelins85@yahoo.com.br> +Date: Sun, 17 Mar 2013 23:23:15 -0300 +Subject: [PATCH 5/7] ODBC: fixed consistence of return of QODBCResult::exec() + +The QODBCResult::exec() returns false when query is an delete +with no data do delete caused by SQLExecute function returning +SQL_NO_DATA, but the false return means error on execution. + +Task-number: QTBUG-10569 +Change-Id: I6c7ebadcf62ab404b60c7bcccdab6a10bf16a923 +Reviewed-by: Mark Brand <mabrand@mabrand.nl> +(cherry picked from commit 0646d1131b4bc65cdd9af29f4ce00fdd2398a3df) + +diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp +index 5fa4779..c6fd49d 100644 +--- a/src/sql/drivers/odbc/qsql_odbc.cpp ++++ b/src/sql/drivers/odbc/qsql_odbc.cpp +@@ -1592,7 +1592,7 @@ bool QODBCResult::exec() + } + } + r = SQLExecute(d->hStmt); +- if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) { ++ if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r != SQL_NO_DATA) { + qWarning() << "QODBCResult::exec: Unable to execute statement:" << qODBCWarn(d); + setLastError(qMakeError(QCoreApplication::translate("QODBCResult", + "Unable to execute statement"), QSqlError::StatementError, d)); +diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +index 951d6d7..eb5c309 100644 +--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp ++++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +@@ -1027,6 +1027,10 @@ void tst_QSqlQuery::isActive() + QVERIFY_SQL( q, exec( "delete from " + qtest + " where id = 42" ) ); + + QVERIFY( q.isActive() ); ++ ++ QVERIFY_SQL( q, exec( "delete from " + qtest + " where id = 42" ) ); ++ ++ QVERIFY( q.isActive() ); + } + + void tst_QSqlQuery::numRowsAffected() +-- +1.8.1.4 + + +From c31329e0d735e1c36c1762d0a05764c9e4a52ca2 Mon Sep 17 00:00:00 2001 +From: Israel Lins <israelins85@yahoo.com.br> +Date: Sun, 17 Mar 2013 23:20:55 -0300 +Subject: [PATCH 6/7] ODBC: lost info about column metadata on SQL_NO_DATA + +In reset() if SqlExecDirect returns SQL_NO_DATA the column metadata +is ignored. + +Change-Id: I0501fa47c42754bba42b3531da59e66c696eac53 +Reviewed-by: Mark Brand <mabrand@mabrand.nl> +(cherry picked from commit f9d856b3f5a4ceaeb8a5ac88aad2ad6b9e540abf) + +diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp +index c6fd49d..5932b57 100644 +--- a/src/sql/drivers/odbc/qsql_odbc.cpp ++++ b/src/sql/drivers/odbc/qsql_odbc.cpp +@@ -960,11 +960,6 @@ bool QODBCResult::reset (const QString& query) + return false; + } + +- if(r == SQL_NO_DATA) { +- setSelect(false); +- return true; +- } +- + SQLINTEGER bufferLength; + SQLULEN isScrollable; + r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, &bufferLength); +-- +1.8.1.4 + + +From 8f8677970ed5ca7e333095ab48a9b2bccbfd3eb5 Mon Sep 17 00:00:00 2001 +From: Mark Brand <mabrand@mabrand.nl> +Date: Tue, 23 Apr 2013 22:46:43 +0200 +Subject: [PATCH 7/7] qsql_odbc: fix SQLGetStmtAtt usage + +Failure to initialize the variable can cause spurious non-zero +values. + +http://msdn.microsoft.com/en-us/library/windows/desktop/ms715438(v=vs.85).aspx + +"..value can either be a SQLULEN value or a null-terminated character +string. If the value is a SQLULEN value, some drivers may only write the +lower 32-bit or 16-bit of a buffer and leave the higher-order +bit unchanged. Therefore, applications should use a buffer of SQLULEN +and initialize the value to 0 before calling this function. Also, the +BufferLength and StringLengthPtr arguments are not used." + +Follow-up to 1509316a37fb2d365230d020d1dfc251c830fd56 + +Change-Id: I2e92eb845a2590bea0849c52bde8902adff1b419 +Reviewed-by: Andy Shaw <andy.shaw@digia.com> +(cherry picked from commit af35ee291a1bbbc8627f9a17f7e104898d49b138) + +diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp +index 5932b57..b05cd4d 100644 +--- a/src/sql/drivers/odbc/qsql_odbc.cpp ++++ b/src/sql/drivers/odbc/qsql_odbc.cpp +@@ -960,9 +960,8 @@ bool QODBCResult::reset (const QString& query) + return false; + } + +- SQLINTEGER bufferLength; +- SQLULEN isScrollable; +- r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, &bufferLength); ++ SQLULEN isScrollable = 0; ++ r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, 0); + if(r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) + QSqlResult::setForwardOnly(isScrollable==SQL_NONSCROLLABLE); + +@@ -1108,7 +1107,7 @@ bool QODBCResult::fetchLast() + "Unable to fetch last"), QSqlError::ConnectionError, d)); + return false; + } +- SQLINTEGER currRow; ++ SQLULEN currRow = 0; + r = SQLGetStmtAttr(d->hStmt, + SQL_ROW_NUMBER, + &currRow, +@@ -1594,9 +1593,8 @@ bool QODBCResult::exec() + return false; + } + +- SQLINTEGER bufferLength; +- SQLULEN isScrollable; +- r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, &bufferLength); ++ SQLULEN isScrollable = 0; ++ r = SQLGetStmtAttr(d->hStmt, SQL_ATTR_CURSOR_SCROLLABLE, &isScrollable, SQL_IS_INTEGER, 0); + if(r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) + QSqlResult::setForwardOnly(isScrollable==SQL_NONSCROLLABLE); + +-- +1.8.1.4 + |