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/TestSqlite.cpp |   60 ++++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 38 insertions(+), 22 deletions(-)

diff --git a/test/TestSqlite.cpp b/test/TestSqlite.cpp
index c349ad1..edf6c96 100644
--- a/test/TestSqlite.cpp
+++ b/test/TestSqlite.cpp
@@ -32,9 +32,7 @@
 	template<>
 	inline void bind_record<qtl::sqlite::statement, TestSqliteRecord>(qtl::sqlite::statement& command, TestSqliteRecord&& v)
 	{
-		qtl::bind_field(command, 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);
 	}
 }
 
@@ -50,10 +48,12 @@
 	TEST_ADD(TestSqlite::test_iterator)
 	TEST_ADD(TestSqlite::test_insert_blob)
 	TEST_ADD(TestSqlite::test_select_blob)
+	TEST_ADD(TestSqlite::test_any)
 }
 
-inline void TestSqlite::connect(qtl::sqlite::database& db)
+inline qtl::sqlite::database TestSqlite::connect()
 {
+	qtl::sqlite::database db;
 	try
 	{
 		db.open("test.db");
@@ -62,12 +62,12 @@
 	{
 		ASSERT_EXCEPTION(e);
 	}
+	return db;
 }
 
 void TestSqlite::test_dual()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -85,8 +85,7 @@
 
 void TestSqlite::test_clear()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -100,8 +99,7 @@
 
 void TestSqlite::test_insert()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -117,8 +115,7 @@
 
 void TestSqlite::test_insert2()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -135,8 +132,7 @@
 
 void TestSqlite::test_update()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -152,8 +148,7 @@
 
 void TestSqlite::test_query()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -181,8 +176,7 @@
 
 void TestSqlite::test_iterator()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -201,8 +195,7 @@
 
 void TestSqlite::test_insert_blob()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -235,8 +228,7 @@
 
 void TestSqlite::test_select_blob()
 {
-	qtl::sqlite::database db;
-	connect(db);
+	qtl::sqlite::database db = connect();
 
 	try
 	{
@@ -260,6 +252,30 @@
 	}
 }
 
+void TestSqlite::test_any()
+{
+#ifdef _QTL_ENABLE_CPP17
+	qtl::sqlite::database db = connect();
+
+	try
+	{
+		db.query("select 0, 'hello world'",
+			[](const std::any& i, const std::any& str) {
+				cout << "0=\"" << std::any_cast<int64_t>(i) << "\", 'hello world'=\"" <<
+					std::any_cast<const std::string_view&>(str).data() << "\" \n";
+		});
+	}
+	catch (qtl::sqlite::error& e)
+	{
+		ASSERT_EXCEPTION(e);
+	}
+	catch (std::bad_cast& e)
+	{
+		ASSERT_EXCEPTION(e);
+	}
+#endif // C++17
+}
+
 void TestSqlite::get_md5(std::string& str, unsigned char* result)
 {
 	MD5_CTX context;

--
Gitblit v1.9.3