# # patch "ChangeLog" # from [44931b22575035c6c90eb0095f20991e37773e81] # to [600eb746c703e1d941a773840ca8afb1ca8a9d82] # # patch "database.cc" # from [81d3130bb8d0faacc945857b50f142470b88f2c3] # to [b0aecf616893658775fc4283c2d4d54c59bb7321] # # patch "database.hh" # from [14ba00bff0d68669687755c58a3b35172333cfe1] # to [95c4150f2a5bba8fb153371acc0acd350bffa3ef] # ======================================================================== --- ChangeLog 44931b22575035c6c90eb0095f20991e37773e81 +++ ChangeLog 600eb746c703e1d941a773840ca8afb1ca8a9d82 @@ -1,3 +1,8 @@ +2005-08-25 Benoît Dejean + + * database.{cc,hh} (database::open, database::check_filename): + New functions to avoid error handling code and string duplicates. + 2005-08-24 Benoît Dejean * database.cc (assert_sqlite3_ok): Somehow merged error messages. ======================================================================== --- database.cc 81d3130bb8d0faacc945857b50f142470b88f2c3 +++ database.cc b0aecf616893658775fc4283c2d4d54c59bb7321 @@ -193,7 +193,7 @@ { if (! __sql) { - N(!filename.empty(), F("no database specified")); + check_filename(); if (! init) { @@ -204,11 +204,9 @@ } check_sqlite_format_version(filename); - int error; - error = sqlite3_open(filename.string().c_str(), &__sql); - if (error) - throw oops(string("could not open database: ") + filename.string() + - (": " + string(sqlite3_errmsg(__sql)))); + + open(); + if (init) { sqlite3_exec(__sql, schema_constant, NULL, NULL, NULL); @@ -349,15 +347,13 @@ char buf[constants::bufsz]; string tmp; - N(filename.string() != "", - F("need database name")); + check_filename(); + N(!fs::exists(filename), F("cannot create %s; it already exists\n") % filename.string()); - int error = sqlite3_open(filename.string().c_str(), &__sql); - if (error) - throw oops(string("could not open database: ") + filename.string() + - (string(sqlite3_errmsg(__sql)))); + open(); + while(in) { in.read(buf, constants::bufsz); @@ -450,15 +446,11 @@ database::version(ostream & out) { string id; - N(filename.string() != "", - F("need database name")); - int error = sqlite3_open(filename.string().c_str(), &__sql); - if (error) - { - sqlite3_close(__sql); - throw oops(string("could not open database: ") + filename.string() + - (": " + string(sqlite3_errmsg(__sql)))); - } + + check_filename(); + + open(); + calculate_schema_id(__sql, id); sqlite3_close(__sql); out << "database schema version: " << id << endl; @@ -467,15 +459,10 @@ void database::migrate() { - N(filename.string() != "", - F("need database name")); - int error = sqlite3_open(filename.string().c_str(), &__sql); - if (error) - { - sqlite3_close(__sql); - throw oops(string("could not open database: ") + filename.string() + - (": " + string(sqlite3_errmsg(__sql)))); - } + check_filename(); + + open(); + migrate_monotone_schema(__sql); sqlite3_close(__sql); } @@ -2448,6 +2435,27 @@ } } + +void +database::check_filename() +{ + N(!filename.empty(), F("no database specified")); +} + + +void +database::open() +{ + int error; + + error = sqlite3_open(filename.string().c_str(), &__sql); + + N(!error, (F("could not open database '%s': %s") + % filename.string() + % string(sqlite3_errmsg(__sql)))); +} + + // transaction guards transaction_guard::transaction_guard(database & d) : committed(false), db(d) ======================================================================== --- database.hh 14ba00bff0d68669687755c58a3b35172333cfe1 +++ database.hh 95c4150f2a5bba8fb153371acc0acd350bffa3ef @@ -200,6 +200,9 @@ delta const & del, database & db); + void check_filename(); + void open(); + public: database(fs::path const & file);