Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Query / PlanCompiler / PlanCompilerUtil.cs / 1 / PlanCompilerUtil.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....], [....]
//---------------------------------------------------------------------
using System;
using md = System.Data.Metadata.Edm;
using System.Data.Query.InternalTrees;
namespace System.Data.Query.PlanCompiler
{
///
/// Utility class for the methods shared among the plan compiler components
///
internal static class PlanCompilerUtil
{
///
/// Utility method that determines whether a given CaseOp subtree can be optimized.
/// Called by both PreProcessor and NominalTypeEliminator.
///
/// If the case statement is of the shape:
/// case when X then NULL else Y, or
/// case when X then Y else NULL,
/// where Y is of row type, and the types of the input CaseOp, the NULL and Y are the same,
/// return true
///
///
///
///
internal static bool IsRowTypeCaseOpWithNullability(CaseOp op, Node n, out bool thenClauseIsNull)
{
thenClauseIsNull = false; //any default value will do
if (!md.TypeSemantics.IsRowType(op.Type))
{
return false;
}
if (n.Children.Count != 3)
{
return false;
}
//All three types must be equal
if (!n.Child1.Op.Type.EdmEquals(op.Type) || !n.Child2.Op.Type.EdmEquals(op.Type))
{
return false;
}
//At least one of Child1 and Child2 needs to be a null
if (n.Child1.Op.OpType == OpType.Null)
{
thenClauseIsNull = true;
return true;
}
if (n.Child2.Op.OpType == OpType.Null)
{
// thenClauseIsNull stays false
return true;
}
return false;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....], [....]
//---------------------------------------------------------------------
using System;
using md = System.Data.Metadata.Edm;
using System.Data.Query.InternalTrees;
namespace System.Data.Query.PlanCompiler
{
///
/// Utility class for the methods shared among the plan compiler components
///
internal static class PlanCompilerUtil
{
///
/// Utility method that determines whether a given CaseOp subtree can be optimized.
/// Called by both PreProcessor and NominalTypeEliminator.
///
/// If the case statement is of the shape:
/// case when X then NULL else Y, or
/// case when X then Y else NULL,
/// where Y is of row type, and the types of the input CaseOp, the NULL and Y are the same,
/// return true
///
///
///
///
internal static bool IsRowTypeCaseOpWithNullability(CaseOp op, Node n, out bool thenClauseIsNull)
{
thenClauseIsNull = false; //any default value will do
if (!md.TypeSemantics.IsRowType(op.Type))
{
return false;
}
if (n.Children.Count != 3)
{
return false;
}
//All three types must be equal
if (!n.Child1.Op.Type.EdmEquals(op.Type) || !n.Child2.Op.Type.EdmEquals(op.Type))
{
return false;
}
//At least one of Child1 and Child2 needs to be a null
if (n.Child1.Op.OpType == OpType.Null)
{
thenClauseIsNull = true;
return true;
}
if (n.Child2.Op.OpType == OpType.Null)
{
// thenClauseIsNull stays false
return true;
}
return false;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConfigXmlComment.cs
- MSG.cs
- BevelBitmapEffect.cs
- ValidationEventArgs.cs
- SafeRightsManagementPubHandle.cs
- EventLog.cs
- ReachUIElementCollectionSerializerAsync.cs
- MatchingStyle.cs
- TypedTableHandler.cs
- DesignerValidatorAdapter.cs
- DatatypeImplementation.cs
- UserControlCodeDomTreeGenerator.cs
- DataBindEngine.cs
- MemberPathMap.cs
- OdbcEnvironment.cs
- ScriptMethodAttribute.cs
- DataGridDesigner.cs
- NetTcpSecurityElement.cs
- MembershipSection.cs
- CultureData.cs
- PlaceHolder.cs
- SafeThemeHandle.cs
- Cursors.cs
- HttpResponseInternalBase.cs
- EntityCodeGenerator.cs
- MsmqActivation.cs
- WindowsScrollBarBits.cs
- UserMapPath.cs
- MexNamedPipeBindingElement.cs
- Semaphore.cs
- XmlSchemaObjectTable.cs
- DiscoveryVersionConverter.cs
- ZipIOLocalFileDataDescriptor.cs
- WorkflowPrinting.cs
- ProxyHelper.cs
- Int64.cs
- ZipIOFileItemStream.cs
- CapabilitiesRule.cs
- LOSFormatter.cs
- Substitution.cs
- TextMarkerSource.cs
- _StreamFramer.cs
- PropertyNames.cs
- DataGridViewCellConverter.cs
- RemotingSurrogateSelector.cs
- AgileSafeNativeMemoryHandle.cs
- SvcMapFileLoader.cs
- TextServicesCompartmentEventSink.cs
- HuffModule.cs
- SchemaElement.cs
- ManualWorkflowSchedulerService.cs
- ContentValidator.cs
- RegexGroup.cs
- TreeViewImageIndexConverter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- TemplateBaseAction.cs
- ServiceDescription.cs
- Encoding.cs
- URLAttribute.cs
- SqlConnectionHelper.cs
- RegistryConfigurationProvider.cs
- PerformanceCounterManager.cs
- ProtocolsSection.cs
- Point3DIndependentAnimationStorage.cs
- LoginName.cs
- SymbolMethod.cs
- CodeComment.cs
- Parser.cs
- CookielessHelper.cs
- BaseTemplateParser.cs
- Popup.cs
- ContactManager.cs
- PropertyCondition.cs
- OleDbRowUpdatedEvent.cs
- RowBinding.cs
- CompositeDataBoundControl.cs
- DbProviderFactory.cs
- HttpWrapper.cs
- BitmapEffectDrawingContextState.cs
- WeakEventManager.cs
- WeakReferenceKey.cs
- Int64AnimationUsingKeyFrames.cs
- XmlNamespaceDeclarationsAttribute.cs
- MenuAdapter.cs
- Baml2006ReaderContext.cs
- StylusButton.cs
- GridViewCommandEventArgs.cs
- DataTableReader.cs
- OdbcEnvironment.cs
- FamilyTypeface.cs
- AdornedElementPlaceholder.cs
- Italic.cs
- And.cs
- DataColumnChangeEvent.cs
- DynamicResourceExtension.cs
- TableLayoutSettings.cs
- HttpModulesSection.cs
- FormsIdentity.cs
- AmbientProperties.cs
- SecUtil.cs