From 31bf07000bee36ce83981d7b7031d34b0aa78957 Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Wed, 10 Apr 2013 18:18:08 +0200 Subject: [PATCH] SqliteTableModel: Restore BLOB support and clean up DBSQLiteDB --- src/sqlitedb.cpp | 80 ---------------------------------------- src/sqlitedb.h | 5 --- src/sqlitetablemodel.cpp | 10 ++--- src/sqlitetablemodel.h | 4 +- 4 files changed, 8 insertions(+), 91 deletions(-) diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 477bb676..ad27a977 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -434,45 +434,6 @@ bool DBBrowserDB::deleteRecord(const QString& table, int rowid) return ok; } -bool DBBrowserDB::updateRecord(int wrow, int wcol, const QByteArray& wtext) -{ - if (!hasValidBrowseSet) return false; - if (!isOpen()) return false; - - lastErrorMessage = QString("no error"); - - QList& rt = browseRecs[wrow]; - QString rowid = rt[0]; - QByteArray& cv = rt[wcol+1];//must account for rowid - QString ct = browseFields.at(wcol); - - QString sql = QString("UPDATE `%1` SET `%2`=? WHERE rowid=%4;").arg(curBrowseTableName).arg(ct).arg(rowid); - - logSQL(sql, kLogMsg_App); - setRestorePoint(); - - sqlite3_stmt* stmt; - int success = 1; - if(sqlite3_prepare_v2(_db, sql.toUtf8(), -1, &stmt, 0) != SQLITE_OK) - success = 0; - if(success == 1 && sqlite3_bind_text(stmt, 1, wtext.constData(), wtext.length(), SQLITE_STATIC) != SQLITE_OK) - success = -1; - if(success == 1 && sqlite3_step(stmt) != SQLITE_DONE) - success = -1; - if(success != 0 && sqlite3_finalize(stmt) != SQLITE_OK) - success = -1; - - if(success == 1) - { - cv = wtext; - return true; - } else { - lastErrorMessage = sqlite3_errmsg(_db); - qCritical() << "updateRecord: " << lastErrorMessage; - return false; - } -} - bool DBBrowserDB::updateRecord(const QString& table, const QString& column, int row, const QByteArray& value) { if (!isOpen()) return false; @@ -741,47 +702,6 @@ bool DBBrowserDB::renameTable(const QString& from_table, const QString& to_table } } -void DBBrowserDB::getTableRecords( const QString & tablename, const QString& orderby ) -{ - sqlite3_stmt* stmt; - - int ncol; - QList r; - browseRecs.clear(); - idmap.clear(); - lastErrorMessage = QObject::tr("no error"); - - QString sql = QString("SELECT rowid, * FROM `%1` ORDER BY %2;").arg(tablename).arg(orderby); - logSQL(sql, kLogMsg_App); - if(sqlite3_prepare_v2(_db, sql.toUtf8(), -1, &stmt, 0) != SQLITE_OK) - { - lastErrorMessage = QObject::tr("could not get fields"); - return; - } - - int rownum = 0; - - while(sqlite3_step(stmt) == SQLITE_ROW) - { - r.clear(); - ncol = sqlite3_data_count(stmt); - for(int e=0;e(sqlite3_column_blob(stmt, e)), sqlite3_column_bytes(stmt, e)); - r.append(rv); - - if(e == 0) - { - idmap.insert(rv.toInt(), rownum); - rownum++; - } - } - browseRecs.append(r); - } - - sqlite3_finalize(stmt); -} - resultMap DBBrowserDB::getFindResults( const QString & wstatement) { sqlite3_stmt *vm; diff --git a/src/sqlitedb.h b/src/sqlitedb.h index ef67373c..842659aa 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -102,7 +102,6 @@ public: int addRecord(const QString& sTableName); bool deleteRecord(const QString& table, int rowid); bool updateRecord(const QString& table, const QString& column, int row, const QByteArray& value); - bool updateRecord(int wrow, int wcol, const QByteArray& wtext); bool browseTable( const QString & tablename, const QString& orderby = "rowid" ); bool createTable(const QString& name, const QList& structure); @@ -145,12 +144,8 @@ public: MainWindow* mainWindow; - private: bool dirty; - void getTableRecords( const QString & tablename, const QString& orderby = "rowid" ); - - }; #endif diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index 87e48350..845299a6 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -110,7 +110,7 @@ bool SqliteTableModel::setData(const QModelIndex& index, const QVariant& value, { if(index.isValid() && role == Qt::EditRole) { - m_data[index.row()].replace(index.column(), value.toString()); + m_data[index.row()].replace(index.column(), value.toByteArray()); if(m_db->updateRecord(m_sTable, m_headers.at(index.column()), m_data[index.row()].at(0).toInt(), value.toByteArray())) { @@ -158,14 +158,14 @@ bool SqliteTableModel::insertRows(int row, int count, const QModelIndex& parent) { beginInsertRows(parent, row, row + count - 1); - QStringList blank_data; + QByteArrayList blank_data; for(int i=0;iaddRecord(m_sTable))); + m_data[row].replace(0, QByteArray::number(m_db->addRecord(m_sTable))); } endInsertRows(); @@ -200,9 +200,9 @@ void SqliteTableModel::fetchData(unsigned int from, unsigned to) { while(sqlite3_step(stmt) == SQLITE_ROW) { - QStringList rowdata; + QByteArrayList rowdata; for (int i = 0; i < m_headers.size(); ++i) - rowdata.append(QString::fromUtf8((const char *)sqlite3_column_text(stmt, i))); + rowdata.append(QByteArray(static_cast(sqlite3_column_blob(stmt, i)), sqlite3_column_bytes(stmt, i))); m_data.push_back(rowdata); } } diff --git a/src/sqlitetablemodel.h b/src/sqlitetablemodel.h index 7644e0a1..1a1dbcfa 100644 --- a/src/sqlitetablemodel.h +++ b/src/sqlitetablemodel.h @@ -32,6 +32,8 @@ public: Qt::ItemFlags flags(const QModelIndex& index) const; + typedef QList QByteArrayList; + signals: public slots: @@ -45,7 +47,7 @@ private: DBBrowserDB* m_db; int m_rowCount; QStringList m_headers; - QList m_data; + QList m_data; QString m_sQuery; QString m_sTable;