tests/auto/qsqlquery/tst_qsqlquery.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -194,6 +194,16 @@
     void sqlServerReturn0_data() { generic_data(); }
     void sqlServerReturn0();
 
+    void QTBUG_551_data() { generic_data("QOCI"); }
+    void QTBUG_551();
+
+    void QTBUG_5251_data() { generic_data("QPSQL"); }
+    void QTBUG_5251();
+    void QTBUG_6421_data() { generic_data("QOCI"); }
+    void QTBUG_6421();
+    void QTBUG_6618_data() { generic_data("QODBC"); }
+    void QTBUG_6618();
+
 private:
     // returns all database connections
     void generic_data(const QString &engine=QString());
@@ -296,7 +306,8 @@
                << qTableName( "more_results" )
                << qTableName( "blobstest" )
                << qTableName( "oraRowId" )
-               << qTableName( "qtest_batch" );
+               << qTableName( "qtest_batch" )
+               << qTableName(QLatin1String("bug6421")).toUpper();
 
     if ( db.driverName().startsWith("QPSQL") )
         tablenames << qTableName("task_233829");
@@ -322,6 +333,11 @@
     tablenames << qTableName("test141895");
 
     tst_Databases::safeDropTables( db, tablenames );
+
+    if ( db.driverName().startsWith( "QOCI" ) ) {
+        QSqlQuery q( db );
+        q.exec( "DROP PACKAGE " + qTableName("pkg") );
+    }
 }
 
 void tst_QSqlQuery::createTestTables( QSqlDatabase db )
@@ -396,7 +412,7 @@
         QSKIP("Needs someone with more Unicode knowledge than I have to fix", SkipSingle);
 
     if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
-        QString uniStr( QChar( 'का' ) );
+        QString uniStr( QChar(0x0915) ); // DEVANAGARI LETTER KA
         QSqlQuery q( db );
 
         if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
@@ -2847,5 +2863,127 @@
     QVERIFY_SQL(q, next());
 }
 
+void tst_QSqlQuery::QTBUG_551()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+    QSqlQuery q(db);
+    QString pkgname=qTableName("pkg");
+    QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE "+pkgname+" IS \n\
+            \n\
+            TYPE IntType IS TABLE OF INTEGER      INDEX BY BINARY_INTEGER;\n\
+            TYPE VCType  IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER;\n\
+            PROCEDURE P (Inp IN IntType,  Outp OUT VCType);\n\
+            END "+pkgname+";"));
+
+     QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE BODY "+pkgname+" IS\n\
+            PROCEDURE P (Inp IN IntType,  Outp OUT VCType)\n\
+            IS\n\
+            BEGIN\n\
+             Outp(1) := '1. Value is ' ||TO_CHAR(Inp(1));\n\
+             Outp(2) := '2. Value is ' ||TO_CHAR(Inp(2));\n\
+             Outp(3) := '3. Value is ' ||TO_CHAR(Inp(3));\n\
+            END p;\n\
+            END "+pkgname+";"));
+
+    QVariantList inLst, outLst, res_outLst;
+
+    q.prepare("begin "+pkgname+".p(:inp, :outp); end;");
+
+    QString StVal;
+    StVal.reserve(60);
+
+    // loading arrays
+    for (int Cnt=0; Cnt < 3; Cnt++) {
+        inLst << Cnt;
+        outLst << StVal;
+    }
+
+    q.bindValue(":inp", inLst);
+    q.bindValue(":outp", outLst, QSql::Out);
+
+    QVERIFY_SQL(q, execBatch(QSqlQuery::ValuesAsColumns) );
+    res_outLst = qVariantValue<QVariantList>(q.boundValues()[":outp"]);
+    QCOMPARE(res_outLst[0].toString(), QLatin1String("1. Value is 0"));
+    QCOMPARE(res_outLst[1].toString(), QLatin1String("2. Value is 1"));
+    QCOMPARE(res_outLst[2].toString(), QLatin1String("3. Value is 2"));
+}
+
+void tst_QSqlQuery::QTBUG_5251()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+
+    if (!db.driverName().startsWith( "QPSQL" )) return;
+
+    QSqlQuery q(db);
+    q.exec("DROP TABLE " + qTableName("timetest"));
+    QVERIFY_SQL(q, exec("CREATE TABLE  " + qTableName("timetest") + " (t  TIME)"));
+    QVERIFY_SQL(q, exec("INSERT INTO " + qTableName("timetest") +  " VALUES ('1:2:3.666')"));
+
+    QSqlTableModel timetestModel(0,db);
+    timetestModel.setEditStrategy(QSqlTableModel::OnManualSubmit);
+    timetestModel.setTable(qTableName("timetest"));
+    QVERIFY_SQL(timetestModel, select());
+
+    QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("01:02:03.666"));
+    QVERIFY_SQL(timetestModel,setData(timetestModel.index(0, 0), QTime(0,12,34,500)));
+    QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500"));
+    QVERIFY_SQL(timetestModel, submitAll());
+    QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500"));
+
+    QVERIFY_SQL(q, exec("UPDATE " + qTableName("timetest") + " SET t = '0:11:22.33'"));
+    QVERIFY_SQL(timetestModel, select());
+    QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:11:22.330"));
+
+}
+
+void tst_QSqlQuery::QTBUG_6421()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+
+    QSqlQuery q(db);
+    QString tableName=qTableName(QLatin1String("bug6421")).toUpper();
+
+    QVERIFY_SQL(q, exec("create table "+tableName+"(COL1 char(10), COL2 char(10), COL3 char(10))"));
+    QVERIFY_SQL(q, exec("create index INDEX1 on "+tableName+" (COL1 desc)"));
+    QVERIFY_SQL(q, exec("create index INDEX2 on "+tableName+" (COL2 desc)"));
+    QVERIFY_SQL(q, exec("create index INDEX3 on "+tableName+" (COL3 desc)"));
+    q.setForwardOnly(true);
+    QVERIFY_SQL(q, exec("select COLUMN_EXPRESSION from ALL_IND_EXPRESSIONS where TABLE_NAME='"+tableName+"'"));
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toString(), QLatin1String("\"COL1\""));
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toString(), QLatin1String("\"COL2\""));
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toString(), QLatin1String("\"COL3\""));
+}
+
+void tst_QSqlQuery::QTBUG_6618()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+    if (!tst_Databases::isSqlServer( db ))
+        QSKIP("SQL Server specific test", SkipSingle);
+
+    QSqlQuery q(db);
+    q.exec( "drop procedure " + qTableName( "tst_raiseError" ) );  //non-fatal
+    QString errorString;
+    for (int i=0;i<110;i++)
+        errorString+="reallylong";
+    errorString+=" error";
+    QVERIFY_SQL( q, exec("create procedure " + qTableName( "tst_raiseError" ) + " as\n"
+                         "begin\n"
+                         "    raiserror('" + errorString + "', 16, 1)\n"
+                         "end\n" ));
+    q.exec( "{call " + qTableName( "tst_raiseError" ) + "}" );
+    QVERIFY(q.lastError().text().contains(errorString));
+}
+
 QTEST_MAIN( tst_QSqlQuery )
 #include "tst_qsqlquery.moc"