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
- WSUtilitySpecificationVersion.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- TemplateField.cs
- DbBuffer.cs
- DbDataSourceEnumerator.cs
- SineEase.cs
- WindowsListViewItem.cs
- Package.cs
- MappedMetaModel.cs
- MessageQueueCriteria.cs
- EventMappingSettings.cs
- DataPagerFieldCommandEventArgs.cs
- ListQueryResults.cs
- HttpHandlersSection.cs
- CodeDirectionExpression.cs
- WorkflowServiceHostFactory.cs
- Compensation.cs
- StandardOleMarshalObject.cs
- InterleavedZipPartStream.cs
- Decimal.cs
- StringConcat.cs
- SettingsSection.cs
- X509SubjectKeyIdentifierClause.cs
- DisposableCollectionWrapper.cs
- HostSecurityManager.cs
- Vector3DCollection.cs
- KeyInfo.cs
- FreezableCollection.cs
- StateItem.cs
- MissingFieldException.cs
- SqlBooleanMismatchVisitor.cs
- KerberosSecurityTokenParameters.cs
- CheckBoxBaseAdapter.cs
- LocalBuilder.cs
- Executor.cs
- X509AudioLogo.cs
- SqlUserDefinedTypeAttribute.cs
- GatewayDefinition.cs
- _DisconnectOverlappedAsyncResult.cs
- SqlUserDefinedAggregateAttribute.cs
- CTreeGenerator.cs
- TypedServiceOperationListItem.cs
- UnsafeNativeMethods.cs
- PolyBezierSegmentFigureLogic.cs
- HtmlInputRadioButton.cs
- SendAgentStatusRequest.cs
- ListControl.cs
- DeclarativeCatalogPart.cs
- DataKeyArray.cs
- PageThemeCodeDomTreeGenerator.cs
- XmlDigitalSignatureProcessor.cs
- odbcmetadatacollectionnames.cs
- StatementContext.cs
- HttpChannelFactory.cs
- SqlUDTStorage.cs
- SoapIncludeAttribute.cs
- ExpressionWriter.cs
- Zone.cs
- MsmqMessageProperty.cs
- MachineSettingsSection.cs
- ImageDrawing.cs
- PeerNameRegistration.cs
- DbConnectionPoolGroupProviderInfo.cs
- HtmlHistory.cs
- Fonts.cs
- DataBoundControlDesigner.cs
- XmlCharacterData.cs
- ArgumentException.cs
- XamlTemplateSerializer.cs
- PrincipalPermission.cs
- Selection.cs
- COM2ColorConverter.cs
- Vector3DValueSerializer.cs
- GregorianCalendar.cs
- EventTrigger.cs
- SqlCachedBuffer.cs
- HttpCapabilitiesBase.cs
- DependencyPropertyDescriptor.cs
- SymLanguageType.cs
- Console.cs
- BitmapInitialize.cs
- BinaryConverter.cs
- DrawingGroup.cs
- HasCopySemanticsAttribute.cs
- PageOutputColor.cs
- MethodRental.cs
- CssStyleCollection.cs
- SqlUDTStorage.cs
- CodeBlockBuilder.cs
- SafeHandles.cs
- ToolStripDropDownItem.cs
- DeviceContext.cs
- XmlSchemaAll.cs
- MetafileHeaderWmf.cs
- BindingExpressionUncommonField.cs
- DeflateStream.cs
- HandlerBase.cs
- XmlValidatingReaderImpl.cs
- AnnotationService.cs
- TransactionContextManager.cs