From e51bed25201e89b2fed36e45e1642812d88f6398 Mon Sep 17 00:00:00 2001
From: znone <glyc@sina.com.cn>
Date: Tue, 07 Mar 2017 11:06:28 +0000
Subject: [PATCH] 增加对ODBC的支持。

---
 include/qtl_sqlite.hpp |   62 ++++++++++++++-----------------
 1 files changed, 28 insertions(+), 34 deletions(-)

diff --git a/include/qtl_sqlite.hpp b/include/qtl_sqlite.hpp
index 86ee324..20f7e00 100644
--- a/include/qtl_sqlite.hpp
+++ b/include/qtl_sqlite.hpp
@@ -77,63 +77,63 @@
 		}
 	}
 
-	void bind(int col, int value)
+	void bind_param(int index, int value)
 	{
-		verify_error(sqlite3_bind_int(m_stmt, col, value));
+		verify_error(sqlite3_bind_int(m_stmt, index+1, value));
 	}
-	void bind(int col, int64_t value)
+	void bind_param(int index, int64_t value)
 	{
-		verify_error(sqlite3_bind_int64(m_stmt, col, value));
+		verify_error(sqlite3_bind_int64(m_stmt, index+1, value));
 	}
-	void bind(int col, double value)
+	void bind_param(int index, double value)
 	{
-		verify_error(sqlite3_bind_double(m_stmt, col, value));
+		verify_error(sqlite3_bind_double(m_stmt, index+1, value));
 	}
-	void bind(int col, const char* value, size_t n=-1)
+	void bind_param(int index, const char* value, size_t n=-1)
 	{
 		if(value)
-			verify_error(sqlite3_bind_text(m_stmt, col, value, (int)n, NULL));
+			verify_error(sqlite3_bind_text(m_stmt, index+1, value, (int)n, NULL));
 		else
-			verify_error(sqlite3_bind_null(m_stmt, col));
+			verify_error(sqlite3_bind_null(m_stmt, index+1));
 	}
-	void bind(int col, const wchar_t* value, size_t n=-1)
+	void bind_param(int index, const wchar_t* value, size_t n=-1)
 	{
 		if(value)
-			verify_error(sqlite3_bind_text16(m_stmt, col, value, (int)n, NULL));
+			verify_error(sqlite3_bind_text16(m_stmt, index+1, value, (int)n, NULL));
 		else
-			verify_error(sqlite3_bind_null(m_stmt, col));
+			verify_error(sqlite3_bind_null(m_stmt, index+1));
 	}
-	void bind(int col, const std::string& value)
+	void bind_param(int index, const std::string& value)
 	{
-		bind(col, value.data(), value.size());
+		bind_param(index, value.data(), value.size());
 	}
-	void bind(int col, const std::wstring& value)
+	void bind_param(int index, const std::wstring& value)
 	{
-		bind(col, value.data(), value.size());
+		bind_param(index, value.data(), value.size());
 	}
-	void bind(int col, const const_blob_data& value)
+	void bind_param(int index, const const_blob_data& value)
 	{
 		if(value.size)
 		{
 			if(value.data)
-				verify_error(sqlite3_bind_blob(m_stmt, col, value.data, (int)value.size, NULL));
+				verify_error(sqlite3_bind_blob(m_stmt, index+1, value.data, (int)value.size, NULL));
 			else
-				verify_error(sqlite3_bind_zeroblob(m_stmt, col, (int)value.size));
+				verify_error(sqlite3_bind_zeroblob(m_stmt, index+1, (int)value.size));
 		}
 		else
-			verify_error(sqlite3_bind_null(m_stmt, col));
+			verify_error(sqlite3_bind_null(m_stmt, index+1));
 	}
-	void bind_zero_blob(int col, int n)
+	void bind_zero_blob(int index, int n)
 	{
-		verify_error(sqlite3_bind_zeroblob(m_stmt, col, (int)n));
+		verify_error(sqlite3_bind_zeroblob(m_stmt, index+1, (int)n));
 	}
-	void bind(int col, qtl::null value)
+	void bind_param(int index, qtl::null)
 	{
-		verify_error(sqlite3_bind_null(m_stmt, col));
+		verify_error(sqlite3_bind_null(m_stmt, index+1));
 	}
-	void bind(int col)
+	void bind_param(int index, std::nullptr_t)
 	{
-		verify_error(sqlite3_bind_null(m_stmt, col));
+		verify_error(sqlite3_bind_null(m_stmt, index+1));
 	}
 	int get_parameter_count() const
 	{
@@ -146,12 +146,6 @@
 	int get_parameter_index(const char* param_name) const
 	{
 		return sqlite3_bind_parameter_index(m_stmt, param_name);
-	}
-
-	template<class Param>
-	void bind_param(size_t index, const Param& param)
-	{
-		bind((int)index+1, param);
 	}
 
 	template<class Type>
@@ -181,7 +175,7 @@
 	{
 		size_t col_length=get_column_length((int)index);
 		if(col_length>0)
-			strncpy(value, (const char*)sqlite3_column_text(m_stmt, (int)index), std::min(length, col_length));
+			strncpy(value, (const char*)sqlite3_column_text(m_stmt, (int)index), std::min(length, col_length+1));
 		else
 			memset(value, 0, length*sizeof(char));
 	}
@@ -189,7 +183,7 @@
 	{
 		size_t col_length=sqlite3_column_bytes16(m_stmt, (int)index);
 		if(col_length>0)
-			wcsncpy(value, (const wchar_t*)sqlite3_column_text16(m_stmt, (int)index), std::min(length, col_length));
+			wcsncpy(value, (const wchar_t*)sqlite3_column_text16(m_stmt, (int)index), std::min(length, col_length+1));
 		else
 			memset(value, 0, length*sizeof(wchar_t));
 	}

--
Gitblit v1.9.3