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
- DeleteWorkflowOwnerCommand.cs
- SoapFault.cs
- CodeSnippetTypeMember.cs
- ValidationErrorEventArgs.cs
- PieceDirectory.cs
- DocumentPageTextView.cs
- WindowsAltTab.cs
- Compiler.cs
- NotifyIcon.cs
- PathFigure.cs
- TransferRequestHandler.cs
- LinkArea.cs
- XmlEncoding.cs
- TypeInformation.cs
- TextServicesProperty.cs
- TextContainer.cs
- DBCSCodePageEncoding.cs
- EmptyEnumerator.cs
- ObjectPropertyMapping.cs
- Proxy.cs
- Dictionary.cs
- ImageDrawing.cs
- BigInt.cs
- WebPartZoneCollection.cs
- RelationshipEndCollection.cs
- OutputChannelBinder.cs
- OneOfConst.cs
- ContentTypeSettingDispatchMessageFormatter.cs
- VisualBrush.cs
- RawStylusInputReport.cs
- WebPartActionVerb.cs
- ExpressionBindingCollection.cs
- GeneralTransform3D.cs
- MarginCollapsingState.cs
- CallSiteHelpers.cs
- HtmlCalendarAdapter.cs
- ErrorInfoXmlDocument.cs
- XmlNode.cs
- SafeFileMapViewHandle.cs
- ScrollableControl.cs
- InputReport.cs
- ProxyElement.cs
- ProxyWebPart.cs
- ItemAutomationPeer.cs
- SwitchAttribute.cs
- AlternateViewCollection.cs
- XamlDebuggerXmlReader.cs
- DrawingAttributeSerializer.cs
- EmbossBitmapEffect.cs
- TextDecorations.cs
- GridViewDesigner.cs
- ReferencedAssembly.cs
- SettingsContext.cs
- ClientScriptManagerWrapper.cs
- FixedDSBuilder.cs
- HtmlFormParameterWriter.cs
- JsonStringDataContract.cs
- StickyNoteHelper.cs
- System.Data_BID.cs
- TreeNodeBindingCollection.cs
- TextSimpleMarkerProperties.cs
- TextRange.cs
- SystemInfo.cs
- OdbcFactory.cs
- OleDbInfoMessageEvent.cs
- EnumerableRowCollectionExtensions.cs
- TokenBasedSetEnumerator.cs
- ReflectTypeDescriptionProvider.cs
- MultiViewDesigner.cs
- ImageDrawing.cs
- ObjectViewListener.cs
- Matrix3DStack.cs
- Point3DAnimation.cs
- BridgeDataRecord.cs
- Style.cs
- TreeNodeCollection.cs
- MediaContext.cs
- DictionaryMarkupSerializer.cs
- ConstraintEnumerator.cs
- RMPermissions.cs
- FileDataSourceCache.cs
- XPathAxisIterator.cs
- ThousandthOfEmRealDoubles.cs
- LeaseManager.cs
- SpeechDetectedEventArgs.cs
- AnnotationObservableCollection.cs
- Rule.cs
- WSHttpSecurityElement.cs
- DetailsViewRow.cs
- StateChangeEvent.cs
- StrongNamePublicKeyBlob.cs
- InstanceKeyNotReadyException.cs
- XmlSchemaElement.cs
- CustomExpressionEventArgs.cs
- MethodBuilder.cs
- ObjectQuery_EntitySqlExtensions.cs
- RowParagraph.cs
- InternalUserCancelledException.cs
- OdbcRowUpdatingEvent.cs
- NonSerializedAttribute.cs