Source code of Windows XP (NT5)
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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1998.
//
// File: PARSER.HXX
//
// Contents: Query Parsers
//
// Classes: CQueryParser
// CPropertyValueParser
// CParserException
//
// History: 30-Apr-92 AmyA Created.
// 15-Jun-94 t-jeffc Added exception classes.
// 02-Mar-95 t-colinb Added CPropertyValueParser class and
// some more exceptions to handle
// the parsing of vector properties
//
//----------------------------------------------------------------------------
#pragma once
typedef XPtr<CDbRestriction> XDbRestriction; typedef XPtr<CDbNodeRestriction> XDbNodeRestriction; typedef XPtr<CDbNotRestriction> XDbNotRestriction; typedef XPtr<CDbVectorRestriction> XDbVectorRestriction; typedef XPtr<CDbPropertyRestriction> XDbPropertyRestriction; typedef XPtr<CDbContentRestriction> XDbContentRestriction; typedef XPtr<CDbNatLangRestriction> XDbNatLangRestriction; typedef XPtr<CDbBooleanNodeRestriction> XDbBooleanNodeRestriction; typedef XPtr<CDbProximityNodeRestriction> XDbProximityNodeRestriction;
// forward decls
class CQueryScanner;
// types of properties - content, regular expression and natural language
enum PropertyType { CONTENTS, REGEX, NATLANGUAGE };
//+---------------------------------------------------------------------------
//
// Class: CQueryParser
//
// Purpose: Changes a query string into a CRestriction for the
// content index.
//
// History: 30-Apr-92 AmyA Created.
// 31-May-94 t-jeffc Extended query grammar.
//
//----------------------------------------------------------------------------
class CQueryParser { public:
CQueryParser( CQueryScanner & scanner, ULONG rankMethod, LCID locale, WCHAR const * wcsProperty, PropertyType propType, IColumnMapper *pList ) :_scan( scanner ), _rankMethod( rankMethod ), _locale( locale ), _xList( pList ), _wcsProperty( 0 ), _propType( propType ) { _xList->AddRef(); SetCurrentProperty( wcsProperty, propType ); }
~CQueryParser() { delete [] _wcsProperty; }
CDbRestriction * ParseQueryPhrase();
WCHAR const * GetCurrentProperty() { return _wcsProperty; }
PropertyType GetPropertyType() const { return _propType; }
BOOL IsRegEx() { return ( REGEX == _propType ); }
private:
CDbRestriction * Query( CDbNodeRestriction * pExpr ); CDbRestriction * QExpr( CDbBooleanNodeRestriction * pExpr ); CDbRestriction * QTerm( CDbBooleanNodeRestriction * pExpr ); CDbRestriction * QProp(); CDbRestriction * QFactor(); CDbRestriction * QGroup( CDbProximityNodeRestriction * pExpr ); CDbRestriction * QPhrase();
CDbRestriction * ParsePropertyRst();
void SetCurrentProperty( WCHAR const * wcsProperty, PropertyType propType );
CQueryScanner & _scan;
ULONG _rankMethod; LCID _locale;
WCHAR * _wcsProperty; PropertyType _propType; XInterface<IColumnMapper> _xList; };
//+---------------------------------------------------------------------------
//
// Class: CPropertyValueParser
//
// Purpose: To intepret a sequence of tokens from a scanner
// and place the results in a CStorageVariant
//
// Notes: This class throws CParserException when errors occur.
//
// History: 02-Mar-95 t-colinb Created.
// 02-Sep-98 KLam Added locale
//
//----------------------------------------------------------------------------
class CPropertyValueParser { public :
CPropertyValueParser( CQueryScanner &scanner, DBTYPE PropertyType, LCID locale );
CStorageVariant *AcquireStgVariant( void ) { return _pStgVariant.Acquire(); }
static BOOL CheckForRelativeDate( WCHAR const * phrase, FILETIME & ft );
private :
void ParseDateTime( WCHAR const * phrase, FILETIME & ft );
LCID _locale; XPtr<CStorageVariant> _pStgVariant; };
//+---------------------------------------------------------------------------
//
// Class: CParserException
//
// Purpose: Exception class for parse errors
//
// History: 17-May-94 t-jeffc Created.
//
//----------------------------------------------------------------------------
class CParserException : public CException { public: CParserException( SCODE pe ) : CException( pe ) { }
SCODE GetParseError() { return GetErrorCode(); } };
|