mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
9.9 KiB
300 lines
9.9 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 2000.
|
|
//
|
|
// File: proprst.hxx
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes: CMRowsetProps : public CUtlProps
|
|
//
|
|
// History: 02-28-98 danleg Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "propbase.hxx" // base class CUtlProp, CUtlPropInfo
|
|
#include <parsver.hxx> // CImpIParserVerify
|
|
#include <rstprop.hxx> // CRowsetProperties
|
|
#include <propglob.hxx>
|
|
|
|
//
|
|
// Function Definitions
|
|
//
|
|
void __stdcall GetStringFromLCID( LCID lcid, WCHAR * pwcLocale );
|
|
LCID __stdcall GetLCIDFromString( WCHAR * wcsLocale );
|
|
|
|
|
|
struct SPropDescription {
|
|
DBPROPID dwProp;
|
|
BOOL fSettable;
|
|
DWORD dwIndicator;
|
|
unsigned uIndex;
|
|
};
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CMRowsetProps
|
|
//
|
|
// Purpose: Properties for Rowset
|
|
//
|
|
// History: 11-12-97 danleg Created from Monarch
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CMRowsetProps : public CUtlProps
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Ctor -- if pSrc is not 0, FInit() will do a copy
|
|
//
|
|
CMRowsetProps ( LCID lcidInit = 0 );
|
|
|
|
CMRowsetProps ( const CMRowsetProps & propSrc );
|
|
|
|
static const SPropDescription aPropDescriptions[];
|
|
static const ULONG cPropDescriptions;
|
|
|
|
static const SPropDescription aQueryExtPropDescriptions[];
|
|
static const ULONG cQueryExtPropDescriptions;
|
|
|
|
//
|
|
// List of property offsets.
|
|
// Note that this must match up with the static array
|
|
// s_rgRowsetPropSets.
|
|
//
|
|
enum EID {
|
|
// s_rgdbPropRowset[] =
|
|
eid_PROP_IAccessor,
|
|
eid_PROP_IChapteredRowset,
|
|
eid_PROP_IColumnsInfo,
|
|
// eid_PROP_IColumnsRowset,
|
|
eid_PROP_IConnectionPointContainer,
|
|
eid_PROP_IConvertType,
|
|
eid_PROP_IRowset,
|
|
// eid_PROP_IRowsetChange,
|
|
eid_PROP_IRowsetIdentity,
|
|
eid_PROP_IRowsetInfo,
|
|
eid_PROP_IRowsetLocate,
|
|
// eid_PROP_IRowsetResynch,
|
|
eid_PROP_IRowsetScroll,
|
|
// eid_PROP_IRowsetUpdate,
|
|
eid_PROP_ISupportErrorInfo,
|
|
eid_PROP_IDBAsynchStatus,
|
|
eid_PROP_IRowsetAsynch,
|
|
eid_PROP_IRowsetExactScroll,
|
|
eid_PROP_IRowsetWatchAll,
|
|
eid_PROP_IRowsetWatchRegion,
|
|
// eid_PROP_ILockBytes,
|
|
// eid_PROP_ISequentialStream,
|
|
// eid_PROP_IStorage,
|
|
// eid_PROP_IStream,
|
|
// eid_PROP_ABORTPRESERVE,
|
|
// eid_PROP_APPENDONLY,
|
|
eid_PROP_BLOCKINGSTORAGEOBJECTS,
|
|
eid_PROP_BOOKMARKS,
|
|
eid_PROP_BOOKMARKSKIPPED,
|
|
eid_PROP_BOOKMARKTYPE,
|
|
// eid_PROP_CACHEDEFERRED,
|
|
eid_PROP_CANFETCHBACKWARDS,
|
|
eid_PROP_CANHOLDROWS,
|
|
eid_PROP_CANSCROLLBACKWARDS,
|
|
// eid_PROP_CHANGEINSERTEDROWS,
|
|
eid_PROP_COLUMNRESTRICT,
|
|
eid_PROP_COMMANDTIMEOUT,
|
|
// eid_PROP_COMMITPRESERVE,
|
|
// eid_PROP_DEFERRED,
|
|
// eid_PROP_DELAYSTORAGEOBJECTS,
|
|
// eid_PROP_IMMOBILEROWS,
|
|
eid_PROP_LITERALBOOKMARKS,
|
|
eid_PROP_LITERALIDENTITY,
|
|
eid_PROP_MAXOPENROWS,
|
|
//eid_PROP_MAXPENDINGROWS,
|
|
eid_PROP_MAXROWS,
|
|
eid_PROP_FIRSTROWS,
|
|
// eid_PROP_MAYWRITECOLUMN,
|
|
eid_PROP_MEMORYUSAGE,
|
|
eid_PROP_NOTIFICATIONPHASES,
|
|
//eid_PROP_NOTIFYCOLUMNSET,
|
|
//eid_PROP_NOTIFYROWDELETE,
|
|
//eid_PROP_NOTIFYROWFIRSTCHANGE,
|
|
//eid_PROP_NOTIFYROWINSERT,
|
|
//eid_PROP_NOTIFYROWRESYNCH,
|
|
eid_PROP_NOTIFYROWSETRELEASE,
|
|
eid_PROP_NOTIFYROWSETFETCHPOSITIONCHANGE,
|
|
//eid_PROP_NOTIFYROWUNDOCHANGE,
|
|
//eid_PROP_NOTIFYROWUNDODELETE,
|
|
//eid_PROP_NOTIFYROWUNDOINSERT,
|
|
//eid_PROP_NOTIFYROWUPDATE,
|
|
eid_PROP_ORDEREDBOOKMARKS,
|
|
eid_PROP_OTHERINSERT,
|
|
eid_PROP_OTHERUPDATEDELETE,
|
|
// eid_PROP_OWNINSERT,
|
|
// eid_PROP_OWNUPDATEDELETE,
|
|
eid_PROP_QUICKRESTART,
|
|
eid_PROP_REENTRANTEVENTS,
|
|
eid_PROP_REMOVEDELETED,
|
|
// eid_PROP_REPORTMULTIPLECHANGES,
|
|
// eid_PROP_RETURNPENDINGINSERTS,
|
|
eid_PROP_ROWRESTRICT,
|
|
eid_PROP_ROWSET_ASYNCH,
|
|
eid_PROP_ROWTHREADMODEL,
|
|
eid_PROP_SERVERCURSOR,
|
|
eid_PROP_STRONGIDENTITY,
|
|
// eid_PROP_TRANSACTEDOBJECT,
|
|
eid_PROP_UPDATABILITY,
|
|
eid_ROWSET_PROPS_NUM,
|
|
|
|
// s_rgdbPropMSIDXSExt[] =
|
|
eid_MSIDXSPROP_ROWSETQUERYSTATUS = 0,
|
|
eid_MSIDXSPROP_COMMAND_LOCALE_STRING,
|
|
eid_MSIDXSPROP_QUERY_RESTRICTION,
|
|
eid_MSIDXS_PROPS_NUM, // total # of entries
|
|
|
|
// s_rgdbPropQueryExt[] =
|
|
eid_PROP_USECONTENTINDEX = 0,
|
|
eid_PROP_DEFERNONINDEXEDTRIMMING,
|
|
eid_PROP_USEEXTENDEDDBTYPES,
|
|
eid_QUERYEXT_PROPS_NUM,
|
|
|
|
//
|
|
// Index into the writable or changeable UPROPVAL buffer
|
|
//
|
|
eid_PROPVAL_IChapteredRowset = 0,
|
|
// eid_PROPVAL_IColumnsRowset,
|
|
// eid_PROPVAL_IRowsetChange,
|
|
eid_PROPVAL_IConnectionPointContainer,
|
|
eid_PROPVAL_IRowsetIdentity,
|
|
eid_PROPVAL_IRowsetLocate,
|
|
// eid_PROPVAL_IRowsetResynch,
|
|
eid_PROPVAL_IRowsetScroll,
|
|
// eid_PROPVAL_IRowsetUpdate,
|
|
eid_PROPVAL_IDBAsynchStatus,
|
|
eid_PROPVAL_IRowsetAsynch,
|
|
eid_PROPVAL_IRowsetExactScroll,
|
|
eid_PROPVAL_IRowsetWatchAll,
|
|
eid_PROPVAL_IRowsetWatchRegion,
|
|
// eid_PROPVAL_ILockBytes,
|
|
// eid_PROPVAL_ISequentialStream,
|
|
// eid_PROPVAL_IStorage,
|
|
// eid_PROPVAL_IStream,
|
|
// eid_PROPVAL_APPENDONLY,
|
|
eid_PROPVAL_BOOKMARKS,
|
|
// eid_PROPVAL_CACHEDEFERRED,
|
|
eid_PROPVAL_CANFETCHBACKWARDS,
|
|
eid_PROPVAL_CANHOLDROWS,
|
|
eid_PROPVAL_CANSCROLLBACKWARDS,
|
|
// eid_PROPVAL_CHANGEINSERTEDROWS,
|
|
eid_PROPVAL_COMMANDTIMEOUT,
|
|
// eid_PROPVAL_DEFERRED,
|
|
// eid_PROPVAL_IMMOBILEROWS,
|
|
eid_PROPVAL_LITERALIDENTITY,
|
|
eid_PROPVAL_MAXROWS,
|
|
eid_PROPVAL_FIRSTROWS,
|
|
// eid_PROPVAL_MAYWRITECOLUMN,
|
|
eid_PROPVAL_MEMORYUSAGE,
|
|
eid_PROPVAL_ORDEREDBOOKMARKS,
|
|
eid_PROPVAL_OTHERINSERT,
|
|
eid_PROPVAL_OTHERUPDATEDELETE,
|
|
// eid_PROPVAL_OWNINSERT,
|
|
// eid_PROPVAL_OWNUPDATEDELETE,
|
|
eid_PROPVAL_QUICKRESTART,
|
|
// eid_PROPVAL_REPORTMULTIPLECHANGES,
|
|
eid_PROPVAL_ROWSET_ASYNCH,
|
|
eid_PROPVAL_STRONGIDENTITY,
|
|
eid_PROPVAL_ROWSET_NUM,
|
|
|
|
eid_PROPVAL_USECONTENTINDEX = 0,
|
|
eid_PROPVAL_DEFERNONINDEXEDTRIMMING,
|
|
eid_PROPVAL_USEEXTENDEDDBTYPES,
|
|
eid_PROPVAL_QUERYEXT_NUM,
|
|
|
|
eid_MSIDXSPROPVAL_ROWSETQUERYSTATUS = 0,
|
|
eid_MSIDXSPROPVAL_COMMAND_LOCALE_STRING,
|
|
eid_MSIDXSPROPVAL_QUERY_RESTRICTION,
|
|
eid_PROPVAL_MSIDXS_NUM,
|
|
|
|
eid_DBPROPSET_ROWSET = 0,
|
|
eid_DBPROPSET_MSIDXS_ROWSET_EXT,
|
|
eid_DBPROPSET_QUERY_EXT,
|
|
eid_DBPROPSET_NUM,
|
|
|
|
};
|
|
|
|
DWORD GetPropertyFlags( ) { return _dwBooleanOptions; }
|
|
DWORD SetPropertyFlags( DWORD dwFlags ) { _dwBooleanOptions |= dwFlags;
|
|
return _dwBooleanOptions; }
|
|
DWORD SetChaptered( BOOL fSet = TRUE );
|
|
|
|
SCODE SetProperties ( const ULONG cPropertySets,
|
|
const DBPROPSET rgPropertySets[] );
|
|
|
|
DWORD SetImpliedProperties( REFIID riid, ULONG cRowsets );
|
|
|
|
SCODE ArePropsInError( CMRowsetProps & rProps );
|
|
|
|
ULONG GetCommandTimeout( ) { return GetValLong( eid_DBPROPSET_ROWSET,
|
|
eid_PROPVAL_COMMANDTIMEOUT ); }
|
|
|
|
ULONG GetMaxResults( ) { return GetValLong( eid_DBPROPSET_ROWSET,
|
|
eid_PROPVAL_MAXROWS ); }
|
|
|
|
ULONG GetFirstRows() { return GetValLong( eid_DBPROPSET_ROWSET,
|
|
eid_PROPVAL_FIRSTROWS ); }
|
|
|
|
ULONG GetMaxOpenRows( ) { return 0; }
|
|
// BUBGUG: This is not settable.
|
|
// GetValLong( eid_DBPROPSET_ROWSET,
|
|
// eid_PROPVAL_MAXOPENROWS ); }
|
|
|
|
ULONG GetMemoryUsage( ) { return GetValLong( eid_DBPROPSET_ROWSET,
|
|
eid_PROPVAL_MEMORYUSAGE ); }
|
|
|
|
LCID GetInitLCID() { return _lcidInit; }
|
|
|
|
void SetFirstRows( ULONG ulFirstRows );
|
|
|
|
private:
|
|
static SPropDescription const * FindPropertyDescription(
|
|
SPropDescription const * prgPropDesc,
|
|
unsigned cPropDesc,
|
|
DBPROPID dwPropId );
|
|
|
|
static SPropDescription const * FindInterfaceDescription( REFIID riid );
|
|
|
|
void UpdateBooleanOptions( const ULONG cPropStes,
|
|
const DBPROPSET rgPropertySets[] );
|
|
|
|
LCID _lcidInit;
|
|
|
|
DWORD _dwBooleanOptions;
|
|
|
|
//
|
|
// Initialize the properties this class manages
|
|
//
|
|
SCODE InitAvailUPropSets( ULONG * pcUPropSet,
|
|
UPROPSET ** ppUPropSet,
|
|
ULONG * pcElemPer );
|
|
//
|
|
// Initialize the properties this class supports
|
|
//
|
|
SCODE InitUPropSetsSupported( DWORD * rgdwSupported );
|
|
|
|
//
|
|
// Given a propset and propid, return the default value
|
|
//
|
|
SCODE GetDefaultValue ( ULONG iCurSet,
|
|
DBPROPID dwPropId,
|
|
DWORD * pdwOption,
|
|
VARIANT * pvValue );
|
|
|
|
//
|
|
// Given a propset and propid, determine if the value is valid
|
|
//
|
|
SCODE IsValidValue ( ULONG iCurSet,
|
|
DBPROP * pDBProp );
|
|
};
|
|
|