MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
sqlite_result.hpp
1#ifndef MSTL_DATABASE_SQLITE_RESULT_HPP__
2#define MSTL_DATABASE_SQLITE_RESULT_HPP__
3#ifdef MSTL_SUPPORT_SQLITE3__
4#include "MSTL/database/db_interface.hpp"
5#include <sqlite3.h>
7
8struct MSTL_API sqlite_result final : idb_tb_result {
9private:
10 ::sqlite3_stmt* stmt_ = nullptr;
11 size_type cursor_ = 0;
12 size_type columns_ = 0;
13 unique_ptr<vector<string_view>> column_names_ = make_unique<vector<string_view>>();
14 unique_ptr<vector<int>> column_types_ = make_unique<vector<int>>();
15
16public:
17 sqlite_result() noexcept = default;
18 explicit sqlite_result(::sqlite3_stmt* statement) noexcept;
19
20 ~sqlite_result() override { if (stmt_) ::sqlite3_finalize(stmt_); }
21
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_; }
25
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;
30
31 MSTL_NODISCARD _MSTL string_view get(size_type n) const noexcept override;
32
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); }
50};
51
53#endif
54#endif // MSTL_DATABASE_SQLITE_RESULT_HPP__
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位无符号整数类型
short int16_t
16位有符号整数类型
int int32_t
32位有符号整数类型
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