Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Structures / CellConstant.cs / 3 / CellConstant.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Data.Common.Utils;
using System.Collections.Generic;
using System.Text;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Diagnostics;
using System.Data.Metadata.Edm;
using System.Data.Mapping.ViewGeneration.Utils;
namespace System.Data.Mapping.ViewGeneration.Structures {
// This class denotes a constant that can be stored in multiconstants or
// projected in fields
internal class CellConstant : InternalBase {
protected CellConstant() {
// Private default constuctor so that no can construct this
// object externally other than via subclasses
}
#region Fields
// Two constants to denote nulls and undefined values
// Order is important -- it is guaranteed by C# (see Section 10.4.5.1)
internal static readonly IEqualityComparer EqualityComparer = new CellConstantComparer();
internal static readonly CellConstant Null = new CellConstant();
internal static readonly CellConstant Undefined = new CellConstant();
internal static readonly CellConstant NotNull = NegatedCellConstant.CreateNotNull();
//Represents scalar constants within a finite set that are not specified explicitly in the domain
// Currently only used as a Sentinel node to prevent expression optimization
internal static readonly CellConstant AllOtherConstants = new CellConstant();
#endregion
#region Methods
internal bool IsNull() {
return EqualityComparer.Equals(this, CellConstant.Null);
}
internal bool IsUndefined() {
return EqualityComparer.Equals(this, CellConstant.Undefined);
}
internal virtual bool IsNotNull() {
// Provide a default implementation and let the subclasses
// override it
return false; // NegatedCellConstant handles it
}
// effects: Returns true if this contains not null
internal virtual bool HasNotNull() {
// Provide a default implementation and let the subclasses
// override it
return false; // NegatedCellConstant handles it
}
// effects: Modifies builder to contain the appropriate expression
// corresponding to this. outputMember is the member to which this constant is directed.
// blockAlias is the alias for the SELECT FROM WHERE block where this constant is being projected
// if not null. Returns the modified stringbuilder
internal virtual StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias) {
// Constants will never be simply entity sets -- so we can use Property on the path
// constType is the type of this we need to cast to
EdmType constType = Helper.GetModelTypeUsage(outputMember.LastMember).EdmType;
Debug.Assert(this != Undefined && this != NotNull, "Generating Cql for undefined slots or not-nulls?");
Debug.Assert(this == Null, "Probably forgot to override this method in a subclass");
// need to cast
builder.Append("CAST(NULL AS ");
CqlWriter.AppendEscapedTypeName(builder, constType);
builder.Append(')');
return builder;
}
// effects: Returns true if right has the same contents as this
protected virtual int GetHash() {
Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
"CellConstants can only be Null, Undefined, or AllOtherConstants");
return 0;
}
// effects: Returns true if right has the same contents as this
protected virtual bool IsEqualTo(CellConstant right) {
Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
"CellConstants can only be Null, Undefined, or AllOtherConstants");
return this == right;
}
public override bool Equals(object obj)
{
CellConstant cellConst = obj as CellConstant;
if (cellConst == null)
{
return false;
}
else
{
return IsEqualTo(cellConst);
}
}
public override int GetHashCode()
{
return base.GetHashCode();
}
internal virtual string ToUserString() {
StringBuilder builder = new StringBuilder();
InternalToString(builder, false);
return builder.ToString();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal static void ConstantsToUserString(StringBuilder builder, Set constants) {
bool isFirst = true;
foreach (CellConstant constant in constants) {
if (isFirst == false) {
builder.Append(System.Data.Entity.Strings.ViewGen_CommaBlank);
}
isFirst = false;
string constrStr = constant.ToUserString();
builder.Append(constrStr);
}
}
private void InternalToString(StringBuilder builder, bool isInvariant) {
string result;
if (this == Null) {
result = isInvariant ? "NULL" : System.Data.Entity.Strings.ViewGen_Null;
} else if (this == Undefined) {
Debug.Assert(isInvariant, "We should not emit a message about Undefined constants to the user");
result = "?";
} else if (this == NotNull) {
result = isInvariant? "NOT_NULL": System.Data.Entity.Strings.ViewGen_NotNull;
} else if (this == AllOtherConstants){
result = "AllOtherConstants";
} else {
Debug.Fail("No other constants handled by this class");
result = isInvariant? "FAILURE": System.Data.Entity.Strings.ViewGen_Failure;
}
builder.Append(result);
}
internal override void ToCompactString(StringBuilder builder) {
InternalToString(builder, true);
}
#endregion
#region Comparer class
private class CellConstantComparer : IEqualityComparer {
public bool Equals(CellConstant left, CellConstant right) {
// Quick check with references
if (object.ReferenceEquals(left, right)) {
// Gets the Null and Undefined case as well
return true;
}
// One of them is non-null at least. So if the other one is
// null, we cannot be equal
if (left == null || right == null) {
return false;
}
// Both are non-null at this point
return left.IsEqualTo(right);
}
public int GetHashCode(CellConstant key) {
EntityUtil.CheckArgumentNull(key, "key");
return key.GetHash();
}
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Data.Common.Utils;
using System.Collections.Generic;
using System.Text;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Diagnostics;
using System.Data.Metadata.Edm;
using System.Data.Mapping.ViewGeneration.Utils;
namespace System.Data.Mapping.ViewGeneration.Structures {
// This class denotes a constant that can be stored in multiconstants or
// projected in fields
internal class CellConstant : InternalBase {
protected CellConstant() {
// Private default constuctor so that no can construct this
// object externally other than via subclasses
}
#region Fields
// Two constants to denote nulls and undefined values
// Order is important -- it is guaranteed by C# (see Section 10.4.5.1)
internal static readonly IEqualityComparer EqualityComparer = new CellConstantComparer();
internal static readonly CellConstant Null = new CellConstant();
internal static readonly CellConstant Undefined = new CellConstant();
internal static readonly CellConstant NotNull = NegatedCellConstant.CreateNotNull();
//Represents scalar constants within a finite set that are not specified explicitly in the domain
// Currently only used as a Sentinel node to prevent expression optimization
internal static readonly CellConstant AllOtherConstants = new CellConstant();
#endregion
#region Methods
internal bool IsNull() {
return EqualityComparer.Equals(this, CellConstant.Null);
}
internal bool IsUndefined() {
return EqualityComparer.Equals(this, CellConstant.Undefined);
}
internal virtual bool IsNotNull() {
// Provide a default implementation and let the subclasses
// override it
return false; // NegatedCellConstant handles it
}
// effects: Returns true if this contains not null
internal virtual bool HasNotNull() {
// Provide a default implementation and let the subclasses
// override it
return false; // NegatedCellConstant handles it
}
// effects: Modifies builder to contain the appropriate expression
// corresponding to this. outputMember is the member to which this constant is directed.
// blockAlias is the alias for the SELECT FROM WHERE block where this constant is being projected
// if not null. Returns the modified stringbuilder
internal virtual StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias) {
// Constants will never be simply entity sets -- so we can use Property on the path
// constType is the type of this we need to cast to
EdmType constType = Helper.GetModelTypeUsage(outputMember.LastMember).EdmType;
Debug.Assert(this != Undefined && this != NotNull, "Generating Cql for undefined slots or not-nulls?");
Debug.Assert(this == Null, "Probably forgot to override this method in a subclass");
// need to cast
builder.Append("CAST(NULL AS ");
CqlWriter.AppendEscapedTypeName(builder, constType);
builder.Append(')');
return builder;
}
// effects: Returns true if right has the same contents as this
protected virtual int GetHash() {
Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
"CellConstants can only be Null, Undefined, or AllOtherConstants");
return 0;
}
// effects: Returns true if right has the same contents as this
protected virtual bool IsEqualTo(CellConstant right) {
Debug.Assert(this == Null || this == Undefined || this == AllOtherConstants,
"CellConstants can only be Null, Undefined, or AllOtherConstants");
return this == right;
}
public override bool Equals(object obj)
{
CellConstant cellConst = obj as CellConstant;
if (cellConst == null)
{
return false;
}
else
{
return IsEqualTo(cellConst);
}
}
public override int GetHashCode()
{
return base.GetHashCode();
}
internal virtual string ToUserString() {
StringBuilder builder = new StringBuilder();
InternalToString(builder, false);
return builder.ToString();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal static void ConstantsToUserString(StringBuilder builder, Set constants) {
bool isFirst = true;
foreach (CellConstant constant in constants) {
if (isFirst == false) {
builder.Append(System.Data.Entity.Strings.ViewGen_CommaBlank);
}
isFirst = false;
string constrStr = constant.ToUserString();
builder.Append(constrStr);
}
}
private void InternalToString(StringBuilder builder, bool isInvariant) {
string result;
if (this == Null) {
result = isInvariant ? "NULL" : System.Data.Entity.Strings.ViewGen_Null;
} else if (this == Undefined) {
Debug.Assert(isInvariant, "We should not emit a message about Undefined constants to the user");
result = "?";
} else if (this == NotNull) {
result = isInvariant? "NOT_NULL": System.Data.Entity.Strings.ViewGen_NotNull;
} else if (this == AllOtherConstants){
result = "AllOtherConstants";
} else {
Debug.Fail("No other constants handled by this class");
result = isInvariant? "FAILURE": System.Data.Entity.Strings.ViewGen_Failure;
}
builder.Append(result);
}
internal override void ToCompactString(StringBuilder builder) {
InternalToString(builder, true);
}
#endregion
#region Comparer class
private class CellConstantComparer : IEqualityComparer {
public bool Equals(CellConstant left, CellConstant right) {
// Quick check with references
if (object.ReferenceEquals(left, right)) {
// Gets the Null and Undefined case as well
return true;
}
// One of them is non-null at least. So if the other one is
// null, we cannot be equal
if (left == null || right == null) {
return false;
}
// Both are non-null at this point
return left.IsEqualTo(right);
}
public int GetHashCode(CellConstant key) {
EntityUtil.CheckArgumentNull(key, "key");
return key.GetHash();
}
}
#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
- HealthMonitoringSectionHelper.cs
- IfJoinedCondition.cs
- ConfigurationPropertyAttribute.cs
- Decoder.cs
- SingleResultAttribute.cs
- Trigger.cs
- ObjectList.cs
- DataGridDesigner.cs
- KernelTypeValidation.cs
- Choices.cs
- ActivityExecutor.cs
- StringExpressionSet.cs
- OutOfProcStateClientManager.cs
- XamlVector3DCollectionSerializer.cs
- Schema.cs
- TemplateKeyConverter.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- StreamUpgradeProvider.cs
- DataServiceResponse.cs
- DataBinding.cs
- DrawingContextDrawingContextWalker.cs
- Path.cs
- FileSystemWatcher.cs
- comcontractssection.cs
- MachineKeyConverter.cs
- StreamDocument.cs
- WSSecurityPolicy.cs
- RootBrowserWindowProxy.cs
- HttpApplication.cs
- DiscoveryClientChannelFactory.cs
- baseshape.cs
- DbLambda.cs
- BamlResourceSerializer.cs
- WebPartCatalogCloseVerb.cs
- TransformValueSerializer.cs
- Types.cs
- Symbol.cs
- LocatorBase.cs
- CaseInsensitiveComparer.cs
- MutexSecurity.cs
- PhysicalAddress.cs
- DefaultEventAttribute.cs
- MouseButton.cs
- ObjectAssociationEndMapping.cs
- GeometryCollection.cs
- EditorPartChrome.cs
- StoryFragments.cs
- _CacheStreams.cs
- XmlDocumentSurrogate.cs
- UserControl.cs
- ViewStateException.cs
- ChangeInterceptorAttribute.cs
- DataGridViewTextBoxEditingControl.cs
- AnnotationResource.cs
- X509Certificate2Collection.cs
- LingerOption.cs
- FixedBufferAttribute.cs
- TypeBuilder.cs
- DataFieldCollectionEditor.cs
- ConnectionAcceptor.cs
- IndicCharClassifier.cs
- Polygon.cs
- SequenceDesigner.cs
- iisPickupDirectory.cs
- WebBrowserDocumentCompletedEventHandler.cs
- StateChangeEvent.cs
- RefType.cs
- TextEditorMouse.cs
- ComponentDispatcherThread.cs
- SystemTcpStatistics.cs
- HelloMessageCD1.cs
- Parameter.cs
- ConnectionProviderAttribute.cs
- SqlLiftIndependentRowExpressions.cs
- DesignerHost.cs
- Utils.cs
- GridViewSelectEventArgs.cs
- CollectionViewGroupRoot.cs
- BitmapMetadata.cs
- WebEvents.cs
- ConnectAlgorithms.cs
- Filter.cs
- HtmlEncodedRawTextWriter.cs
- DocumentSequence.cs
- GenerateTemporaryTargetAssembly.cs
- NavigatorInput.cs
- TabControl.cs
- DataView.cs
- NumericUpDownAcceleration.cs
- CollectionAdapters.cs
- GenericUriParser.cs
- SamlConditions.cs
- EntityDataSourceReferenceGroup.cs
- UserControl.cs
- SetterBase.cs
- PropertyChange.cs
- NativeActivityAbortContext.cs
- DataGridColumnHeaderAutomationPeer.cs
- SizeAnimationBase.cs
- CodeObject.cs