Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- CompositeControl.cs
- SelectionRangeConverter.cs
- WebPartConnectionsCancelVerb.cs
- SQLDecimalStorage.cs
- ReaderContextStackData.cs
- CommandTreeTypeHelper.cs
- ExpressionBindingCollection.cs
- LineGeometry.cs
- AsnEncodedData.cs
- EnumMember.cs
- MediaTimeline.cs
- HttpListener.cs
- GlobalProxySelection.cs
- VirtualPathProvider.cs
- EntityDataSourceValidationException.cs
- PageThemeCodeDomTreeGenerator.cs
- DynamicPropertyHolder.cs
- WebServiceTypeData.cs
- UnicodeEncoding.cs
- HashCodeCombiner.cs
- WebPartConnectionsDisconnectVerb.cs
- XomlSerializationHelpers.cs
- PngBitmapEncoder.cs
- FlowNode.cs
- FontNameConverter.cs
- SqlUdtInfo.cs
- ExpressionNode.cs
- XmlEncodedRawTextWriter.cs
- documentation.cs
- GZipDecoder.cs
- TcpDuplicateContext.cs
- BrowserCapabilitiesCodeGenerator.cs
- DataGridViewEditingControlShowingEventArgs.cs
- EditorAttribute.cs
- QuaternionValueSerializer.cs
- WeakKeyDictionary.cs
- ChtmlSelectionListAdapter.cs
- CurrentChangingEventManager.cs
- UserControlCodeDomTreeGenerator.cs
- TearOffProxy.cs
- ProtocolsConfigurationHandler.cs
- TextEditorContextMenu.cs
- MetabaseSettings.cs
- ToolStrip.cs
- BitmapEffectDrawingContextWalker.cs
- SerTrace.cs
- WindowsFormsHost.cs
- DataGridLengthConverter.cs
- TrustManager.cs
- AccessViolationException.cs
- FormViewRow.cs
- VisualStyleElement.cs
- ConstrainedGroup.cs
- XmlEventCache.cs
- MainMenu.cs
- ApplicationSecurityInfo.cs
- TPLETWProvider.cs
- BamlLocalizabilityResolver.cs
- SoapProtocolImporter.cs
- BufferedReadStream.cs
- LineServicesRun.cs
- __FastResourceComparer.cs
- AnimationLayer.cs
- HtmlHistory.cs
- Crc32.cs
- InheritablePropertyChangeInfo.cs
- ExcludePathInfo.cs
- SchemaImporterExtension.cs
- ControlIdConverter.cs
- FloaterParaClient.cs
- ExceptionUtil.cs
- SimpleWebHandlerParser.cs
- SqlTriggerContext.cs
- XAMLParseException.cs
- ResourceContainer.cs
- FontCacheUtil.cs
- Recipient.cs
- SqlBuilder.cs
- EventPrivateKey.cs
- LogicalCallContext.cs
- FontStyleConverter.cs
- CompilationPass2TaskInternal.cs
- StrokeNodeData.cs
- ImageInfo.cs
- _SafeNetHandles.cs
- CodeMemberField.cs
- ReferencedAssembly.cs
- SystemWebCachingSectionGroup.cs
- CharAnimationBase.cs
- DataGridViewAutoSizeModeEventArgs.cs
- HtmlForm.cs
- XmlTextReaderImplHelpers.cs
- Control.cs
- Content.cs
- FixedSOMContainer.cs
- PieceNameHelper.cs
- RectAnimation.cs
- CompilationSection.cs
- TextRenderer.cs
- ChangeBlockUndoRecord.cs