/* * X S E A R C H . H * * XML push-model parsing for METADATA * * Copyright 1986-1997 Microsoft Corporation, All Rights Reserved */ #ifndef _XSEARCH_H_ #define _XSEARCH_H_ #include // Debugging ----------------------------------------------------------------- // DEFINE_TRACE(Search); #define SearchTrace DO_TRACE(Search) // Ranges -------------------------------------------------------------------- // #include // CSearchContext ------------------------------------------------------------ // class CSearchContext { // non-implemented operators // CSearchContext( const CSearchContext& ); CSearchContext& operator=( const CSearchContext& ); public: virtual ~CSearchContext() {} CSearchContext () { INIT_TRACE(Search); } // When the parser finds an item that applies to the search, a call is // made such that the context is informed of the desired search. // virtual SCODE ScSetSQL(CParseNmspcCache * pnsc, LPCWSTR pwszSQL) = 0; // REPL Search interface ------------------------------------------------- // // Default implementation fails on these items. All impls that support // this type of search must implement.... // virtual SCODE ScSetCollBlob (LPCWSTR pwszBlob) { return E_DAV_UNEXPECTED_TYPE; } virtual SCODE ScSetResTagAdds (LPCWSTR pwszResTagAdd) { return E_DAV_UNEXPECTED_TYPE; } virtual SCODE ScSetReplRequest (BOOL fReplRequest) { return E_DAV_UNEXPECTED_TYPE; } // Range Search interface ------------------------------------------------ // // Default impl. fails for these items. All impls that support this type // of search must implement.... // virtual SCODE ScAddRange (UINT uRT, LPCWSTR pwszRange, LONG lCount) { return E_DAV_UNEXPECTED_TYPE; } // 'GROUP BY' Expansion -------------------------------------------------- // // Default impl. fails for these items. All impls that support this type // of search must implement.... // virtual SCODE ScSetExpansion (DWORD dwExpansion) { return E_DAV_UNEXPECTED_TYPE; } }; // class CNFSearch ------------------------------------------------------------- // class CNFSearch : public CNodeFactory { // The search context // CSearchContext& m_csc; // State tracking // typedef enum { ST_NODOC, ST_SEARCH, ST_QUERY, ST_QUERYENTITY, // REPL (DAV Replication) XML nodes // ST_REPL, ST_REPLCOLLBLOB, ST_REPLRESTAGLIST, ST_REPLRESTAGADD, // Range XML nodes // ST_RANGE, ST_RANGE_TYPE, ST_RANGE_ROWS, // Group Expansion // ST_GROUP_EXPANSION, } SEARCH_PARSE_STATE; SEARCH_PARSE_STATE m_state; // Value buffer // StringBuffer m_sb; // Range items // UINT m_uRT; LONG m_lcRows; // non-implemented // CNFSearch(const CNFSearch& p); CNFSearch& operator=(const CNFSearch& p); public: virtual ~CNFSearch() {}; CNFSearch(CSearchContext& csc) : m_csc(csc), m_state(ST_NODOC), m_uRT(RANGE_UNKNOWN), m_lcRows(0) { } // CNodeFactory specific methods // virtual SCODE ScCompleteAttribute (void); virtual SCODE ScCompleteChildren ( /* [in] */ BOOL fEmptyNode, /* [in] */ DWORD dwType, /* [in] */ const WCHAR __RPC_FAR *pwcText, /* [in] */ ULONG ulLen); virtual SCODE ScHandleNode ( /* [in] */ DWORD dwType, /* [in] */ DWORD dwSubType, /* [in] */ BOOL fTerminal, /* [in] */ const WCHAR __RPC_FAR *pwcText, /* [in] */ ULONG ulLen, /* [in] */ ULONG ulNamespaceLen, /* [in] */ const WCHAR __RPC_FAR *pwcNamespace, /* [in] */ const ULONG ulNsPrefixLen); }; #include #endif // _XSEARCH_H_