Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- WebBrowserHelper.cs
- CollectionType.cs
- CaseStatementSlot.cs
- Image.cs
- FirewallWrapper.cs
- CompilerError.cs
- ParallelDesigner.xaml.cs
- CompositionAdorner.cs
- BindingBase.cs
- GroupStyle.cs
- DateTimeValueSerializerContext.cs
- ResourceSetExpression.cs
- ExpressionNode.cs
- PermissionSetEnumerator.cs
- CallTemplateAction.cs
- MultiplexingDispatchMessageFormatter.cs
- ContentValidator.cs
- Pair.cs
- HealthMonitoringSection.cs
- ViewCellRelation.cs
- PointAnimation.cs
- XmlSchemaGroup.cs
- RepeatEnumerable.cs
- WeakReference.cs
- ProcessModuleCollection.cs
- ExitEventArgs.cs
- SplineKeyFrames.cs
- Vector.cs
- PropertyInfoSet.cs
- OracleInfoMessageEventArgs.cs
- SchemaComplexType.cs
- ManagementNamedValueCollection.cs
- FixedSOMTableCell.cs
- Evidence.cs
- TemplateManager.cs
- HierarchicalDataBoundControl.cs
- CreatingCookieEventArgs.cs
- Event.cs
- XmlNamespaceManager.cs
- SmtpLoginAuthenticationModule.cs
- StringCollection.cs
- MessageLoggingFilterTraceRecord.cs
- Mapping.cs
- Win32.cs
- ListenerTraceUtility.cs
- WeakHashtable.cs
- FlowPosition.cs
- KeyToListMap.cs
- MinimizableAttributeTypeConverter.cs
- TreeNodeBindingCollection.cs
- ToolTipAutomationPeer.cs
- AnnotationComponentManager.cs
- CapabilitiesSection.cs
- SamlSecurityToken.cs
- SettingsPropertyValue.cs
- BuildProviderAppliesToAttribute.cs
- ParseChildrenAsPropertiesAttribute.cs
- Registry.cs
- BrowserTree.cs
- CustomValidator.cs
- BasicBrowserDialog.cs
- URLAttribute.cs
- UnsettableComboBox.cs
- LocationEnvironment.cs
- CharEntityEncoderFallback.cs
- ScriptControlManager.cs
- XmlSchemaExporter.cs
- BufferedOutputAsyncStream.cs
- DropShadowEffect.cs
- ListViewCancelEventArgs.cs
- FileCodeGroup.cs
- TreeNode.cs
- OleServicesContext.cs
- QuaternionAnimationBase.cs
- TypeLibConverter.cs
- MinimizableAttributeTypeConverter.cs
- PropertyEmitterBase.cs
- CryptoKeySecurity.cs
- MarkerProperties.cs
- GridViewColumn.cs
- TextEditorParagraphs.cs
- InputBindingCollection.cs
- PipelineModuleStepContainer.cs
- BitmapEffectDrawing.cs
- ServiceMemoryGates.cs
- CorrelationHandle.cs
- DispatchWrapper.cs
- Canvas.cs
- NumericUpDownAccelerationCollection.cs
- TextHidden.cs
- BamlRecords.cs
- BitmapEffectInputData.cs
- DataGridViewColumnConverter.cs
- FileUtil.cs
- DynamicScriptObject.cs
- Query.cs
- XPathSingletonIterator.cs
- MediaElementAutomationPeer.cs
- WindowsMenu.cs
- BaseAsyncResult.cs