Skip to content

Commit

Permalink
SqlServer: Stop yelling VARCHAR (#22933)
Browse files Browse the repository at this point in the history
  • Loading branch information
bricelam committed Oct 9, 2020
1 parent ffb51b6 commit 2352499
Show file tree
Hide file tree
Showing 15 changed files with 174 additions and 169 deletions.
104 changes: 52 additions & 52 deletions src/EFCore.SqlServer/Extensions/SqlServerDbFunctionsExtensions.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -998,7 +998,7 @@ protected override void Generate(
{
builder
.AppendLine("BEGIN")
.AppendLine("DECLARE @db_name NVARCHAR(MAX) = DB_NAME();")
.AppendLine("DECLARE @db_name nvarchar(max) = DB_NAME();")
.AppendLine("EXEC(N'ALTER DATABASE [' + @db_name + '] MODIFY ( ")
.Append(editionOptions.Replace("'", "''"))
.AppendLine(" );');")
Expand All @@ -1010,7 +1010,7 @@ protected override void Generate(
{
builder
.AppendLine("BEGIN")
.AppendLine("DECLARE @db_name NVARCHAR(MAX) = DB_NAME();")
.AppendLine("DECLARE @db_name nvarchar(max) = DB_NAME();")
.Append("EXEC(N'ALTER DATABASE [' + @db_name + '] COLLATE ")
.Append(operation.Collation)
.AppendLine(";');")
Expand Down Expand Up @@ -1043,8 +1043,8 @@ protected override void Generate(
builder
.AppendLine("BEGIN")
.AppendLine("ALTER DATABASE CURRENT SET AUTO_CLOSE OFF;")
.AppendLine("DECLARE @db_name NVARCHAR(MAX) = DB_NAME();")
.AppendLine("DECLARE @fg_name NVARCHAR(MAX);")
.AppendLine("DECLARE @db_name nvarchar(max) = DB_NAME();")
.AppendLine("DECLARE @fg_name nvarchar(max);")
.AppendLine("SELECT TOP(1) @fg_name = [name] FROM [sys].[filegroups] WHERE [type] = N'FX';")
.AppendLine()
.AppendLine("IF @fg_name IS NULL");
Expand All @@ -1060,17 +1060,17 @@ protected override void Generate(

builder
.AppendLine()
.AppendLine("DECLARE @path NVARCHAR(MAX);")
.AppendLine("DECLARE @path nvarchar(max);")
.Append("SELECT TOP(1) @path = [physical_name] FROM [sys].[database_files] ")
.AppendLine("WHERE charindex('\\', [physical_name]) > 0 ORDER BY [file_id];")
.AppendLine("IF (@path IS NULL)")
.IncrementIndent().AppendLine("SET @path = '\\' + @db_name;").DecrementIndent()
.AppendLine()
.AppendLine("DECLARE @filename NVARCHAR(MAX) = right(@path, charindex('\\', reverse(@path)) - 1);")
.AppendLine("DECLARE @filename nvarchar(max) = right(@path, charindex('\\', reverse(@path)) - 1);")
.AppendLine(
"SET @filename = REPLACE(left(@filename, len(@filename) - charindex('.', reverse(@filename))), '''', '''''') + N'_MOD';")
.AppendLine(
"DECLARE @new_path NVARCHAR(MAX) = REPLACE(CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS NVARCHAR(MAX)), '''', '''''') + @filename;")
"DECLARE @new_path nvarchar(max) = REPLACE(CAST(SERVERPROPERTY('InstanceDefaultDataPath') AS nvarchar(max)), '''', '''''') + @filename;")
.AppendLine()
.AppendLine("EXEC(N'");

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,12 @@ public virtual SqlExpression Translate(
: _typeMappingSource.FindMapping(typeof(DateTime)));

case nameof(DateTime.TimeOfDay):
return _sqlExpressionFactory.Convert(instance, returnType);
return _sqlExpressionFactory.Function(
"CONVERT",
new[] { _sqlExpressionFactory.Fragment("time"), instance },
nullable: true,
argumentsPropagateNullability: new[] { false, true },
returnType);

case nameof(DateTime.Now):
return _sqlExpressionFactory.Function(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,23 @@ public class SqlServerObjectToStringTranslator : IMethodCallTranslator
private static readonly Dictionary<Type, string> _typeMapping
= new Dictionary<Type, string>
{
{ typeof(sbyte), "VARCHAR(4)" },
{ typeof(byte), "VARCHAR(3)" },
{ typeof(short), "VARCHAR(6)" },
{ typeof(ushort), "VARCHAR(5)" },
{ typeof(int), "VARCHAR(11)" },
{ typeof(uint), "VARCHAR(10)" },
{ typeof(long), "VARCHAR(20)" },
{ typeof(ulong), "VARCHAR(20)" },
{ typeof(float), $"VARCHAR({DefaultLength})" },
{ typeof(double), $"VARCHAR({DefaultLength})" },
{ typeof(decimal), $"VARCHAR({DefaultLength})" },
{ typeof(char), "VARCHAR(1)" },
{ typeof(DateTime), $"VARCHAR({DefaultLength})" },
{ typeof(DateTimeOffset), $"VARCHAR({DefaultLength})" },
{ typeof(TimeSpan), $"VARCHAR({DefaultLength})" },
{ typeof(Guid), "VARCHAR(36)" },
{ typeof(byte[]), $"VARCHAR({DefaultLength})" },
{ typeof(sbyte), "varchar(4)" },
{ typeof(byte), "varchar(3)" },
{ typeof(short), "varchar(6)" },
{ typeof(ushort), "varchar(5)" },
{ typeof(int), "varchar(11)" },
{ typeof(uint), "varchar(10)" },
{ typeof(long), "varchar(20)" },
{ typeof(ulong), "varchar(20)" },
{ typeof(float), $"varchar({DefaultLength})" },
{ typeof(double), $"varchar({DefaultLength})" },
{ typeof(decimal), $"varchar({DefaultLength})" },
{ typeof(char), "varchar(1)" },
{ typeof(DateTime), $"varchar({DefaultLength})" },
{ typeof(DateTimeOffset), $"varchar({DefaultLength})" },
{ typeof(TimeSpan), $"varchar({DefaultLength})" },
{ typeof(Guid), "varchar(36)" },
{ typeof(byte[]), $"varchar({DefaultLength})" },
};

private readonly ISqlExpressionFactory _sqlExpressionFactory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(HOUR, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(hour, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand All @@ -142,7 +142,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(MINUTE, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(minute, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand All @@ -163,7 +163,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(SECOND, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(second, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand All @@ -184,7 +184,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(MILLISECOND, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(millisecond, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand All @@ -205,7 +205,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(MICROSECOND, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(microsecond, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand All @@ -226,7 +226,7 @@ var results
SELECT [m].[Int]
FROM [MappedNullableDataTypes] AS [m]
WHERE DATEDIFF(NANOSECOND, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
WHERE DATEDIFF(nanosecond, [m].[TimeSpanAsTime], @__timeSpan_1) = 0");
}

[ConditionalFact]
Expand Down Expand Up @@ -3368,7 +3368,7 @@ public override void Object_to_string_conversion()
base.Object_to_string_conversion();

AssertSql(
@"SELECT CONVERT(VARCHAR(4), [b].[TestSignedByte]) AS [Sbyte], CONVERT(VARCHAR(3), [b].[TestByte]) AS [Byte], CONVERT(VARCHAR(6), [b].[TestInt16]) AS [Short], CONVERT(VARCHAR(5), [b].[TestUnsignedInt16]) AS [Ushort], CONVERT(VARCHAR(11), [b].[TestInt32]) AS [Int], CONVERT(VARCHAR(10), [b].[TestUnsignedInt32]) AS [Uint], CONVERT(VARCHAR(20), [b].[TestInt64]) AS [Long], CONVERT(VARCHAR(20), [b].[TestUnsignedInt64]) AS [Ulong], CONVERT(VARCHAR(100), [b].[TestSingle]) AS [Float], CONVERT(VARCHAR(100), [b].[TestDouble]) AS [Double], CONVERT(VARCHAR(100), [b].[TestDecimal]) AS [Decimal], CONVERT(VARCHAR(1), [b].[TestCharacter]) AS [Char], CONVERT(VARCHAR(100), [b].[TestDateTime]) AS [DateTime], CONVERT(VARCHAR(100), [b].[TestDateTimeOffset]) AS [DateTimeOffset], CONVERT(VARCHAR(100), [b].[TestTimeSpan]) AS [TimeSpan]
@"SELECT CONVERT(varchar(4), [b].[TestSignedByte]) AS [Sbyte], CONVERT(varchar(3), [b].[TestByte]) AS [Byte], CONVERT(varchar(6), [b].[TestInt16]) AS [Short], CONVERT(varchar(5), [b].[TestUnsignedInt16]) AS [Ushort], CONVERT(varchar(11), [b].[TestInt32]) AS [Int], CONVERT(varchar(10), [b].[TestUnsignedInt32]) AS [Uint], CONVERT(varchar(20), [b].[TestInt64]) AS [Long], CONVERT(varchar(20), [b].[TestUnsignedInt64]) AS [Ulong], CONVERT(varchar(100), [b].[TestSingle]) AS [Float], CONVERT(varchar(100), [b].[TestDouble]) AS [Double], CONVERT(varchar(100), [b].[TestDecimal]) AS [Decimal], CONVERT(varchar(1), [b].[TestCharacter]) AS [Char], CONVERT(varchar(100), [b].[TestDateTime]) AS [DateTime], CONVERT(varchar(100), [b].[TestDateTimeOffset]) AS [DateTimeOffset], CONVERT(varchar(100), [b].[TestTimeSpan]) AS [TimeSpan]
FROM [BuiltInDataTypes] AS [b]
WHERE [b].[Id] = 13");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5339,7 +5339,7 @@ public override async Task Time_of_day_datetimeoffset(bool async)
await base.Time_of_day_datetimeoffset(async);

AssertSql(
@"SELECT CAST([m].[Timeline] AS time)
@"SELECT CONVERT(time, [m].[Timeline])
FROM [Missions] AS [m]");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(YEAR, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(year, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -504,7 +504,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(MONTH, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(month, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -521,7 +521,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(DAY, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(day, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -538,7 +538,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(HOUR, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(hour, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -555,7 +555,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(MINUTE, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(minute, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -572,7 +572,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(SECOND, [o].[OrderDate], GETDATE()) = 0");
WHERE DATEDIFF(second, [o].[OrderDate], GETDATE()) = 0");
}

[ConditionalTheory]
Expand All @@ -589,7 +589,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(MILLISECOND, GETDATE(), DATEADD(day, CAST(1.0E0 AS int), GETDATE())) = 0");
WHERE DATEDIFF(millisecond, GETDATE(), DATEADD(day, CAST(1.0E0 AS int), GETDATE())) = 0");
}

[ConditionalTheory]
Expand All @@ -606,7 +606,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(MICROSECOND, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0");
WHERE DATEDIFF(microsecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0");
}

[ConditionalTheory]
Expand All @@ -623,7 +623,7 @@ await AssertCount(
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(NANOSECOND, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0");
WHERE DATEDIFF(nanosecond, GETDATE(), DATEADD(second, CAST(1.0E0 AS int), GETDATE())) = 0");
}

[ConditionalFact]
Expand All @@ -642,7 +642,7 @@ public virtual void DateDiff_Week_datetime()
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(WEEK, [o].[OrderDate], '1998-05-06T00:00:00.000') = 5");
WHERE DATEDIFF(week, [o].[OrderDate], '1998-05-06T00:00:00.000') = 5");
}

[ConditionalFact]
Expand All @@ -661,7 +661,7 @@ public virtual void DateDiff_Week_datetimeoffset()
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(WEEK, CAST([o].[OrderDate] AS datetimeoffset), '1998-05-06T00:00:00.0000000+00:00') = 5");
WHERE DATEDIFF(week, CAST([o].[OrderDate] AS datetimeoffset), '1998-05-06T00:00:00.0000000+00:00') = 5");
}

[ConditionalFact]
Expand All @@ -680,7 +680,7 @@ public virtual void DateDiff_Week_parameters_null()
AssertSql(
@"SELECT COUNT(*)
FROM [Orders] AS [o]
WHERE DATEDIFF(WEEK, NULL, [o].[OrderDate]) = 5");
WHERE DATEDIFF(week, NULL, [o].[OrderDate]) = 5");
}

[ConditionalTheory]
Expand Down Expand Up @@ -710,9 +710,9 @@ await AssertQueryScalar(
ss => ss.Set<Order>().Select(o => true));

AssertSql(
@"SELECT CAST(ISDATE(CONVERT(VARCHAR(100), [o].[OrderDate])) AS bit)
@"SELECT CAST(ISDATE(CONVERT(varchar(100), [o].[OrderDate])) AS bit)
FROM [Orders] AS [o]
WHERE CAST(ISDATE(CONVERT(VARCHAR(100), [o].[OrderDate])) AS bit) = CAST(1 AS bit)");
WHERE CAST(ISDATE(CONVERT(varchar(100), [o].[OrderDate])) AS bit) = CAST(1 AS bit)");
}

[ConditionalTheory]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3100,15 +3100,15 @@ public override async Task Query_expression_with_to_string_and_contains(bool asy
AssertSql(
@"SELECT [o].[CustomerID]
FROM [Orders] AS [o]
WHERE [o].[OrderDate] IS NOT NULL AND (CONVERT(VARCHAR(10), [o].[EmployeeID]) LIKE N'%10%')");
WHERE [o].[OrderDate] IS NOT NULL AND (CONVERT(varchar(10), [o].[EmployeeID]) LIKE N'%10%')");
}

public override async Task Select_expression_long_to_string(bool async)
{
await base.Select_expression_long_to_string(async);

AssertSql(
@"SELECT CONVERT(VARCHAR(20), CAST([o].[OrderID] AS bigint)) AS [ShipName]
@"SELECT CONVERT(varchar(20), CAST([o].[OrderID] AS bigint)) AS [ShipName]
FROM [Orders] AS [o]
WHERE [o].[OrderDate] IS NOT NULL");
}
Expand All @@ -3118,7 +3118,7 @@ public override async Task Select_expression_int_to_string(bool async)
await base.Select_expression_int_to_string(async);

AssertSql(
@"SELECT CONVERT(VARCHAR(11), [o].[OrderID]) AS [ShipName]
@"SELECT CONVERT(varchar(11), [o].[OrderID]) AS [ShipName]
FROM [Orders] AS [o]
WHERE [o].[OrderDate] IS NOT NULL");
}
Expand All @@ -3142,7 +3142,7 @@ public override async Task Select_expression_other_to_string(bool async)
await base.Select_expression_other_to_string(async);

AssertSql(
@"SELECT CONVERT(VARCHAR(100), [o].[OrderDate]) AS [ShipName]
@"SELECT CONVERT(varchar(100), [o].[OrderDate]) AS [ShipName]
FROM [Orders] AS [o]
WHERE [o].[OrderDate] IS NOT NULL");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1679,7 +1679,7 @@ public override async Task Time_of_day_datetime(bool async)
await base.Time_of_day_datetime(async);

AssertSql(
@"SELECT CAST([o].[OrderDate] AS time)
@"SELECT CONVERT(time, [o].[OrderDate])
FROM [Orders] AS [o]");
}

Expand Down Expand Up @@ -1775,7 +1775,7 @@ public override async Task Like_with_non_string_column_using_ToString(bool async
AssertSql(
@"SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate]
FROM [Orders] AS [o]
WHERE CONVERT(VARCHAR(11), [o].[OrderID]) LIKE N'%20%'");
WHERE CONVERT(varchar(11), [o].[OrderID]) LIKE N'%20%'");
}

public override async Task Like_with_non_string_column_using_double_cast(bool async)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6279,7 +6279,7 @@ public override async Task Time_of_day_datetimeoffset(bool async)
await base.Time_of_day_datetimeoffset(async);

AssertSql(
@"SELECT CAST([m].[Timeline] AS time)
@"SELECT CONVERT(time, [m].[Timeline])
FROM [Missions] AS [m]");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ public override void Scalar_Function_Where_Correlated_Static()
base.Scalar_Function_Where_Correlated_Static();

AssertSql(
@"SELECT LOWER(CONVERT(VARCHAR(11), [c].[Id]))
@"SELECT LOWER(CONVERT(varchar(11), [c].[Id]))
FROM [Customers] AS [c]
WHERE [dbo].[IsTopCustomer]([c].[Id]) = CAST(1 AS bit)");
}
Expand Down Expand Up @@ -369,7 +369,7 @@ public override void Scalar_Function_Where_Correlated_Instance()
base.Scalar_Function_Where_Correlated_Instance();

AssertSql(
@"SELECT LOWER(CONVERT(VARCHAR(11), [c].[Id]))
@"SELECT LOWER(CONVERT(varchar(11), [c].[Id]))
FROM [Customers] AS [c]
WHERE [dbo].[IsTopCustomer]([c].[Id]) = CAST(1 AS bit)");
}
Expand Down
Loading

0 comments on commit 2352499

Please sign in to comment.