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. 查询函数返回数据库对象自身,以支持链式调用

---
 test/TestMysql.cpp |   38 ++++++++++++++++++++++++++++++++++----
 1 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/test/TestMysql.cpp b/test/TestMysql.cpp
index bfbcf49..6f9d922 100644
--- a/test/TestMysql.cpp
+++ b/test/TestMysql.cpp
@@ -2,6 +2,7 @@
 #include "TestMysql.h"
 #include <fstream>
 #include <array>
+#include <iomanip>
 #include "md5.h"
 #include "../include/qtl_mysql.hpp"
 
@@ -30,9 +31,7 @@
 	template<>
 	inline void bind_record<qtl::mysql::statement, TestMysqlRecord>(qtl::mysql::statement& command, TestMysqlRecord&& v)
 	{
-		qtl::bind_field(command, static_cast<size_t>(0), v.id);
-		qtl::bind_field(command, 1, v.name);
-		qtl::bind_field(command, 2, v.create_time);
+		qtl::bind_fields(command, v.id, v.name, v.create_time);
 	}
 }
 
@@ -48,7 +47,8 @@
 	TEST_ADD(TestMysql::test_iterator)
 	TEST_ADD(TestMysql::test_insert_blob)
 	TEST_ADD(TestMysql::test_select_blob)
-	//TEST_ADD(TestMysql::test_insert_stream)
+	TEST_ADD(TestMysql::test_any)
+		//TEST_ADD(TestMysql::test_insert_stream)
 	//TEST_ADD(TestMysql::test_fetch_stream)
 }
 
@@ -331,6 +331,36 @@
 	MD5Final(result, &context);
 }
 
+void TestMysql::test_any()
+{
+#ifdef _QTL_ENABLE_CPP17
+
+	qtl::mysql::database db;
+	connect(db);
+
+	try
+	{
+		db.query("select 0, 'hello world', now() from dual",
+			[](const std::any& i, const std::any& str, const std::any& now) {
+				const qtl::mysql::time& time = std::any_cast<const qtl::mysql::time&>(now);
+				struct tm tm;
+				time.as_tm(tm);
+				cout << "0=\"" << std::any_cast<int32_t>(i) << "\", 'hello world'=\"" <<
+					std::any_cast<const std::string&>(str) << "\", now=\"" <<
+					std::put_time(&tm, "%c") << "\" \n";
+		});
+	}
+	catch (qtl::mysql::error& e)
+	{
+		ASSERT_EXCEPTION(e);
+	}
+	catch (std::bad_cast& e)
+	{
+		ASSERT_EXCEPTION(e);
+	}
+#endif
+}
+
 int main(int argc, char* argv[])
 {
 	Test::TextOutput output(Test::TextOutput::Verbose);

--
Gitblit v1.9.3