Skip to content

Commit e20f532

Browse files
2881028810
authored andcommitted
update Expression DateTime ToString tests
1 parent 00ce7d9 commit e20f532

File tree

9 files changed

+83
-41
lines changed

9 files changed

+83
-41
lines changed

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorExpression/DateTimeTest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,13 @@ public void this_ToString()
6262
//WHERE ((date_format(date_add(a__Type__Parent.`Time2`, interval (1) year), '%Y-%m-%d %H:%i:%s.%f') = now()))
6363

6464
g.mysql.Insert(new Topic()).ExecuteAffrows();
65-
foreach (var dt in new[] { DateTime.Parse("2020-5-6 0:1:2"), DateTime.Parse("2020-11-16 13:21:22"), })
65+
var dtn = DateTime.Parse("2020-1-1 0:0:0");
66+
var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a))
67+
.Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a)))
68+
.Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a)))
69+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a)))
70+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a)));
71+
foreach (var dt in dts)
6672
{
6773
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), select.First(a => dt.ToString()));
6874
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm:ss")));

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlExpression/DateTimeTest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,13 @@ public void this_ToString()
6262
//WHERE ((date_format(date_add(a__Type__Parent.`Time2`, interval (1) year), '%Y-%m-%d %H:%i:%s.%f') = now()))
6363

6464
g.mysql.Insert(new Topic()).ExecuteAffrows();
65-
foreach (var dt in new[] { DateTime.Parse("2020-5-6 0:1:2"), DateTime.Parse("2020-11-16 13:21:22"), })
65+
var dtn = DateTime.Parse("2020-1-1 0:0:0");
66+
var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a))
67+
.Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a)))
68+
.Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a)))
69+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a)))
70+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a)));
71+
foreach (var dt in dts)
6672
{
6773
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), select.First(a => dt.ToString()));
6874
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm:ss")));

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerExpression/DateTimeTest.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,23 @@ public void this_ToString()
5151
data.Add(select.Where(a => a.Type.Parent.Time2.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
5252

5353
g.sqlserver.Insert(new Topic()).ExecuteAffrows();
54-
foreach (var dt in new[] { DateTime.Parse("2020-5-6 0:1:2"), DateTime.Parse("2020-11-16 13:21:22"), })
54+
var dtn = DateTime.Parse("2020-1-1 0:0:0");
55+
var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a))
56+
.Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a)))
57+
.Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a)))
58+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a)))
59+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a)));
60+
foreach (var dt in dts)
5561
{
5662
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.fff"), select.First(a => dt.ToString()));
5763
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm:ss")));
5864
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm")));
5965
Assert.Equal(dt.ToString("yyyy-MM-dd HH"), select.First(a => dt.ToString("yyyy-MM-dd HH")));
6066
Assert.Equal(dt.ToString("yyyy-MM-dd"), select.First(a => dt.ToString("yyyy-MM-dd")));
6167
Assert.Equal(dt.ToString("yyyy-MM"), select.First(a => dt.ToString("yyyy-MM")));
68+
Assert.Equal(dt.ToString("yyyyMMddHHmmss"), select.First(a => dt.ToString("yyyyMMddHHmmss")));
69+
Assert.Equal(dt.ToString("yyyyMMddHHmm"), select.First(a => dt.ToString("yyyyMMddHHmm")));
70+
Assert.Equal(dt.ToString("yyyyMMddHH"), select.First(a => dt.ToString("yyyyMMddHH")));
6271
Assert.Equal(dt.ToString("yyyyMMdd"), select.First(a => dt.ToString("yyyyMMdd")));
6372
Assert.Equal(dt.ToString("yyyyMM"), select.First(a => dt.ToString("yyyyMM")));
6473
Assert.Equal(dt.ToString("yyyy"), select.First(a => dt.ToString("yyyy")));

FreeSql.Tests/FreeSql.Tests/MySql/MySqlExpression/DateTimeTest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,13 @@ public void this_ToString()
6262
//WHERE ((date_format(date_add(a__Type__Parent.`Time2`, interval (1) year), '%Y-%m-%d %H:%i:%s.%f') = now()))
6363

6464
g.mysql.Insert(new Topic()).ExecuteAffrows();
65-
foreach (var dt in new[] { DateTime.Parse("2020-5-6 0:1:2"), DateTime.Parse("2020-11-16 13:21:22"), })
65+
var dtn = DateTime.Parse("2020-1-1 0:0:0");
66+
var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a))
67+
.Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a)))
68+
.Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a)))
69+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a)))
70+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a)));
71+
foreach (var dt in dts)
6672
{
6773
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff"), select.First(a => dt.ToString()));
6874
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm:ss")));

FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerExpression/DateTimeTest.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,23 @@ public void this_ToString()
5959
data.Add(select.Where(a => a.Type.Parent.Time2.AddYears(1).ToString().Equals(DateTime.Now)).ToList());
6060

6161
g.sqlserver.Insert(new Topic()).ExecuteAffrows();
62-
foreach (var dt in new[] { DateTime.Parse("2020-5-6 0:1:2"), DateTime.Parse("2020-11-16 13:21:22"), })
62+
var dtn = DateTime.Parse("2020-1-1 0:0:0");
63+
var dts = Enumerable.Range(1, 12).Select(a => dtn.AddMonths(a))
64+
.Concat(Enumerable.Range(1, 31).Select(a => dtn.AddDays(a)))
65+
.Concat(Enumerable.Range(1, 24).Select(a => dtn.AddHours(a)))
66+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddMinutes(a)))
67+
.Concat(Enumerable.Range(1, 60).Select(a => dtn.AddSeconds(a)));
68+
foreach (var dt in dts)
6369
{
6470
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss.fff"), select.First(a => dt.ToString()));
6571
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm:ss"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm:ss")));
6672
Assert.Equal(dt.ToString("yyyy-MM-dd HH:mm"), select.First(a => dt.ToString("yyyy-MM-dd HH:mm")));
6773
Assert.Equal(dt.ToString("yyyy-MM-dd HH"), select.First(a => dt.ToString("yyyy-MM-dd HH")));
6874
Assert.Equal(dt.ToString("yyyy-MM-dd"), select.First(a => dt.ToString("yyyy-MM-dd")));
6975
Assert.Equal(dt.ToString("yyyy-MM"), select.First(a => dt.ToString("yyyy-MM")));
76+
Assert.Equal(dt.ToString("yyyyMMddHHmmss"), select.First(a => dt.ToString("yyyyMMddHHmmss")));
77+
Assert.Equal(dt.ToString("yyyyMMddHHmm"), select.First(a => dt.ToString("yyyyMMddHHmm")));
78+
Assert.Equal(dt.ToString("yyyyMMddHH"), select.First(a => dt.ToString("yyyyMMddHH")));
7079
Assert.Equal(dt.ToString("yyyyMMdd"), select.First(a => dt.ToString("yyyyMMdd")));
7180
Assert.Equal(dt.ToString("yyyyMM"), select.First(a => dt.ToString("yyyyMM")));
7281
Assert.Equal(dt.ToString("yyyy"), select.First(a => dt.ToString("yyyy")));

