Skip to content

Commit 8666584

Browse files
committed
Tests for UNION wrapping in new MySql v8
1 parent 2f10250 commit 8666584

File tree

1 file changed

+257
-0
lines changed

1 file changed

+257
-0
lines changed

Orm/Xtensive.Orm.Tests.Sql/MySQL/ChinookTest.cs

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,5 +957,262 @@ public void Test052()
957957

958958
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
959959
}
960+
961+
[Test]
962+
public void Test053()
963+
{
964+
Require.ProviderVersionAtLeast(new Version(8, 0));
965+
966+
var nativeSql =
967+
"SELECT `a`.`ArtistId` FROM ((SELECT ArtistId FROM dotest.album where AlbumId >= 0 and AlbumId < 50 LIMIT 10)"
968+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 50 and AlbumId < 100 LIMIT 10)"
969+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 100 and AlbumId < 200 LIMIT 10)"
970+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 20 and AlbumId < 300 LIMIT 10)) `a`;";
971+
972+
var albums = SqlDml.TableRef(schema.Tables["album"]);
973+
974+
var s1 = SqlDml.Select(albums);
975+
s1.Columns.Add(albums.Columns["ArtistId"]);
976+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
977+
s1.Limit = 10;
978+
979+
albums = SqlDml.TableRef(schema.Tables["album"]);
980+
var s2 = SqlDml.Select(albums);
981+
s2.Columns.Add(albums.Columns["ArtistId"]);
982+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
983+
s2.Limit = 10;
984+
985+
albums = SqlDml.TableRef(schema.Tables["album"]);
986+
var s3 = SqlDml.Select(albums);
987+
s3.Columns.Add(albums.Columns["ArtistId"]);
988+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
989+
s3.Limit = 10;
990+
991+
albums = SqlDml.TableRef(schema.Tables["album"]);
992+
var s4 = SqlDml.Select(albums);
993+
s4.Columns.Add(albums.Columns["ArtistId"]);
994+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
995+
s4.Limit = 10;
996+
997+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
998+
var select = SqlDml.Select(qr);
999+
select.Columns.Add(qr["ArtistId"]);
1000+
1001+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1002+
}
1003+
1004+
[Test]
1005+
public void Test054()
1006+
{
1007+
Require.ProviderVersionAtLeast(new Version(8, 0));
1008+
1009+
var nativeSql =
1010+
"SELECT `a`.`ArtistId` FROM ((SELECT ArtistId FROM dotest.album where AlbumId >= 0 and AlbumId < 50 LIMIT 10 OFFSET 10)"
1011+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 50 and AlbumId < 100 LIMIT 10 OFFSET 10)"
1012+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 100 and AlbumId < 200 LIMIT 10 OFFSET 10)"
1013+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 20 and AlbumId < 300 LIMIT 10 OFFSET 10)) `a`;";
1014+
1015+
var albums = SqlDml.TableRef(schema.Tables["album"]);
1016+
1017+
var s1 = SqlDml.Select(albums);
1018+
s1.Columns.Add(albums.Columns["ArtistId"]);
1019+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
1020+
s1.Limit = 10;
1021+
s1.Offset = 10;
1022+
1023+
albums = SqlDml.TableRef(schema.Tables["album"]);
1024+
var s2 = SqlDml.Select(albums);
1025+
s2.Columns.Add(albums.Columns["ArtistId"]);
1026+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
1027+
s2.Limit = 10;
1028+
s2.Offset = 10;
1029+
1030+
albums = SqlDml.TableRef(schema.Tables["album"]);
1031+
var s3 = SqlDml.Select(albums);
1032+
s3.Columns.Add(albums.Columns["ArtistId"]);
1033+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
1034+
s3.Limit = 10;
1035+
s3.Offset = 10;
1036+
1037+
albums = SqlDml.TableRef(schema.Tables["album"]);
1038+
var s4 = SqlDml.Select(albums);
1039+
s4.Columns.Add(albums.Columns["ArtistId"]);
1040+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
1041+
s4.Limit = 10;
1042+
s4.Offset = 10;
1043+
1044+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
1045+
var select = SqlDml.Select(qr);
1046+
select.Columns.Add(qr["ArtistId"]);
1047+
1048+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1049+
}
1050+
1051+
[Test]
1052+
public void Test055()
1053+
{
1054+
Require.ProviderVersionAtLeast(new Version(8, 0));
1055+
1056+
var nativeSql =
1057+
"SELECT `a`.`ArtistId` FROM ((SELECT ArtistId FROM dotest.album where AlbumId >= 0 and AlbumId < 50 FOR SHARE)"
1058+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 50 and AlbumId < 100 FOR SHARE)"
1059+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 100 and AlbumId < 200 FOR SHARE)"
1060+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 20 and AlbumId < 300 FOR SHARE)) `a`;";
1061+
1062+
var albums = SqlDml.TableRef(schema.Tables["album"]);
1063+
1064+
var s1 = SqlDml.Select(albums);
1065+
s1.Columns.Add(albums.Columns["ArtistId"]);
1066+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
1067+
s1.Lock = SqlLockType.Shared;
1068+
1069+
albums = SqlDml.TableRef(schema.Tables["album"]);
1070+
var s2 = SqlDml.Select(albums);
1071+
s2.Columns.Add(albums.Columns["ArtistId"]);
1072+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
1073+
s2.Lock = SqlLockType.Shared;
1074+
1075+
albums = SqlDml.TableRef(schema.Tables["album"]);
1076+
var s3 = SqlDml.Select(albums);
1077+
s3.Columns.Add(albums.Columns["ArtistId"]);
1078+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
1079+
s3.Lock = SqlLockType.Shared;
1080+
1081+
albums = SqlDml.TableRef(schema.Tables["album"]);
1082+
var s4 = SqlDml.Select(albums);
1083+
s4.Columns.Add(albums.Columns["ArtistId"]);
1084+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
1085+
s4.Lock = SqlLockType.Shared;
1086+
1087+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
1088+
var select = SqlDml.Select(qr);
1089+
select.Columns.Add(qr["ArtistId"]);
1090+
1091+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1092+
}
1093+
1094+
[Test]
1095+
public void Test056()
1096+
{
1097+
Require.ProviderVersionAtLeast(new Version(8, 0));
1098+
1099+
var nativeSql =
1100+
"SELECT `a`.`ArtistId` FROM ((SELECT ArtistId FROM dotest.album where AlbumId >= 0 and AlbumId < 50 ORDER BY ArtistId)"
1101+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 50 and AlbumId < 100 ORDER BY ArtistId)"
1102+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 100 and AlbumId < 200 ORDER BY ArtistId)"
1103+
+ " UNION (SELECT ArtistId FROM dotest.album where AlbumId >= 20 and AlbumId < 300 ORDER BY ArtistId)) `a`;";
1104+
1105+
var albums = SqlDml.TableRef(schema.Tables["album"]);
1106+
1107+
var s1 = SqlDml.Select(albums);
1108+
s1.Columns.Add(albums.Columns["ArtistId"]);
1109+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
1110+
s1.OrderBy.Add(albums.Columns["ArtistId"]);
1111+
1112+
albums = SqlDml.TableRef(schema.Tables["album"]);
1113+
var s2 = SqlDml.Select(albums);
1114+
s2.Columns.Add(albums.Columns["ArtistId"]);
1115+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
1116+
s2.OrderBy.Add(albums.Columns["ArtistId"]);
1117+
1118+
albums = SqlDml.TableRef(schema.Tables["album"]);
1119+
var s3 = SqlDml.Select(albums);
1120+
s3.Columns.Add(albums.Columns["ArtistId"]);
1121+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
1122+
s3.OrderBy.Add(albums.Columns["ArtistId"]);
1123+
1124+
albums = SqlDml.TableRef(schema.Tables["album"]);
1125+
var s4 = SqlDml.Select(albums);
1126+
s4.Columns.Add(albums.Columns["ArtistId"]);
1127+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
1128+
s4.OrderBy.Add(albums.Columns["ArtistId"]);
1129+
1130+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
1131+
var select = SqlDml.Select(qr);
1132+
select.Columns.Add(qr["ArtistId"]);
1133+
1134+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1135+
}
1136+
1137+
1138+
[Test]
1139+
public void Test057()
1140+
{
1141+
Require.ProviderVersionAtLeast(new Version(8, 0));
1142+
1143+
var nativeSql =
1144+
"SELECT `a`.`ArtistId` FROM (SELECT ArtistId FROM dotest.album where AlbumId >= 0 and AlbumId < 50 GROUP BY ArtistId"
1145+
+ " UNION SELECT ArtistId FROM dotest.album where AlbumId >= 50 and AlbumId < 100 GROUP BY ArtistId"
1146+
+ " UNION SELECT ArtistId FROM dotest.album where AlbumId >= 100 and AlbumId < 200 GROUP BY ArtistId"
1147+
+ " UNION SELECT ArtistId FROM dotest.album where AlbumId >= 20 and AlbumId < 300 GROUP BY ArtistId) `a`;";
1148+
1149+
var albums = SqlDml.TableRef(schema.Tables["album"]);
1150+
1151+
var s1 = SqlDml.Select(albums);
1152+
s1.Columns.Add(albums.Columns["ArtistId"]);
1153+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
1154+
s1.GroupBy.Add(albums.Columns["ArtistId"]);
1155+
1156+
albums = SqlDml.TableRef(schema.Tables["album"]);
1157+
var s2 = SqlDml.Select(albums);
1158+
s2.Columns.Add(albums.Columns["ArtistId"]);
1159+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
1160+
s2.GroupBy.Add(albums.Columns["ArtistId"]);
1161+
1162+
albums = SqlDml.TableRef(schema.Tables["album"]);
1163+
var s3 = SqlDml.Select(albums);
1164+
s3.Columns.Add(albums.Columns["ArtistId"]);
1165+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
1166+
s3.GroupBy.Add(albums.Columns["ArtistId"]);
1167+
1168+
albums = SqlDml.TableRef(schema.Tables["album"]);
1169+
var s4 = SqlDml.Select(albums);
1170+
s4.Columns.Add(albums.Columns["ArtistId"]);
1171+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
1172+
s4.GroupBy.Add(albums.Columns["ArtistId"]);
1173+
1174+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
1175+
var select = SqlDml.Select(qr);
1176+
select.Columns.Add(qr["ArtistId"]);
1177+
1178+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1179+
}
1180+
1181+
[Test]
1182+
public void Test058()
1183+
{
1184+
var nativeSql =
1185+
"SELECT `a`.`AlbumId` FROM (SELECT AlbumId FROM dotest.album where AlbumId >= 0 and AlbumId < 50"
1186+
+ " UNION SELECT AlbumId FROM dotest.album where AlbumId >= 50 and AlbumId< 100"
1187+
+ " UNION SELECT AlbumId FROM dotest.album where AlbumId >= 100 and AlbumId< 200"
1188+
+ " UNION SELECT AlbumId FROM dotest.album where AlbumId >= 20 and AlbumId< 300) `a`;";
1189+
1190+
var albums = SqlDml.TableRef(schema.Tables["album"]);
1191+
1192+
var s1 = SqlDml.Select(albums);
1193+
s1.Columns.Add(albums.Columns["AlbumId"]);
1194+
s1.Where = albums.Columns["AlbumId"] >= 0 && albums.Columns["AlbumId"] < 50;
1195+
1196+
albums = SqlDml.TableRef(schema.Tables["album"]);
1197+
var s2 = SqlDml.Select(albums);
1198+
s2.Columns.Add(albums.Columns["AlbumId"]);
1199+
s2.Where = albums.Columns["AlbumId"] >= 50 && albums.Columns["AlbumId"] < 100;
1200+
1201+
albums = SqlDml.TableRef(schema.Tables["album"]);
1202+
var s3 = SqlDml.Select(albums);
1203+
s3.Columns.Add(albums.Columns["AlbumId"]);
1204+
s3.Where = albums.Columns["AlbumId"] >= 100 && albums.Columns["AlbumId"] < 200;
1205+
1206+
albums = SqlDml.TableRef(schema.Tables["album"]);
1207+
var s4 = SqlDml.Select(albums);
1208+
s4.Columns.Add(albums.Columns["AlbumId"]);
1209+
s4.Where = albums.Columns["AlbumId"] >= 200 && albums.Columns["AlbumId"] < 300;
1210+
1211+
var qr = SqlDml.QueryRef(s1.Union(s2).Union(s3.Union(s4)), "a");
1212+
var select = SqlDml.Select(qr);
1213+
select.Columns.Add(qr["AlbumId"]);
1214+
1215+
Assert.IsTrue(CompareExecuteNonQuery(nativeSql, select));
1216+
}
9601217
}
9611218
}

0 commit comments

Comments
 (0)