// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
namespace System.Data.Entity.Query
{
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
using System.Data.Entity.Core.Metadata.Edm;
using System.Linq;
using Xunit;
public class QueryEnumTests : FunctionalTestBase
{
private static readonly string csdl =
@"
";
private static readonly string ssdl =
@"
";
private static readonly string msl =
@"
";
private static readonly MetadataWorkspace workspace = QueryTestHelpers.CreateMetadataWorkspace(csdl, ssdl, msl);
[Fact]
public void Simple_scan_with_Enum()
{
var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false);
var query = entitySet.Scan();
var expectedSql = "SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType]FROM [dbo].[Message] AS [Extent1]";
QueryTestHelpers.VerifyQuery(query, workspace, expectedSql);
}
[Fact]
public void Scan_with_casting_Enum_to_integer()
{
var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false);
var query = entitySet.Scan()
.Where(
c =>
c.Property("Id").Equal(
c.Property("MessageType").CastTo(
TypeUsage.CreateDefaultTypeUsage(workspace.GetPrimitiveTypes(DataSpace.CSpace).Single(t => t.Name == "Int32")))));
var expectedSql =
"SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Id] = CAST( [Extent1].[MessageType] AS int)";
QueryTestHelpers.VerifyQuery(query, workspace, expectedSql);
}
[Fact]
public void Constant_integer_based_Enum_in_where_clause()
{
var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false);
var query = entitySet.Scan()
.Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Constant(-5)));
var expectedSql =
"SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = -5";
QueryTestHelpers.VerifyQuery(query, workspace, expectedSql);
}
public enum MessageType
{
Express,
Priority,
Ground
};
[Fact]
public void Constant_Enum_value_in_where_clause()
{
var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false);
var query = entitySet.Scan()
.Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Constant(MessageType.Express)));
var expectedSql =
"SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = 0";
QueryTestHelpers.VerifyQuery(query, workspace, expectedSql);
}
[Fact]
public void Null_Enum_value_in_where_clause()
{
var entitySet = workspace.GetEntityContainer("MessageContainer", DataSpace.CSpace).GetEntitySetByName("MessageSet", false);
var query = entitySet.Scan()
.Where(c => c.Property("MessageType").Equal(c.Property("MessageType").ResultType.Null()));
var expectedSql =
"SELECT [Extent1].[Id] AS [Id], [Extent1].[MessageType] AS [MessageType] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[MessageType] = (CAST(NULL AS int))";
QueryTestHelpers.VerifyQuery(query, workspace, expectedSql);
}
}
}