/* g++ -g worm_wt_example.cpp -o wormex -rdynamic -lworm -lmysqlclient -lsqlite3 -lctemplate_nothreads -lwt -lwtext -lwthttp -lwtdbo -lwtdbosqlite3 -lwtdbopostgres -lboost_date_time-mt -lboost_regex-mt -lboost_program_options-mt -lboost_signals-mt -lboost_system-mt -lboost_filesystem-mt -lboost_thread-mt */ #include #include #include #include #include #include #include #include #include "../src/sql/wsqldatabase.h" using Wt::WApplication; using Wt::WEnvironment; using Wt::WString; using Wt::WBoxLayout; using Wt::WText; using std::string; Wt::WTable *getdbtables() { Wt::WTable *table = new Wt::WTable(); table->setMargin ( "0.5em" ); Wt::WCssDecorationStyle *border = new Wt::WCssDecorationStyle(); border->setBorder ( Wt::WBorder ( Wt::WBorder::Dotted ) ); table->setDecorationStyle ( *border ); // border->setBorder(Wt::WBorder(Wt::WBorder::Dashed )); WSql::WSqlDatabase db ( WSql::WSQLITE ); db.setDatabaseName ( string ( "blog.db" ) ); if ( !db.open() ) { std::cerr << "nope .." << db.error().text() << std::endl; return table; } std::vectortables = db.tableNames(); std::vector::iterator it = tables.begin(); WSql::WSqlTable stbl; int numflds = 0; int row = 0; while ( it != tables.end() ) { stbl = db.tableMetaData ( *it++ ); numflds = stbl.count(); Wt::WTableCell *cell = table->elementAt ( row++, 0 ); cell->addWidget ( new Wt::WText ( WString ( "Table Name: {1}" ).arg ( stbl.name() ) ) ); cell->setColumnSpan ( 5 ); cell->setPadding ( "0.5em" ); cell->setContentAlignment ( Wt::AlignCenter ); int i = 0; for ( ; i < numflds; ++i ) { WSql::WSqlColumn clm = stbl.column ( i ); table->elementAt ( row + i, 0 )->addWidget ( new Wt::WText ( "Field: " ) ); table->elementAt ( row + i, 0 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 0 )->setDecorationStyle ( *border ); table->elementAt ( row + i, 1 )->addWidget ( new Wt::WText ( clm.columnName() ) ); table->elementAt ( row + i, 1 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 1 )->setDecorationStyle ( *border ); table->elementAt ( row + i, 2 )->addWidget ( new Wt::WText ( WSql::WSqlDataType::toString ( clm.type() ) ) ); table->elementAt ( row + i, 2 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 2 )->setDecorationStyle ( *border ); table->elementAt ( row + i, 3 )->addWidget ( new Wt::WText ( clm.defaultValue () ) ); table->elementAt ( row + i, 3 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 3 )->setDecorationStyle ( *border ); table->elementAt ( row + i, 4 )->addWidget ( new Wt::WText ( clm.isPrimaryKey() ? "Primary Key" : "Not primary" ) ); table->elementAt ( row + i, 4 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 4 )->setDecorationStyle ( *border ); table->elementAt ( row + i, 5 )->addWidget ( new Wt::WText ( clm.canBeNull() ? "Nullable" : "Not nullable" ) ); table->elementAt ( row + i, 5 )->setPadding ( "0.5em" ); table->elementAt ( row + i, 5 )->setDecorationStyle ( *border ); } row += i; } db.close(); return table; } class wormApp : public Wt::WApplication { public: wormApp ( const Wt::WEnvironment &env ); }; wormApp::wormApp ( const Wt::WEnvironment &env ) : Wt::WApplication ( env ) { setTitle ( "worm" ); Wt::WTable *tbl = getdbtables(); root()->addWidget ( new WText ( "Tables" ) ); root()->addWidget ( tbl ); } WApplication *createwormApp ( const WEnvironment &env ) { WApplication *app = new wormApp ( env ); return app; } int main ( int argc, char **argv ) { Wt::WServer server ( argv[0] ); server.setServerConfiguration ( argc, argv, WTHTTP_CONFIGURATION ); server.addEntryPoint ( Wt::Application, createwormApp ); if ( server.start() ) { int sig = Wt::WServer::waitForShutdown ( argv[0] ); std::cerr << "Shutdown (signal = " << sig << ")" << std::endl; server.stop(); } }