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.
201 lines
4.6 KiB
201 lines
4.6 KiB
//---------------------------------------------------------------------------
|
|
|
|
//
|
|
// 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
|
|
|