From 9f5973fe8088d6e1d95672ef35caa9f08f210b1e Mon Sep 17 00:00:00 2001
From: znone <glyc@sina.com.cn>
Date: Fri, 23 Apr 2021 14:56:00 +0000
Subject: [PATCH] 1. function query_first return bool 2. fix some bugs.

---
 include/qtl_common.hpp |   49 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/include/qtl_common.hpp b/include/qtl_common.hpp
index e447f37..c6300c6 100644
--- a/include/qtl_common.hpp
+++ b/include/qtl_common.hpp
@@ -1083,55 +1083,67 @@
 	}
 
 	template<typename Params, typename Values>
-	base_database& query_first(const char* query_text, size_t text_length, const Params& params, Values&& values)
+	bool query_first(const char* query_text, size_t text_length, const Params& params, Values&& values)
 	{
-		return query_explicit(query_text, text_length, params, std::forward<Values>(values), first_record());
+		first_record fetcher;
+		query_explicit(query_text, text_length, params, std::forward<Values>(values), std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename Params, typename Values>
-	base_database& query_first(const char* query_text, const Params& params, Values&& values)
+	bool query_first(const char* query_text, const Params& params, Values&& values)
 	{
-		return query_explicit(query_text, strlen(query_text), params, std::forward<Values>(values), first_record());
+		first_record fetcher;
+		query_explicit(query_text, strlen(query_text), params, std::forward<Values>(values), std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename Params, typename Values>
-	base_database& query_first(const std::string& query_text, const Params& params, Values&& values)
+	bool query_first(const std::string& query_text, const Params& params, Values&& values)
 	{
-		return query_explicit(query_text, params, values, first_record());
+		first_record fetcher;
+		return query_explicit(query_text, params, values, std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename Values>
-	base_database& query_first(const char* query_text, size_t text_length, Values&& values)
+	bool query_first(const char* query_text, size_t text_length, Values&& values)
 	{
-		return query_explicit(query_text, text_length, std::make_tuple(), std::forward<Values>(values), first_record());
+		first_record fetcher;
+		return query_explicit(query_text, text_length, std::make_tuple(), std::forward<Values>(values), std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename Values>
-	base_database& query_first(const char* query_text, Values&& values)
+	bool query_first(const char* query_text, Values&& values)
 	{
-		return query_explicit(query_text, strlen(query_text), std::make_tuple(), std::forward<Values>(values), first_record());
+		first_record fetcher;
+		return query_explicit(query_text, strlen(query_text), std::make_tuple(), std::forward<Values>(values), std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename Values>
-	base_database& query_first(const std::string& query_text, Values&& values)
+	bool query_first(const std::string& query_text, Values&& values)
 	{
-		return query_explicit(query_text, std::make_tuple(), std::forward<Values>(values), first_record());
+		first_record fetcher;
+		return query_explicit(query_text, std::make_tuple(), std::forward<Values>(values), std::ref(fetcher));
+		return fetcher;
 	}
 
 	template<typename... Values>
-	base_database& query_first_direct(const char* query_text, size_t text_length, Values&... values)
+	bool query_first_direct(const char* query_text, size_t text_length, Values&... values)
 	{
 		return query_first(query_text, text_length, std::tie(values...));
 	}
 
 	template<typename... Values>
-	base_database& query_first_direct(const char* query_text, Values&... values)
+	bool query_first_direct(const char* query_text, Values&... values)
 	{
 		return query_first(query_text, std::tie(values...));
 	}
 
 	template<typename... Values>
-	base_database& query_first_direct(const std::string& query_text, Values&... values)
+	bool query_first_direct(const std::string& query_text, Values&... values)
 	{
 		return query_first(query_text, std::tie(values...));
 	}
@@ -1143,7 +1155,12 @@
 	};
 	struct first_record 
 	{
-		template<typename... Values> bool operator()(Values&&...) const {  return false; }
+		first_record() : _found(false) { }
+		template<typename... Values> bool operator()(Values&&...) { _found = true; return false; }
+		operator bool() const { return _found; }
+
+	private:
+		bool _found;
 	};
 };
 

--
Gitblit v1.9.3