From: Alistair Leslie-Hughes Subject: [PATCH 2/3] oledb32: Add DataConvert support of DBTYPE_VARIANT(NULL) to DBTYPE_DBTIMESTAMP Message-Id: Date: Tue, 15 Sep 2015 19:54:37 +1000 --- dlls/oledb32/convert.c | 6 ++++++ dlls/oledb32/tests/convert.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index c6f4da0..56de3fb 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -542,6 +542,12 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface, d->second = st.wSecond; d->fraction = st.wMilliseconds * 1000000; } + else if( V_VT((VARIANT*)src) == VT_NULL) + { + *dst_status = DBSTATUS_S_ISNULL; + *dst_len = 0; + return S_OK; + } else { FIXME("Unimplemented variant type %d -> DBTIMESTAMP\n", V_VT((VARIANT*)src)); diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index 69252fc..c695238 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2872,6 +2872,13 @@ static void test_converttotimestamp(void) ok(dst_len == sizeof(dst), "got %ld\n", dst_len); ok(!memcmp(&ts, &dst, sizeof(ts)), "Wrong timestamp\n"); + V_VT(&var) = VT_NULL; + dst_len = 0; + hr = IDataConvert_DataConvert(convert, DBTYPE_VARIANT, DBTYPE_DBTIMESTAMP, sizeof(var), &dst_len, &var, &dst, 2, 0, &dst_status, 0, 0, 0); + ok(hr == S_OK, "got %08x\n", hr); + ok(dst_status == DBSTATUS_S_ISNULL, "got %08x\n", dst_status); + ok(dst_len == 0, "got %ld\n", dst_len); + bstr = SysAllocString(strW); dst_len = 0x1234; hr = IDataConvert_DataConvert(convert, DBTYPE_BSTR, DBTYPE_DBTIMESTAMP, 0, &dst_len, &bstr, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); -- 2.5.1