#include "cmdline.h" #include "printdata.h" #include "stock.h" #include #include #include // Define a functor to collect statistics about the stock table class gather_stock_stats { public: gather_stock_stats() : items_(0), weight_(0), cost_(0) { } void operator()(const stock& s) { items_ += s.num; weight_ += (s.num * s.weight); cost_ += (s.num * s.price.data); } private: mysqlpp::sql_bigint items_; mysqlpp::sql_double weight_, cost_; friend std::ostream& operator<<(std::ostream& os, const gather_stock_stats& ss); }; // Dump the contents of gather_stock_stats to a stream in human-readable // form. std::ostream& operator<<(std::ostream& os, const gather_stock_stats& ss) { os << ss.items_ << " items " << "weighing " << ss.weight_ << " stone and " << "costing " << ss.cost_ << " cowrie shells"; return os; } int main(int argc, char *argv[]) { // Get database access parameters from command line mysqlpp::examples::CommandLine cmdline(argc, argv); if (!cmdline) { return 1; } try { // Establish the connection to the database server. mysqlpp::Connection con(mysqlpp::examples::db_name, cmdline.server(), cmdline.user(), cmdline.pass()); // Gather and display the stats for the entire stock table mysqlpp::Query query = con.query(); std::cout << "There are " << query.for_each(stock(), gather_stock_stats()) << '.' << std::endl; } catch (const mysqlpp::BadQuery& e) { // Something went wrong with the SQL query. std::cerr << "Query failed: " << e.what() << std::endl; return 1; } catch (const mysqlpp::Exception& er) { // Catch-all for any other MySQL++ exceptions std::cerr << "Error: " << er.what() << std::endl; return 1; } return 0; }