mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 02:50:46 -06:00
SqliteTableModel: Restore BLOB support and clean up DBSQLiteDB
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user