209 lines
6.2 KiB
C
209 lines
6.2 KiB
C
|
//----------------------------------------------------------------------------
|
||
|
// Microsoft OLE DB Implementation For Index Server
|
||
|
// (C) Copyright 1997 By Microsoft Corporation.
|
||
|
//
|
||
|
// @doc
|
||
|
//
|
||
|
// @module PTPROPS.H |
|
||
|
//
|
||
|
// @rev 1 | 10-13-97 | Briants | Created
|
||
|
//
|
||
|
|
||
|
// Includes ------------------------------------------------------------------
|
||
|
#ifndef _PTPROPS_H_
|
||
|
#define _PTPROPS_H_
|
||
|
|
||
|
const ULONG MAX_CCH_COLUMNNAME = 128; // per Section 3.1 of spec
|
||
|
const ULONG CCH_CIRESTRICTION_INCREMENT = 128;
|
||
|
const ULONG CB_SCOPE_DATA_BUFFER_INC = 512;
|
||
|
const ULONG SCOPE_BUFFERS_INCREMENT = 5;
|
||
|
const ULONG UNUSED_OFFSET = (ULONG)-1;
|
||
|
|
||
|
#define MAX_ERRORS 2
|
||
|
|
||
|
class CScopeData
|
||
|
{
|
||
|
private: //@access Private Data Members
|
||
|
LONG m_cRef;
|
||
|
|
||
|
ULONG m_cScope;
|
||
|
ULONG m_cMaxScope;
|
||
|
ULONG* m_rgulDepths;
|
||
|
ULONG* m_rgCatalogOffset;
|
||
|
ULONG* m_rgScopeOffset;
|
||
|
ULONG* m_rgMachineOffset;
|
||
|
|
||
|
ULONG m_cbData;
|
||
|
ULONG m_cbMaxData;
|
||
|
BYTE* m_rgbData;
|
||
|
|
||
|
private: //@access Private Member Functions
|
||
|
HRESULT CacheData(LPVOID pData, ULONG cb, ULONG* pulOffset);
|
||
|
|
||
|
public:
|
||
|
CScopeData();
|
||
|
~CScopeData();
|
||
|
|
||
|
HRESULT FInit(LPCWSTR pcwszMachine);
|
||
|
HRESULT Reset(void);
|
||
|
|
||
|
// Handle sharing of this object
|
||
|
ULONG AddRef(void);
|
||
|
ULONG Release(void);
|
||
|
|
||
|
|
||
|
HRESULT GetData(ULONG uPropId, VARIANT* pvValue, LPCWSTR pcwszCatalog = NULL);
|
||
|
HRESULT SetTemporaryMachine(LPWSTR pwszMachine, ULONG cch);
|
||
|
HRESULT SetTemporaryCatalog(LPWSTR pwszCatalog, ULONG cch);
|
||
|
HRESULT SetTemporaryScope(LPWSTR pwszScope, ULONG cch);
|
||
|
HRESULT IncrementScopeCount();
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// @mfunc Stores the traversl depth used for setting scope properties
|
||
|
// in the compiler environment.
|
||
|
//
|
||
|
// @rdesc none
|
||
|
//
|
||
|
inline void SetTemporaryDepth(
|
||
|
ULONG ulDepth // @parm IN | search depth
|
||
|
)
|
||
|
{
|
||
|
m_rgulDepths[m_cScope] = ulDepth;
|
||
|
}
|
||
|
|
||
|
|
||
|
//--------------------------------------------------------------------
|
||
|
// @func Masks the traversal depth used for setting scope
|
||
|
// properties in the compiler environment. This is used
|
||
|
// to specify virtual or physical paths.
|
||
|
//
|
||
|
// @rdesc none
|
||
|
//
|
||
|
inline void MaskTemporaryDepth(
|
||
|
ULONG ulMask // @parm IN | search mask (virtual or physical)
|
||
|
)
|
||
|
{
|
||
|
m_rgulDepths[m_cScope] |= ulMask;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
// CImpIParserTreeProperties Object
|
||
|
class CImpIParserTreeProperties : public IParserTreeProperties
|
||
|
{
|
||
|
private:
|
||
|
LONG m_cRef;
|
||
|
|
||
|
//@cmember
|
||
|
CScopeData* m_pCScopeData;
|
||
|
|
||
|
LPWSTR m_pwszCatalog;
|
||
|
|
||
|
HRESULT m_LastHR;
|
||
|
UINT m_iErrOrd;
|
||
|
WCHAR* m_pwszErrParams[MAX_ERRORS];
|
||
|
ULONG m_cErrParams;
|
||
|
|
||
|
// Have buffer with space for max column name +
|
||
|
// a space before the column name.
|
||
|
WCHAR m_rgwchCiColumn[MAX_CCH_COLUMNNAME + 2];
|
||
|
ULONG m_cchMaxRestriction;
|
||
|
ULONG m_cchRestriction;
|
||
|
LPWSTR m_pwszRestriction;
|
||
|
LPWSTR m_pwszRestrictionAppendPtr;
|
||
|
bool m_fLeftParen;
|
||
|
|
||
|
BOOL m_fDesc; // make the sort direction "sticky"
|
||
|
DBTYPE m_dbType;
|
||
|
DBCOMMANDTREE* m_pctContainsColumn;
|
||
|
|
||
|
|
||
|
public:
|
||
|
// CTOR and DTOR
|
||
|
CImpIParserTreeProperties();
|
||
|
~CImpIParserTreeProperties();
|
||
|
|
||
|
HRESULT FInit(LPCWSTR pwszCatalog, LPCWSTR pwszMachine);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(
|
||
|
REFIID riid, LPVOID* ppVoid);
|
||
|
STDMETHODIMP_(ULONG) Release (void);
|
||
|
STDMETHODIMP_(ULONG) AddRef (void);
|
||
|
|
||
|
STDMETHODIMP GetProperties(
|
||
|
ULONG eParseProp, VARIANT* vParseProp);
|
||
|
|
||
|
void SetCiColumn(LPWSTR pwszColumn);
|
||
|
HRESULT AppendCiRestriction(LPWSTR pwsz, ULONG cch);
|
||
|
HRESULT UseCiColumn(WCHAR wch);
|
||
|
HRESULT CreateNewScopeDataObject(LPCWSTR pwszMachine);
|
||
|
void ReplaceScopeDataPtr(CScopeData* pCScopeData);
|
||
|
|
||
|
// Inline Functions
|
||
|
inline CScopeData* GetScopeDataPtr()
|
||
|
{ return m_pCScopeData; }
|
||
|
|
||
|
inline void CiNeedLeftParen(void)
|
||
|
{ m_fLeftParen = true; }
|
||
|
|
||
|
inline void SetNumErrParams(UINT cErrParams)
|
||
|
{ m_cErrParams = cErrParams; }
|
||
|
|
||
|
inline UINT GetNumErrParams()
|
||
|
{ return m_cErrParams; }
|
||
|
|
||
|
inline void SetErrorHResult(HRESULT hr, UINT iErrOrd=0)
|
||
|
{
|
||
|
m_LastHR = hr;
|
||
|
m_iErrOrd = iErrOrd;
|
||
|
m_cErrParams = 0;
|
||
|
}
|
||
|
|
||
|
inline void SetErrorToken(const WCHAR* pwstr)
|
||
|
{
|
||
|
assert(m_cErrParams < MAX_ERRORS); // can't happen
|
||
|
WCHAR * pwc = CopyString( pwstr );
|
||
|
|
||
|
// Truncate long errors since FormatMessage will fail otherwise
|
||
|
|
||
|
if ( wcslen( pwc ) >= (MAX_PATH-1) )
|
||
|
pwc[ MAX_PATH-1] = 0;
|
||
|
|
||
|
m_pwszErrParams[m_cErrParams++] = pwc;
|
||
|
}
|
||
|
|
||
|
inline HRESULT GetErrorHResult()
|
||
|
{ return m_LastHR; }
|
||
|
|
||
|
inline UINT GetErrorOrdinal()
|
||
|
{ return m_iErrOrd; }
|
||
|
|
||
|
inline void FreeErrorDescriptions()
|
||
|
{
|
||
|
for (UINT i = 0; i < m_cErrParams; i++)
|
||
|
delete [] m_pwszErrParams[i];
|
||
|
}
|
||
|
|
||
|
inline DBTYPE GetDBType()
|
||
|
{ return m_dbType; }
|
||
|
|
||
|
inline void SetDBType(DBTYPE dbType)
|
||
|
{ m_dbType = dbType; }
|
||
|
|
||
|
inline BOOL GetSortDesc()
|
||
|
{ return m_fDesc; }
|
||
|
|
||
|
inline void SetSortDesc(BOOL fDesc)
|
||
|
{ m_fDesc = fDesc; }
|
||
|
|
||
|
inline DBCOMMANDTREE* GetContainsColumn()
|
||
|
{ return m_pctContainsColumn; }
|
||
|
|
||
|
inline void SetContainsColumn(DBCOMMANDTREE* pct)
|
||
|
{ m_pctContainsColumn = pct; }
|
||
|
|
||
|
}; // End of Class
|
||
|
|
||
|
#endif // _PTPROPS_H_
|