windows-nt/Source/XPSP1/NT/inetsrv/query/qutil/h/strrest.hxx
2020-09-26 16:20:57 +08:00

168 lines
6.6 KiB
C++

//+---------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation, 1996 - 2000.
//
// File: strrest.hxx
//
// Contents: Builds a restriction object from a string
//
// History: 96/Jan/3 DwightKr Created
// 97/Jul/22 KrishnaN Extended to take a restriction
// and build a full query tree.
//
//----------------------------------------------------------------------------
#pragma once
class PVariableSet;
class CVariable;
CDbRestriction * GetStringDbRestriction( const WCHAR * wcsRestriction,
ULONG ulDialect,
IColumnMapper * pList,
LCID locale );
CDbCmdTreeNode * FormDbQueryTree( XPtr<CDbCmdTreeNode> & xDbCmdTreeNode,
XPtr<CDbSortNode> & xDbSortNode,
XPtr<CDbProjectListAnchor> & pDbCols,
XPtr<CDbNestingNode> & pDbGroupNode,
ULONG ulMaxRecords,
ULONG ulFirstRows );
CDbColumns * ParseStringColumns( WCHAR const * wcsColumns,
IColumnMapper * pList,
LCID lcid = GetSystemDefaultLCID(),
PVariableSet * pVarSet = 0,
CDynArray<WCHAR> * pawcsColumns = 0 );
CDbProjectListAnchor * ParseColumnsWithFriendlyNames( WCHAR const * wcsColumns,
IColumnMapper * pList,
PVariableSet * pVarSet = 0 );
//+---------------------------------------------------------------------------
//
// Class: CTextToTree
//
// Purpose: An object to convert the textual restriction, columns and
// sort specification to a DBCOMMANDTREE.
//
// History: 3-04-97 srikants Created
//
//----------------------------------------------------------------------------
class CTextToTree
{
public:
CTextToTree( WCHAR const * wcsRestriction,
ULONG ulDialect,
WCHAR const * wcsColumns,
IColumnMapper * pPropList,
LCID locale,
WCHAR const * wcsSort = 0,
WCHAR const * wcsGroup = 0,
PVariableSet * pVariableSet = 0,
ULONG maxRecs = 0,
ULONG cFirstRows = 0,
BOOL fKeepFriendlyNames = FALSE )
: _wcsRestriction(wcsRestriction),
_ulDialect( ulDialect ),
_wcsColumns(wcsColumns),
_wcsSort(wcsSort),
_wcsGroup(wcsGroup),
_locale(locale),
_pVariableSet(pVariableSet),
_pDbColumns(0),
_xPropList(pPropList),
_maxRecs(maxRecs),
_cFirstRows(cFirstRows),
_fKeepFriendlyNames( fKeepFriendlyNames ),
_pDbCmdTree( 0 )
{
Win4Assert( 0 != wcsRestriction && 0 != wcsRestriction[0] );
Win4Assert( 0 != _wcsColumns && 0 != _wcsColumns[0] );
_xPropList->AddRef();
}
CTextToTree( DBCOMMANDTREE const *pDbCmdTree,
WCHAR const * wcsColumns,
IColumnMapper *pPropList,
LCID locale,
WCHAR const * wcsSort = 0,
WCHAR const * wcsGroup = 0,
PVariableSet * pVariableSet = 0,
ULONG maxRecs = 0,
ULONG cFirstRows = 0,
BOOL fKeepFriendlyNames = FALSE )
: _wcsRestriction( 0 ),
_ulDialect( ISQLANG_V1 ),
_wcsColumns(wcsColumns),
_wcsSort(wcsSort),
_wcsGroup(wcsGroup),
_locale(locale),
_pVariableSet(pVariableSet),
_pDbColumns(0),
_xPropList(pPropList),
_maxRecs(maxRecs),
_cFirstRows(cFirstRows),
_fKeepFriendlyNames( fKeepFriendlyNames ),
_pDbCmdTree( pDbCmdTree )
{
Win4Assert( 0 != _pDbCmdTree );
Win4Assert( 0 != _wcsColumns && 0 != _wcsColumns[0] );
_xPropList->AddRef();
}
CTextToTree( WCHAR const * wcsRestriction,
ULONG ulDialect,
CDbColumns * pDbColumns,
IColumnMapper *pPropList,
LCID locale,
WCHAR const * wcsSort = 0,
WCHAR const * wcsGroup = 0,
PVariableSet * pVariableSet = 0,
ULONG maxRecs = 0,
ULONG cFirstRows = 0 )
: _wcsRestriction(wcsRestriction),
_ulDialect( ulDialect ),
_wcsColumns(0),
_wcsSort(wcsSort),
_wcsGroup(wcsGroup),
_locale(locale),
_pVariableSet(pVariableSet),
_pDbColumns(pDbColumns),
_xPropList(pPropList),
_maxRecs(maxRecs),
_cFirstRows(cFirstRows),
_fKeepFriendlyNames(FALSE),
_pDbCmdTree( 0 )
{
Win4Assert( 0 != wcsRestriction && 0 != wcsRestriction[0] );
Win4Assert( 0 != pDbColumns );
_xPropList->AddRef();
}
DBCOMMANDTREE * FormFullTree();
private:
WCHAR const * _wcsRestriction; // Restriction in "Tripolish"
ULONG _ulDialect; // tripolish dialict
DBCOMMANDTREE const * _pDbCmdTree; // Restriction tree
WCHAR const * _wcsColumns; // Comma separated column list
WCHAR const * _wcsSort; // Sort specification
WCHAR const * _wcsGroup; // Grouping specification
CDbColumns * _pDbColumns; // Parsed db columns
XInterface<IColumnMapper> _xPropList; // Property List
LCID _locale; // Locale for parsing the strings
PVariableSet * _pVariableSet; // Variable Set
ULONG _maxRecs; // Maximum number of output records
ULONG _cFirstRows;
BOOL _fKeepFriendlyNames; // Flag indicating if friendly names
// from columns should be retained
};