Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SimpleExpression.cs / 1 / SimpleExpression.cs
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data.Linq.Provider;
using System.Linq;
using System.Data.Linq.SqlClient;
using System.Diagnostics.CodeAnalysis;
namespace System.Data.Linq.SqlClient {
///
/// Determines whether an expression is simple or not.
/// Simple is a scalar expression that contains only functions, operators and column references
///
internal static class SimpleExpression {
internal static bool IsSimple(SqlExpression expr) {
Visitor v = new Visitor();
v.Visit(expr);
return v.IsSimple;
}
class Visitor : SqlVisitor {
bool isSimple = true;
internal bool IsSimple {
get { return this.isSimple; }
}
[SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "These issues are related to our use of if-then and case statements for node types, which adds to the complexity count however when reviewed they are easy to navigate and understand.")]
internal override SqlNode Visit(SqlNode node) {
if (node == null) {
return null;
}
if (!this.isSimple) {
return node;
}
switch (node.NodeType) {
case SqlNodeType.Not:
case SqlNodeType.Not2V:
case SqlNodeType.Negate:
case SqlNodeType.BitNot:
case SqlNodeType.IsNull:
case SqlNodeType.IsNotNull:
case SqlNodeType.ValueOf:
case SqlNodeType.OuterJoinedValue:
case SqlNodeType.ClrLength:
case SqlNodeType.Add:
case SqlNodeType.Sub:
case SqlNodeType.Mul:
case SqlNodeType.Div:
case SqlNodeType.Mod:
case SqlNodeType.BitAnd:
case SqlNodeType.BitOr:
case SqlNodeType.BitXor:
case SqlNodeType.And:
case SqlNodeType.Or:
case SqlNodeType.GE:
case SqlNodeType.GT:
case SqlNodeType.LE:
case SqlNodeType.LT:
case SqlNodeType.EQ:
case SqlNodeType.NE:
case SqlNodeType.EQ2V:
case SqlNodeType.NE2V:
case SqlNodeType.Between:
case SqlNodeType.Concat:
case SqlNodeType.Convert:
case SqlNodeType.Cast:
case SqlNodeType.Treat:
case SqlNodeType.Member:
case SqlNodeType.TypeCase:
case SqlNodeType.SearchedCase:
case SqlNodeType.SimpleCase:
case SqlNodeType.Like:
case SqlNodeType.FunctionCall:
case SqlNodeType.ExprSet:
case SqlNodeType.OptionalValue:
case SqlNodeType.Parameter:
case SqlNodeType.ColumnRef:
case SqlNodeType.Value:
case SqlNodeType.Variable:
return base.Visit(node);
case SqlNodeType.Column:
case SqlNodeType.ClientCase:
case SqlNodeType.DiscriminatedType:
case SqlNodeType.Link:
case SqlNodeType.Row:
case SqlNodeType.UserQuery:
case SqlNodeType.StoredProcedureCall:
case SqlNodeType.UserRow:
case SqlNodeType.UserColumn:
case SqlNodeType.Multiset:
case SqlNodeType.ScalarSubSelect:
case SqlNodeType.Element:
case SqlNodeType.Exists:
case SqlNodeType.Join:
case SqlNodeType.Select:
case SqlNodeType.New:
case SqlNodeType.ClientQuery:
case SqlNodeType.ClientArray:
case SqlNodeType.Insert:
case SqlNodeType.Update:
case SqlNodeType.Delete:
case SqlNodeType.MemberAssign:
case SqlNodeType.Assign:
case SqlNodeType.Block:
case SqlNodeType.Union:
case SqlNodeType.DoNotVisit:
case SqlNodeType.MethodCall:
case SqlNodeType.Nop:
default:
this.isSimple = false;
return node;
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data.Linq.Provider;
using System.Linq;
using System.Data.Linq.SqlClient;
using System.Diagnostics.CodeAnalysis;
namespace System.Data.Linq.SqlClient {
///
/// Determines whether an expression is simple or not.
/// Simple is a scalar expression that contains only functions, operators and column references
///
internal static class SimpleExpression {
internal static bool IsSimple(SqlExpression expr) {
Visitor v = new Visitor();
v.Visit(expr);
return v.IsSimple;
}
class Visitor : SqlVisitor {
bool isSimple = true;
internal bool IsSimple {
get { return this.isSimple; }
}
[SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Justification = "These issues are related to our use of if-then and case statements for node types, which adds to the complexity count however when reviewed they are easy to navigate and understand.")]
internal override SqlNode Visit(SqlNode node) {
if (node == null) {
return null;
}
if (!this.isSimple) {
return node;
}
switch (node.NodeType) {
case SqlNodeType.Not:
case SqlNodeType.Not2V:
case SqlNodeType.Negate:
case SqlNodeType.BitNot:
case SqlNodeType.IsNull:
case SqlNodeType.IsNotNull:
case SqlNodeType.ValueOf:
case SqlNodeType.OuterJoinedValue:
case SqlNodeType.ClrLength:
case SqlNodeType.Add:
case SqlNodeType.Sub:
case SqlNodeType.Mul:
case SqlNodeType.Div:
case SqlNodeType.Mod:
case SqlNodeType.BitAnd:
case SqlNodeType.BitOr:
case SqlNodeType.BitXor:
case SqlNodeType.And:
case SqlNodeType.Or:
case SqlNodeType.GE:
case SqlNodeType.GT:
case SqlNodeType.LE:
case SqlNodeType.LT:
case SqlNodeType.EQ:
case SqlNodeType.NE:
case SqlNodeType.EQ2V:
case SqlNodeType.NE2V:
case SqlNodeType.Between:
case SqlNodeType.Concat:
case SqlNodeType.Convert:
case SqlNodeType.Cast:
case SqlNodeType.Treat:
case SqlNodeType.Member:
case SqlNodeType.TypeCase:
case SqlNodeType.SearchedCase:
case SqlNodeType.SimpleCase:
case SqlNodeType.Like:
case SqlNodeType.FunctionCall:
case SqlNodeType.ExprSet:
case SqlNodeType.OptionalValue:
case SqlNodeType.Parameter:
case SqlNodeType.ColumnRef:
case SqlNodeType.Value:
case SqlNodeType.Variable:
return base.Visit(node);
case SqlNodeType.Column:
case SqlNodeType.ClientCase:
case SqlNodeType.DiscriminatedType:
case SqlNodeType.Link:
case SqlNodeType.Row:
case SqlNodeType.UserQuery:
case SqlNodeType.StoredProcedureCall:
case SqlNodeType.UserRow:
case SqlNodeType.UserColumn:
case SqlNodeType.Multiset:
case SqlNodeType.ScalarSubSelect:
case SqlNodeType.Element:
case SqlNodeType.Exists:
case SqlNodeType.Join:
case SqlNodeType.Select:
case SqlNodeType.New:
case SqlNodeType.ClientQuery:
case SqlNodeType.ClientArray:
case SqlNodeType.Insert:
case SqlNodeType.Update:
case SqlNodeType.Delete:
case SqlNodeType.MemberAssign:
case SqlNodeType.Assign:
case SqlNodeType.Block:
case SqlNodeType.Union:
case SqlNodeType.DoNotVisit:
case SqlNodeType.MethodCall:
case SqlNodeType.Nop:
default:
this.isSimple = false;
return node;
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CheckBoxStandardAdapter.cs
- CommonProperties.cs
- BaseTemplateBuildProvider.cs
- filewebrequest.cs
- ZipPackage.cs
- GenericUI.cs
- DoubleAnimation.cs
- OpenCollectionAsyncResult.cs
- HtmlUtf8RawTextWriter.cs
- BooleanExpr.cs
- PagesSection.cs
- UInt64Converter.cs
- CorrelationHandle.cs
- NavigationProperty.cs
- DataObject.cs
- StringFunctions.cs
- CalendarDay.cs
- ColorTranslator.cs
- basenumberconverter.cs
- BackStopAuthenticationModule.cs
- cookie.cs
- CodeSubDirectoriesCollection.cs
- ColumnResizeUndoUnit.cs
- IfJoinedCondition.cs
- SelfIssuedAuthProofToken.cs
- Update.cs
- DirectoryRedirect.cs
- DesignerWithHeader.cs
- MetadataStore.cs
- XmlSortKeyAccumulator.cs
- BitmapSourceSafeMILHandle.cs
- StorageEndPropertyMapping.cs
- DaylightTime.cs
- MasterPageBuildProvider.cs
- DispatcherExceptionFilterEventArgs.cs
- ArrayHelper.cs
- FixedSOMImage.cs
- SqlFormatter.cs
- XPathDocument.cs
- IISUnsafeMethods.cs
- GifBitmapDecoder.cs
- Decimal.cs
- ModelPerspective.cs
- BinHexEncoding.cs
- WindowsFont.cs
- TextContainerHelper.cs
- RayHitTestParameters.cs
- VirtualPath.cs
- AssemblyNameProxy.cs
- Aggregates.cs
- ProxyAttribute.cs
- RequestCacheEntry.cs
- TdsParserHelperClasses.cs
- ResourceIDHelper.cs
- OpacityConverter.cs
- CacheMode.cs
- DisplayNameAttribute.cs
- SortAction.cs
- CreateUserWizardDesigner.cs
- Vector3DKeyFrameCollection.cs
- Privilege.cs
- SchemaElementDecl.cs
- ContainerControl.cs
- CompleteWizardStep.cs
- SqlGenericUtil.cs
- XPathSelectionIterator.cs
- EmptyReadOnlyDictionaryInternal.cs
- PipeStream.cs
- System.Data.OracleClient_BID.cs
- BaseInfoTable.cs
- FixedSOMTableCell.cs
- TripleDES.cs
- XmlDataSourceNodeDescriptor.cs
- GridItemCollection.cs
- AnyAllSearchOperator.cs
- AttributeInfo.cs
- HWStack.cs
- RangeExpression.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- PersonalizationAdministration.cs
- TextProviderWrapper.cs
- XmlChildEnumerator.cs
- MouseButton.cs
- SecurityUtils.cs
- SystemWebCachingSectionGroup.cs
- ObjectDisposedException.cs
- ProgressBar.cs
- GetUserPreferenceRequest.cs
- XmlStringTable.cs
- XmlSerializerSection.cs
- ListViewHitTestInfo.cs
- CursorInteropHelper.cs
- CustomAttribute.cs
- bidPrivateBase.cs
- SqlMetaData.cs
- RawKeyboardInputReport.cs
- RSAPKCS1SignatureDeformatter.cs
- SqlServer2KCompatibilityCheck.cs
- OdbcUtils.cs
- XmlNamespaceManager.cs