
The methodology used to generate this CL is documented in https://crbug.com/1098010#c95. No-Try: true Bug: 1098010 Change-Id: I68bb81a4dcae37f944f4d8cd39d82ed540364615 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3899461 Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org> Auto-Submit: Avi Drissman <avi@chromium.org> Owners-Override: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1047607}
113 lines
4.1 KiB
C++
113 lines
4.1 KiB
C++
// Copyright 2022 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef SQL_SQLITE_RESULT_CODE_H_
|
|
#define SQL_SQLITE_RESULT_CODE_H_
|
|
|
|
#include <iosfwd>
|
|
|
|
#include "base/component_export.h"
|
|
#include "base/dcheck_is_on.h"
|
|
|
|
namespace sql {
|
|
|
|
// Strongly typed enumeration of all known SQLite result codes.
|
|
//
|
|
// The meaning of the codes is listed at https://www.sqlite.org/rescode.html
|
|
//
|
|
// Chrome's SQLite expose SqliteResultCode and SqliteErrorCode instead of plain
|
|
// ints. This isolates the use of sqlite3.h to the SQLite wrapper code itself.
|
|
//
|
|
// The forwarding declaration here is sufficient for most usage. The values are
|
|
// defined in sqlite_result_code_values.h.
|
|
enum class SqliteResultCode : int;
|
|
|
|
// Strongly typed enumeration of all known SQLite error codes.
|
|
//
|
|
// Error codes are a subset of all the result codes. Therefore, every
|
|
// SqliteErrorCode is a valid SqliteResultCode.
|
|
//
|
|
// The forwarding declaration here is sufficient for most usage. The values are
|
|
// defined in sqlite_result_code_values.h.
|
|
enum class SqliteErrorCode : int;
|
|
|
|
// SQLite result codes, mapped into a more compact form for UMA logging.
|
|
//
|
|
// SQLite's (extended) result codes cover a wide range of integer values, and
|
|
// are not suitable for direct use with our UMA logging infrastructure. This
|
|
// enum compresses the range by removing gaps and by mapping multiple SQLite
|
|
// result codes to the same value where appropriate.
|
|
//
|
|
// The forwarding declaration here is sufficient for most headers. The values
|
|
// are defined in sqlite_result_code_values.h.
|
|
enum class SqliteLoggedResultCode : int;
|
|
|
|
// Converts an int returned by SQLite into a strongly typed result code.
|
|
//
|
|
// This method DCHECKs that `sqlite_result_code` is a known SQLite result code.
|
|
#if DCHECK_IS_ON()
|
|
COMPONENT_EXPORT(SQL)
|
|
SqliteResultCode ToSqliteResultCode(int sqlite_result_code);
|
|
#else
|
|
inline SqliteResultCode ToSqliteResultCode(int sqlite_result_code) {
|
|
return static_cast<SqliteResultCode>(sqlite_result_code);
|
|
}
|
|
#endif // DCHECK_IS_ON()
|
|
|
|
// Converts a SqliteResultCode into a SqliteErrorCode.
|
|
//
|
|
// Callers should make sure that `sqlite_result_code` is indeed an error code,
|
|
// and does not indicate success. IsSqliteSuccessCode() could be used for this
|
|
// purpose.
|
|
#if DCHECK_IS_ON()
|
|
COMPONENT_EXPORT(SQL)
|
|
SqliteErrorCode ToSqliteErrorCode(SqliteResultCode sqlite_error_code);
|
|
#else
|
|
inline SqliteErrorCode ToSqliteErrorCode(SqliteResultCode sqlite_error_code) {
|
|
return static_cast<SqliteErrorCode>(sqlite_error_code);
|
|
}
|
|
#endif // DCHECK_IS_ON()
|
|
|
|
// Returns true if `sqlite_result_code` reports a successful operation.
|
|
//
|
|
// `sqlite_result_code` should only be passed to ToSqliteErrorCode() if this
|
|
// function returns false.
|
|
COMPONENT_EXPORT(SQL)
|
|
bool IsSqliteSuccessCode(SqliteResultCode sqlite_result_code);
|
|
|
|
// Helper for logging a SQLite result code to a UMA histogram.
|
|
//
|
|
// The histogram should be declared as enum="SqliteLoggedResultCode".
|
|
//
|
|
// Works for all result codes, including success codes and extended error codes.
|
|
// DCHECKs if provided result code should not occur in Chrome's usage of SQLite.
|
|
COMPONENT_EXPORT(SQL)
|
|
void UmaHistogramSqliteResult(const char* histogram_name,
|
|
int sqlite_result_code);
|
|
|
|
// Converts a SQLite result code into a UMA logging-friendly form.
|
|
//
|
|
// Works for all result codes, including success codes and extended error codes.
|
|
// DCHECKs if provided result code should not occur in Chrome's usage of SQLite.
|
|
//
|
|
// UmaHistogramSqliteResult() should be preferred for logging results to UMA.
|
|
COMPONENT_EXPORT(SQL)
|
|
SqliteLoggedResultCode ToSqliteLoggedResultCode(int sqlite_result_code);
|
|
|
|
// Logging support.
|
|
COMPONENT_EXPORT(SQL)
|
|
std::ostream& operator<<(std::ostream& os, SqliteResultCode sqlite_result_code);
|
|
COMPONENT_EXPORT(SQL)
|
|
std::ostream& operator<<(std::ostream& os, SqliteErrorCode sqlite_error_code);
|
|
|
|
// Called by unit tests.
|
|
//
|
|
// DCHECKs the representation invariants of the mapping table used to convert
|
|
// SQLite result codes to logging-friendly values.
|
|
COMPONENT_EXPORT(SQL) void CheckSqliteLoggedResultCodeForTesting();
|
|
|
|
} // namespace sql
|
|
|
|
#endif // SQL_SQLITE_RESULT_CODE_H_
|