--- misc/mysql_splitter/splitter.cpp 2011/03/13 18:16:34 1231 +++ misc/mysql_splitter/splitter.cpp 2011/05/11 10:14:11 1458 @@ -4,37 +4,94 @@ #include #include + #include #include +#include + +namespace po = boost::program_options; using namespace std; const int BUFSIZE = 1024*1024; -string getLastWord(string input) { +string remove_comments(string in) { + bool isComment = false; + ostringstream out; + for (int i=0; i words; words = boost::split(words, input, boost::is_any_of(" ") ); string last = words.back(); - - boost::erase_all(last, ";"); boost::trim(last); - - return last; } int main(int argc, char** argv) { - if (argc != 2) { - cout << "Usage: splitter " << endl; + + po::options_description desc("Mysql dump file splitter:\nAllowed options"); + desc.add_options() + ("help", "produce help message") + ("data", "ignore ceate tablestatements") + ("input-file", po::value< string >(), "input file") + ; + + po::positional_options_description p; + p.add("input-file", -1); + + + po::variables_map vm; + po::store( po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm); + po::notify(vm); + + if (vm.count("help")) { + cout << desc << "\n"; + return 1; + } + + + + if ( vm.count("input-file") == 0) { + cout << desc << endl; return 1; } + char linebuf[BUFSIZE]; - ifstream in(argv[1]); + string inputfile = vm["input-file"].as< string >(); + if (! boost::filesystem::exists(inputfile) ) { + cout << "No file named " << inputfile << endl; + return 1; + } + + + ifstream in( inputfile.c_str() ); ofstream out; ostringstream header; @@ -42,7 +99,9 @@ if (!in.is_open() ) { cout << "Could not open " << argv[1] << endl; return 2; - } + } + + time_t start = time(NULL); while ( in.good() ) { in.getline(linebuf, BUFSIZE); @@ -58,7 +117,7 @@ } boost::trim(line); - string dbname = getLastWord(line); + string dbname = get_db_name(line); cout << ">" << dbname << endl; @@ -95,7 +154,11 @@ if(out.is_open()) - out.close(); + out.close(); + + time_t end = time(NULL); + + cout << "Elapsed " << (end-start) << " seconds" << endl; in.close();