Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / SqlClient / SqlGen / Symbol.cs / 2 / Symbol.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using System.Data.SqlClient; using System.Data.Metadata.Edm; using System.Data.Common.CommandTrees; namespace System.Data.SqlClient.SqlGen { ////// internal class Symbol : ISqlFragment { private Dictionary/// This class represents an extent/nested select statement, /// or a column. /// /// The important fields are Name, Type and NewName. /// NewName starts off the same as Name, and is then modified as necessary. /// /// /// The rest are used by special symbols. /// e.g. NeedsRenaming is used by columns to indicate that a new name must /// be picked for the column in the second phase of translation. /// /// IsUnnest is used by symbols for a collection expression used as a from clause. /// This allows to add the column list /// after the alias. /// /// columns; internal Dictionary Columns { get { if (null == columns) { columns = new Dictionary (StringComparer.OrdinalIgnoreCase); } return columns; } } private bool needsRenaming; internal bool NeedsRenaming { get { return needsRenaming; } set { needsRenaming = value; } } private bool outputColumnsRenamed; internal bool OutputColumnsRenamed { get { return outputColumnsRenamed; } set { outputColumnsRenamed = value; } } private string name; public string Name { get { return name; } } private string newName; public string NewName { get { return newName; } set { newName = value; } } private TypeUsage type; internal TypeUsage Type { get { return type; } set { type = value; } } public Symbol(string name, TypeUsage type) { this.name = name; this.newName = name; this.Type = type; } /// /// Use this constructor the symbol represents a SqlStatement with renamed output columns. /// /// /// /// public Symbol(string name, TypeUsage type, Dictionarycolumns) { this.name = name; this.newName = name; this.Type = type; this.columns = columns; this.OutputColumnsRenamed = true; } #region ISqlFragment Members /// /// Write this symbol out as a string for sql. This is just /// the new name of the symbol (which could be the same as the old name). /// /// We rename columns here if necessary. /// /// /// public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { if (this.NeedsRenaming) { int i; if (sqlGenerator.AllColumnNames.TryGetValue(this.NewName, out i)) { string newNameCandidate; do { ++i; newNameCandidate = this.NewName + i.ToString(System.Globalization.CultureInfo.InvariantCulture); } while (sqlGenerator.AllColumnNames.ContainsKey(newNameCandidate)); sqlGenerator.AllColumnNames[this.NewName] = i; this.NewName = newNameCandidate; } // Add this column name to list of known names so that there are no subsequent // collisions sqlGenerator.AllColumnNames[this.NewName] = 0; // Prevent it from being renamed repeatedly. this.NeedsRenaming = false; } writer.Write(SqlGenerator.QuoteIdentifier(this.NewName)); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text; using System.Data.SqlClient; using System.Data.Metadata.Edm; using System.Data.Common.CommandTrees; namespace System.Data.SqlClient.SqlGen { ////// internal class Symbol : ISqlFragment { private Dictionary/// This class represents an extent/nested select statement, /// or a column. /// /// The important fields are Name, Type and NewName. /// NewName starts off the same as Name, and is then modified as necessary. /// /// /// The rest are used by special symbols. /// e.g. NeedsRenaming is used by columns to indicate that a new name must /// be picked for the column in the second phase of translation. /// /// IsUnnest is used by symbols for a collection expression used as a from clause. /// This allows to add the column list /// after the alias. /// /// columns; internal Dictionary Columns { get { if (null == columns) { columns = new Dictionary (StringComparer.OrdinalIgnoreCase); } return columns; } } private bool needsRenaming; internal bool NeedsRenaming { get { return needsRenaming; } set { needsRenaming = value; } } private bool outputColumnsRenamed; internal bool OutputColumnsRenamed { get { return outputColumnsRenamed; } set { outputColumnsRenamed = value; } } private string name; public string Name { get { return name; } } private string newName; public string NewName { get { return newName; } set { newName = value; } } private TypeUsage type; internal TypeUsage Type { get { return type; } set { type = value; } } public Symbol(string name, TypeUsage type) { this.name = name; this.newName = name; this.Type = type; } /// /// Use this constructor the symbol represents a SqlStatement with renamed output columns. /// /// /// /// public Symbol(string name, TypeUsage type, Dictionarycolumns) { this.name = name; this.newName = name; this.Type = type; this.columns = columns; this.OutputColumnsRenamed = true; } #region ISqlFragment Members /// /// Write this symbol out as a string for sql. This is just /// the new name of the symbol (which could be the same as the old name). /// /// We rename columns here if necessary. /// /// /// public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator) { if (this.NeedsRenaming) { int i; if (sqlGenerator.AllColumnNames.TryGetValue(this.NewName, out i)) { string newNameCandidate; do { ++i; newNameCandidate = this.NewName + i.ToString(System.Globalization.CultureInfo.InvariantCulture); } while (sqlGenerator.AllColumnNames.ContainsKey(newNameCandidate)); sqlGenerator.AllColumnNames[this.NewName] = i; this.NewName = newNameCandidate; } // Add this column name to list of known names so that there are no subsequent // collisions sqlGenerator.AllColumnNames[this.NewName] = 0; // Prevent it from being renamed repeatedly. this.NeedsRenaming = false; } writer.Write(SqlGenerator.QuoteIdentifier(this.NewName)); } #endregion } } // 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
- AccessibilityHelperForXpWin2k3.cs
- HttpResponseInternalBase.cs
- UnmanagedMemoryStreamWrapper.cs
- FormView.cs
- ConnectionPoint.cs
- MatrixUtil.cs
- TextContainer.cs
- PointLightBase.cs
- EncodingInfo.cs
- XmlBufferedByteStreamReader.cs
- StorageConditionPropertyMapping.cs
- UmAlQuraCalendar.cs
- ObjectCache.cs
- PartialCachingControl.cs
- ProcessHost.cs
- ObjectStorage.cs
- VisualStyleTypesAndProperties.cs
- CodeArrayCreateExpression.cs
- Parameter.cs
- AsymmetricSignatureDeformatter.cs
- InstanceLockTracking.cs
- TargetParameterCountException.cs
- WebPartActionVerb.cs
- TTSVoice.cs
- Int32Rect.cs
- Lease.cs
- AnonymousIdentificationModule.cs
- SortDescriptionCollection.cs
- EngineSiteSapi.cs
- HwndProxyElementProvider.cs
- WindowsComboBox.cs
- SystemNetHelpers.cs
- PointCollection.cs
- TextCompositionManager.cs
- Gdiplus.cs
- SchemaDeclBase.cs
- ToolStripMenuItem.cs
- PeerCredentialElement.cs
- XmlBufferReader.cs
- PropertyEmitter.cs
- InkCanvasInnerCanvas.cs
- TransformerTypeCollection.cs
- CompressEmulationStream.cs
- safex509handles.cs
- NullReferenceException.cs
- Vector3DCollectionConverter.cs
- CharAnimationUsingKeyFrames.cs
- RelationshipEnd.cs
- AspProxy.cs
- MdiWindowListItemConverter.cs
- ZeroOpNode.cs
- OperatingSystem.cs
- StorageMappingFragment.cs
- XmlSerializerAssemblyAttribute.cs
- OdbcConnection.cs
- AssemblyInfo.cs
- LinqDataSourceDisposeEventArgs.cs
- linebase.cs
- HwndProxyElementProvider.cs
- DefaultMemberAttribute.cs
- RtType.cs
- ToolStripPanelRenderEventArgs.cs
- Camera.cs
- BeginStoryboard.cs
- DrawingAttributes.cs
- RelatedImageListAttribute.cs
- ColumnMap.cs
- XPathNavigatorReader.cs
- IntPtr.cs
- UInt64Storage.cs
- EdmTypeAttribute.cs
- WebFormsRootDesigner.cs
- RemotingSurrogateSelector.cs
- RSAPKCS1SignatureDeformatter.cs
- IntegerValidatorAttribute.cs
- RepeatInfo.cs
- RepeaterDesigner.cs
- PhonemeEventArgs.cs
- TypeSystemProvider.cs
- ZipFileInfo.cs
- PeerContact.cs
- ServerIdentity.cs
- SolidBrush.cs
- DynamicEntity.cs
- FileLevelControlBuilderAttribute.cs
- AlphaSortedEnumConverter.cs
- _IPv6Address.cs
- HatchBrush.cs
- RtfControls.cs
- SchemaElementLookUpTable.cs
- SchemaTableOptionalColumn.cs
- ScriptReference.cs
- OperatorExpressions.cs
- HttpInputStream.cs
- CompModSwitches.cs
- PromptBuilder.cs
- CheckBoxFlatAdapter.cs
- QueryExpression.cs
- NetworkAddressChange.cs
- DBConnection.cs