From 9ed5ee9526d36df8d5b96fd461c08c7c56e1dc04 Mon Sep 17 00:00:00 2001
From: znone <glyc@sina.com.cn>
Date: Sat, 15 Apr 2017 09:32:33 +0000
Subject: [PATCH] 支持返回多结果集的查询
---
include/qtl_odbc.hpp | 31 +++++++++++++++++++++++--------
1 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/include/qtl_odbc.hpp b/include/qtl_odbc.hpp
index e021ef6..99a4c49 100644
--- a/include/qtl_odbc.hpp
+++ b/include/qtl_odbc.hpp
@@ -358,7 +358,7 @@
text[p.m_indicator]='\0';
}
};
- verify_error(SQLBindCol(m_handle, index+1, SQL_C_CHAR, v, n-1, &m_params[index].m_indicator));
+ verify_error(SQLBindCol(m_handle, index+1, SQL_C_CHAR, v, n, &m_params[index].m_indicator));
}
void bind_field(SQLUSMALLINT index, wchar_t* v, size_t n)
{
@@ -373,20 +373,20 @@
text[p.m_indicator]='\0';
}
};
- verify_error(SQLBindCol(m_handle, index+1, SQL_C_WCHAR, v, n-1, &m_params[index].m_indicator));
+ verify_error(SQLBindCol(m_handle, index+1, SQL_C_WCHAR, v, n, &m_params[index].m_indicator));
}
- template<typename CharType>
- void bind_field(SQLUSMALLINT index, std::basic_string<CharType>&& v)
+ template<typename T>
+ void bind_field(SQLUSMALLINT index, qtl::bind_string_helper<T>&& v)
{
SQLLEN length=0;
SQLColAttribute(m_handle, index+1, SQL_DESC_LENGTH, NULL, 0, NULL, &length);
- v.resize(length);
- bind_field(index, const_cast<char*>(v.data()), v.size()+1);
- m_params[index].m_after_fetch=[&v](const param_data& p) {
+ typename qtl::bind_string_helper<T>::char_type* data=v.alloc(length);
+ bind_field(index, data, length+1);
+ m_params[index].m_after_fetch=[v](const param_data& p) mutable {
if(p.m_indicator==SQL_NULL_DATA)
v.clear();
else
- v.resize(p.m_indicator);
+ v.truncate(p.m_indicator);
};
}
template<size_t N>
@@ -516,6 +516,21 @@
return false;
}
+ bool next_result()
+ {
+ SQLRETURN ret;
+ SQLSMALLINT count=0;
+ m_binded_cols=false;
+ do
+ {
+ ret=SQLMoreResults(m_handle);
+ if(ret==SQL_ERROR || ret==SQL_INVALID_HANDLE)
+ verify_error(ret);
+ verify_error(SQLNumResultCols(m_handle, &count));
+ }while(count==0);
+ return ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO;
+ }
+
SQLLEN affetced_rows()
{
SQLLEN count=0;
--
Gitblit v1.9.3