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 / Map / ViewGeneration / Structures / OneOfTypeConst.cs / 1 / OneOfTypeConst.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.Data.Common.Utils;
using System.Data.Common.Utils.Boolean;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Data.Metadata.Edm;
namespace System.Data.Mapping.ViewGeneration.Structures {
using DomainBoolExpr = BoolExpr>;
using CellConstantSet = Set;
// A class that denotes the boolean expression: "varType in values"
// See the comments in OneOfConst for partially and fully-done objects
internal class OneOfTypeConst : OneOfConst {
#region Constructors
// effects: Creates a partial OneOfTypeConst of the form "node in values"
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values)
: base(new JoinTreeSlot(node), CreateTypeConstants(values)) { }
// effects: Creates a partial OneOfTypeConst of the form "node = values"
internal OneOfTypeConst(JoinTreeNode node, CellConstant value) :
base(new JoinTreeSlot(node), value) {
Debug.Assert(value is TypeConstant || value.IsNull(), "Type or NULL expected");
}
// effects: Creates an expression of the form "type of node in type constants
// corresponding to values", i.e., a boolean expression of the form "TypeOf(slot) in values"
// possibleValues are all the values that node's type can take
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values,
IEnumerable possibleValues)
: base(new JoinTreeSlot(node), CreateTypeConstants(values), CreateTypeConstants(possibleValues)) { }
// effects: Creates a "fully-done" OneOfTypeConst that represents
// "node in values". possibleValues are all the values that node's type can take
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values,
IEnumerable possibleValues)
: base(new JoinTreeSlot(node), values, possibleValues) { }
// effects: Creates an expression of the form "slot = value"
// possibleValues are all the values that slot can take
internal OneOfTypeConst(JoinTreeNode node, CellConstant value, IEnumerable possibleValues) :
base(new JoinTreeSlot(node), value, possibleValues) {
Debug.Assert(value is TypeConstant || value.IsNull(), "Type or NULL expected");
}
// effects: Creates an expression of the form "slot in domain"
internal OneOfTypeConst(JoinTreeSlot slot, CellConstantDomain domain) : base(slot, domain) {
}
#endregion
#region Helper static methods
// effects: Given a list of types (which can contain nulls),
// returns a corresponding list of Type Constants for those types
private static IEnumerable CreateTypeConstants(IEnumerable types) {
foreach (EdmType type in types) {
if (type == null) {
yield return CellConstant.Null;
} else {
yield return new TypeConstant(type);
}
}
}
#endregion
#region Methods
// requires: IsFullyDone is true
// effects: Fixes the range of this in accordance with range
internal override DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap) {
Debug.Assert(IsFullyDone, "Ranges are fixed only for fully done OneOfConsts");
IEnumerable possibleValues = memberDomainMap.GetDomain(Slot.MemberPath);
BoolLiteral newLiteral = new OneOfTypeConst(Slot, new CellConstantDomain(range, possibleValues));
return newLiteral.GetDomainBoolExpression(memberDomainMap);
}
internal override StringBuilder AsCql(StringBuilder builder, string blockAlias, bool canSkipIsNotNull) {
// type comparison: make a big OR
// Important to enclose all the OR statements in () !
if (Values.Count > 1) {
builder.Append('(');
}
bool isFirst = true;
// Add Cql of the form "(T.A IS OF (ONLY Person) OR .....)"
foreach (CellConstant constant in Values.Values) {
TypeConstant typeConstant = constant as TypeConstant;
Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");
if (isFirst == false) {
builder.Append(" OR ");
}
isFirst = false;
if (Slot.MemberPath.EdmType is RefType) {
builder.Append("Deref(");
Slot.MemberPath.AsCql(builder, blockAlias);
builder.Append(')');
} else {
// non-reference type
Slot.MemberPath.AsCql(builder, blockAlias);
}
if (constant.IsNull()) {
builder.Append(" IS NULL");
} else {
// type constant
builder.Append(" IS OF (ONLY ");
CqlWriter.AppendEscapedTypeName(builder, typeConstant.CdmType);
builder.Append(')');
}
}
if (Values.Count > 1) {
builder.Append(')');
}
return builder;
}
internal override StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull)
{
// Add user readable string of the form "(T.A IS OF (ONLY Person) OR .....)"
if (Slot.MemberPath.EdmType is RefType)
{
builder.Append("Deref(");
Slot.MemberPath.AsCql(builder, blockAlias);
builder.Append(')');
}
else
{
// non-reference type
Slot.MemberPath.AsCql(builder, blockAlias);
}
if (Values.Count > 1)
{
builder.Append(" is a (");
}
else
{
builder.Append(" is type ");
}
bool isFirst = true;
foreach (CellConstant constant in Values.Values)
{
TypeConstant typeConstant = constant as TypeConstant;
Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");
if (isFirst == false)
{
builder.Append(" OR ");
}
if (constant.IsNull())
{
builder.Append(" NULL");
}
else
{
CqlWriter.AppendEscapedTypeName(builder, typeConstant.CdmType);
}
isFirst = false;
}
if (Values.Count > 1)
{
builder.Append(')');
}
return builder;
}
#endregion
#region String methods
internal override void ToCompactString(StringBuilder builder) {
builder.Append("type(");
Slot.ToCompactString(builder);
builder.Append(") IN (");
StringUtil.ToCommaSeparatedStringSorted(builder, Values.Values);
builder.Append(")");
}
#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.Data.Common.Utils.Boolean;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Data.Mapping.ViewGeneration.CqlGeneration;
using System.Data.Metadata.Edm;
namespace System.Data.Mapping.ViewGeneration.Structures {
using DomainBoolExpr = BoolExpr>;
using CellConstantSet = Set;
// A class that denotes the boolean expression: "varType in values"
// See the comments in OneOfConst for partially and fully-done objects
internal class OneOfTypeConst : OneOfConst {
#region Constructors
// effects: Creates a partial OneOfTypeConst of the form "node in values"
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values)
: base(new JoinTreeSlot(node), CreateTypeConstants(values)) { }
// effects: Creates a partial OneOfTypeConst of the form "node = values"
internal OneOfTypeConst(JoinTreeNode node, CellConstant value) :
base(new JoinTreeSlot(node), value) {
Debug.Assert(value is TypeConstant || value.IsNull(), "Type or NULL expected");
}
// effects: Creates an expression of the form "type of node in type constants
// corresponding to values", i.e., a boolean expression of the form "TypeOf(slot) in values"
// possibleValues are all the values that node's type can take
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values,
IEnumerable possibleValues)
: base(new JoinTreeSlot(node), CreateTypeConstants(values), CreateTypeConstants(possibleValues)) { }
// effects: Creates a "fully-done" OneOfTypeConst that represents
// "node in values". possibleValues are all the values that node's type can take
internal OneOfTypeConst(JoinTreeNode node, IEnumerable values,
IEnumerable possibleValues)
: base(new JoinTreeSlot(node), values, possibleValues) { }
// effects: Creates an expression of the form "slot = value"
// possibleValues are all the values that slot can take
internal OneOfTypeConst(JoinTreeNode node, CellConstant value, IEnumerable possibleValues) :
base(new JoinTreeSlot(node), value, possibleValues) {
Debug.Assert(value is TypeConstant || value.IsNull(), "Type or NULL expected");
}
// effects: Creates an expression of the form "slot in domain"
internal OneOfTypeConst(JoinTreeSlot slot, CellConstantDomain domain) : base(slot, domain) {
}
#endregion
#region Helper static methods
// effects: Given a list of types (which can contain nulls),
// returns a corresponding list of Type Constants for those types
private static IEnumerable CreateTypeConstants(IEnumerable types) {
foreach (EdmType type in types) {
if (type == null) {
yield return CellConstant.Null;
} else {
yield return new TypeConstant(type);
}
}
}
#endregion
#region Methods
// requires: IsFullyDone is true
// effects: Fixes the range of this in accordance with range
internal override DomainBoolExpr FixRange(Set range, MemberDomainMap memberDomainMap) {
Debug.Assert(IsFullyDone, "Ranges are fixed only for fully done OneOfConsts");
IEnumerable possibleValues = memberDomainMap.GetDomain(Slot.MemberPath);
BoolLiteral newLiteral = new OneOfTypeConst(Slot, new CellConstantDomain(range, possibleValues));
return newLiteral.GetDomainBoolExpression(memberDomainMap);
}
internal override StringBuilder AsCql(StringBuilder builder, string blockAlias, bool canSkipIsNotNull) {
// type comparison: make a big OR
// Important to enclose all the OR statements in () !
if (Values.Count > 1) {
builder.Append('(');
}
bool isFirst = true;
// Add Cql of the form "(T.A IS OF (ONLY Person) OR .....)"
foreach (CellConstant constant in Values.Values) {
TypeConstant typeConstant = constant as TypeConstant;
Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");
if (isFirst == false) {
builder.Append(" OR ");
}
isFirst = false;
if (Slot.MemberPath.EdmType is RefType) {
builder.Append("Deref(");
Slot.MemberPath.AsCql(builder, blockAlias);
builder.Append(')');
} else {
// non-reference type
Slot.MemberPath.AsCql(builder, blockAlias);
}
if (constant.IsNull()) {
builder.Append(" IS NULL");
} else {
// type constant
builder.Append(" IS OF (ONLY ");
CqlWriter.AppendEscapedTypeName(builder, typeConstant.CdmType);
builder.Append(')');
}
}
if (Values.Count > 1) {
builder.Append(')');
}
return builder;
}
internal override StringBuilder AsUserString(StringBuilder builder, string blockAlias, bool canSkipIsNotNull)
{
// Add user readable string of the form "(T.A IS OF (ONLY Person) OR .....)"
if (Slot.MemberPath.EdmType is RefType)
{
builder.Append("Deref(");
Slot.MemberPath.AsCql(builder, blockAlias);
builder.Append(')');
}
else
{
// non-reference type
Slot.MemberPath.AsCql(builder, blockAlias);
}
if (Values.Count > 1)
{
builder.Append(" is a (");
}
else
{
builder.Append(" is type ");
}
bool isFirst = true;
foreach (CellConstant constant in Values.Values)
{
TypeConstant typeConstant = constant as TypeConstant;
Debug.Assert(typeConstant != null || constant.IsNull(), "Constants for type checks must be type constants or NULLs");
if (isFirst == false)
{
builder.Append(" OR ");
}
if (constant.IsNull())
{
builder.Append(" NULL");
}
else
{
CqlWriter.AppendEscapedTypeName(builder, typeConstant.CdmType);
}
isFirst = false;
}
if (Values.Count > 1)
{
builder.Append(')');
}
return builder;
}
#endregion
#region String methods
internal override void ToCompactString(StringBuilder builder) {
builder.Append("type(");
Slot.ToCompactString(builder);
builder.Append(") IN (");
StringUtil.ToCommaSeparatedStringSorted(builder, Values.Values);
builder.Append(")");
}
#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
- MeasureItemEvent.cs
- WebServiceErrorEvent.cs
- MD5CryptoServiceProvider.cs
- SafeCryptContextHandle.cs
- NumericExpr.cs
- DataServiceContext.cs
- PenLineJoinValidation.cs
- LineBreakRecord.cs
- XmlWriterSettings.cs
- RelatedView.cs
- KeyEvent.cs
- AppliedDeviceFiltersDialog.cs
- SerialReceived.cs
- XLinq.cs
- NewExpression.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- LoadedOrUnloadedOperation.cs
- ConstrainedDataObject.cs
- ControlCachePolicy.cs
- ToolStripOverflow.cs
- XmlDocumentType.cs
- UnsafeNativeMethods.cs
- ColumnBinding.cs
- SmtpMail.cs
- ScrollEventArgs.cs
- BasicHttpMessageCredentialType.cs
- EntityConnectionStringBuilderItem.cs
- TabControlEvent.cs
- IDQuery.cs
- ArrayConverter.cs
- ToolboxItemFilterAttribute.cs
- CustomErrorCollection.cs
- Enum.cs
- MissingMethodException.cs
- CollectionBuilder.cs
- SecurityResources.cs
- DataGridColumnHeader.cs
- ExecutionContext.cs
- PipelineModuleStepContainer.cs
- ManagementBaseObject.cs
- SafeIUnknown.cs
- WebPartPersonalization.cs
- MetadataArtifactLoaderResource.cs
- Types.cs
- OpacityConverter.cs
- RoleGroup.cs
- XmlCodeExporter.cs
- GridViewAutoFormat.cs
- GridItemProviderWrapper.cs
- RootBrowserWindow.cs
- ApplicationManager.cs
- ContainerAction.cs
- ListDataHelper.cs
- BaseCodeDomTreeGenerator.cs
- VisualStateManager.cs
- LongPath.cs
- IisTraceWebEventProvider.cs
- URLString.cs
- ObjectView.cs
- DataGridColumnCollection.cs
- TreeNodeBindingCollection.cs
- DbProviderFactory.cs
- ResourceExpressionBuilder.cs
- StorageComplexTypeMapping.cs
- IUnknownConstantAttribute.cs
- DbTransaction.cs
- VisualStyleElement.cs
- xmlfixedPageInfo.cs
- ResourceManagerWrapper.cs
- XmlAttributeOverrides.cs
- TwoPhaseCommit.cs
- XmlSchemaFacet.cs
- PropertyPath.cs
- InvokeGenerator.cs
- InvalidEnumArgumentException.cs
- IPCCacheManager.cs
- ToolStripDropDownClosingEventArgs.cs
- Utility.cs
- DBPropSet.cs
- DynamicResourceExtension.cs
- WebServiceEndpoint.cs
- DetailsViewUpdatedEventArgs.cs
- EmptyEnumerable.cs
- SrgsItemList.cs
- OracleParameterBinding.cs
- SerialPort.cs
- ReaderWriterLock.cs
- GacUtil.cs
- UnsafeNativeMethodsCLR.cs
- XmlCountingReader.cs
- HttpStreamFormatter.cs
- RepeaterItemEventArgs.cs
- BooleanToVisibilityConverter.cs
- ConfigXmlSignificantWhitespace.cs
- XmlSchemaSimpleType.cs
- TrailingSpaceComparer.cs
- FileDialog.cs
- RenderDataDrawingContext.cs
- TextProperties.cs
- ComponentCommands.cs