# # # patch "database.cc" # from [0bc6ce7bb27323c3724ee95f099985a3abad21f3] # to [b2b6048b199175b85cdf2c290302cb8da095c12a] # # patch "tests/fail_cleanly_on_unreadable_db/__driver__.lua" # from [1ec557d1aef9eac9ee53a22d07f4ba0f3456da5e] # to [8875c78a070bef87904bb840ed3cffa0acba4399] # ============================================================ --- database.cc 0bc6ce7bb27323c3724ee95f099985a3abad21f3 +++ database.cc b2b6048b199175b85cdf2c290302cb8da095c12a @@ -1489,12 +1489,19 @@ database_impl::fetch(results & res, vector<string> row; for (int col = 0; col < ncol; col++) { + // We never store NULLs, so we should never see one. + int const datatype = sqlite3_column_type(i->second.stmt(), col); + E(datatype != SQLITE_NULL, origin::database, + F("null result in query: %s") % query.sql_cmd); const char * value = (const char*)sqlite3_column_blob(i->second.stmt(), col); int bytes = sqlite3_column_bytes(i->second.stmt(), col); - E(value, origin::database, - F("null result in query: %s") % query.sql_cmd); - row.push_back(string(value, value + bytes)); - //L(FL("row %d col %d value='%s'") % nrow % col % value); + if (value) { + row.push_back(string(value, value + bytes)); + } else { + // sqlite3_column_blob() returns null for zero-length + I(bytes == 0); + row.push_back(string()); + } } res.push_back(row); } ============================================================ --- tests/fail_cleanly_on_unreadable_db/__driver__.lua 1ec557d1aef9eac9ee53a22d07f4ba0f3456da5e +++ tests/fail_cleanly_on_unreadable_db/__driver__.lua 8875c78a070bef87904bb840ed3cffa0acba4399 @@ -48,7 +48,6 @@ check(mtn("--db=subdir/foo.db", "db", "v check(mtn("--db=subdir/foo.db", "ls", "branches"), 0, false, false) check(mtn("--db=subdir/foo.db", "db", "info"), 0, false, false) check(mtn("--db=subdir/foo.db", "db", "version"), 0, false, false) -check(mtn("--db=subdir/foo.db", "db", "migrate"), 1, false, false) check(mtn("--db=subdir/bar.db", "db", "load"), 1, false, false) check(mtn("--db=subdir/baz.db", "db", "init"), 1, false, false) check({"chmod", "a+w", "subdir"})