From 14337cf5b302c5385f0ae1393caf6df7e83fc539 Mon Sep 17 00:00:00 2001
From: znone <glyc@sina.com.cn>
Date: Sat, 07 Dec 2019 06:52:19 +0000
Subject: [PATCH] 1. 允许绑定字段到std::optional和std::any 2. 增加函数bind_fields可以一次绑定到多个字段 3. 查询函数返回数据库对象自身,以支持链式调用
---
include/qtl_sqlite.hpp | 42 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/include/qtl_sqlite.hpp b/include/qtl_sqlite.hpp
index 157c82f..b0e1807 100644
--- a/include/qtl_sqlite.hpp
+++ b/include/qtl_sqlite.hpp
@@ -224,6 +224,48 @@
bind_field(index, value.data(), value.size());
}
+#ifdef _QTL_ENABLE_CPP17
+
+ template<typename T>
+ inline void bind_field(size_t index, std::optional<T>&& value)
+ {
+ int type = get_column_type(index);
+ if (type == SQLITE_NULL)
+ {
+ value.reset();
+ }
+ else
+ {
+ qtl::bind_field(*this, index, *value);
+ }
+ }
+
+ inline void bind_field(size_t index, std::any&& value)
+ {
+ int type = get_column_type(index);
+ switch(type)
+ {
+ case SQLITE_NULL:
+ value.reset();
+ case SQLITE_INTEGER:
+ value = sqlite3_column_int64(m_stmt, index);
+ break;
+ case SQLITE_FLOAT:
+ value = sqlite3_column_double(m_stmt, index);
+ break;
+ case SQLITE_TEXT:
+ value.emplace<std::string_view>((const char*)sqlite3_column_text(m_stmt, index), sqlite3_column_bytes(m_stmt, index));
+ break;
+ case SQLITE_BLOB:
+ value.emplace<const_blob_data>(sqlite3_column_text(m_stmt, index), sqlite3_column_bytes(m_stmt, index));
+ break;
+ default:
+ throw sqlite::error(SQLITE_MISMATCH);
+ }
+ }
+
+#endif // C++17
+
size_t find_field(const char* name) const
{
size_t count=get_column_count();
--
Gitblit v1.9.3