From 3277174cb1ac734842ebdac0e49e3f2ff903d653 Mon Sep 17 00:00:00 2001 From: mgrojo Date: Wed, 28 Feb 2018 23:18:49 +0100 Subject: [PATCH] Problems with WITHOUT ROWID tables Quoted values in DELETE FROM and UPDATE SET take into account that value could have a single quote and they are now doubled. Detect tables without rowid in order to make invisible the "Show rowid column" See issue #1332 --- src/MainWindow.cpp | 3 ++- src/sqlitedb.cpp | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index fcf46479..838332d0 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -595,8 +595,9 @@ void MainWindow::populateTable() if(db.getObjectByName(currentlyBrowsedTableName())->type() == sqlb::Object::Table) { // Table + sqlb::TablePtr table = db.getObjectByName(currentlyBrowsedTableName()).dynamicCast(); ui->actionUnlockViewEditing->setVisible(false); - ui->actionShowRowidColumn->setVisible(true); + ui->actionShowRowidColumn->setVisible(!table->isWithoutRowidTable()); } else { // View ui->actionUnlockViewEditing->setVisible(true); diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 30d6d887..1864d2ad 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -980,8 +980,8 @@ bool DBBrowserDB::deleteRecords(const sqlb::ObjectIdentifier& table, const QStri if (!isOpen()) return false; QStringList quoted_rowids; - for(const QString& rowid : rowids) - quoted_rowids.append("'" + rowid + "'"); + for(QString rowid : rowids) + quoted_rowids.append("'" + rowid.replace("'", "''") + "'"); QString statement = QString("DELETE FROM %1 WHERE %2 IN (%3);") .arg(table.toString()) @@ -1022,7 +1022,7 @@ bool DBBrowserDB::updateRecord(const sqlb::ObjectIdentifier& table, const QStrin .arg(table.toString()) .arg(sqlb::escapeIdentifier(column)) .arg(pk) - .arg(rowid); + .arg(QString(rowid).replace("'", "''")); logSQL(sql, kLogMsg_App); setSavepoint();