windows-nt/Source/XPSP1/NT/inetsrv/query/icommand/dbrstrct.cxx
2020-09-26 16:20:57 +08:00

316 lines
8.3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: dbrstrct.cxx
//
// Contents: C++ Wrapper classes for DBCOMMANDTREE boolean operators
//
// Classes: CDbRestriction
// CDbNodeRestriction
// CDbNotRestriction
// CDbPropBaseRestriction
// CDbPropertyRestriction
// CDbContentBaseRestriction
// CDbContentRestriction
// CDbNatLangContentRestriction
//
// History: 6-06-95 srikants Created
//
//----------------------------------------------------------------------------
#include "pch.cxx"
#pragma hdrstop
extern const GUID DBGUID_LIKE_OFS;
//+---------------------------------------------------------------------------
//
// Method: CDbPropBaseRestriction::SetProperty
//
// Synopsis: Set property node on a content restriction
//
// Arguments: [Property] - property identifier to be set on node
//
// Returns:
//
// History: 6-11-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
BOOL CDbPropBaseRestriction::SetProperty( DBID const & Property )
{
//
// If a child property node already exists, we must delete it
//
CDbCmdTreeNode * pChild = GetFirstChild();
Win4Assert( 0 == pChild || pChild->IsColumnName() );
BOOL fSuccess = TRUE;
if ( 0 != pChild && pChild->IsColumnName())
{
RemoveFirstChild( );
delete pChild;
}
XPtr<CDbColumnNode> xProperty( new CDbColumnNode( Property, TRUE ) );
if ( !xProperty.IsNull() && xProperty->IsValid() )
{
InsertChild( xProperty.GetPointer() );
xProperty.Acquire();
}
else
fSuccess = FALSE;
return fSuccess;
}
//+---------------------------------------------------------------------------
//
// Method: CDbPropBaseRestriction::SetProperty
//
// Synopsis: Set property node on a content restriction
//
// Arguments: [Property] - property identifier to be set on node
//
// Returns:
//
// History: 6-11-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
BOOL CDbPropBaseRestriction::SetProperty( CDbColumnNode const & Property )
{
//
// If a child node already exists, we must delete it
//
CDbCmdTreeNode * pChild = GetFirstChild();
Win4Assert( 0 == pChild || pChild->IsColumnName() );
if ( 0 != pChild && pChild->IsColumnName() )
{
RemoveFirstChild();
delete pChild;
}
BOOL fSuccess = TRUE;
XPtr<CDbColumnNode> xProperty( new CDbColumnNode( Property ) );
if ( !xProperty.IsNull() && xProperty->IsValid() )
{
InsertChild( xProperty.GetPointer() );
xProperty.Acquire();
}
else
fSuccess = FALSE;
return fSuccess;
}
//+---------------------------------------------------------------------------
//
// Method: CDbPropertyRestriction::CDbPropertyRestriction
//
// Synopsis:
//
// Arguments: [relop] - relation operator
// [Property] - property identifier to be set on node
// [prval] -
//
// Returns:
//
// History: 6-07-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
CDbPropertyRestriction::CDbPropertyRestriction( DBCOMMANDOP relop,
DBID const & Property,
CStorageVariant const & prval )
{
SetRelation( relop );
SetProperty( Property );
SetValue( prval );
if (DBOP_like == relop)
_SetLikeRelation();
else
SetValueType(DBVALUEKIND_I4);
SetWeight(0);
}
//+---------------------------------------------------------------------------
//
// Method: CDbPropertyRestriction::IsCIDialect, private
//
// Synopsis: Set up for a DBOP_like node.
//
// Arguments: -none-
//
// Returns: BOOL - TRUE if value is the GUID for the CI regexp dialect
//
// History: 26 Jul 1995 AlanW Created
//
// Notes:
//
//----------------------------------------------------------------------------
BOOL CDbPropertyRestriction::IsCIDialect( )
{
if ( DBVALUEKIND_LIKE == wKind )
{
CDbLike * pLike = (CDbLike *) value.pdblikeValue;
if ( 0 != pLike )
return DBGUID_LIKE_OFS == pLike->GetDialect();
}
return FALSE;
}
//+---------------------------------------------------------------------------
//
// Method: CDbPropertyRestriction::_FindOrAddValueNode
//
// Synopsis:
//
// Returns:
//
// History: 6-11-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
CDbScalarValue * CDbPropertyRestriction::_FindOrAddValueNode()
{
CDbScalarValue * pValue = _FindValueNode();
if ( 0 == pValue )
{
pValue = new CDbScalarValue();
if ( 0 != pValue )
AppendChild( pValue );
}
return pValue;
}
//+---------------------------------------------------------------------------
//
// Method: CDbContentRestriction::CDbContentRestriction
//
// Synopsis:
//
// Arguments: [pwcsPhrase] -
// [Property] - property identifier to be set on node
// [ulGenerateMethod] -
// [lcid] -
//
// Returns:
//
// History: 6-11-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
CDbContentRestriction::CDbContentRestriction(
const WCHAR * pwcsPhrase,
CDbColumnNode const & Property,
ULONG ulGenerateMethod,
LCID lcid ) :
CDbContentBaseRestriction( DBOP_content,
ulGenerateMethod, MAX_QUERY_RANK, lcid, pwcsPhrase )
{
if ( IsContentValid() )
SetProperty( Property );
}
//+---------------------------------------------------------------------------
//
// Method: CDbContentRestriction::CDbContentRestriction
//
// Synopsis:
//
// Arguments: [pwcsPhrase] -
// [Property] - property identifier to be set on node
// [ulGenerateMethod] -
// [lcid] -
//
// Returns:
//
// History: 3-20-96 dlee Created
//
// Notes:
//
//----------------------------------------------------------------------------
CDbContentRestriction::CDbContentRestriction(
const WCHAR * pwcsPhrase,
DBID const & Property,
ULONG ulGenerateMethod,
LCID lcid ) :
CDbContentBaseRestriction( DBOP_content,
ulGenerateMethod, MAX_QUERY_RANK, lcid, pwcsPhrase )
{
if ( IsContentValid() )
SetProperty( Property );
}
//+---------------------------------------------------------------------------
//
// Method: CDbNatLangRestriction::CdbNatLangRestriction
//
// Synopsis:
//
// Arguments: [pwcsPhrase] -
// [Property] - property identifier to be set on node
// [lcid] -
//
// Returns:
//
// History: 6-11-95 srikants Created
//
// Notes:
//
//----------------------------------------------------------------------------
CDbNatLangRestriction::CDbNatLangRestriction(
const WCHAR * pwcsPhrase,
CDbColumnNode const & Property,
LCID lcid )
: CDbContentBaseRestriction( DBOP_content_freetext, GENERATE_METHOD_EXACT,
MAX_QUERY_RANK, lcid, pwcsPhrase )
{
if ( IsContentValid() )
SetProperty( Property );
}
CDbNatLangRestriction::CDbNatLangRestriction(
const WCHAR * pwcsPhrase,
DBID const & Property,
LCID lcid )
: CDbContentBaseRestriction( DBOP_content_freetext, GENERATE_METHOD_EXACT,
MAX_QUERY_RANK, lcid, pwcsPhrase )
{
if ( IsContentValid() )
SetProperty( Property );
}