From 2d00134b584aa74769ea468f8ce3385a0ff47587 Mon Sep 17 00:00:00 2001 From: Jason Baxter Date: Thu, 17 Sep 2015 16:32:18 -0400 Subject: [PATCH] Fix for truncation of strings with FreeTDS driver Added a fix for FreeTDS. It was interpreting stings longer than 4000 characters as NVARCHAR(4000) instead of NVARCHAR(MAX). Update so now it interprets strings longer than 4000 characters as SQL_WLONGVARCHAR --- src/odbc.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/odbc.cpp b/src/odbc.cpp index 1e59b327..9302a8e3 100644 --- a/src/odbc.cpp +++ b/src/odbc.cpp @@ -688,10 +688,16 @@ Parameter* ODBC::GetParametersFromArray (Local values, int *paramCount) { params[i].ValueType = SQL_C_TCHAR; params[i].ColumnSize = 0; //SQL_SS_LENGTH_UNLIMITED #ifdef UNICODE - params[i].ParameterType = SQL_WVARCHAR; + if (length > 4000) + params[i].ParameterType = SQL_WLONGVARCHAR; + else + params[i].ParameterType = SQL_WVARCHAR; params[i].BufferLength = (length * sizeof(uint16_t)) + sizeof(uint16_t); #else - params[i].ParameterType = SQL_VARCHAR; + if (length > 4000) + params[i].ParameterType = SQL_WLONGVARCHAR; + else + params[i].ParameterType = SQL_VARCHAR; params[i].BufferLength = string->Utf8Length() + 1; #endif params[i].ParameterValuePtr = malloc(params[i].BufferLength);