1#ifndef MSTL_DATABASE_SQLITE_PREPARED_RESULT_HPP__
2#define MSTL_DATABASE_SQLITE_PREPARED_RESULT_HPP__
3#ifdef MSTL_SUPPORT_SQLITE3__
4#include "MSTL/database/db_interface.hpp"
8struct MSTL_API sqlite_prepared_result final : idb_prepared_result {
10 ::sqlite3_stmt* stmt_ =
nullptr;
11 size_type cursor_ = 0;
12 size_type columns_ = 0;
17 sqlite_prepared_result() noexcept = default;
18 explicit sqlite_prepared_result(::sqlite3_stmt* statement) noexcept;
20 ~sqlite_prepared_result()
override {
if (stmt_) ::sqlite3_reset(stmt_); }
22 MSTL_NODISCARD MSTL_DEPRECATE_FOR(
"use COUNT * instead of using this function")
23 size_type row_count() const noexcept
override {
return 0; }
24 MSTL_NODISCARD size_type column_count() const noexcept
override {
return columns_; }
26 MSTL_NODISCARD
bool empty() const noexcept
override {
return stmt_ ==
nullptr; }
27 MSTL_NODISCARD
const vector<string_view>& column_names() const noexcept
override {
return *column_names_; }
28 MSTL_NODISCARD
const vector<int>& column_types() const noexcept {
return *column_types_; }
29 MSTL_NODISCARD
bool next() noexcept override;
31 MSTL_NODISCARD
_MSTL string_view
get(size_type n) const noexcept override;
33 MSTL_NODISCARD
bool get_bool(size_type n) const override;
34 MSTL_NODISCARD
int8_t get_int8(size_type n) const override;
35 MSTL_NODISCARD
int16_t get_int16(size_type n) const override;
36 MSTL_NODISCARD
int32_t get_int32(size_type n) const override;
37 MSTL_NODISCARD
int64_t get_int64(size_type n) const override;
38 MSTL_NODISCARD
float32_t get_float32(size_type n) const override;
39 MSTL_NODISCARD
float64_t get_float64(size_type n) const override;
40 MSTL_NODISCARD
decimal_t get_decimal(size_type n) const override;
41 MSTL_NODISCARD
_MSTL vector<
char> get_blob(size_type n) const override;
42 MSTL_NODISCARD
_MSTL string get_set(size_type n)
const override {
return get_string(n); }
43 MSTL_NODISCARD
uint64_t get_bit(size_type n)
const noexcept override;
44 MSTL_NODISCARD
_MSTL date get_date(size_type n)
const noexcept override {
return get_datetime(n).date(); }
45 MSTL_NODISCARD
_MSTL time get_time(size_type n)
const noexcept override {
return get_datetime(n).time(); }
46 MSTL_NODISCARD
_MSTL datetime get_datetime(size_type n)
const override;
47 MSTL_NODISCARD
_MSTL timestamp get_timestamp(size_type n)
const override;
48 MSTL_NODISCARD
_MSTL string get_string(size_type n)
const override {
return string{
get(n)}; }
49 MSTL_NODISCARD
_MSTL string_view get_enum(size_type n)
const override {
return get(n); }
MSTL_ALWAYS_INLINE enable_if_t< is_void_v< T >, future_result_t< T > > get(future< T > &f)
通用future结果获取函数
float float32_t
32位单精度浮点数类型
long double decimal_t
扩展精度浮点数类型
long long int64_t
64位有符号整数类型
double float64_t
64位双精度浮点数类型
unsigned long long uint64_t
64位无符号整数类型
signed char int8_t
8位有符号整数类型
constexpr Iterator next(Iterator iter, iter_difference_t< Iterator > n=1)
获取迭代器的后一个位置
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr bool empty(const Container &cont) noexcept(noexcept(cont.empty()))
检查容器是否为空
MSTL_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr