From 0edfb7e9d3fc5bfd4e6a066c3e27998c9f90990a Mon Sep 17 00:00:00 2001 From: Martin Kleusberg Date: Wed, 2 Jan 2013 18:50:27 +0100 Subject: [PATCH] Show triggers and views Also show the triggers and views in the DB structure tab. --- src/icons/icons.qrc | 6 +++++ src/icons/picture.png | Bin 0 -> 606 bytes src/icons/picture_add.png | Bin 0 -> 745 bytes src/icons/picture_delete.png | Bin 0 -> 744 bytes src/icons/script.png | Bin 0 -> 748 bytes src/icons/script_add.png | Bin 0 -> 811 bytes src/icons/script_delete.png | Bin 0 -> 811 bytes src/mainwindow.cpp | 32 +++++++++++++++------- src/sqlitedb.cpp | 51 +++++++++++++++-------------------- src/sqlitedb.h | 14 +++++----- 10 files changed, 58 insertions(+), 45 deletions(-) create mode 100644 src/icons/picture.png create mode 100644 src/icons/picture_add.png create mode 100644 src/icons/picture_delete.png create mode 100644 src/icons/script.png create mode 100644 src/icons/script_add.png create mode 100644 src/icons/script_delete.png 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 0000000000000000000000000000000000000000..4a158fef7e0da8fd19525f574f2c4966443866cf GIT binary patch literal 606 zcmV-k0-^nhP)Q2rnAt>LM%-F zK|rtwgcU)}7x~z1Hrcs5bH*ZO$!>xO8K#?==bZPQ_ecnV>#P`H`QzGaRhd62G_&rC zTLU$c7_x*nFP_dW#Q+*);mMHE?j)HexK784D4x9l_tfpz2$@1y}9rkF+ zI+J5NMWeZyObc!d+rUc=>D+uOdAOg#%+Ej6h+wn5^xPmVVH*Eu446Y0A_@ zo$rlds-+sL10DbwHdg4=I}KDOKH)5`dDSD>$*Y+lYhxmAcGuF-%MWsHUJr4IgaCsM{ig0 zSSBT=s4DwP*iI5?#me_ElhaWObR8DO+&EW-R6_iOTG;>$!^9AfH5RBU`HBdsS8XyAx|wUq)E7h=Ss)mVnuwi!$R3b1!m9&Tc8e2Ah* z93dsPSIWMcb|P*JsnqXhvE^WDxdW*bQYjAj-)O1aj{;`q7kRbTjhQIKR1t1J@W^=H z&KKSDw_e_z=&`ic2;k(#VF6&)C&;9iap&Jt(%M18^cYK-DUQ?~rD9htLzB%~biuWVi^wq=sbuS+r^MZt^XM4mKhUNn@-HDRMN|w*p+XTw5ejxoBfqGYGMX z(mxA;rQ{;Eh;XXz5&+jv+-LAZKk(eOLY8>^WN4-(D|NlrfBplBR3bVVA7LUsOjp|g zy{|9gnht;`^xt0nqUO%>o{FmI&DMtF)b45G)516-?}wS2P4@j4U=z{{Tmg0fDWHG! bUcBoE0(26M^-PUO00000NkvXXu0mjfKPpmF literal 0 HcmV?d00001 diff --git a/src/icons/picture_delete.png b/src/icons/picture_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..cca9f535d9a699716b2c735d0d72374472b9e1ea GIT binary patch literal 744 zcmVP)hQkw$4DenXv_1k19q1k|i7>6Y(!p>Gs}5>iPV z&!aPy~rgIO_{C4dkZ zsR>k_stj1H2h_AgX+YF5TH#m%V^&Vp0x+fl@M)z~j$m*Jv?7oSAwrZ(QKF$u*tP{m zthQiG!$Q<-Z$2x93SWCz>;N z@|O=~WGn`>v{S8}AU&TvrXK^HBjlLS_A2{fi z9kE7URXC0c#|c`x8VSriV9%*u{Le%1vY)0{oXs5_c45r)I=(B4=z47DhP@!fFO>QH z0C=0v;craC(Thvo`;ypNY<5D9c=%{=VqZ;}9mcGE1D(-CbLGP`EAr$5!D5yQP@1<< zHq*lVt!kNGcenM0nj_az3F$c2B&EFMYtB~ns=5AO0D$4{_RHnM^m$u}4rQAu1Gf)n arG{ z$cl-P=->hx6#}NAmbP5myY~I>{qOhtLMa7Y{qE64eE#g}(xpY)TeQ8l?;Upi4EuP3 zj9qNwYy4OP^j-JLi)W5q`snr30AQZ_=_2*h-J^Uqwd^<9gC_@m_YruehOwSPa9@O%#PST ztn>RnbQXoQ3&2p_*N2(YI zkrMO}==(rnxsJAW59QQs0L07JZk*~;x_q%%{cN7dr3j%I4jC^oS!R20 zp-X8Kpw211iFbazd*AM1?Vu^zTr_Qvx?Y!ieJR$aQy;v2#^ddUoYEFRo!j>1ci(tn z{K@;T0)Sj-bCEg}zP!0%dBFa`LT=k_fI7GB{l`yczPWYR>anra$&%HTk?G3F@#Ue> zFdEg-dzaUZYPNRv<+lA7pzgcw+uL{UoxOeM-g%tFNu0n5OqYg(!P3&eWMyo1vh4Ri e9{q`*0R9JiiaRV3rbYDt00009Gp0rM-&EhljN^i}(|Pq=@5XF~~)>U!;+BT;WiZ;-?olqd>fK_MstEkar}b9uop zSG%(%K&q)D8CgaWKtPPtDOv9I8!SQz&9K@qF)=0vTF8Vz6y!_@T)cF~Uzb0()L$?a z`$c#8#_Jq>ql8oq?5#4M^3MAs_Mj^9a~&q%&y!>ZY?Ffij=buvY#%T_TY|PQcQN;bwCQWy*nR;m&;UD z`|<407yq%aQd%Bnb;^cyP&KV4wU)a7>4a6Dx$h-#bpLzK{Pr$B8!J;?KlH*=4~)Nd zXfFUrnL1@v!}G_xF3kSm{Oos*9r(bTXJ0f{jKZMUxbxsWQRhe^WR#$JvyI#9! z6)lXSPy)q8C1lZ}g3^41=HNKqnYs7QJ?H%A@B2c|8SMY^(nC0W>$>q>gSs`STXowS zHf;~fxQ2v9EZ{R7D*@W3dHBBBHM?GWY!d+JSMBtmYNr=h)3&N+d6b;Lw&L5f{XIBX z0<=xDd8!-0r5i~n1ZAKo8S6whk3~g{It4qoP1rg;x#5%3mk&jNRM%6JB~8n674&Lu zjOeY>TV-L${7M3Ee16fcxk-1=bT*X$sjfGy?MD3({naGKphQs+3kpFIXc5wqAI~j1 zbFp{11V~l2d3vJI8#V@`EXJ&e#1s^fLRJ*Wg{w;=M~?r!g#9HzQ&rnHPj&QGvj#Fn z3Svg0kd--VGpUm_RWo<=l}E2ffK-jP&rXl&S6PS@A&7_wfRM?VW;BwjQGycozWv=q zS;X#GC#q5sWn>vi00A*lr(~r+Xs`q&G^1+MA;g07I7@NDx@V8^d@28HxbNq=; zzxe*f?K5pkhju@>PI%T6esG3%jS_iIPFg`oSQ?CLj-`b*R!!2d1>j$2D{N9N- z_dNmtQl?H>)o|vgtp>k-WAdw)jfVdjV0o#K3YUx7d-mS8etPnmh2`4C`M&w3RZD|f z-DE|Kx}BgKTK}9nDt3ap=<6+H=dQ$*8t;dl`wq|GAhu&8Hex;2V|u*X>5Pwe>`ABX pxbn5N{RLGS=ZoANdGc8E?*HisN=owtMsNTC002ovPDHLkV1hpQeRTi; literal 0 HcmV?d00001 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;