1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef SQL_STATEMENT_ID_H_
- #define SQL_STATEMENT_ID_H_
- #include <cstddef>
- #include "base/component_export.h"
- namespace sql {
- // Identifies a compiled SQLite statement in a statement cache.
- //
- // This is a value type with the same performance characteristics as
- // std::string_view. Instances are thread-unsafe, but not thread-hostile.
- //
- // StatementID instances should be constructed by using the SQL_FROM_HERE
- // macro, which produces an unique ID based on the source file name and line.
- class COMPONENT_EXPORT(SQL) StatementID {
- public:
- // Creates an ID representing a line in the source tree.
- //
- // SQL_FROM_HERE should be preferred to calling this constructor directly.
- //
- // |source_file| should point to a C-style string that lives for the duration
- // of the program.
- explicit StatementID(const char* source_file, size_t source_line) noexcept
- : source_file_(source_file), source_line_(source_line) {}
- // Copying intentionally allowed.
- StatementID(const StatementID&) noexcept = default;
- StatementID& operator=(const StatementID&) noexcept = default;
- // Facilitates storing StatementID instances in maps.
- bool operator<(const StatementID& rhs) const noexcept;
- private:
- // Instances cannot be immutable because they support being used as map keys.
- //
- // It seems tempting to merge source_file_ and source_line_ in a single
- // source_location_ member, and to have SQL_FROM_HERE use C++ preprocessor
- // magic to generate strings like "sql/connection.cc:42". This causes a
- // non-trivial binary size increase, because Chrome uses -fmerge-constants and
- // SQL_FROM_HERE tends to be used many times in the same few files.
- const char* source_file_;
- size_t source_line_;
- };
- } // namespace sql
- // Produces a StatementID based on the current line in the source tree.
- #define SQL_FROM_HERE sql::StatementID(__FILE__, __LINE__)
- #endif // SQL_STATEMENT_ID_H_
|