SqliteTableModel: Restore BLOB support and clean up DBSQLiteDB

This commit is contained in:
Martin Kleusberg
2013-04-10 18:18:08 +02:00
parent 2463cf3d5d
commit 31bf07000b
4 changed files with 8 additions and 91 deletions

View File

@@ -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<QByteArray>& 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<QByteArray> 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<ncol;++e)
{
QByteArray rv = QByteArray(static_cast<const char*>(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;

View File

@@ -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<DBBrowserField>& structure);
@@ -145,12 +144,8 @@ public:
MainWindow* mainWindow;
private:
bool dirty;
void getTableRecords( const QString & tablename, const QString& orderby = "rowid" );
};
#endif

View File

@@ -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;i<m_headers.size();i++)
blank_data.push_back("");
for(int i=0;i<count;i++)
{
m_data.insert(row, blank_data);
m_data[row].replace(0, QString::number(m_db->addRecord(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<const char*>(sqlite3_column_blob(stmt, i)), sqlite3_column_bytes(stmt, i)));
m_data.push_back(rowdata);
}
}

View File

@@ -32,6 +32,8 @@ public:
Qt::ItemFlags flags(const QModelIndex& index) const;
typedef QList<QByteArray> QByteArrayList;
signals:
public slots:
@@ -45,7 +47,7 @@ private:
DBBrowserDB* m_db;
int m_rowCount;
QStringList m_headers;
QList<QStringList> m_data;
QList<QByteArrayList> m_data;
QString m_sQuery;
QString m_sTable;