From 9d6e4318302b5967227ab8899bf29eb44873610d Mon Sep 17 00:00:00 2001
From: znone <glyc@sina.com.cn>
Date: Thu, 07 Dec 2017 06:58:11 +0000
Subject: [PATCH] 修正GCC下的编译错误

---
 include/qtl_mysql.hpp |   63 ++++++++++++++++++-------------
 1 files changed, 36 insertions(+), 27 deletions(-)

diff --git a/include/qtl_mysql.hpp b/include/qtl_mysql.hpp
index c853a32..3d59a8b 100644
--- a/include/qtl_mysql.hpp
+++ b/include/qtl_mysql.hpp
@@ -176,9 +176,10 @@
 	binder.bind(v);
 }
 
-inline void bind(binder& binder, const char* str)
+inline void bind(binder& binder, const char* str, size_t length=0)
 {
-	binder.bind((char*)str, (unsigned long)strlen(str));
+	if(length==0) length=strlen(str);
+	binder.bind(const_cast<char*>(str), static_cast<unsigned long>(length), MYSQL_TYPE_VAR_STRING);
 }
 
 class statement;
@@ -288,6 +289,35 @@
 		return fetch();
 	}
 
+	void bind_param(size_t index, const char* param, size_t length)
+	{
+		bind(m_binders[index], param, length);
+	}
+
+	void bind_param(size_t index, const std::nullptr_t&)
+	{
+		m_binders[index].bind();
+	}
+
+	void bind_param(size_t index, std::istream& param)
+	{
+		m_binders[index].bind(NULL, 0, MYSQL_TYPE_LONG_BLOB);
+		m_binderAddins[index].m_after_fetch=[this, index, &param](const binder&) {
+			std::array<char, blob_buffer_size> buffer;
+			unsigned long readed=0;
+			while(!param.eof() && !param.fail())
+			{
+				param.read(buffer.data(), buffer.size());
+				readed=(unsigned long)param.gcount();
+				if(readed>0)
+				{
+					if(mysql_stmt_send_long_data(m_stmt, index, buffer.data(), readed)!=0)
+						throw_exception();
+				}
+			}
+		};
+	}
+
 	template<class Param>
 	void bind_param(size_t index, const Param& param)
 	{
@@ -302,11 +332,6 @@
 			bind(m_binders[index], std::forward<Type>(value));
 			m_binderAddins[index].m_after_fetch=if_null<typename std::remove_reference<Type>::type>(value);
 		}
-	}
-
-	void bind_param(size_t index, const std::nullptr_t&)
-	{
-		m_binders[index].bind();
 	}
 
 	void bind_field(size_t index, char* value, size_t length)
@@ -345,24 +370,7 @@
 			m_binders[index].bind(data, field->length, field->type);
 		}
 	}
-	void bind_param(size_t index, std::istream& param)
-	{
-		m_binders[index].bind(NULL, 0, MYSQL_TYPE_LONG_BLOB);
-		m_binderAddins[index].m_after_fetch=[this, index, &param](const binder&) {
-			std::array<char, blob_buffer_size> buffer;
-			unsigned long readed=0;
-			while(!param.eof() && !param.fail())
-			{
-				param.read(buffer.data(), buffer.size());
-				readed=(unsigned long)param.gcount();
-				if(readed>0)
-				{
-					if(mysql_stmt_send_long_data(m_stmt, index, buffer.data(), readed)!=0)
-						throw_exception();
-				}
-			}
-		};
-	}
+
 	void bind_field(size_t index, std::ostream&& value)
 	{
 		if(m_result)
@@ -558,8 +566,8 @@
 		m_mysql=src.m_mysql;
 		src.m_mysql=NULL;
 	}
-	database& operator=(const database&) = delete;
-	database& operator=(database&& src)
+	database& operator==(const database&) = delete;
+	database& operator==(database&& src)
 	{
 		if(this!=&src)
 		{
@@ -567,6 +575,7 @@
 			m_mysql=src.m_mysql;
 			src.m_mysql=NULL;
 		}
+		return *this;
 	}
 
 	MYSQL* handle() { return m_mysql; }

--
Gitblit v1.9.3