Providers/FreeSql.Provider.MySql/MySqlExpression.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -394,21 +394,21 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
394394
case "Equals": return $"({left} = {args1})";
395395
case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})";
396396
case "ToString":
397-
if (exp.Arguments.Count == 0) return $"date_format({left}, '%Y-%m-%d %H:%i:%s.%f')";
397+
if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')";
398398
switch (args1)
399399
{
400-
case "'yyyy-MM-dd HH:mm:ss'": return $"date_format({left}, '%Y-%m-%d %H:%i:%s')";
401-
case "'yyyy-MM-dd HH:mm'": return $"date_format({left}, '%Y-%m-%d %H:%i')";
402-
case "'yyyy-MM-dd HH'": return $"date_format({left}, '%Y-%m-%d %H')";
403-
case "'yyyy-MM-dd'": return $"date_format({left}, '%Y-%m-%d')";
404-
case "'yyyy-MM'": return $"date_format({left}, '%Y-%m')";
405-
case "'yyyyMMddHHmmss'": return $"date_format({left}, '%Y%m%d%H%i%s')";
406-
case "'yyyyMMddHHmm'": return $"date_format({left}, '%Y%m%d%H%i')";
407-
case "'yyyyMMddHH'": return $"date_format({left}, '%Y%m%d%H')";
408-
case "'yyyyMMdd'": return $"date_format({left}, '%Y%m%d')";
409-
case "'yyyyMM'": return $"date_format({left}, '%Y%m')";
410-
case "'yyyy'": return $"date_format({left}, '%Y')";
411-
case "'HH:mm:ss'": return $"date_format({left}, '%H:%i:%s')";
400+
case "'yyyy-MM-dd HH:mm:ss'": return $"date_format({left},'%Y-%m-%d %H:%i:%s')";
401+
case "'yyyy-MM-dd HH:mm'": return $"date_format({left},'%Y-%m-%d %H:%i')";
402+
case "'yyyy-MM-dd HH'": return $"date_format({left},'%Y-%m-%d %H')";
403+
case "'yyyy-MM-dd'": return $"date_format({left},'%Y-%m-%d')";
404+
case "'yyyy-MM'": return $"date_format({left},'%Y-%m')";
405+
case "'yyyyMMddHHmmss'": return $"date_format({left},'%Y%m%d%H%i%s')";
406+
case "'yyyyMMddHHmm'": return $"date_format({left},'%Y%m%d%H%i')";
407+
case "'yyyyMMddHH'": return $"date_format({left},'%Y%m%d%H')";
408+
case "'yyyyMMdd'": return $"date_format({left},'%Y%m%d')";
409+
case "'yyyyMM'": return $"date_format({left},'%Y%m')";
410+
case "'yyyy'": return $"date_format({left},'%Y')";
411+
case "'HH:mm:ss'": return $"date_format({left},'%H:%i:%s')";
412412
}
413413

