windows-nt/Source/XPSP1/NT/ds/adsi/router/ccommand.hxx

202 lines
4.6 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996
//
// File: ccommand.hxx
//
// Contents: Microsoft OleDB/OleDS Data Source Object for LDAP
//
//
// History: 08-01-96 shanksh Created.
//
//----------------------------------------------------------------------------
#ifndef _CCOMMAND_HXX
#define _CCOMMAND_HXX
enum COMMAND_STATUS_FLAG {
// Command Object status flags
CMD_STATUS_MASK = 0x00000FFF,
CMD_INITIALIZED = 0x00000001,
CMD_HAVE_TXN_SUPPORT = 0x00000002,
CMD_TEXT_SET = 0x00000020,
CMD_PREPARED = 0x00000040,
CMD_EXEC_CANCELLED = 0x10000000,
};
extern const GUID DBGUID_LDAPDialect;
// Constant values for dwFlags on ICommand::Execute
const DWORD EXECUTE_NOROWSET = 0x00000001;
const DWORD EXECUTE_SUCCESSWITHINFO = 0x00000002;
const DWORD EXECUTE_NEWHSTMT = 0x00000004;
const DWORD EXECUTE_NONROWRETURNING = 0x00000008;
const DWORD EXECUTE_RESTART = 0x00000010;
class CCommandObject;
class CCommandObject : INHERIT_TRACKING,
public IAccessor,
public IColumnsInfo,
public ICommandText,
public ICommandProperties,
public ICommandPrepare,
public IConvertType {
friend class CImpIAccessor;
protected:
LPUNKNOWN _pUnkOuter;
//
// Parent Session Object
//
CSessionObject * _pCSession;
//
// Execution Status Flags
//
DWORD _dwStatus;
//
// Count of Active Rowsets on this command object
//
ULONG _cRowsetsOpen;
//
// Critical Section for ICommand::Cancel timing issues
//
CRITICAL_SECTION _csCancel;
//
// GUID for dialect of current text
//
GUID _guidCmdDialect;
//
// current Command text, if any
//
LPWSTR _pszCommandText;
LPWSTR _pszCommandTextCp;
LPWSTR _pszADsContext;
LPWSTR _pszSearchFilter;
LPWSTR * _ppszAttrs;
DWORD _cAttrs;
DWORD _searchScope;
//@cmember Contained IAccessor
CImpIAccessor * _pAccessor;
IMalloc * _pIMalloc;
//
// Utility object to manage properties
//
PCUTILPROP _pUtilProp;
IDirectorySearch * _pDSSearch;
//
// Credentials from the Data Source Object
//
CCredentials _Credentials;
BOOL _fADSPathPresent;
// flag to indicate if the query was a SELECT * query
BOOL _fAllAttrs;
STDMETHODIMP
SplitCommandText(
LPWSTR pszParsedCmd
);
HRESULT
SeekPastADsPath(
IN LPWSTR pszIn,
OUT LPWSTR *ppszOut
);
HRESULT
SeekPastSearchFilter(
IN LPWSTR pszIn,
OUT LPWSTR *ppszOut
);
public:
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ;
BOOL FInit(CSessionObject *pSession, CCredentials& Credentials);
DECLARE_STD_REFCOUNTING
DECLARE_IAccessor_METHODS
DECLARE_IColumnsInfo_METHODS
DECLARE_ICommand_METHODS
DECLARE_ICommandText_METHODS
DECLARE_ICommandProperties_METHODS
DECLARE_IConvertType_METHODS
DECLARE_ICommandPrepare_METHODS
inline BOOL IsCommandSet() { return !!(_dwStatus & CMD_TEXT_SET);};
inline void DecrementOpenRowsets()
{
InterlockedDecrement( (LONG*) &_cRowsetsOpen );
};
inline void IncrementOpenRowsets()
{
InterlockedIncrement( (LONG*) &_cRowsetsOpen );
}
inline BOOL IsRowsetOpen()
{ return (_cRowsetsOpen > 0) ? TRUE : FALSE;};
STDMETHODIMP
CCommandObject::GetDBType(
PADS_ATTR_DEF pAttrDefinitions,
DWORD dwNumAttrs,
LPWSTR pszAttrName,
WORD *pwType,
DBLENGTH *pulSize
);
STDMETHODIMP
CCommandObject::SetSearchPrefs(
void
);
CCommandObject::CCommandObject(
LPUNKNOWN pIUnknown
);
CCommandObject::~CCommandObject();
STDMETHODIMP
CCommandObject::GetColumnInfo2(
DBORDINAL *pcColumns,
DBCOLUMNINFO **prgInfo,
OLECHAR **ppStringBuffer,
BOOL **ppfMultiValued
);
inline BOOL IsCommandPrepared() {
return !!(_dwStatus & CMD_PREPARED);
}
inline CCredentials GetCredentials() {
return _Credentials;
}
STDMETHODIMP PrepareHelper(void);
};
#endif