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
{
///
///
/// 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
{
private Dictionary 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, Dictionary columns)
{
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
{
///
///
/// 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
{
private Dictionary 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, Dictionary columns)
{
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
- Vector3D.cs
- SimpleApplicationHost.cs
- GridViewActionList.cs
- ToolStripLabel.cs
- TemplateAction.cs
- fixedPageContentExtractor.cs
- ListManagerBindingsCollection.cs
- LayoutTable.cs
- CalculatedColumn.cs
- WebConfigurationHost.cs
- XmlSignatureManifest.cs
- ButtonAutomationPeer.cs
- webproxy.cs
- LambdaCompiler.Binary.cs
- OpenTypeLayout.cs
- CoreSwitches.cs
- ComponentEditorForm.cs
- ServiceBehaviorAttribute.cs
- PrefixHandle.cs
- SystemUnicastIPAddressInformation.cs
- IdentityHolder.cs
- PreservationFileReader.cs
- DPTypeDescriptorContext.cs
- DataBindingList.cs
- recordstatescratchpad.cs
- UniqueEventHelper.cs
- DbMetaDataFactory.cs
- FlowLayout.cs
- ActivityWithResult.cs
- DataPagerFieldCollection.cs
- ProtectedProviderSettings.cs
- SecureStringHasher.cs
- TreePrinter.cs
- NetTcpBindingCollectionElement.cs
- WindowsListViewItemCheckBox.cs
- TransformerInfoCollection.cs
- CalendarTable.cs
- GridViewDeleteEventArgs.cs
- HttpFormatExtensions.cs
- ArgumentException.cs
- UnsafeNativeMethods.cs
- Win32.cs
- BaseCodeDomTreeGenerator.cs
- EntityDataSourceDesigner.cs
- CompressedStack.cs
- Funcletizer.cs
- XmlImplementation.cs
- BufferManager.cs
- HostedTransportConfigurationManager.cs
- ReferentialConstraintRoleElement.cs
- ResourcePart.cs
- ReferencedCollectionType.cs
- ExpressionBuilderContext.cs
- DBSqlParserColumn.cs
- KeyGesture.cs
- PersonalizationStateInfoCollection.cs
- ZeroOpNode.cs
- HttpResponseWrapper.cs
- MediaEntryAttribute.cs
- System.Data.OracleClient_BID.cs
- StateRuntime.cs
- FixedTextContainer.cs
- MatrixCamera.cs
- UIElement3DAutomationPeer.cs
- EncoderParameter.cs
- TypographyProperties.cs
- SHA256.cs
- DefaultAssemblyResolver.cs
- __Filters.cs
- PnrpPeerResolverElement.cs
- XmlFormatExtensionAttribute.cs
- AssemblyBuilder.cs
- SchemaObjectWriter.cs
- GifBitmapDecoder.cs
- ProxyBuilder.cs
- DPTypeDescriptorContext.cs
- versioninfo.cs
- IxmlLineInfo.cs
- CodeCompileUnit.cs
- CapabilitiesState.cs
- ValueUnavailableException.cs
- PaperSize.cs
- DocumentPaginator.cs
- SystemWebSectionGroup.cs
- EntityChangedParams.cs
- WebEventCodes.cs
- TypefaceMetricsCache.cs
- KnowledgeBase.cs
- Floater.cs
- Content.cs
- ObjectDataProvider.cs
- CodeIterationStatement.cs
- IsolatedStorageFilePermission.cs
- TableRow.cs
- XPathNodeHelper.cs
- StrokeDescriptor.cs
- ColorContext.cs
- MenuItemBinding.cs
- XmlArrayAttribute.cs
- DataTableReader.cs