Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Common / EntitySql / DotExpr.cs / 2 / DotExpr.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @bacukp [....] //--------------------------------------------------------------------- namespace System.Data.Common.EntitySql { using System; using System.Globalization; using System.Collections; using System.Collections.Generic; ////// represents dotExpr (expr)+.Identifier /// internal sealed class DotExpr : Expr #if EXTRA_ENTITYSQL_PARSER_DEBUGGING , IEnumerable#endif { private Expr _leftExpr; private Identifier _identifier; private bool _wasDotIdComputed; private bool _isDottedIdentifier; private string[] _identifierNames; private string _fullName; private int _length; private Expr _leftmostExpr; /// /// initializes /// /// /// internal DotExpr( Expr expr, Identifier id ) { _leftExpr = expr; _identifier = id; } internal Expr Left { get { return _leftExpr; } } internal Identifier Identifier { get { return _identifier; } } internal bool IsDottedIdentifier { get { CheckIfDotIdentifier(); return _isDottedIdentifier; } } internal int Length { get { CheckIfDotIdentifier(); return _length; } } internal string[] Names { get { CheckIfDotIdentifier(); return _identifierNames; } } internal string FullName { get { CheckIfDotIdentifier(); return _fullName; } } internal Expr LeftMostExpression { get { CheckIfDotIdentifier(); return _leftmostExpr; } } // // Delay computation and cache results // private void CheckIfDotIdentifier() { if (_wasDotIdComputed) { return; } _wasDotIdComputed = true; // // Get number of 'elements' // _length = 0; _isDottedIdentifier = false; Expr expr = this; while (expr is DotExpr) { _length++; expr = ((DotExpr)expr).Left; } if (expr is Identifier) { _isDottedIdentifier = true; _length++; } else { _leftmostExpr = expr; } _identifierNames = new string[_length]; int i = _length - 1; expr = this; while (expr is DotExpr) { DotExpr dotExpr = (DotExpr)expr; _identifierNames[i--] = dotExpr.Identifier.Name; expr = dotExpr.Left; } if (null == _leftmostExpr && null != expr) { _identifierNames[i] = ((Identifier)expr).Name; } _fullName = String.Join(".", _identifierNames); } #if EXTRA_ENTITYSQL_PARSER_DEBUGGING #region GetEnumerator public IEnumeratorGetEnumerator() { Expr _expr = this; while (_expr is DotExpr) { yield return _expr; _expr = ((DotExpr)_expr).Left; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @bacukp [....] //--------------------------------------------------------------------- namespace System.Data.Common.EntitySql { using System; using System.Globalization; using System.Collections; using System.Collections.Generic; ////// represents dotExpr (expr)+.Identifier /// internal sealed class DotExpr : Expr #if EXTRA_ENTITYSQL_PARSER_DEBUGGING , IEnumerable#endif { private Expr _leftExpr; private Identifier _identifier; private bool _wasDotIdComputed; private bool _isDottedIdentifier; private string[] _identifierNames; private string _fullName; private int _length; private Expr _leftmostExpr; /// /// initializes /// /// /// internal DotExpr( Expr expr, Identifier id ) { _leftExpr = expr; _identifier = id; } internal Expr Left { get { return _leftExpr; } } internal Identifier Identifier { get { return _identifier; } } internal bool IsDottedIdentifier { get { CheckIfDotIdentifier(); return _isDottedIdentifier; } } internal int Length { get { CheckIfDotIdentifier(); return _length; } } internal string[] Names { get { CheckIfDotIdentifier(); return _identifierNames; } } internal string FullName { get { CheckIfDotIdentifier(); return _fullName; } } internal Expr LeftMostExpression { get { CheckIfDotIdentifier(); return _leftmostExpr; } } // // Delay computation and cache results // private void CheckIfDotIdentifier() { if (_wasDotIdComputed) { return; } _wasDotIdComputed = true; // // Get number of 'elements' // _length = 0; _isDottedIdentifier = false; Expr expr = this; while (expr is DotExpr) { _length++; expr = ((DotExpr)expr).Left; } if (expr is Identifier) { _isDottedIdentifier = true; _length++; } else { _leftmostExpr = expr; } _identifierNames = new string[_length]; int i = _length - 1; expr = this; while (expr is DotExpr) { DotExpr dotExpr = (DotExpr)expr; _identifierNames[i--] = dotExpr.Identifier.Name; expr = dotExpr.Left; } if (null == _leftmostExpr && null != expr) { _identifierNames[i] = ((Identifier)expr).Name; } _fullName = String.Join(".", _identifierNames); } #if EXTRA_ENTITYSQL_PARSER_DEBUGGING #region GetEnumerator public IEnumeratorGetEnumerator() { Expr _expr = this; while (_expr is DotExpr) { yield return _expr; _expr = ((DotExpr)_expr).Left; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PrintingPermissionAttribute.cs
- ObjRef.cs
- IncrementalReadDecoders.cs
- CodeBinaryOperatorExpression.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- PeerNearMe.cs
- DynamicAttribute.cs
- UnsignedPublishLicense.cs
- CodeDesigner.cs
- TabItem.cs
- filewebresponse.cs
- MediaTimeline.cs
- PolicyStatement.cs
- LazyInitializer.cs
- GeneratedCodeAttribute.cs
- DataPointer.cs
- FontDriver.cs
- XmlSchemaSimpleTypeList.cs
- CollectionAdapters.cs
- EndpointDiscoveryElement.cs
- UserControlCodeDomTreeGenerator.cs
- ImmComposition.cs
- CacheForPrimitiveTypes.cs
- UnsafeNativeMethods.cs
- FlowDocumentPaginator.cs
- ApplicationFileParser.cs
- ServiceHostFactory.cs
- WpfPayload.cs
- DelegatingConfigHost.cs
- AppDomainManager.cs
- FontStyles.cs
- CodeParameterDeclarationExpression.cs
- ProcessModelSection.cs
- Rotation3D.cs
- StylusEditingBehavior.cs
- SerializationAttributes.cs
- FontNamesConverter.cs
- RelatedPropertyManager.cs
- UrlPath.cs
- ArrayWithOffset.cs
- TextBoxBase.cs
- HiddenFieldPageStatePersister.cs
- FormsAuthentication.cs
- LOSFormatter.cs
- NamespaceDecl.cs
- BindingCollection.cs
- counter.cs
- EpmContentDeSerializer.cs
- SimpleWorkerRequest.cs
- OdbcDataAdapter.cs
- DrawingServices.cs
- SQLInt16Storage.cs
- IsolatedStoragePermission.cs
- PresentationAppDomainManager.cs
- FilterFactory.cs
- PagePropertiesChangingEventArgs.cs
- List.cs
- KeyEvent.cs
- Matrix.cs
- XmlBoundElement.cs
- SortDescriptionCollection.cs
- ConnectionConsumerAttribute.cs
- DbConnectionPoolGroupProviderInfo.cs
- LockingPersistenceProvider.cs
- WorkflowRuntimeBehavior.cs
- ImageInfo.cs
- FixedFlowMap.cs
- DateTimeConverter.cs
- DBCommand.cs
- MappingSource.cs
- StorageEntitySetMapping.cs
- TextFormatterContext.cs
- ColumnResizeUndoUnit.cs
- ManagementOperationWatcher.cs
- StringUtil.cs
- SmiConnection.cs
- QilBinary.cs
- SqlBuffer.cs
- OLEDB_Enum.cs
- WebHttpBindingElement.cs
- TargetPerspective.cs
- ThreadStaticAttribute.cs
- CacheVirtualItemsEvent.cs
- PointAnimationBase.cs
- LocalizableResourceBuilder.cs
- HwndKeyboardInputProvider.cs
- LocalIdCollection.cs
- ProxyWebPartManager.cs
- CodeCastExpression.cs
- _TransmitFileOverlappedAsyncResult.cs
- DefaultBindingPropertyAttribute.cs
- FileUpload.cs
- QilIterator.cs
- DiscoveryDocumentSerializer.cs
- XPathQueryGenerator.cs
- ListenerAdaptersInstallComponent.cs
- LockCookie.cs
- COAUTHIDENTITY.cs
- Renderer.cs
- localization.cs