Skip to content

Commit 595a0ad

Browse files
yykkibbbpsykibaek
authored andcommitted
Add test class to verify feature support for latest server versions (#1820)
Add ServerVersionSupportTest that asserts all feature flags for the latest supported MySQL and MariaDB versions, so that any change to feature support is detected during review.
1 parent 14c2cd5 commit 595a0ad

1 file changed

Lines changed: 138 additions & 0 deletions

File tree

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using Xunit;
3+
4+
namespace Pomelo.EntityFrameworkCore.MySql.Infrastructure
5+
{
6+
public class ServerVersionSupportTest
7+
{
8+
[Fact]
9+
public void Latest_MySql_version_feature_support()
10+
{
11+
var supports = MySqlServerVersion.LatestSupportedServerVersion.Supports;
12+
13+
// Supported features:
14+
Assert.True(supports.DateTimeCurrentTimestamp);
15+
Assert.True(supports.DateTime6);
16+
Assert.True(supports.LargerKeyLength);
17+
Assert.True(supports.RenameIndex);
18+
Assert.True(supports.RenameColumn);
19+
Assert.True(supports.WindowFunctions);
20+
Assert.True(supports.DoubleCast);
21+
Assert.True(supports.OuterApply);
22+
Assert.True(supports.CrossApply);
23+
Assert.True(supports.OuterReferenceInMultiLevelSubquery);
24+
Assert.True(supports.Json);
25+
Assert.True(supports.GeneratedColumns);
26+
Assert.True(supports.NullableGeneratedColumns);
27+
Assert.True(supports.ParenthesisEnclosedGeneratedColumnExpressions);
28+
Assert.True(supports.DefaultCharSetUtf8Mb4);
29+
Assert.True(supports.DefaultExpression);
30+
Assert.True(supports.SpatialIndexes);
31+
Assert.True(supports.SpatialReferenceSystemRestrictedColumns);
32+
Assert.True(supports.SpatialSupportFunctionAdditions);
33+
Assert.True(supports.SpatialSetSridFunction);
34+
Assert.True(supports.SpatialDistanceFunctionImplementsAndoyer);
35+
Assert.True(supports.SpatialDistanceSphereFunction);
36+
Assert.True(supports.SpatialGeographic);
37+
Assert.True(supports.ExceptIntercept);
38+
Assert.True(supports.ExceptInterceptPrecedence);
39+
Assert.True(supports.ImplicitBoolCheckUsesIndex);
40+
Assert.True(supports.MySqlBug104294Workaround);
41+
Assert.True(supports.FullTextParser);
42+
Assert.True(supports.InformationSchemaCheckConstraintsTable);
43+
Assert.True(supports.MySqlBugLimit0Offset0ExistsWorkaround);
44+
Assert.True(supports.DescendingIndexes);
45+
Assert.True(supports.CommonTableExpressions);
46+
Assert.True(supports.JsonTable);
47+
Assert.True(supports.JsonValue);
48+
Assert.True(supports.JsonOverlaps);
49+
Assert.True(supports.ValuesWithRows);
50+
Assert.True(supports.FieldReferenceInTableValueConstructor);
51+
Assert.True(supports.JsonTableImplementationWithoutMariaDbBugs);
52+
Assert.True(supports.JsonTableImplementationWithAggregate);
53+
54+
// Unsupported features (update these assertions when MySQL adds support):
55+
Assert.False(supports.FloatCast);
56+
Assert.False(supports.AlternativeDefaultExpression);
57+
Assert.False(supports.SpatialFunctionAdditions);
58+
Assert.False(supports.JsonDataTypeEmulation);
59+
Assert.False(supports.Sequences);
60+
Assert.False(supports.MySqlBug96947Workaround);
61+
Assert.False(supports.IdentifyJsonColumsByCheckConstraints);
62+
Assert.False(supports.Returning);
63+
Assert.False(supports.LimitWithinInAllAnySomeSubquery);
64+
Assert.False(supports.LimitWithNonConstantValue);
65+
Assert.False(supports.Values);
66+
Assert.False(supports.WhereSubqueryReferencesOuterQuery);
67+
Assert.False(supports.CollationCharacterSetApplicabilityWithFullCollationNameColumn);
68+
Assert.False(supports.JsonTableImplementationStable);
69+
Assert.False(supports.JsonTableImplementationWithoutMySqlBugs);
70+
Assert.False(supports.JsonTableImplementationUsingParameterAsSourceWithoutEngineCrash);
71+
}
72+
73+
[Fact]
74+
public void Latest_MariaDb_version_feature_support()
75+
{
76+
var supports = MariaDbServerVersion.LatestSupportedServerVersion.Supports;
77+
78+
// Supported features:
79+
Assert.True(supports.DateTimeCurrentTimestamp);
80+
Assert.True(supports.DateTime6);
81+
Assert.True(supports.LargerKeyLength);
82+
Assert.True(supports.RenameIndex);
83+
Assert.True(supports.RenameColumn);
84+
Assert.True(supports.WindowFunctions);
85+
Assert.True(supports.DoubleCast);
86+
Assert.True(supports.Json);
87+
Assert.True(supports.GeneratedColumns);
88+
Assert.True(supports.DefaultCharSetUtf8Mb4);
89+
Assert.True(supports.AlternativeDefaultExpression);
90+
Assert.True(supports.SpatialIndexes);
91+
Assert.True(supports.SpatialFunctionAdditions);
92+
Assert.True(supports.ExceptIntercept);
93+
Assert.True(supports.ExceptInterceptPrecedence);
94+
Assert.True(supports.JsonDataTypeEmulation);
95+
Assert.True(supports.ImplicitBoolCheckUsesIndex);
96+
Assert.True(supports.Sequences);
97+
Assert.True(supports.InformationSchemaCheckConstraintsTable);
98+
Assert.True(supports.IdentifyJsonColumsByCheckConstraints);
99+
Assert.True(supports.Returning);
100+
Assert.True(supports.CommonTableExpressions);
101+
Assert.True(supports.JsonTable);
102+
Assert.True(supports.JsonValue);
103+
Assert.True(supports.JsonOverlaps);
104+
Assert.True(supports.Values);
105+
Assert.True(supports.CollationCharacterSetApplicabilityWithFullCollationNameColumn);
106+
Assert.True(supports.JsonTableImplementationWithoutMySqlBugs);
107+
Assert.True(supports.JsonTableImplementationUsingParameterAsSourceWithoutEngineCrash);
108+
109+
// Unsupported features (update these assertions when MariaDB adds support):
110+
Assert.False(supports.FloatCast);
111+
Assert.False(supports.OuterApply);
112+
Assert.False(supports.CrossApply);
113+
Assert.False(supports.OuterReferenceInMultiLevelSubquery);
114+
Assert.False(supports.NullableGeneratedColumns);
115+
Assert.False(supports.ParenthesisEnclosedGeneratedColumnExpressions);
116+
Assert.False(supports.DefaultExpression);
117+
Assert.False(supports.SpatialReferenceSystemRestrictedColumns);
118+
Assert.False(supports.SpatialSupportFunctionAdditions);
119+
Assert.False(supports.SpatialSetSridFunction);
120+
Assert.False(supports.SpatialDistanceFunctionImplementsAndoyer);
121+
Assert.False(supports.SpatialDistanceSphereFunction);
122+
Assert.False(supports.SpatialGeographic);
123+
Assert.False(supports.MySqlBug96947Workaround);
124+
Assert.False(supports.MySqlBug104294Workaround);
125+
Assert.False(supports.FullTextParser);
126+
Assert.False(supports.MySqlBugLimit0Offset0ExistsWorkaround);
127+
Assert.False(supports.DescendingIndexes);
128+
Assert.False(supports.LimitWithinInAllAnySomeSubquery);
129+
Assert.False(supports.LimitWithNonConstantValue);
130+
Assert.False(supports.ValuesWithRows);
131+
Assert.False(supports.WhereSubqueryReferencesOuterQuery);
132+
Assert.False(supports.FieldReferenceInTableValueConstructor);
133+
Assert.False(supports.JsonTableImplementationStable);
134+
Assert.False(supports.JsonTableImplementationWithoutMariaDbBugs);
135+
Assert.False(supports.JsonTableImplementationWithAggregate);
136+
}
137+
}
138+
}

0 commit comments

Comments
 (0)