Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / SqlClient / SqlGen / Symbol.cs / 1305376 / Symbol.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
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
{
///
///
/// 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.
///
///
internal class Symbol : ISqlFragment
{
///
/// Used to track the columns originating from this Symbol when it is used
/// in as a from extent in a SqlSelectStatement with a Join or as a From Extent
/// in a Join Symbol.
///
private Dictionary columns;
internal Dictionary Columns
{
get
{
if (null == columns)
{
columns = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
return columns;
}
}
///
/// Used to track the output columns of a SqlSelectStatement it represents
///
private Dictionary outputColumns;
internal Dictionary OutputColumns
{
get
{
if (null == outputColumns)
{
outputColumns = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
return outputColumns;
}
}
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 if the symbol represents a SqlStatement for which the output columns need to be tracked.
///
///
///
///
///
public Symbol(string name, TypeUsage type, Dictionary outputColumns, bool outputColumnsRenamed)
{
this.name = name;
this.newName = name;
this.Type = type;
this.outputColumns = outputColumns;
this.OutputColumnsRenamed = outputColumnsRenamed;
}
#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
- DispatcherEventArgs.cs
- ProtectedConfiguration.cs
- LogLogRecordEnumerator.cs
- ServiceBehaviorElementCollection.cs
- CodeTypeOfExpression.cs
- NetworkInformationException.cs
- RecognitionResult.cs
- HandleExceptionArgs.cs
- RenameRuleObjectDialog.Designer.cs
- LayoutEvent.cs
- Delegate.cs
- AddInProcess.cs
- Misc.cs
- TcpAppDomainProtocolHandler.cs
- GridToolTip.cs
- XPathNodePointer.cs
- TableColumn.cs
- ToolStripContainer.cs
- DragDeltaEventArgs.cs
- LineServicesRun.cs
- BinaryFormatterWriter.cs
- _TLSstream.cs
- FileDialog_Vista_Interop.cs
- StateBag.cs
- ThemeConfigurationDialog.cs
- TransportBindingElementImporter.cs
- keycontainerpermission.cs
- PenLineCapValidation.cs
- RemotingConfigParser.cs
- Substitution.cs
- BuildManager.cs
- ColorConvertedBitmapExtension.cs
- LoginViewDesigner.cs
- MergeFailedEvent.cs
- sqlcontext.cs
- LinqTreeNodeEvaluator.cs
- TrimSurroundingWhitespaceAttribute.cs
- StatementContext.cs
- CorePropertiesFilter.cs
- WindowsFormsSectionHandler.cs
- PerfProviderCollection.cs
- nulltextnavigator.cs
- PositiveTimeSpanValidator.cs
- DbConnectionPool.cs
- SqlBulkCopyColumnMappingCollection.cs
- WorkflowItemsPresenter.cs
- CodeDelegateInvokeExpression.cs
- XMLUtil.cs
- ApplicationServicesHostFactory.cs
- KeyFrames.cs
- GlobalizationAssembly.cs
- ControlCodeDomSerializer.cs
- IndividualDeviceConfig.cs
- ConstantProjectedSlot.cs
- OneOfScalarConst.cs
- ClickablePoint.cs
- XmlHierarchyData.cs
- MessagingDescriptionAttribute.cs
- DataGridViewCheckBoxCell.cs
- WindowsStartMenu.cs
- X509Certificate.cs
- PrinterResolution.cs
- TimerElapsedEvenArgs.cs
- SerializationException.cs
- StrokeRenderer.cs
- MenuItemStyle.cs
- XmlnsCompatibleWithAttribute.cs
- WindowsStatusBar.cs
- MetaModel.cs
- UriScheme.cs
- SecurityDocument.cs
- ipaddressinformationcollection.cs
- unsafeIndexingFilterStream.cs
- ColumnPropertiesGroup.cs
- HttpValueCollection.cs
- ContentIterators.cs
- EmptyStringExpandableObjectConverter.cs
- ShaperBuffers.cs
- MatrixAnimationUsingPath.cs
- wmiprovider.cs
- StrongNameMembershipCondition.cs
- ToolStripArrowRenderEventArgs.cs
- MatrixIndependentAnimationStorage.cs
- BufferedGraphicsContext.cs
- ParameterInfo.cs
- OdbcConnectionPoolProviderInfo.cs
- NodeFunctions.cs
- EnterpriseServicesHelper.cs
- DebuggerAttributes.cs
- BlurBitmapEffect.cs
- X509Certificate2Collection.cs
- TouchesOverProperty.cs
- XPathDocument.cs
- IImplicitResourceProvider.cs
- XmlILIndex.cs
- XmlArrayAttribute.cs
- Stopwatch.cs
- OutputCacheSettings.cs
- ViewCellRelation.cs
- ImageFormatConverter.cs