Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PermissionSet.cs
- Logging.cs
- SqlRowUpdatingEvent.cs
- SubstitutionList.cs
- ActivityMarkupSerializer.cs
- invalidudtexception.cs
- NavigationPropertyEmitter.cs
- ElementUtil.cs
- ContentPropertyAttribute.cs
- Dispatcher.cs
- DetailsViewCommandEventArgs.cs
- StrokeNodeData.cs
- OutputCacheSettings.cs
- FrameSecurityDescriptor.cs
- ImageDrawing.cs
- TypeFieldSchema.cs
- InternalBufferOverflowException.cs
- ExpressionValueEditor.cs
- State.cs
- CapacityStreamGeometryContext.cs
- UnsafeNativeMethods.cs
- PhoneCallDesigner.cs
- SortedList.cs
- PeerApplicationLaunchInfo.cs
- IntSecurity.cs
- Compilation.cs
- DataGridViewRowCollection.cs
- lengthconverter.cs
- PerformanceCounterLib.cs
- DataColumnMapping.cs
- TemplateAction.cs
- JoinCqlBlock.cs
- RC2CryptoServiceProvider.cs
- SwitchAttribute.cs
- X509PeerCertificateAuthentication.cs
- EmbeddedObject.cs
- RawStylusSystemGestureInputReport.cs
- RegistryKey.cs
- Help.cs
- cache.cs
- CheckableControlBaseAdapter.cs
- FlowLayoutPanel.cs
- StreamGeometry.cs
- nulltextnavigator.cs
- TextUtf8RawTextWriter.cs
- XmlSerializerImportOptions.cs
- PropertyGrid.cs
- LineGeometry.cs
- UserCancellationException.cs
- HMACMD5.cs
- COM2ComponentEditor.cs
- XPathArrayIterator.cs
- AppDomainShutdownMonitor.cs
- DomainLiteralReader.cs
- TableCell.cs
- DBDataPermission.cs
- RecommendedAsConfigurableAttribute.cs
- CodeAttributeArgument.cs
- XmlNodeList.cs
- NavigatorOutput.cs
- AssemblyAssociatedContentFileAttribute.cs
- StringAnimationUsingKeyFrames.cs
- WebConfigurationFileMap.cs
- FileCodeGroup.cs
- CryptoApi.cs
- _ShellExpression.cs
- NaturalLanguageHyphenator.cs
- ViewgenGatekeeper.cs
- Rect3D.cs
- WindowsListViewItem.cs
- ComplexTypeEmitter.cs
- SecureStringHasher.cs
- TaskScheduler.cs
- ConfigurationStrings.cs
- COMException.cs
- DataServiceRequestOfT.cs
- WindowsFormsHostPropertyMap.cs
- sqlmetadatafactory.cs
- Stream.cs
- ScrollChrome.cs
- CalendarDateRangeChangingEventArgs.cs
- SHA1Managed.cs
- Stack.cs
- BitmapCodecInfoInternal.cs
- NestedContainer.cs
- TrackingValidationObjectDictionary.cs
- NodeLabelEditEvent.cs
- RefreshEventArgs.cs
- Stylus.cs
- SystemDiagnosticsSection.cs
- SimpleColumnProvider.cs
- ProfileProvider.cs
- AsyncOperation.cs
- ConcurrentQueue.cs
- BuildProvider.cs
- InternalsVisibleToAttribute.cs
- ConfigsHelper.cs
- Registry.cs
- SqlProviderServices.cs
- MonikerUtility.cs