Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / SqlClient / SqlGen / Symbol.cs / 1 / 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
- XmlCharacterData.cs
- ApplyImportsAction.cs
- AstNode.cs
- WebControlAdapter.cs
- ValidationErrorCollection.cs
- PropertyKey.cs
- GenericEnumConverter.cs
- DataGridCellInfo.cs
- SoapIncludeAttribute.cs
- StackBuilderSink.cs
- CodeConstructor.cs
- MailAddress.cs
- ReferencedAssembly.cs
- DataObjectAttribute.cs
- NameNode.cs
- XmlSchemaFacet.cs
- ClientSettingsProvider.cs
- ManagementBaseObject.cs
- SpecialNameAttribute.cs
- TemplateParser.cs
- CharacterString.cs
- TextMarkerSource.cs
- SqlTransaction.cs
- WeakReferenceList.cs
- TreeNodeCollection.cs
- TextContainerChangeEventArgs.cs
- SessionPageStatePersister.cs
- ListViewUpdatedEventArgs.cs
- XmlElementList.cs
- DescendentsWalker.cs
- NameValueFileSectionHandler.cs
- Attributes.cs
- CryptoConfig.cs
- MouseDevice.cs
- Font.cs
- ColumnMap.cs
- TypeConverterMarkupExtension.cs
- HitTestFilterBehavior.cs
- EmbeddedMailObject.cs
- SrgsToken.cs
- EntityDataSourceQueryBuilder.cs
- WebReference.cs
- DataGridViewHitTestInfo.cs
- datacache.cs
- OdbcConnection.cs
- InstalledFontCollection.cs
- SqlRowUpdatedEvent.cs
- RowSpanVector.cs
- SafeSecurityHandles.cs
- DataGridTextBoxColumn.cs
- QilName.cs
- CheckBoxField.cs
- RemoteWebConfigurationHostServer.cs
- CultureTableRecord.cs
- TextLineResult.cs
- MultilineStringConverter.cs
- RegexCaptureCollection.cs
- HttpWebRequest.cs
- DataTable.cs
- HttpPostedFile.cs
- ScopedMessagePartSpecification.cs
- TreeNodeBindingCollection.cs
- ScrollItemPattern.cs
- Parser.cs
- RegexMatch.cs
- SuppressMessageAttribute.cs
- _NTAuthentication.cs
- FrameworkElementAutomationPeer.cs
- FunctionUpdateCommand.cs
- HtmlInputSubmit.cs
- Light.cs
- BrowserCapabilitiesCodeGenerator.cs
- TableLayoutSettingsTypeConverter.cs
- GetPolicyDetailsRequest.cs
- ConnectorSelectionGlyph.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- BulletChrome.cs
- HelpInfo.cs
- NativeMethods.cs
- ValidationPropertyAttribute.cs
- ApplicationActivator.cs
- RunWorkerCompletedEventArgs.cs
- AuthenticationService.cs
- _CommandStream.cs
- Empty.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- CollectionEditVerbManager.cs
- PageContent.cs
- WebUtil.cs
- DetailsViewPageEventArgs.cs
- ValidationException.cs
- DesignBindingEditor.cs
- TextRunCache.cs
- Membership.cs
- ToolStripDropDownClosingEventArgs.cs
- QueryGenerator.cs
- WebPartAuthorizationEventArgs.cs
- SecurityTimestamp.cs
- DataBindingExpressionBuilder.cs
- ClientFormsIdentity.cs