Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SimpleExpression.cs / 1305376 / 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.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.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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StylusCollection.cs
- TrustLevelCollection.cs
- IisTraceWebEventProvider.cs
- ArrayConverter.cs
- SecurityDescriptor.cs
- ChangePasswordAutoFormat.cs
- ColumnMap.cs
- CursorConverter.cs
- FixedSOMLineCollection.cs
- DBBindings.cs
- WindowInteropHelper.cs
- LocalizableResourceBuilder.cs
- ToggleButtonAutomationPeer.cs
- ApplicationTrust.cs
- OleDbSchemaGuid.cs
- AssemblyAttributesGoHere.cs
- PrimaryKeyTypeConverter.cs
- Misc.cs
- SchemaElementLookUpTable.cs
- ResourceExpressionBuilder.cs
- ProxyWebPart.cs
- ToolStripButton.cs
- StreamGeometryContext.cs
- NetworkCredential.cs
- EventPropertyMap.cs
- GridViewDeleteEventArgs.cs
- DoubleCollectionConverter.cs
- ObjectConverter.cs
- IISMapPath.cs
- HandlerBase.cs
- UIElement3DAutomationPeer.cs
- HelpInfo.cs
- StagingAreaInputItem.cs
- CodeEventReferenceExpression.cs
- ButtonField.cs
- SchemaElementLookUpTable.cs
- SqlDataSourceCommandParser.cs
- DictionaryChange.cs
- AppSettingsExpressionEditor.cs
- SiteMapNodeCollection.cs
- LinkClickEvent.cs
- RightsManagementManager.cs
- SymDocumentType.cs
- WebServiceMethodData.cs
- XPathChildIterator.cs
- CodeLabeledStatement.cs
- PassportIdentity.cs
- SudsParser.cs
- ClrPerspective.cs
- KoreanLunisolarCalendar.cs
- MatrixTransform.cs
- WpfWebRequestHelper.cs
- TogglePattern.cs
- Point3DAnimationBase.cs
- APCustomTypeDescriptor.cs
- ASCIIEncoding.cs
- DocumentEventArgs.cs
- UTF7Encoding.cs
- ObjectSet.cs
- glyphs.cs
- DataGridViewRowHeaderCell.cs
- QuaternionConverter.cs
- ResourcesBuildProvider.cs
- SortFieldComparer.cs
- XPathSelfQuery.cs
- JoinQueryOperator.cs
- WindowsRegion.cs
- FlowLayout.cs
- DeferredBinaryDeserializerExtension.cs
- AuthenticationSection.cs
- ExtractedStateEntry.cs
- HotSpotCollection.cs
- DesignSurfaceEvent.cs
- PermissionToken.cs
- NewItemsContextMenuStrip.cs
- LocalizabilityAttribute.cs
- CommandHelpers.cs
- TrackingStringDictionary.cs
- QilParameter.cs
- DATA_BLOB.cs
- WindowPatternIdentifiers.cs
- ProcessThread.cs
- Compiler.cs
- ToolBar.cs
- ClassHandlersStore.cs
- TextElementCollection.cs
- DataBindEngine.cs
- SerializationAttributes.cs
- XmlArrayAttribute.cs
- HttpProtocolImporter.cs
- WpfKnownTypeInvoker.cs
- DecimalConstantAttribute.cs
- ScrollItemProviderWrapper.cs
- SecurityTokenProvider.cs
- BasicSecurityProfileVersion.cs
- SecurityRuntime.cs
- ReferencedType.cs
- PageRequestManager.cs
- HtmlInputReset.cs
- CommandManager.cs