From 942b73aab0ba4d1573fa51dba59286ffd6fd94e9 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Fri, 5 Sep 2014 15:00:52 +0200 Subject: [PATCH] csv: Make import a little faster No need to update the progress window after each row. It's only really visible for large files anyway where a single row doesn't matter that much in terms of progress. Also fix a compiler warning. --- src/ImportCsvDialog.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ImportCsvDialog.cpp b/src/ImportCsvDialog.cpp index e2de2ac6..dc31baf5 100644 --- a/src/ImportCsvDialog.cpp +++ b/src/ImportCsvDialog.cpp @@ -168,6 +168,7 @@ void ImportCsvDialog::accept() // Show progress dialog QProgressDialog progress(tr("Inserting data..."), tr("Cancel"), 0, csv.csv().size()); progress.setWindowModality(Qt::ApplicationModal); + progress.show(); // Are we importing into an existing table? bool importToExistingTable = false; @@ -211,8 +212,7 @@ void ImportCsvDialog::accept() it != csv.csv().end(); ++it) { - QString sql; - sql = QString("INSERT INTO `%1` VALUES(").arg(ui->editName->text()); + QString sql = QString("INSERT INTO `%1` VALUES(").arg(ui->editName->text()); QStringList insertlist; for(QStringList::const_iterator jt = it->begin(); jt != it->end(); ++jt) @@ -225,7 +225,7 @@ void ImportCsvDialog::accept() } // add missing fields with empty values - for(int i = insertlist.size(); i < csv.columns(); ++i) + for(unsigned int i = insertlist.size(); i < csv.columns(); ++i) { qWarning() << "ImportCSV" << tr("Missing field for record %1").arg(std::distance(itBegin, it) + 1); insertlist << "NULL"; @@ -237,7 +237,10 @@ void ImportCsvDialog::accept() if(!pdb->executeSQL(sql, false, false)) return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1); - progress.setValue(std::distance(csv.csv().begin(), it)); + // Update progress bar and check if cancel button was clicked + unsigned int prog = std::distance(csv.csv().begin(), it); + if(prog % 100 == 0) + progress.setValue(prog); if(progress.wasCanceled()) return rollback(this, pdb, progress, restorepointName, std::distance(itBegin, it) + 1); }