Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: sql/connection.h

Issue 16664005: [sql] Framework for allowing tests to handle errors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Call ShouldIgnoreError() in all modes. Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sql/connection.cc » ('j') | sql/connection.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sql/connection.h
diff --git a/sql/connection.h b/sql/connection.h
index 049d7cf5b4e2f9715ffc4b7f67dd2e89dc367bff..c5ab91b74223fc70dc8e618b5c472857864d428b 100644
--- a/sql/connection.h
+++ b/sql/connection.h
@@ -539,6 +539,54 @@ class SQL_EXPORT Connection {
DISALLOW_COPY_AND_ASSIGN(Connection);
};
+// Most errors are fatal in debug mode, because usually they indicate
+// an inappropriate use of SQL. This makes it challenging to write
+// tests for things like recovery from corruption. Use this scoper to
+// ignore errors during the current test. This applies globally (to
+// all connections). The scoper can be nested, but is not thread-safe.
+//
+// Specific errors must be ignores, and all ignored errors must be
erikwright (departed) 2013/06/11 18:54:19 Grammar problems to the point that I don't know wh
+// seen.
+//
+// TODO(shess): Wire things up so this can only be used from tests.
+// NOTE(shess): This does not comprehensively suppress errors at this
+// time. If your test is handling database errors and you're hitting
+// a case not handled, contact me.
+// NOTE(shess): If you use this in production code, I will revert you.
+class SQL_EXPORT ScopedErrorIgnorer {
erikwright (departed) 2013/06/11 18:54:19 I'd have to scan sql/ to see what the local conven
+ public:
+ ScopedErrorIgnorer();
+ ~ScopedErrorIgnorer();
+
+ // Add an error to ignore. Extended error codes can be ignored
+ // specifically, or the base can be ignored as a group
+ // (SQLITE_IOERR_* versus SQLITE_IOERR).
+ void IgnoreError(int err);
+
+ // Allow containing test to check if the errors were encountered.
+ // Test is REQUIRED to call this before destruction.
+ // TODO(shess): How to handle ASSERT_X() cases which cause early
+ // return in tests?
+ bool CheckIgnoredErrors();
+
+ // Check if the error should be ignored.
+ static bool ShouldIgnoreError(int err);
+
+ private:
+ // Record whether CheckIgnoredErrors() has been called.
+ bool checked_;
+
+ // Errors to ignore.
+ std::set<int> ignore_errors_;
+
+ // Errors which have been ignored.
+ std::set<int> errors_ignored_;
+
+ ScopedErrorIgnorer* next_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedErrorIgnorer);
+};
+
} // namespace sql
#endif // SQL_CONNECTION_H_
« no previous file with comments | « no previous file | sql/connection.cc » ('j') | sql/connection.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698