From: Piotr Caban piotr@codeweavers.com
--- dlls/msado15/recordset.c | 31 ++------------------------- dlls/msado15/tests/msado15.c | 41 ++++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 47 deletions(-)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 3b32db18d2f..7f115ee2c72 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -97,7 +97,6 @@ struct recordset } cache; ADO_LONGPTR max_records; VARIANT filter; - BOOL use_bookmarks;
DBTYPE *columntypes; HACCESSOR hacc_empty; /* haccessor for adding empty rows */ @@ -1065,8 +1064,8 @@ static HRESULT init_fields( struct fields *fields ) colinfo[i].dwFlags, colinfo[i].ulColumnSize, colinfo[i].wType, colinfo[i].bPrecision, colinfo[i].bScale);
- /* skip bookmark column */ - if (!i && rec->use_bookmarks) continue; + if (!i && colinfo[i].columnid.eKind == DBKIND_GUID_PROPID && + IsEqualGUID(&colinfo[i].columnid.uGuid.guid, &DBCOL_SPECIALCOL)) continue;
hr = append_field(fields, &colinfo[i]); if (FAILED(hr)) @@ -1343,7 +1342,6 @@ static void close_recordset( struct recordset *recordset ) recordset->accessor = NULL;
VariantClear( &recordset->filter ); - recordset->use_bookmarks = FALSE;
col_count = get_column_count( recordset );
@@ -3040,8 +3038,6 @@ static HRESULT WINAPI rsconstruction_get_Rowset(ADORecordsetConstruction *iface, static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, IUnknown *unk) { struct recordset *recordset = impl_from_ADORecordsetConstruction( iface ); - DBPROPSET *propset = NULL; - IRowsetInfo *info; IRowset *rowset; HRESULT hr;
@@ -3055,29 +3051,6 @@ static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, if ( recordset->row_set ) IRowset_Release( recordset->row_set ); recordset->row_set = rowset;
- hr = IRowset_QueryInterface( rowset, &IID_IRowsetInfo, (void**)&info ); - if ( SUCCEEDED(hr) && info) - { - DBPROPIDSET propidset; - DBPROPID id[1]; - ULONG count; - - propidset.rgPropertyIDs = id; - propidset.cPropertyIDs = ARRAY_SIZE(id); - propidset.guidPropertySet = DBPROPSET_ROWSET; - id[0] = DBPROP_BOOKMARKS; - hr = IRowsetInfo_GetProperties( info, 1, &propidset, &count, &propset ); - IRowsetInfo_Release( info ); - if ( FAILED(hr) ) propset = NULL; - } - if ( propset ) - { - if (V_VT(&propset->rgProperties[0].vValue) == VT_BOOL && V_BOOL(&propset->rgProperties[0].vValue)) - recordset->use_bookmarks = TRUE; - CoTaskMemFree( propset->rgProperties ); - CoTaskMemFree( propset ); - } - recordset->state = adStateOpen; return S_OK; } diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 959ffcfe832..9ed016e8c1a 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -18,6 +18,7 @@
#include <stdio.h> #define COBJMACROS +#define DBINITCONSTANTS #include <initguid.h> #include <oledb.h> #include <oledberr.h> @@ -27,8 +28,6 @@ #include "msdasql.h" #include "odbcinst.h"
-DEFINE_GUID(DBPROPSET_ROWSET, 0xc8b522be, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d); - #define MAKE_ADO_HRESULT( err ) MAKE_HRESULT( SEVERITY_ERROR, FACILITY_CONTROL, err )
static BOOL db_created; @@ -630,25 +629,31 @@ static HRESULT WINAPI column_info_GetColumnInfo(IColumnsInfo *This, DBORDINAL *c
CHECK_EXPECT(column_info_GetColumnInfo);
- *columns = 1; + *columns = 2; *stringsbuffer = CoTaskMemAlloc(sizeof(L"Column1")); lstrcpyW(*stringsbuffer, L"Column1");
- dbcolumn = CoTaskMemAlloc(sizeof(DBCOLUMNINFO)); - - dbcolumn->pwszName = *stringsbuffer; - dbcolumn->pTypeInfo = NULL; - dbcolumn->iOrdinal = 1; - dbcolumn->dwFlags = DBCOLUMNFLAGS_MAYBENULL; - dbcolumn->ulColumnSize = 5; - dbcolumn->wType = DBTYPE_I4; - dbcolumn->bPrecision = 1; - dbcolumn->bScale = 1; - dbcolumn->columnid.eKind = DBKIND_NAME; - dbcolumn->columnid.uName.pwszName = *stringsbuffer; + dbcolumn = CoTaskMemAlloc(sizeof(*dbcolumn) * 2); + memset(dbcolumn, 0, sizeof(*dbcolumn) * 2); + + dbcolumn[0].dwFlags = 0; + dbcolumn[0].ulColumnSize = sizeof(unsigned int); + dbcolumn[0].wType = DBTYPE_UI4; + dbcolumn[0].columnid.eKind = DBKIND_GUID_PROPID; + dbcolumn[0].columnid.uGuid.guid = DBCOL_SPECIALCOL; + + dbcolumn[1].pwszName = *stringsbuffer; + dbcolumn[1].pTypeInfo = NULL; + dbcolumn[1].iOrdinal = 1; + dbcolumn[1].dwFlags = DBCOLUMNFLAGS_MAYBENULL; + dbcolumn[1].ulColumnSize = 5; + dbcolumn[1].wType = DBTYPE_I4; + dbcolumn[1].bPrecision = 1; + dbcolumn[1].bScale = 1; + dbcolumn[1].columnid.eKind = DBKIND_NAME; + dbcolumn[1].columnid.uName.pwszName = *stringsbuffer;
*colinfo = dbcolumn; - return S_OK; }
@@ -1064,10 +1069,10 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) SET_EXPECT( column_info_GetColumnInfo ); hr = ADORecordsetConstruction_put_Rowset( construct, rowset ); CHECK_CALLED( rowset_QI_IRowset ); - CHECK_CALLED( rowset_QI_IRowsetInfo ); + todo_wine CHECK_CALLED( rowset_QI_IRowsetInfo ); todo_wine CHECK_CALLED( rowset_QI_IRowsetExactScroll ); todo_wine CHECK_CALLED( rowset_QI_IDBAsynchStatus ); - CHECK_CALLED( rowset_info_GetProperties ); + todo_wine CHECK_CALLED( rowset_info_GetProperties ); if (exact_scroll) todo_wine CHECK_CALLED( rowset_QI_IColumnsInfo ); else CHECK_NOT_CALLED( rowset_QI_IColumnsInfo ); if (exact_scroll) todo_wine CHECK_CALLED( column_info_GetColumnInfo );