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
- Helpers.cs
- DataTableExtensions.cs
- UInt16.cs
- PropertyPushdownHelper.cs
- NullReferenceException.cs
- PreservationFileReader.cs
- CellTreeNodeVisitors.cs
- AtomServiceDocumentSerializer.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- TypeNameHelper.cs
- PrintingPermissionAttribute.cs
- SqlVersion.cs
- StorageSetMapping.cs
- SqlParameterizer.cs
- NetworkCredential.cs
- PackageFilter.cs
- PackUriHelper.cs
- RootProjectionNode.cs
- BufferedGraphicsContext.cs
- ListMarkerLine.cs
- DBCSCodePageEncoding.cs
- DynamicUpdateCommand.cs
- HostingEnvironmentException.cs
- IPPacketInformation.cs
- SafeNativeMethodsMilCoreApi.cs
- WpfKnownMemberInvoker.cs
- FixedNode.cs
- EdmComplexPropertyAttribute.cs
- TextRangeProviderWrapper.cs
- Composition.cs
- WebPart.cs
- DbProviderConfigurationHandler.cs
- ConfigXmlCDataSection.cs
- SqlConnection.cs
- CompositeControl.cs
- _BaseOverlappedAsyncResult.cs
- SetterTriggerConditionValueConverter.cs
- ServiceDesigner.cs
- RegexWorker.cs
- AsynchronousChannel.cs
- DataGridPageChangedEventArgs.cs
- LiteralSubsegment.cs
- Tuple.cs
- DetailsViewRowCollection.cs
- XPathCompileException.cs
- Point3DAnimation.cs
- EventListener.cs
- TextTreeObjectNode.cs
- PathGradientBrush.cs
- BitmapEffectrendercontext.cs
- IriParsingElement.cs
- COM2ComponentEditor.cs
- SafeTokenHandle.cs
- SqlProcedureAttribute.cs
- SortDescriptionCollection.cs
- DataListCommandEventArgs.cs
- DispatcherHooks.cs
- SqlHelper.cs
- DetailsViewUpdateEventArgs.cs
- Msmq3PoisonHandler.cs
- RootBrowserWindowAutomationPeer.cs
- mediaeventargs.cs
- CheckBoxFlatAdapter.cs
- FixUpCollection.cs
- XamlBrushSerializer.cs
- GeneralTransform3DGroup.cs
- BindStream.cs
- ColumnResizeAdorner.cs
- WS2007HttpBindingCollectionElement.cs
- PngBitmapEncoder.cs
- EtwTrace.cs
- PerformanceCounterPermissionEntryCollection.cs
- StylusPointPropertyId.cs
- ParsedAttributeCollection.cs
- ViewBase.cs
- Query.cs
- Identity.cs
- EventHandlersStore.cs
- BrushValueSerializer.cs
- CodeFieldReferenceExpression.cs
- BitmapDecoder.cs
- ProviderConnectionPoint.cs
- ModuleBuilderData.cs
- MemberInitExpression.cs
- LineMetrics.cs
- DataSetMappper.cs
- DocumentsTrace.cs
- DragEventArgs.cs
- Attributes.cs
- ParseHttpDate.cs
- Message.cs
- DocumentViewerBase.cs
- RegexGroupCollection.cs
- FileDialogCustomPlace.cs
- TextEffect.cs
- WebSysDefaultValueAttribute.cs
- UseAttributeSetsAction.cs
- AutoSizeComboBox.cs
- WebPartDeleteVerb.cs
- ImageFormat.cs