summaryrefslogtreecommitdiffstats
path: root/tests/auto/sql
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2012-04-12 22:26:08 +0200
committerQt by Nokia <qt-info@nokia.com>2012-04-17 23:16:51 +0200
commitf869a12c1043271b2ce8987b07a863ba3c78d6c9 (patch)
tree7248ea09b3ab68372c1071f6b1cc1a1ccdb40ac9 /tests/auto/sql
parent84e782e2bd93f97bd1f4f46853462e794ce374b2 (diff)
QTBUG-18435 fix stored procedure output parameters on ODBC
Follow-up to c55a99965d8c08d5f924d49db4fe4aa49df8096. 3 problems prevented stored procedure output parameters from working. - SQLBindParameter needs access to buffer provided by QByteArray. - The length of the buffer is measured in bytes. - A typo corrupted conversion back to QString. Also, data() makes more sense than constData() to expose the buffer. Task-Id: QTBUG-18435 Change-Id: I66444b13c0f584ed79bcf026e5a23caff83c22cb Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'tests/auto/sql')
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index e73ce794c6..36ac9de02d 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -211,6 +211,8 @@ private slots:
void QTBUG_5765();
void QTBUG_14132_data() { generic_data("QOCI"); }
void QTBUG_14132();
+ void QTBUG_18435_data() { generic_data("QODBC"); }
+ void QTBUG_18435();
void QTBUG_21884_data() { generic_data("QSQLITE"); }
void QTBUG_21884();
void QTBUG_16967_data() { generic_data("QSQLITE"); }
@@ -3024,6 +3026,36 @@ void tst_QSqlQuery::QTBUG_14132()
QCOMPARE(q.boundValue(0).toString(), QLatin1String("OUTSTRING"));
}
+void tst_QSqlQuery::QTBUG_18435()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ if (!db.driverName().startsWith("QODBC") || !tst_Databases::isSqlServer(db))
+ return;
+
+ QSqlQuery q(db);
+ QString procName(qTableName("qtbug_18435_proc", __FILE__));
+
+ q.exec("DROP PROCEDURE " + procName);
+ const QString stmt =
+ "CREATE PROCEDURE " + procName + " @key nvarchar(50) OUTPUT AS\n"
+ "BEGIN\n"
+ " SET NOCOUNT ON\n"
+ " SET @key = 'TEST'\n"
+ "END\n";
+
+ QVERIFY_SQL(q, exec(stmt));
+ QVERIFY_SQL(q, prepare("{CALL "+ procName +"(?)}"));
+ const QString testStr = "0123";
+ q.bindValue(0, testStr, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toString(), QLatin1String("TEST"));
+
+ QVERIFY_SQL(q, exec("DROP PROCEDURE " + procName));
+}
+
void tst_QSqlQuery::QTBUG_5251()
{
QFETCH( QString, dbName );