conversion for DBTYPE_DECIMAL
Andreas Pflug
pflug at pse-consulting.de
Thu Nov 18 05:58:18 CST 2010
---
dlls/oledb32/convert.c | 32 +++++++++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c
index d85eb4a..17d8d8e 100644
--- a/dlls/oledb32/convert.c
+++ b/dlls/oledb32/convert.c
@@ -135,6 +135,8 @@ static int get_length(DBTYPE type)
return sizeof(DBTIMESTAMP);
case DBTYPE_CY:
return sizeof(CY);
+ case DBTYPE_DECIMAL:
+ return sizeof(DECIMAL);
case DBTYPE_BSTR:
return sizeof(BSTR);
case DBTYPE_FILETIME:
@@ -512,6 +514,32 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface,
break;
}
+ case DBTYPE_DECIMAL:
+ {
+ DECIMAL *d=dst;
+ switch (src_type)
+ {
+ case DBTYPE_EMPTY: memset(d, 0, sizeof(DECIMAL)); hr = S_OK; break;
+ case DBTYPE_I1: hr = VarDecFromI1(*(signed char*)src, d); break;
+ case DBTYPE_I2: hr = VarDecFromI2(*(signed short*)src, d); break;
+ case DBTYPE_I4: hr = VarDecFromI4(*(signed int*)src, d); break;
+ case DBTYPE_I8: hr = VarDecFromI8(*(LONGLONG*)src, d); break;
+ case DBTYPE_UI1: hr = VarDecFromUI1(*(BYTE*)src, d); break;
+ case DBTYPE_UI2: hr = VarDecFromUI2(*(WORD*)src, d); break;
+ case DBTYPE_UI4: hr = VarDecFromUI4(*(DWORD*)src, d); break;
+ case DBTYPE_UI8: hr = VarDecFromUI8(*(ULONGLONG*)src, d); break;
+ case DBTYPE_R4: hr = VarDecFromR4(*(FLOAT*)src, d); break;
+ case DBTYPE_R8: hr = VarDecFromR8(*(DOUBLE*)src, d); break;
+ case DBTYPE_CY: hr = VarDecFromCy(*(CY*)src, d); break;
+ case DBTYPE_DATE: hr = VarDecFromDate(*(DATE*)src, d); break;
+ case DBTYPE_BSTR: hr = VarDecFromStr(*(WCHAR**)src, LOCALE_USER_DEFAULT, 0, d); break;
+ case DBTYPE_BOOL: hr = VarDecFromBool(*(VARIANT_BOOL*)src, d); break;
+ case DBTYPE_DECIMAL: memcpy(d, src, sizeof(DECIMAL)); hr = S_OK; break;
+ default: FIXME("Unimplemented conversion %04x -> DEC\n", src_type); return E_NOTIMPL;
+ }
+ break;
+ }
+
case DBTYPE_BSTR:
{
BSTR *d = dst;
@@ -1058,11 +1086,11 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface,
void *pSrc)
{
convert *This = impl_from_IDataConvert(iface);
+ DBLENGTH len = 0;
if (!pcbDstLength)
return E_INVALIDARG;
- DBLENGTH len = 0;
switch(wDstType)
{
case DBTYPE_I1:
@@ -1089,6 +1117,8 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface,
*pcbDstLength = sizeof(DBTIMESTAMP); return S_OK;
case DBTYPE_CY:
*pcbDstLength = sizeof(CY); return S_OK;
+ case DBTYPE_DECIMAL:
+ *pcbDstLength = sizeof(DECIMAL); return S_OK;
case DBTYPE_FILETIME:
*pcbDstLength = sizeof(FILETIME); return S_OK;
case DBTYPE_GUID:
--
1.7.2.3
--------------030505070201000701020308--
More information about the wine-patches
mailing list