Module: wine Branch: master Commit: d72787521e09d1ce8287b8b2175412586488d07d URL: http://source.winehq.org/git/wine.git/?a=commit;h=d72787521e09d1ce8287b8b217...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Mon May 13 12:29:22 2013 +1000
oledb32: Implement GetConversionSize DBTYPE_VARIANT->DBTYPE_WSTR.
---
dlls/oledb32/convert.c | 14 ++++++++++++++ dlls/oledb32/tests/convert.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index 3d7d23d..65a2bf6 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -1113,6 +1113,20 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface, { switch (src_type) { + case DBTYPE_VARIANT: + { + VARIANT v; + + VariantInit(&v); + if ((hr = VariantChangeType(&v, (VARIANT*)src, 0, VT_BSTR)) == S_OK) + { + *dst_len = (SysStringLen(V_BSTR(&v)) + 1) * sizeof(WCHAR); + VariantClear(&v); + } + else + return hr; + } + break; case DBTYPE_STR: if(src_len) *dst_len = (*src_len + 1) * sizeof(WCHAR); diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index 7f3e3ee..64562b1 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2339,6 +2339,7 @@ static void test_getconversionsize(void) BSTR str; static WCHAR strW[] = {'t','e','s','t',0}; static char strTest[] = "test"; + VARIANT var;
/* same way as CanConvert fails here */ dst_len = 0; @@ -2394,6 +2395,33 @@ static void test_getconversionsize(void) hr = IDataConvert_GetConversionSize(convert, DBTYPE_STR, DBTYPE_WSTR, &src_len, &dst_len, strTest); ok(hr == S_OK, "got 0x%08x\n", hr); ok(dst_len == 42, "%ld\n", dst_len); + + dst_len = 0; + V_VT(&var) = VT_BSTR; + V_BSTR(&var) = SysAllocString(strW); + hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_WSTR, NULL, &dst_len, &var); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(dst_len == 10, "%ld\n", dst_len); + VariantClear(&var); + + dst_len = 0; + src_len = 20; + V_VT(&var) = VT_BSTR; + V_BSTR(&var) = SysAllocString(strW); + hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_WSTR, &src_len, &dst_len, &var); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(dst_len == 10, "%ld\n", dst_len); + VariantClear(&var); + + dst_len = 0; + src_len = 20; + V_VT(&var) = VT_I4; + V_I4(&var) = 4; + hr = IDataConvert_GetConversionSize(convert, DBTYPE_VARIANT, DBTYPE_WSTR, &src_len, &dst_len, &var); + ok(hr == S_OK, "got 0x%08x\n", hr); + todo_wine ok(dst_len == 110, "%ld\n", dst_len); + VariantClear(&var); + }
static void test_converttovar(void)