48 lines
2.2 KiB
Diff
48 lines
2.2 KiB
Diff
#
|
|
#
|
|
# 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"})
|