/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SRC_TRACE_PROCESSOR_SQLITE_SQLITE_ENGINE_H_ #define SRC_TRACE_PROCESSOR_SQLITE_SQLITE_ENGINE_H_ #include <sqlite3.h> #include <cstddef> #include <cstdint> #include <memory> #include <optional> #include <string> #include <type_traits> #include <utility> #include "perfetto/base/logging.h" #include "perfetto/base/status.h" #include "perfetto/ext/base/flat_hash_map.h" #include "perfetto/ext/base/hash.h" #include "src/trace_processor/sqlite/bindings/sqlite_module.h" #include "src/trace_processor/sqlite/scoped_db.h" #include "src/trace_processor/sqlite/sql_source.h" namespace perfetto::trace_processor { // Wrapper class around SQLite C API. // // The goal of this class is to provide a one-stop-shop mechanism to use SQLite. // Benefits of this include: // 1) It allows us to add code which intercepts registration of functions // and tables and keeps track of this for later lookup. // 2) Allows easily auditing the SQLite APIs we use making it easy to determine // what functionality we rely on. class SqliteEngine { … }; } // namespace perfetto::trace_processor // The rest of this file is just implementation details which we need // in the header file because it is templated code. We separate it out // like this to keep the API people actually care about easy to read. namespace perfetto::trace_processor { template <typename Module> void SqliteEngine::RegisterVirtualTableModule(const std::string& module_name, typename Module::Context* ctx) { … } template <typename Module> void SqliteEngine::RegisterVirtualTableModule( const std::string& module_name, std::unique_ptr<typename Module::Context> ctx) { … } } // namespace perfetto::trace_processor #endif // SRC_TRACE_PROCESSOR_SQLITE_SQLITE_ENGINE_H_