414414
args1 = Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|ss|tt)", m =>
@@ -437,13 +437,13 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
437437
isMatched = true;
438438
switch (m.Groups[1].Value)
439439
{
440-
case "m": return $"'), trim(leading '0' from date_format({left}, '%i')), date_format({left}, '";
441-
case "s": return $"'), trim(leading '0' from date_format({left}, '%s')), date_format({left}, '";
442-
case "t": return $"'), trim(trailing 'M' from date_format({left}, '%p')), date_format({left}, '";
440+
case "m": return $"'), case when substr(date_format({left},'%i'),1,1) = '0' then substr(date_format({left},'%i'),2,1) else date_format({left},'%i') end, date_format({left},'";
441+
case "s": return $"'), case when substr(date_format({left},'%s'),1,1) = '0' then substr(date_format({left},'%s'),2,1) else date_format({left},'%s') end, date_format({left},'";
442+
case "t": return $"'), trim(trailing 'M' from date_format({left},'%p')), date_format({left},'";
443443
}
444444
return m.Groups[0].Value;
445445
}).Replace("%_a1", "%m").Replace("%_a2", "%s");
446-
return isMatched == false ? $"date_format({left}, {args1})" : $"concat(date_format({left}, {args1}))".Replace($"date_format({left}, '')", "''");
446+
return isMatched == false ? $"date_format({left},{args1})" : $"concat(date_format({left},{args1}))".Replace($"date_format({left},'')", "''");
447447
}
448448
}
449449
return null;

Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlExpression.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -394,21 +394,21 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
394394
case "Equals": return $"({left} = {args1})";
395395
case "CompareTo": return $"timestampdiff(microsecond,{args1},{left})";
396396
case "ToString":
397-
if (exp.Arguments.Count == 0) return $"date_format({left}, '%Y-%m-%d %H:%i:%s.%f')";
397+
if (exp.Arguments.Count == 0) return $"date_format({left},'%Y-%m-%d %H:%i:%s.%f')";
398398
switch (args1)
399399
{
400-
case "'yyyy-MM-dd HH:mm:ss'": return $"date_format({left}, '%Y-%m-%d %H:%i:%s')";
401-
case "'yyyy-MM-dd HH:mm'": return $"date_format({left}, '%Y-%m-%d %H:%i')";
402-
case "'yyyy-MM-dd HH'": return $"date_format({left}, '%Y-%m-%d %H')";
403-
case "'yyyy-MM-dd'": return $"date_format({left}, '%Y-%m-%d')";
404-
case "'yyyy-MM'": return $"date_format({left}, '%Y-%m')";
405-
case "'yyyyMMddHHmmss'": return $"date_format({left}, '%Y%m%d%H%i%s')";
406-
case "'yyyyMMddHHmm'": return $"date_format({left}, '%Y%m%d%H%i')";
407-
case "'yyyyMMddHH'": return $"date_format({left}, '%Y%m%d%H')";
408-
case "'yyyyMMdd'": return $"date_format({left}, '%Y%m%d')";
409-
case "'yyyyMM'": return $"date_format({left}, '%Y%m')";
410-
case "'yyyy'": return $"date_format({left}, '%Y')";
411-
case "'HH:mm:ss'": return $"date_format({left}, '%H:%i:%s')";
400+
case "'yyyy-MM-dd HH:mm:ss'": return $"date_format({left},'%Y-%m-%d %H:%i:%s')";
401+
case "'yyyy-MM-dd HH:mm'": return $"date_format({left},'%Y-%m-%d %H:%i')";
402+
case "'yyyy-MM-dd HH'": return $"date_format({left},'%Y-%m-%d %H')";
403+
case "'yyyy-MM-dd'": return $"date_format({left},'%Y-%m-%d')";
404+
case "'yyyy-MM'": return $"date_format({left},'%Y-%m')";
405+
case "'yyyyMMddHHmmss'": return $"date_format({left},'%Y%m%d%H%i%s')";
406+
case "'yyyyMMddHHmm'": return $"date_format({left},'%Y%m%d%H%i')";
407+
case "'yyyyMMddHH'": return $"date_format({left},'%Y%m%d%H')";
408+
case "'yyyyMMdd'": return $"date_format({left},'%Y%m%d')";
409+
case "'yyyyMM'": return $"date_format({left},'%Y%m')";
410+
case "'yyyy'": return $"date_format({left},'%Y')";
411+
case "'HH:mm:ss'": return $"date_format({left},'%H:%i:%s')";
412412
}
413413

