diff --git a/utils/pgsql2sqlite/main.cpp b/utils/pgsql2sqlite/main.cpp index 55d6696ae..58261dd03 100644 --- a/utils/pgsql2sqlite/main.cpp +++ b/utils/pgsql2sqlite/main.cpp @@ -35,78 +35,89 @@ //stl #include #include +#include int main ( int argc, char** argv) { namespace po = boost::program_options; - po::options_description desc("Postgresql/PostGIS to SQLite3 converter\n Options"); - - desc.add_options() - ("help,?","Display this help screen.") - ("host,h",po::value(),"Allows you to specify connection to a database on a machine other than the default.") - ("port,p",po::value(),"Allows you to specify a database port other than the default.") - ("user,u",po::value(),"Connect to the database as the specified user.") - ("dbname,d",po::value(),"postgresql database name") - ("password,P",po::value(),"Connect to the database with the specified password.") - ("query,q",po::value(),"Name of the table/or query to pass to postmaster") - ("table,t",po::value(),"Name of the table to create") - ("file,f",po::value(),"Use this option to specify the name of the file to create.") - - ; - - po::positional_options_description p; - p.add("table",1); - - po::variables_map vm; - + std::string usage = "usage: pgsql2sqlite --dbname db --table planet_osm_line --file osm.sqlite --query \"select * from planet_osm_line\""; try { - po::store(po::command_line_parser(argc,argv).options(desc).positional(p).run(),vm); + + desc.add_options() + ("help,?","Display this help screen.") + ("host,h",po::value(),"Allows you to specify connection to a database on a machine other than the default.") + ("port,p",po::value(),"Allows you to specify a database port other than the default.") + ("user,u",po::value(),"Connect to the database as the specified user.") + ("dbname,d",po::value(),"postgresql database name") + ("password,P",po::value(),"Connect to the database with the specified password.") + ("query,q",po::value(),"Name of the table/or query to pass to postmaster") + ("table,t",po::value(),"Name of the output table to create (default: table in query)") + ("file,f",po::value(),"Use this option to specify the name of the file to create.") + + ; + + //po::positional_options_description p; + //p.add("table",1); + + po::variables_map vm; + //positional(p) + po::store(po::command_line_parser(argc,argv).options(desc).run(),vm); po::notify(vm); - if (vm.count("help") || !vm.count("file") || !vm.count("query")) + if (vm.count("help")) { std::cout << desc << "\n"; + std::cout << usage << "\n"; return EXIT_SUCCESS; } - } - catch (...) - { - std::cout << desc << "\n"; - return EXIT_FAILURE; - } + else if ( !vm.count("dbname") || !vm.count("file") || !vm.count("query") ) + { + std::cout << desc << "\n"; + std::cout << usage << "\n"; + std::cout << "Both --dbname, --file and, --query are required\n"; + return EXIT_FAILURE; + } - boost::optional host; - boost::optional port ; - boost::optional dbname; - boost::optional user; - boost::optional password; - boost::optional connect_timeout("4"); + boost::optional host; + boost::optional port ; + boost::optional dbname; + boost::optional user; + boost::optional password; + boost::optional connect_timeout("4"); + + if (vm.count("host")) host = vm["host"].as(); + if (vm.count("port")) port = vm["port"].as(); + if (vm.count("dbname")) dbname = vm["dbname"].as(); + if (vm.count("user")) user = vm["user"].as(); + if (vm.count("password")) password = vm["password"].as(); + + ConnectionCreator creator(host,port,dbname,user,password,connect_timeout); + try + { + boost::shared_ptr conn(creator()); - if (vm.count("host")) host = vm["host"].as(); - if (vm.count("port")) port = vm["port"].as(); - if (vm.count("dbname")) dbname = vm["dbname"].as(); - if (vm.count("user")) user = vm["user"].as(); - if (vm.count("password")) password = vm["password"].as(); - - ConnectionCreator creator(host,port,dbname,user,password,connect_timeout); - try - { - boost::shared_ptr conn(creator()); + std::string query = vm["query"].as(); + std::string output_table_name = vm.count("table") ? vm["table"].as() : mapnik::table_from_sql(query); + std::string output_file = vm["file"].as(); + + std::cout << "output_table : " << output_table_name << "\n"; + + mapnik::pgsql2sqlite(conn,query,output_table_name,output_file); + } + catch (mapnik::datasource_exception & ex) + { + std::cerr << ex.what() << "\n"; + } - std::string query = vm["query"].as(); - std::string output_table_name = vm.count("table") ? vm["table"].as() : mapnik::table_from_sql(query); - std::string output_file = vm["file"].as(); - - std::cout << "output_table : " << output_table_name << "\n"; - - mapnik::pgsql2sqlite(conn,query,output_table_name,output_file); } - catch (mapnik::datasource_exception & ex) - { - std::cerr << ex.what() << "\n"; + catch(std::exception& e) { + std::cerr << desc << "\n"; + std::cout << usage << "\n"; + std::cerr << e.what() << "\n"; + return EXIT_FAILURE; } return EXIT_SUCCESS;