Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- SocketAddress.cs
- DataGrid.cs
- SemaphoreSlim.cs
- __ConsoleStream.cs
- DynamicDocumentPaginator.cs
- RuntimeIdentifierPropertyAttribute.cs
- AdornedElementPlaceholder.cs
- filewebrequest.cs
- SqlBuilder.cs
- DynamicResourceExtension.cs
- Column.cs
- CrossAppDomainChannel.cs
- BufferAllocator.cs
- SqlNodeTypeOperators.cs
- CodeEventReferenceExpression.cs
- DaylightTime.cs
- ConfigurationSectionGroup.cs
- Vector3D.cs
- RotateTransform.cs
- SplitterPanel.cs
- DesignBindingValueUIHandler.cs
- ActivityCodeDomReferenceService.cs
- ExpandedWrapper.cs
- XmlSerializerNamespaces.cs
- BamlLocalizabilityResolver.cs
- LocalizationCodeDomSerializer.cs
- GenerateHelper.cs
- PhysicalAddress.cs
- AsymmetricKeyExchangeFormatter.cs
- BitmapEffectGroup.cs
- Dictionary.cs
- PriorityRange.cs
- CustomCredentialPolicy.cs
- RTLAwareMessageBox.cs
- DispatchChannelSink.cs
- AssemblyName.cs
- PagesSection.cs
- XPathChildIterator.cs
- FileRegion.cs
- ChtmlCalendarAdapter.cs
- ConsumerConnectionPointCollection.cs
- ScriptDescriptor.cs
- ConditionCollection.cs
- QueryExpr.cs
- ReflectPropertyDescriptor.cs
- CheckBoxBaseAdapter.cs
- SynchronousReceiveBehavior.cs
- TraceHwndHost.cs
- TemplateField.cs
- XmlSerializer.cs
- ScrollBarAutomationPeer.cs
- UIElement3DAutomationPeer.cs
- ProcessHostConfigUtils.cs
- DataGridViewSelectedRowCollection.cs
- CharAnimationBase.cs
- Perspective.cs
- ObjectStateFormatter.cs
- ActivityInstanceReference.cs
- EventLogReader.cs
- IgnoreSectionHandler.cs
- SoapReflectionImporter.cs
- SecurityPermission.cs
- UInt64Storage.cs
- CfgSemanticTag.cs
- NotImplementedException.cs
- LicenseException.cs
- ThemeDictionaryExtension.cs
- WindowExtensionMethods.cs
- XmlStringTable.cs
- TrackingMemoryStreamFactory.cs
- DesignerUtils.cs
- httpserverutility.cs
- DbBuffer.cs
- ToolStripDropDownMenu.cs
- ScriptBehaviorDescriptor.cs
- DataRowView.cs
- HttpPostedFile.cs
- HttpCacheVary.cs
- SymbolTable.cs
- DbConnectionPoolGroup.cs
- EventToken.cs
- CompilerGeneratedAttribute.cs
- JsonFormatWriterGenerator.cs
- OracleConnectionFactory.cs
- TagMapCollection.cs
- SelectionManager.cs
- StylusShape.cs
- WebPartVerbsEventArgs.cs
- PreservationFileWriter.cs
- NavigationPropertyEmitter.cs
- RTLAwareMessageBox.cs
- SoapInteropTypes.cs
- XmlSchemaComplexType.cs
- CompiledQuery.cs
- AddInContractAttribute.cs
- ProxyAttribute.cs
- HotSpot.cs
- AnonymousIdentificationModule.cs
- ProtocolElement.cs
- DrawingVisualDrawingContext.cs