src/sql/drivers/sqlite/qsql_sqlite.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -122,14 +122,14 @@
 
     sqlite3_stmt *stmt;
 
-    uint skippedStatus: 1; // the status of the fetchNext() that's skipped
-    uint skipRow: 1; // skip the next fetchNext()?
-    uint utf8: 1;
+    bool skippedStatus; // the status of the fetchNext() that's skipped
+    bool skipRow; // skip the next fetchNext()?
     QSqlRecord rInf;
+    QVector<QVariant> firstRow;
 };
 
 QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0),
-    stmt(0), skippedStatus(false), skipRow(false), utf8(false)
+    stmt(0), skippedStatus(false), skipRow(false)
 {
 }
 
@@ -189,10 +189,17 @@
         // already fetched
         Q_ASSERT(!initialFetch);
         skipRow = false;
+        for(int i=0;i<firstRow.count();i++)
+            values[i]=firstRow[i];
         return skippedStatus;
     }
     skipRow = initialFetch;
 
+    if(initialFetch) {
+        firstRow.clear();
+        firstRow.resize(sqlite3_column_count(stmt));
+    }
+
     if (!stmt) {
         q->setLastError(QSqlError(QCoreApplication::translate("QSQLiteResult", "Unable to fetch row"),
                                   QCoreApplication::translate("QSQLiteResult", "No query"), QSqlError::ConnectionError));
@@ -228,13 +235,9 @@
                         values[i + idx] = sqlite3_column_int64(stmt, i);
                         break;
                     case QSql::LowPrecisionDouble:
-                        values[i + idx] = sqlite3_column_double(stmt, i);
-                        break;
                     case QSql::HighPrecision:
                     default:
-                        values[i + idx] = QString::fromUtf16(static_cast<const ushort *>(
-                                            sqlite3_column_text16(stmt, i)),
-                                            sqlite3_column_bytes16(stmt, i) / sizeof(ushort));
+                        values[i + idx] = sqlite3_column_double(stmt, i);
                         break;
                 };
                 break;
@@ -403,7 +406,7 @@
                         "Parameter count mismatch"), QString(), QSqlError::StatementError));
         return false;
     }
-    d->skippedStatus = d->fetchNext(cache(), 0, true);
+    d->skippedStatus = d->fetchNext(d->firstRow, 0, true);
     if (lastError().isValid()) {
         setSelect(false);
         setActive(false);