blob: 5c1fb21ab3f321af081431b6bf91d105099149cf [file] [log] [blame]
/*
* Copyright (C) 2018 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_BINDINGS_SQLITE_RESULT_H_
#define SRC_TRACE_PROCESSOR_SQLITE_BINDINGS_SQLITE_RESULT_H_
#include <sqlite3.h>
#include <cstdint>
namespace perfetto::trace_processor::sqlite::result {
// This file contains wraps the sqlite3_result_* functions which tell SQLite
// about the result of executing a function or calling a xColumn on a virtual
// table.
const auto kSqliteStatic = reinterpret_cast<sqlite3_destructor_type>(0);
const auto kSqliteTransient = reinterpret_cast<sqlite3_destructor_type>(-1);
inline void Null(sqlite3_context* ctx) {
sqlite3_result_null(ctx);
}
inline void Long(sqlite3_context* ctx, int64_t res) {
sqlite3_result_int64(ctx, res);
}
inline void Double(sqlite3_context* ctx, double res) {
sqlite3_result_double(ctx, res);
}
inline void RawString(sqlite3_context* ctx,
const char* str,
int size,
sqlite3_destructor_type destructor) {
sqlite3_result_text(ctx, str, size, destructor);
}
inline void RawString(sqlite3_context* ctx,
const char* str,
sqlite3_destructor_type destructor) {
RawString(ctx, str, -1, destructor);
}
inline void StaticString(sqlite3_context* ctx, const char* str) {
RawString(ctx, str, kSqliteStatic);
}
inline void TransientString(sqlite3_context* ctx, const char* str) {
RawString(ctx, str, kSqliteTransient);
}
inline void RawBytes(sqlite3_context* ctx,
const void* bytes,
int size,
sqlite3_destructor_type destructor) {
sqlite3_result_blob(ctx, bytes, size, destructor);
}
inline void StaticBytes(sqlite3_context* ctx, const void* bytes, int size) {
RawBytes(ctx, bytes, size, kSqliteStatic);
}
inline void TransientBytes(sqlite3_context* ctx, const void* bytes, int size) {
RawBytes(ctx, bytes, size, kSqliteTransient);
}
inline void Error(sqlite3_context* ctx, const char* error) {
sqlite3_result_error(ctx, error, -1);
}
inline void Value(sqlite3_context* ctx, sqlite3_value* value) {
sqlite3_result_value(ctx, value);
}
inline void RawPointer(sqlite3_context* ctx,
void* ptr,
const char* name,
sqlite3_destructor_type destructor) {
sqlite3_result_pointer(ctx, ptr, name, destructor);
}
inline void StaticPointer(sqlite3_context* ctx, void* ptr, const char* name) {
RawPointer(ctx, ptr, name, nullptr);
}
} // namespace perfetto::trace_processor::sqlite::result
#endif // SRC_TRACE_PROCESSOR_SQLITE_BINDINGS_SQLITE_RESULT_H_