414414
args1 = Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|ss|tt)", m =>
@@ -437,13 +437,13 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
437437
isMatched = true;
438438
switch (m.Groups[1].Value)
439439
{
440-
case "m": return $"'), trim(leading '0' from date_format({left}, '%i')), date_format({left}, '";
441-
case "s": return $"'), trim(leading '0' from date_format({left}, '%s')), date_format({left}, '";
442-
case "t": return $"'), trim(trailing 'M' from date_format({left}, '%p')), date_format({left}, '";
440+
case "m": return $"'), case when substr(date_format({left},'%i'),1,1) = '0' then substr(date_format({left},'%i'),2,1) else date_format({left},'%i') end, date_format({left},'";
441+
case "s": return $"'), case when substr(date_format({left},'%s'),1,1) = '0' then substr(date_format({left},'%s'),2,1) else date_format({left},'%s') end, date_format({left},'";
442+
case "t": return $"'), trim(trailing 'M' from date_format({left},'%p')), date_format({left},'";
443443
}
444444
return m.Groups[0].Value;
445445
}).Replace("%_a1", "%m").Replace("%_a2", "%s");
446-
return isMatched == false ? $"date_format({left}, {args1})" : $"concat(date_format({left}, {args1}))".Replace($"date_format({left}, '')", "''");
446+
return isMatched == false ? $"date_format({left},{args1})" : $"concat(date_format({left},{args1}))".Replace($"date_format({left},'')", "''");
447447
}
448448
}
449449
return null;

Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerExpression.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,11 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
388388
case "'yyyy'": return $"substring(convert(char(8), {left}, 112), 1, 4)";
389389
case "'HH:mm:ss'": return $"convert(char(8), {left}, 24)";
390390
}
391+
var isMatched = false;
391392
var nchar = args1.StartsWith("N'") ? "N" : "";
392-
return Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|tt|t)", m =>
393+
args1 = Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|tt|t)", m =>
393394
{
395+
isMatched = true;
394396
switch (m.Groups[1].Value)
395397
{
396398
case "yyyy": return $"' + substring(convert(char(8), {left}, 112), 1, 4) + {nchar}'";
@@ -416,6 +418,7 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
416418
}
417419
return m.Groups[0].Value;
418420
});
421+
return isMatched == false ? args1 : $"({args1})";
419422
}
420423
}
421424
return null;

Providers/FreeSql.Provider.SqlServer/SqlServerExpression.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,11 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
388388
case "'yyyy'": return $"substring(convert(char(8), {left}, 112), 1, 4)";
389389
case "'HH:mm:ss'": return $"convert(char(8), {left}, 24)";
390390
}
391+
var isMatched = false;
391392
var nchar = args1.StartsWith("N'") ? "N" : "";
392-
return Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|tt|t)", m =>
393+
args1 = Regex.Replace(args1, "(yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|tt|t)", m =>
393394
{
395+
isMatched = true;
394396
switch (m.Groups[1].Value)
395397
{
396398
case "yyyy": return $"' + substring(convert(char(8), {left}, 112), 1, 4) + {nchar}'";
@@ -414,6 +416,7 @@ public override string ExpressionLambdaToSqlCallDateTime(MethodCallExpression ex
414416
}
415417
return m.Groups[0].Value;
416418
});
419+
return isMatched == false ? args1 : $"({args1})";
417420
}
418421
}
419422
return null;

0 commit comments

Comments
 (0)