diff --git a/src/icons/icons.qrc b/src/icons/icons.qrc index 7601cf15..8b448748 100644 --- a/src/icons/icons.qrc +++ b/src/icons/icons.qrc @@ -19,6 +19,12 @@ table.png tag_blue.png view-refresh.png + picture_delete.png + picture.png + picture_add.png + script.png + script_add.png + script_delete.png oldimages/128.png diff --git a/src/icons/picture.png b/src/icons/picture.png new file mode 100644 index 00000000..4a158fef Binary files /dev/null and b/src/icons/picture.png differ diff --git a/src/icons/picture_add.png b/src/icons/picture_add.png new file mode 100644 index 00000000..d6d3f856 Binary files /dev/null and b/src/icons/picture_add.png differ diff --git a/src/icons/picture_delete.png b/src/icons/picture_delete.png new file mode 100644 index 00000000..cca9f535 Binary files /dev/null and b/src/icons/picture_delete.png differ diff --git a/src/icons/script.png b/src/icons/script.png new file mode 100644 index 00000000..0f9ed4d4 Binary files /dev/null and b/src/icons/script.png differ diff --git a/src/icons/script_add.png b/src/icons/script_add.png new file mode 100644 index 00000000..d650552d Binary files /dev/null and b/src/icons/script_add.png differ diff --git a/src/icons/script_delete.png b/src/icons/script_delete.png new file mode 100644 index 00000000..e6500ced Binary files /dev/null and b/src/icons/script_delete.png differ diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5d2cb5f1..56414e8c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -214,8 +214,6 @@ void MainWindow::populateStructure() db.updateSchema(); QStringList tblnames = db.getTableNames(); sqliteHighlighter->setTableNames(tblnames); -// logWin->userSqliteHighlighter()->setTableNames(tblnames); -// logWin->appSqliteHighlighter()->setTableNames(tblnames); tableMap::ConstIterator it; for ( it = db.tbmap.begin(); it != db.tbmap.end(); ++it ) { @@ -240,14 +238,30 @@ void MainWindow::populateStructure() // TODO make an options/setting autoexpand ui->dbTreeWidget->setItemExpanded(tableItem, true); } - indexMap::ConstIterator it2; + objectMap::ConstIterator it2; for ( it2 = db.idxmap.begin(); it2 != db.idxmap.end(); ++it2 ) { - QTreeWidgetItem *idxItem = new QTreeWidgetItem(); - idxItem->setText( 0, it2.value().getname() ); - idxItem->setText( 1, "index" ); - idxItem->setText( 3, it2.value().getsql() ); - idxItem->setIcon(0, QIcon(":/icons/index")); - ui->dbTreeWidget->addTopLevelItem(idxItem); + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setText( 0, it2.value().getname() ); + item->setText( 1, "index" ); + item->setText( 3, it2.value().getsql() ); + item->setIcon(0, QIcon(":/icons/index")); + ui->dbTreeWidget->addTopLevelItem(item); + } + for ( it2 = db.viewmap.begin(); it2 != db.viewmap.end(); ++it2 ) { + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setText( 0, it2.value().getname() ); + item->setText( 1, "view" ); + item->setText( 3, it2.value().getsql() ); + item->setIcon(0, QIcon(":/icons/view")); + ui->dbTreeWidget->addTopLevelItem(item); + } + for ( it2 = db.trgmap.begin(); it2 != db.trgmap.end(); ++it2 ) { + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setText( 0, it2.value().getname() ); + item->setText( 1, "trigger" ); + item->setText( 3, it2.value().getsql() ); + item->setIcon(0, QIcon(":/icons/trigger")); + ui->dbTreeWidget->addTopLevelItem(item); } } diff --git a/src/sqlitedb.cpp b/src/sqlitedb.cpp index 8a25aab8..397a7311 100644 --- a/src/sqlitedb.cpp +++ b/src/sqlitedb.cpp @@ -218,6 +218,8 @@ void DBBrowserDB::close (){ } _db = 0; idxmap.clear(); + trgmap.clear(); + viewmap.clear(); tbmap.clear(); idmap.clear(); browseRecs.clear(); @@ -446,7 +448,7 @@ bool DBBrowserDB::renameColumn(QString tablename, QString from, QString to, QStr } bool DBBrowserDB::renameTable(QString from_table, QString to_table){ - qDebug("renameTable column"); + qDebug("renameTable"); return true; } @@ -555,8 +557,8 @@ QStringList DBBrowserDB::getTableNames() QStringList DBBrowserDB::getIndexNames() { - indexMap::Iterator it; - indexMap tmap = idxmap; + objectMap::Iterator it; + objectMap tmap = idxmap; QStringList res; for ( it = tmap.begin(); it != tmap.end(); ++it ) { @@ -623,32 +625,42 @@ void DBBrowserDB::logSQL(QString statement, int msgtype) void DBBrowserDB::updateSchema( ) { - // qDebug ("Getting list of tables"); sqlite3_stmt *vm; const char *tail; int err=0; idxmap.clear(); tbmap.clear(); + viewmap.clear(); + trgmap.clear(); lastErrorMessage = QString("no error"); - QString statement = "SELECT name, sql " - "FROM sqlite_master " - "WHERE type='table' ;"; + QString statement = "SELECT type, name, sql FROM sqlite_master;"; err=sqlite3_prepare(_db, (const char *) statement.toUtf8(),statement.length(), &vm, &tail); if (err == SQLITE_OK){ logSQL(statement, kLogMsg_App); while ( sqlite3_step(vm) == SQLITE_ROW ){ - QString val1, val2; + QString val1, val2, val3; val1 = QString((const char *) sqlite3_column_text(vm, 0)); val2 = QString((const char *) sqlite3_column_text(vm, 1)); - tbmap[val1] = DBBrowserTable(GetDecodedQString(val1), GetDecodedQString(val2)); + val3 = QString((const char *) sqlite3_column_text(vm, 2)); + + if(val1 == "table") + tbmap[val2] = DBBrowserTable(GetDecodedQString(val2), GetDecodedQString(val3)); + else if(val1 == "index") + idxmap[val2] = DBBrowserObject(GetDecodedQString(val2), GetDecodedQString(val3)); + else if(val1 == "view") + viewmap[val2] = DBBrowserObject(GetDecodedQString(val2), GetDecodedQString(val3)); + else if(val1 == "trigger") + trgmap[val2] = DBBrowserObject(GetDecodedQString(val2), GetDecodedQString(val3)); + else + qDebug("unknown object type %s", val1.toStdString().c_str()); } sqlite3_finalize(vm); }else{ - qDebug ("could not get list of tables: %d, %s",err,sqlite3_errmsg(_db)); + qDebug ("could not get list of db objects: %d, %s",err,sqlite3_errmsg(_db)); } qDebug(sqlite3_errmsg(_db)); @@ -683,25 +695,6 @@ void DBBrowserDB::updateSchema( ) lastErrorMessage = QString ("could not get types"); } } - statement = "SELECT name, sql " - "FROM sqlite_master " - "WHERE type='index' "; - /*"ORDER BY name;"*/ - //finally get indices - err=sqlite3_prepare(_db,statement.toUtf8(),statement.length(), - &vm, &tail); - logSQL(statement, kLogMsg_App); - if (err == SQLITE_OK){ - while ( sqlite3_step(vm) == SQLITE_ROW ){ - QString val1, val2; - val1 = QString((const char *) sqlite3_column_text(vm, 0)); - val2 = QString((const char *) sqlite3_column_text(vm, 1)); - idxmap[val1] = DBBrowserIndex(GetDecodedQString(val1),GetDecodedQString(val2)); - } - sqlite3_finalize(vm); - }else{ - lastErrorMessage = QString ("could not get list of indices"); - } } QStringList DBBrowserDB::decodeCSV(const QString & csvfilename, char sep, char quote, int maxrecords, int * numfields) diff --git a/src/sqlitedb.h b/src/sqlitedb.h index c79537f9..5bca269f 100644 --- a/src/sqlitedb.h +++ b/src/sqlitedb.h @@ -24,10 +24,9 @@ enum static QString g_sApplicationNameShort = QString("sqlitebrowser"); static QString g_applicationIconName = QString(":/oldimages/icon16"); - typedef QMap fieldMap; typedef QMap tableMap; -typedef QMap indexMap; +typedef QMap objectMap; typedef QMap rowIdMap; typedef QList rowList; @@ -47,11 +46,11 @@ private: QString type; }; -class DBBrowserIndex +class DBBrowserObject { public: - DBBrowserIndex() : name( "" ) { } - DBBrowserIndex( const QString& wname,const QString& wsql ) + DBBrowserObject() : name( "" ) { } + DBBrowserObject( const QString& wname,const QString& wsql ) : name( wname), sql( wsql ) { } QString getname() const { return name; } @@ -61,7 +60,6 @@ private: QString sql; }; - class DBBrowserTable { public: @@ -128,7 +126,9 @@ public: QStringList decodeCSV(const QString & csvfilename, char sep, char quote, int maxrecords, int * numfields); tableMap tbmap; - indexMap idxmap; + objectMap idxmap; + objectMap viewmap; + objectMap trgmap; rowIdMap idmap; rowList browseRecs;