Mercurial > pub > bltoolkit
comparison UnitTests/Linq/EnumMapping.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Collections.Generic; | |
| 3 using System.Linq; | |
| 4 using System.Linq.Expressions; | |
| 5 using BLToolkit.Data.DataProvider; | |
| 6 using BLToolkit.Data.Linq; | |
| 7 using BLToolkit.DataAccess; | |
| 8 using BLToolkit.Mapping; | |
| 9 using NUnit.Framework; | |
| 10 | |
| 11 namespace Data.Linq | |
| 12 { | |
| 13 [TestFixture, Category("MapValue")] | |
| 14 public class EnumMapping : TestBase | |
| 15 { | |
| 16 enum TestEnum1 | |
| 17 { | |
| 18 [MapValue(11L)] Value1 = 3, | |
| 19 [MapValue(12L)] Value2, | |
| 20 } | |
| 21 enum TestEnum2 | |
| 22 { | |
| 23 Value1 = 3, | |
| 24 Value2, | |
| 25 } | |
| 26 enum TestEnum3 | |
| 27 { | |
| 28 Value1 = 3, | |
| 29 Value2, | |
| 30 } | |
| 31 | |
| 32 [TableName("LinqDataTypes")] | |
| 33 class TestTable1 | |
| 34 { | |
| 35 [PrimaryKey, MapField("ID")] public int Id; | |
| 36 [MapField("BigIntValue")] public TestEnum1 TestField; | |
| 37 } | |
| 38 | |
| 39 [MapValue(TestEnum2.Value2, 12L)] | |
| 40 [TableName("LinqDataTypes")] | |
| 41 class TestTable2 | |
| 42 { | |
| 43 [PrimaryKey, MapField("ID")] | |
| 44 public int Id; | |
| 45 | |
| 46 [MapValue(TestEnum2.Value1, 11L)] | |
| 47 [MapField("BigIntValue")] | |
| 48 public TestEnum2 TestField; | |
| 49 | |
| 50 [MapField("IntValue")] | |
| 51 public TestEnum3 Int32Field; | |
| 52 } | |
| 53 | |
| 54 [TableName("LinqDataTypes")] | |
| 55 class NullableTestTable1 | |
| 56 { | |
| 57 [PrimaryKey, MapField("ID")] | |
| 58 public int? Id; | |
| 59 | |
| 60 [MapField("BigIntValue")] | |
| 61 public TestEnum1? TestField; | |
| 62 } | |
| 63 | |
| 64 [MapValue(TestEnum2.Value2, 12L)] | |
| 65 [TableName("LinqDataTypes")] | |
| 66 class NullableTestTable2 | |
| 67 { | |
| 68 [PrimaryKey, MapField("ID")] | |
| 69 public int? Id; | |
| 70 | |
| 71 [MapValue(TestEnum2.Value1, 11L)] | |
| 72 [MapField("BigIntValue")] | |
| 73 public TestEnum2? TestField; | |
| 74 | |
| 75 [MapField("IntValue")] | |
| 76 public TestEnum3? Int32Field; | |
| 77 } | |
| 78 | |
| 79 [TableName("LinqDataTypes")] | |
| 80 class RawTable | |
| 81 { | |
| 82 [PrimaryKey, MapField("ID")] | |
| 83 public int Id; | |
| 84 | |
| 85 [MapField("BigIntValue")] | |
| 86 public long TestField; | |
| 87 | |
| 88 [MapField("IntValue")] | |
| 89 public int Int32Field; | |
| 90 } | |
| 91 | |
| 92 class Cleaner : IDisposable | |
| 93 { | |
| 94 readonly ITestDataContext _db; | |
| 95 | |
| 96 public Cleaner(ITestDataContext db) | |
| 97 { | |
| 98 _db = db; | |
| 99 Clean(); | |
| 100 } | |
| 101 | |
| 102 private void Clean() | |
| 103 { | |
| 104 _db.GetTable<RawTable>().Where(r => r.Id == RID).Delete(); | |
| 105 } | |
| 106 | |
| 107 public void Dispose() | |
| 108 { | |
| 109 try | |
| 110 { | |
| 111 // rollback emulation for WCF | |
| 112 Clean(); | |
| 113 } | |
| 114 catch (Exception) | |
| 115 { | |
| 116 } | |
| 117 } | |
| 118 } | |
| 119 | |
| 120 const long VAL2 = 12; | |
| 121 const long VAL1 = 11; | |
| 122 const int RID = 101; | |
| 123 | |
| 124 [Test] | |
| 125 public void EnumMapInsert1() | |
| 126 { | |
| 127 ForEachProvider(db => | |
| 128 { | |
| 129 using (new Cleaner(db)) | |
| 130 { | |
| 131 db.GetTable<TestTable1>().Insert(() => new TestTable1 | |
| 132 { | |
| 133 Id = RID, | |
| 134 TestField = TestEnum1.Value2 | |
| 135 }); | |
| 136 | |
| 137 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 138 } | |
| 139 }); | |
| 140 } | |
| 141 | |
| 142 [Test] | |
| 143 public void EnumMapInsert2() | |
| 144 { | |
| 145 ForEachProvider(db => | |
| 146 { | |
| 147 using (new Cleaner(db)) | |
| 148 { | |
| 149 db.GetTable<TestTable2>().Insert(() => new TestTable2 | |
| 150 { | |
| 151 Id = RID, | |
| 152 TestField = TestEnum2.Value2 | |
| 153 }); | |
| 154 | |
| 155 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 156 } | |
| 157 }); | |
| 158 } | |
| 159 | |
| 160 [Test] | |
| 161 public void EnumMapInsert3() | |
| 162 { | |
| 163 ForEachProvider(db => | |
| 164 { | |
| 165 using (new Cleaner(db)) | |
| 166 { | |
| 167 db.GetTable<NullableTestTable1>().Insert(() => new NullableTestTable1 | |
| 168 { | |
| 169 Id = RID, | |
| 170 TestField = TestEnum1.Value2 | |
| 171 }); | |
| 172 | |
| 173 Assert.AreEqual(1, db.GetTable<RawTable>() | |
| 174 .Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 175 } | |
| 176 }); | |
| 177 } | |
| 178 | |
| 179 [Test] | |
| 180 public void EnumMapInsert4() | |
| 181 { | |
| 182 ForEachProvider(db => | |
| 183 { | |
| 184 using (new Cleaner(db)) | |
| 185 { | |
| 186 db.GetTable<NullableTestTable2>().Insert(() => new NullableTestTable2 | |
| 187 { | |
| 188 Id = RID, | |
| 189 TestField = TestEnum2.Value2 | |
| 190 }); | |
| 191 | |
| 192 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 193 } | |
| 194 }); | |
| 195 } | |
| 196 | |
| 197 [Test] | |
| 198 public void EnumMapWhere1() | |
| 199 { | |
| 200 ForEachProvider(db => | |
| 201 { | |
| 202 using (new Cleaner(db)) | |
| 203 { | |
| 204 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 205 { | |
| 206 Id = RID, | |
| 207 TestField = VAL2 | |
| 208 }); | |
| 209 | |
| 210 var result = db.GetTable<TestTable1>().Where(r => r.Id == RID && r.TestField == TestEnum1.Value2).Select(r => r.TestField).FirstOrDefault(); | |
| 211 Assert.True(result == TestEnum1.Value2); | |
| 212 } | |
| 213 }); | |
| 214 } | |
| 215 | |
| 216 [Test] | |
| 217 public void EnumMapWhere2() | |
| 218 { | |
| 219 ForEachProvider(db => | |
| 220 { | |
| 221 using (new Cleaner(db)) | |
| 222 { | |
| 223 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 224 { | |
| 225 Id = RID, | |
| 226 TestField = VAL2 | |
| 227 }); | |
| 228 | |
| 229 var result = db.GetTable<TestTable2>().Where(r => r.Id == RID && r.TestField == TestEnum2.Value2).Select(r => r.TestField).FirstOrDefault(); | |
| 230 Assert.True(result == TestEnum2.Value2); | |
| 231 } | |
| 232 }); | |
| 233 } | |
| 234 | |
| 235 [Test] | |
| 236 public void EnumMapWhere3() | |
| 237 { | |
| 238 ForEachProvider(db => | |
| 239 { | |
| 240 using (new Cleaner(db)) | |
| 241 { | |
| 242 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 243 { | |
| 244 Id = RID, | |
| 245 TestField = VAL2 | |
| 246 }); | |
| 247 | |
| 248 var result = db.GetTable<NullableTestTable1>() | |
| 249 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2) | |
| 250 .Select(r => r.TestField).FirstOrDefault(); | |
| 251 Assert.True(result == TestEnum1.Value2); | |
| 252 } | |
| 253 }); | |
| 254 } | |
| 255 | |
| 256 [Test] | |
| 257 public void EnumMapWhere4() | |
| 258 { | |
| 259 ForEachProvider(db => | |
| 260 { | |
| 261 using (new Cleaner(db)) | |
| 262 { | |
| 263 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 264 { | |
| 265 Id = RID, | |
| 266 TestField = VAL2 | |
| 267 }); | |
| 268 | |
| 269 var result = db.GetTable<NullableTestTable2>() | |
| 270 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2) | |
| 271 .Select(r => r.TestField).FirstOrDefault(); | |
| 272 Assert.True(result == TestEnum2.Value2); | |
| 273 } | |
| 274 }); | |
| 275 } | |
| 276 | |
| 277 [Test] | |
| 278 public void EnumMapUpdate1() | |
| 279 { | |
| 280 ForEachProvider(db => | |
| 281 { | |
| 282 using (new Cleaner(db)) | |
| 283 { | |
| 284 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 285 { | |
| 286 Id = RID, | |
| 287 TestField = VAL1 | |
| 288 }); | |
| 289 | |
| 290 db.GetTable<TestTable1>() | |
| 291 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value1) | |
| 292 .Update(r => new TestTable1 { TestField = TestEnum1.Value2 }); | |
| 293 | |
| 294 var result = db.GetTable<RawTable>() | |
| 295 .Where(r => r.Id == RID && r.TestField == VAL2) | |
| 296 .Select(r => r.TestField) | |
| 297 .FirstOrDefault(); | |
| 298 | |
| 299 Assert.True(result == VAL2); | |
| 300 } | |
| 301 }); | |
| 302 } | |
| 303 | |
| 304 [Test] | |
| 305 public void EnumMapUpdate2() | |
| 306 { | |
| 307 ForEachProvider(db => | |
| 308 { | |
| 309 using (new Cleaner(db)) | |
| 310 { | |
| 311 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 312 { | |
| 313 Id = RID, | |
| 314 TestField = VAL1 | |
| 315 }); | |
| 316 | |
| 317 db.GetTable<TestTable2>() | |
| 318 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value1) | |
| 319 .Update(r => new TestTable2 { TestField = TestEnum2.Value2 }); | |
| 320 | |
| 321 var result = db.GetTable<RawTable>() | |
| 322 .Where(r => r.Id == RID && r.TestField == VAL2) | |
| 323 .Select(r => r.TestField) | |
| 324 .FirstOrDefault(); | |
| 325 | |
| 326 Assert.True(result == VAL2); | |
| 327 } | |
| 328 }); | |
| 329 } | |
| 330 | |
| 331 [Test] | |
| 332 public void EnumMapUpdate3() | |
| 333 { | |
| 334 ForEachProvider(db => | |
| 335 { | |
| 336 using (new Cleaner(db)) | |
| 337 { | |
| 338 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 339 { | |
| 340 Id = RID, | |
| 341 TestField = VAL1 | |
| 342 }); | |
| 343 | |
| 344 db.GetTable<NullableTestTable1>() | |
| 345 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value1) | |
| 346 .Update(r => new NullableTestTable1 { TestField = TestEnum1.Value2 }); | |
| 347 | |
| 348 var result = db.GetTable<RawTable>() | |
| 349 .Where(r => r.Id == RID && r.TestField == VAL2) | |
| 350 .Select(r => r.TestField) | |
| 351 .FirstOrDefault(); | |
| 352 | |
| 353 Assert.True(result == VAL2); | |
| 354 } | |
| 355 }); | |
| 356 } | |
| 357 | |
| 358 [Test] | |
| 359 public void EnumMapUpdate4() | |
| 360 { | |
| 361 ForEachProvider(db => | |
| 362 { | |
| 363 using (new Cleaner(db)) | |
| 364 { | |
| 365 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 366 { | |
| 367 Id = RID, | |
| 368 TestField = VAL1 | |
| 369 }); | |
| 370 | |
| 371 db.GetTable<NullableTestTable2>() | |
| 372 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value1) | |
| 373 .Update(r => new NullableTestTable2 { TestField = TestEnum2.Value2 }); | |
| 374 | |
| 375 var result = db.GetTable<RawTable>() | |
| 376 .Where(r => r.Id == RID && r.TestField == VAL2) | |
| 377 .Select(r => r.TestField) | |
| 378 .FirstOrDefault(); | |
| 379 | |
| 380 Assert.True(result == VAL2); | |
| 381 } | |
| 382 }); | |
| 383 } | |
| 384 | |
| 385 [Test] | |
| 386 public void EnumMapSelectAnon1([DataContexts] string context) | |
| 387 { | |
| 388 using (var db = GetDataContext(context)) | |
| 389 { | |
| 390 using (new Cleaner(db)) | |
| 391 { | |
| 392 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 393 { | |
| 394 Id = RID, | |
| 395 TestField = VAL2 | |
| 396 }); | |
| 397 | |
| 398 var result = db.GetTable<TestTable1>() | |
| 399 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2) | |
| 400 .Select(r => new { r.TestField }) | |
| 401 .FirstOrDefault(); | |
| 402 | |
| 403 Assert.NotNull(result); | |
| 404 Assert.That(result.TestField, Is.EqualTo(TestEnum1.Value2)); | |
| 405 } | |
| 406 } | |
| 407 } | |
| 408 | |
| 409 [Test] | |
| 410 public void EnumMapSelectAnon2() | |
| 411 { | |
| 412 ForEachProvider(db => | |
| 413 { | |
| 414 using (new Cleaner(db)) | |
| 415 { | |
| 416 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 417 { | |
| 418 Id = RID, | |
| 419 TestField = VAL2 | |
| 420 }); | |
| 421 | |
| 422 var result = db.GetTable<TestTable2>() | |
| 423 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2) | |
| 424 .Select(r => new { r.TestField }) | |
| 425 .FirstOrDefault(); | |
| 426 | |
| 427 Assert.NotNull(result); | |
| 428 Assert.True(result.TestField == TestEnum2.Value2); | |
| 429 } | |
| 430 }); | |
| 431 } | |
| 432 | |
| 433 [Test] | |
| 434 public void EnumMapSelectAnon3() | |
| 435 { | |
| 436 ForEachProvider(db => | |
| 437 { | |
| 438 using (new Cleaner(db)) | |
| 439 { | |
| 440 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 441 { | |
| 442 Id = RID, | |
| 443 TestField = VAL2 | |
| 444 }); | |
| 445 | |
| 446 var result = db.GetTable<NullableTestTable1>() | |
| 447 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2) | |
| 448 .Select(r => new { r.TestField }) | |
| 449 .FirstOrDefault(); | |
| 450 | |
| 451 Assert.NotNull(result); | |
| 452 Assert.True(result.TestField == TestEnum1.Value2); | |
| 453 } | |
| 454 }); | |
| 455 } | |
| 456 | |
| 457 [Test] | |
| 458 public void EnumMapSelectAnon4() | |
| 459 { | |
| 460 ForEachProvider(db => | |
| 461 { | |
| 462 using (new Cleaner(db)) | |
| 463 { | |
| 464 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 465 { | |
| 466 Id = RID, | |
| 467 TestField = VAL2 | |
| 468 }); | |
| 469 | |
| 470 var result = db.GetTable<NullableTestTable2>() | |
| 471 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2) | |
| 472 .Select(r => new { r.TestField }) | |
| 473 .FirstOrDefault(); | |
| 474 | |
| 475 Assert.NotNull(result); | |
| 476 Assert.True(result.TestField == TestEnum2.Value2); | |
| 477 } | |
| 478 }); | |
| 479 } | |
| 480 | |
| 481 [Test] | |
| 482 public void EnumMapDelete1() | |
| 483 { | |
| 484 ForEachProvider(db => | |
| 485 { | |
| 486 using (new Cleaner(db)) | |
| 487 { | |
| 488 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 489 { | |
| 490 Id = RID, | |
| 491 TestField = VAL2 | |
| 492 }); | |
| 493 | |
| 494 Assert.True(1 == db.GetTable<TestTable1>().Delete(r => r.Id == RID && r.TestField == TestEnum1.Value2)); | |
| 495 } | |
| 496 }); | |
| 497 } | |
| 498 | |
| 499 [Test] | |
| 500 public void EnumMapDelete2() | |
| 501 { | |
| 502 ForEachProvider(db => | |
| 503 { | |
| 504 using (new Cleaner(db)) | |
| 505 { | |
| 506 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 507 { | |
| 508 Id = RID, | |
| 509 TestField = VAL2 | |
| 510 }); | |
| 511 | |
| 512 Assert.True(1 == db.GetTable<TestTable2>().Delete(r => r.Id == RID && r.TestField == TestEnum2.Value2)); | |
| 513 } | |
| 514 }); | |
| 515 } | |
| 516 | |
| 517 [Test] | |
| 518 public void EnumMapDelete3() | |
| 519 { | |
| 520 ForEachProvider(db => | |
| 521 { | |
| 522 using (new Cleaner(db)) | |
| 523 { | |
| 524 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 525 { | |
| 526 Id = RID, | |
| 527 TestField = VAL2 | |
| 528 }); | |
| 529 | |
| 530 Assert.True(1 == db.GetTable<NullableTestTable1>() | |
| 531 .Delete(r => r.Id == RID && r.TestField == TestEnum1.Value2)); | |
| 532 } | |
| 533 }); | |
| 534 } | |
| 535 | |
| 536 [Test] | |
| 537 public void EnumMapDelete4() | |
| 538 { | |
| 539 ForEachProvider(db => | |
| 540 { | |
| 541 using (new Cleaner(db)) | |
| 542 { | |
| 543 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 544 { | |
| 545 Id = RID, | |
| 546 TestField = VAL2 | |
| 547 }); | |
| 548 | |
| 549 Assert.True(1 == db.GetTable<NullableTestTable2>() | |
| 550 .Delete(r => r.Id == RID && r.TestField == TestEnum2.Value2)); | |
| 551 } | |
| 552 }); | |
| 553 } | |
| 554 | |
| 555 [Test] | |
| 556 public void EnumMapSet1() | |
| 557 { | |
| 558 ForEachProvider(db => | |
| 559 { | |
| 560 using (new Cleaner(db)) | |
| 561 { | |
| 562 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 563 { | |
| 564 Id = RID, | |
| 565 TestField = VAL1 | |
| 566 }); | |
| 567 | |
| 568 db.GetTable<TestTable1>() | |
| 569 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value1) | |
| 570 .Set(r => r.TestField, TestEnum1.Value2).Update(); | |
| 571 var result = db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Select(r => r.TestField).FirstOrDefault(); | |
| 572 Assert.True(result == VAL2); | |
| 573 } | |
| 574 }); | |
| 575 } | |
| 576 | |
| 577 [Test] | |
| 578 public void EnumMapSet2() | |
| 579 { | |
| 580 ForEachProvider(db => | |
| 581 { | |
| 582 using (new Cleaner(db)) | |
| 583 { | |
| 584 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 585 { | |
| 586 Id = RID, | |
| 587 TestField = VAL1 | |
| 588 }); | |
| 589 | |
| 590 db.GetTable<TestTable2>() | |
| 591 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value1) | |
| 592 .Set(r => r.TestField, TestEnum2.Value2).Update(); | |
| 593 var result = db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Select(r => r.TestField).FirstOrDefault(); | |
| 594 Assert.True(result == VAL2); | |
| 595 } | |
| 596 }); | |
| 597 } | |
| 598 | |
| 599 [Test] | |
| 600 public void EnumMapSet3() | |
| 601 { | |
| 602 ForEachProvider(db => | |
| 603 { | |
| 604 using (new Cleaner(db)) | |
| 605 { | |
| 606 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 607 { | |
| 608 Id = RID, | |
| 609 Int32Field = 3 | |
| 610 }); | |
| 611 | |
| 612 db.GetTable<TestTable2>() | |
| 613 .Where(r => r.Id == RID && r.Int32Field == TestEnum3.Value1) | |
| 614 .Set(r => r.Int32Field, () => TestEnum3.Value2).Update(); | |
| 615 Assert.True(1 == db.GetTable<RawTable>().Where(r => r.Id == RID && r.Int32Field == 4).Count()); | |
| 616 } | |
| 617 }); | |
| 618 } | |
| 619 | |
| 620 [Test] | |
| 621 public void EnumMapSet4() | |
| 622 { | |
| 623 ForEachProvider(db => | |
| 624 { | |
| 625 using (new Cleaner(db)) | |
| 626 { | |
| 627 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 628 { | |
| 629 Id = RID, | |
| 630 TestField = VAL1 | |
| 631 }); | |
| 632 | |
| 633 db.GetTable<NullableTestTable1>() | |
| 634 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value1) | |
| 635 .Set(r => r.TestField, TestEnum1.Value2).Update(); | |
| 636 var result = db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Select(r => r.TestField).FirstOrDefault(); | |
| 637 Assert.True(result == VAL2); | |
| 638 } | |
| 639 }); | |
| 640 } | |
| 641 | |
| 642 [Test] | |
| 643 public void EnumMapSet5() | |
| 644 { | |
| 645 ForEachProvider(db => | |
| 646 { | |
| 647 using (new Cleaner(db)) | |
| 648 { | |
| 649 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 650 { | |
| 651 Id = RID, | |
| 652 TestField = VAL1 | |
| 653 }); | |
| 654 | |
| 655 db.GetTable<NullableTestTable2>() | |
| 656 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value1) | |
| 657 .Set(r => r.TestField, TestEnum2.Value2).Update(); | |
| 658 var result = db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Select(r => r.TestField).FirstOrDefault(); | |
| 659 Assert.True(result == VAL2); | |
| 660 } | |
| 661 }); | |
| 662 } | |
| 663 | |
| 664 [Test] | |
| 665 public void EnumMapSet6() | |
| 666 { | |
| 667 ForEachProvider(db => | |
| 668 { | |
| 669 using (new Cleaner(db)) | |
| 670 { | |
| 671 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 672 { | |
| 673 Id = RID, | |
| 674 Int32Field = 3 | |
| 675 }); | |
| 676 | |
| 677 db.GetTable<NullableTestTable2>() | |
| 678 .Where(r => r.Id == RID && r.Int32Field == TestEnum3.Value1) | |
| 679 .Set(r => r.Int32Field, () => TestEnum3.Value2).Update(); | |
| 680 Assert.True(1 == db.GetTable<RawTable>().Where(r => r.Id == RID && r.Int32Field == 4).Count()); | |
| 681 } | |
| 682 }); | |
| 683 } | |
| 684 | |
| 685 [Test] | |
| 686 public void EnumMapContains1([DataContexts] string context) | |
| 687 { | |
| 688 using (var db = GetDataContext(context)) | |
| 689 { | |
| 690 using (new Cleaner(db)) | |
| 691 { | |
| 692 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 693 { | |
| 694 Id = RID, | |
| 695 TestField = VAL2 | |
| 696 }); | |
| 697 | |
| 698 Assert.True(1 == db.GetTable<TestTable1>() | |
| 699 .Where(r => r.Id == RID && new[] { TestEnum1.Value2 }.Contains(r.TestField)).Count()); | |
| 700 } | |
| 701 } | |
| 702 } | |
| 703 | |
| 704 [Test] | |
| 705 public void EnumMapContains2() | |
| 706 { | |
| 707 ForEachProvider(db => | |
| 708 { | |
| 709 using (new Cleaner(db)) | |
| 710 { | |
| 711 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 712 { | |
| 713 Id = RID, | |
| 714 TestField = VAL2 | |
| 715 }); | |
| 716 | |
| 717 Assert.That(db.GetTable<TestTable2>().Where(r => r.Id == RID && new[] { TestEnum2.Value2 }.Contains(r.TestField)).Count(), Is.EqualTo(1)); | |
| 718 } | |
| 719 }); | |
| 720 } | |
| 721 | |
| 722 [Test] | |
| 723 public void EnumMapContains3() | |
| 724 { | |
| 725 ForEachProvider(db => | |
| 726 { | |
| 727 using (new Cleaner(db)) | |
| 728 { | |
| 729 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 730 { | |
| 731 Id = RID, | |
| 732 TestField = VAL2 | |
| 733 }); | |
| 734 | |
| 735 Assert.True(1 == db.GetTable<NullableTestTable1>() | |
| 736 .Where(r => r.Id == RID && new[] { (TestEnum1?)TestEnum1.Value2 }.Contains(r.TestField)).Count()); | |
| 737 } | |
| 738 }); | |
| 739 } | |
| 740 | |
| 741 [Test] | |
| 742 public void EnumMapContains4() | |
| 743 { | |
| 744 ForEachProvider(db => | |
| 745 { | |
| 746 using (new Cleaner(db)) | |
| 747 { | |
| 748 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 749 { | |
| 750 Id = RID, | |
| 751 TestField = VAL2 | |
| 752 }); | |
| 753 | |
| 754 Assert.True(1 == db.GetTable<NullableTestTable2>() | |
| 755 .Where(r => r.Id == RID && new[] { (TestEnum2?)TestEnum2.Value2 }.Contains(r.TestField)).Count()); | |
| 756 } | |
| 757 }); | |
| 758 } | |
| 759 | |
| 760 [Test] | |
| 761 public void EnumMapSelectNull1() | |
| 762 { | |
| 763 ForEachProvider(db => | |
| 764 { | |
| 765 using (new Cleaner(db)) | |
| 766 { | |
| 767 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 768 { | |
| 769 Id = RID | |
| 770 }); | |
| 771 | |
| 772 var result = db.GetTable<NullableTestTable1>() | |
| 773 .Where(r => r.Id == RID) | |
| 774 .Select(r => new { r.TestField }) | |
| 775 .FirstOrDefault(); | |
| 776 | |
| 777 Assert.NotNull(result); | |
| 778 Assert.True(result.TestField == null); | |
| 779 } | |
| 780 }); | |
| 781 } | |
| 782 | |
| 783 [Test] | |
| 784 public void EnumMapSelectNull2() | |
| 785 { | |
| 786 ForEachProvider(db => | |
| 787 { | |
| 788 using (new Cleaner(db)) | |
| 789 { | |
| 790 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 791 { | |
| 792 Id = RID | |
| 793 }); | |
| 794 | |
| 795 var result = db.GetTable<NullableTestTable2>() | |
| 796 .Where(r => r.Id == RID) | |
| 797 .Select(r => new { r.TestField }) | |
| 798 .FirstOrDefault(); | |
| 799 | |
| 800 Assert.NotNull(result); | |
| 801 Assert.True(result.TestField == null); | |
| 802 } | |
| 803 }); | |
| 804 } | |
| 805 | |
| 806 [Test] | |
| 807 public void EnumMapWhereNull1() | |
| 808 { | |
| 809 ForEachProvider(db => | |
| 810 { | |
| 811 using (new Cleaner(db)) | |
| 812 { | |
| 813 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 814 { | |
| 815 Id = RID | |
| 816 }); | |
| 817 | |
| 818 var result = db.GetTable<NullableTestTable1>() | |
| 819 .Where(r => r.Id == RID && r.TestField == null) | |
| 820 .Select(r => new { r.TestField }).FirstOrDefault(); | |
| 821 Assert.NotNull(result); | |
| 822 Assert.Null(result.TestField); | |
| 823 } | |
| 824 }); | |
| 825 } | |
| 826 | |
| 827 [Test] | |
| 828 public void EnumMapWhereNull2() | |
| 829 { | |
| 830 ForEachProvider(db => | |
| 831 { | |
| 832 using (new Cleaner(db)) | |
| 833 { | |
| 834 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 835 { | |
| 836 Id = RID | |
| 837 }); | |
| 838 | |
| 839 var result = db.GetTable<NullableTestTable2>() | |
| 840 .Where(r => r.Id == RID && r.TestField == null) | |
| 841 .Select(r => new { r.TestField }).FirstOrDefault(); | |
| 842 Assert.NotNull(result); | |
| 843 Assert.Null(result.TestField); | |
| 844 } | |
| 845 }); | |
| 846 } | |
| 847 | |
| 848 [Test] | |
| 849 public void EnumMapInsertObject1() | |
| 850 { | |
| 851 ForEachProvider(db => | |
| 852 { | |
| 853 using (new Cleaner(db)) | |
| 854 { | |
| 855 db.Insert(new TestTable1 | |
| 856 { | |
| 857 Id = RID, | |
| 858 TestField = TestEnum1.Value2 | |
| 859 }); | |
| 860 | |
| 861 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 862 } | |
| 863 }); | |
| 864 } | |
| 865 | |
| 866 [Test] | |
| 867 public void EnumMapInsertObject2() | |
| 868 { | |
| 869 ForEachProvider(db => | |
| 870 { | |
| 871 using (new Cleaner(db)) | |
| 872 { | |
| 873 db.Insert(new TestTable2 | |
| 874 { | |
| 875 Id = RID, | |
| 876 TestField = TestEnum2.Value2 | |
| 877 }); | |
| 878 | |
| 879 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 880 } | |
| 881 }); | |
| 882 } | |
| 883 | |
| 884 [Test] | |
| 885 public void EnumMapInsertObject3() | |
| 886 { | |
| 887 ForEachProvider(db => | |
| 888 { | |
| 889 using (new Cleaner(db)) | |
| 890 { | |
| 891 db.Insert(new NullableTestTable1 | |
| 892 { | |
| 893 Id = RID, | |
| 894 TestField = TestEnum1.Value2 | |
| 895 }); | |
| 896 | |
| 897 Assert.AreEqual(1, db.GetTable<RawTable>() | |
| 898 .Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 899 } | |
| 900 }); | |
| 901 } | |
| 902 | |
| 903 [Test] | |
| 904 public void EnumMapInsertObject4() | |
| 905 { | |
| 906 ForEachProvider(db => | |
| 907 { | |
| 908 using (new Cleaner(db)) | |
| 909 { | |
| 910 db.Insert(new NullableTestTable2 | |
| 911 { | |
| 912 Id = RID, | |
| 913 TestField = TestEnum2.Value2 | |
| 914 }); | |
| 915 | |
| 916 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL2).Count()); | |
| 917 } | |
| 918 }); | |
| 919 } | |
| 920 | |
| 921 [Test] | |
| 922 public void EnumMapInsertFromSelectWithParam1() | |
| 923 { | |
| 924 ForEachProvider(db => | |
| 925 { | |
| 926 using (new Cleaner(db)) | |
| 927 { | |
| 928 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 929 { | |
| 930 Id = RID, | |
| 931 TestField = VAL2 | |
| 932 }); | |
| 933 | |
| 934 var param = TestEnum1.Value1; | |
| 935 | |
| 936 var result = db.GetTable<TestTable1>() | |
| 937 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2) | |
| 938 .Select(r => new TestTable1 | |
| 939 { | |
| 940 Id = r.Id, | |
| 941 TestField = param | |
| 942 }) | |
| 943 .Insert(db.GetTable<TestTable1>(), r => r); | |
| 944 | |
| 945 Assert.AreEqual(1, result); | |
| 946 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL1).Count()); | |
| 947 } | |
| 948 }); | |
| 949 } | |
| 950 | |
| 951 [Test] | |
| 952 public void EnumMapInsertFromSelectWithParam2() | |
| 953 { | |
| 954 ForEachProvider(db => | |
| 955 { | |
| 956 using (new Cleaner(db)) | |
| 957 { | |
| 958 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 959 { | |
| 960 Id = RID, | |
| 961 TestField = VAL2 | |
| 962 }); | |
| 963 | |
| 964 var param = TestEnum2.Value1; | |
| 965 | |
| 966 var result = db.GetTable<TestTable2>() | |
| 967 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2) | |
| 968 .Select(r => new TestTable2 | |
| 969 { | |
| 970 Id = r.Id, | |
| 971 TestField = param | |
| 972 }) | |
| 973 .Insert(db.GetTable<TestTable2>(), r => r); | |
| 974 | |
| 975 Assert.AreEqual(1, result); | |
| 976 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL1).Count()); | |
| 977 } | |
| 978 }); | |
| 979 } | |
| 980 | |
| 981 [Test] | |
| 982 public void EnumMapInsertFromSelectWithParam3() | |
| 983 { | |
| 984 ForEachProvider(db => | |
| 985 { | |
| 986 using (new Cleaner(db)) | |
| 987 { | |
| 988 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 989 { | |
| 990 Id = RID, | |
| 991 TestField = VAL2 | |
| 992 }); | |
| 993 | |
| 994 var param = TestEnum1.Value1; | |
| 995 | |
| 996 var result = db.GetTable<NullableTestTable1>() | |
| 997 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2) | |
| 998 .Select(r => new NullableTestTable1 | |
| 999 { | |
| 1000 Id = r.Id, | |
| 1001 TestField = param | |
| 1002 }) | |
| 1003 .Insert(db.GetTable<NullableTestTable1>(), r => r); | |
| 1004 | |
| 1005 Assert.AreEqual(1, result); | |
| 1006 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL1).Count()); | |
| 1007 } | |
| 1008 }); | |
| 1009 } | |
| 1010 | |
| 1011 [Test] | |
| 1012 public void EnumMapInsertFromSelectWithParam4() | |
| 1013 { | |
| 1014 ForEachProvider(db => | |
| 1015 { | |
| 1016 using (new Cleaner(db)) | |
| 1017 { | |
| 1018 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1019 { | |
| 1020 Id = RID, | |
| 1021 TestField = VAL2 | |
| 1022 }); | |
| 1023 | |
| 1024 var param = TestEnum2.Value1; | |
| 1025 | |
| 1026 var result = db.GetTable<NullableTestTable2>() | |
| 1027 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2) | |
| 1028 .Select(r => new NullableTestTable2 | |
| 1029 { | |
| 1030 Id = r.Id, | |
| 1031 TestField = param | |
| 1032 }) | |
| 1033 .Insert(db.GetTable<NullableTestTable2>(), r => r); | |
| 1034 | |
| 1035 Assert.AreEqual(1, result); | |
| 1036 Assert.AreEqual(1, db.GetTable<RawTable>().Where(r => r.Id == RID && r.TestField == VAL1).Count()); | |
| 1037 } | |
| 1038 }); | |
| 1039 } | |
| 1040 | |
| 1041 [Test] | |
| 1042 public void EnumMapDeleteEquals1() | |
| 1043 { | |
| 1044 ForEachProvider(db => | |
| 1045 { | |
| 1046 using (new Cleaner(db)) | |
| 1047 { | |
| 1048 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1049 { | |
| 1050 Id = RID, | |
| 1051 TestField = VAL2 | |
| 1052 }); | |
| 1053 | |
| 1054 Assert.True(1 == db.GetTable<TestTable1>().Delete(r => r.Id == RID && r.TestField.Equals(TestEnum1.Value2))); | |
| 1055 } | |
| 1056 }); | |
| 1057 } | |
| 1058 | |
| 1059 [Test] | |
| 1060 public void EnumMapDeleteEquals2() | |
| 1061 { | |
| 1062 ForEachProvider(db => | |
| 1063 { | |
| 1064 using (new Cleaner(db)) | |
| 1065 { | |
| 1066 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1067 { | |
| 1068 Id = RID, | |
| 1069 TestField = VAL2 | |
| 1070 }); | |
| 1071 | |
| 1072 Assert.True(1 == db.GetTable<TestTable2>().Delete(r => r.Id == RID && r.TestField.Equals(TestEnum2.Value2))); | |
| 1073 } | |
| 1074 }); | |
| 1075 } | |
| 1076 | |
| 1077 [Test] | |
| 1078 public void EnumMapDeleteEquals3() | |
| 1079 { | |
| 1080 ForEachProvider(db => | |
| 1081 { | |
| 1082 using (new Cleaner(db)) | |
| 1083 { | |
| 1084 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1085 { | |
| 1086 Id = RID, | |
| 1087 TestField = VAL2 | |
| 1088 }); | |
| 1089 | |
| 1090 Assert.True(1 == db.GetTable<NullableTestTable1>() | |
| 1091 .Delete(r => r.Id == RID && r.TestField.Equals(TestEnum1.Value2))); | |
| 1092 } | |
| 1093 }); | |
| 1094 } | |
| 1095 | |
| 1096 [Test] | |
| 1097 public void EnumMapDeleteEquals4() | |
| 1098 { | |
| 1099 ForEachProvider(db => | |
| 1100 { | |
| 1101 using (new Cleaner(db)) | |
| 1102 { | |
| 1103 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1104 { | |
| 1105 Id = RID, | |
| 1106 TestField = VAL2 | |
| 1107 }); | |
| 1108 | |
| 1109 Assert.True(1 == db.GetTable<NullableTestTable2>() | |
| 1110 .Delete(r => r.Id == RID && r.TestField.Equals(TestEnum2.Value2))); | |
| 1111 } | |
| 1112 }); | |
| 1113 } | |
| 1114 | |
| 1115 [Test] | |
| 1116 public void EnumMapCustomPredicate1([DataContexts] string context) | |
| 1117 { | |
| 1118 using (var db = GetDataContext(context)) | |
| 1119 { | |
| 1120 using (new Cleaner(db)) | |
| 1121 { | |
| 1122 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1123 { | |
| 1124 Id = RID, | |
| 1125 TestField = VAL2 | |
| 1126 }); | |
| 1127 | |
| 1128 var entityParameter = Expression.Parameter(typeof(TestTable1), "entity"); // parameter name required for BLToolkit | |
| 1129 var filterExpression = Expression.Equal(Expression.Field(entityParameter, "TestField"), Expression.Constant(TestEnum1.Value2)); | |
| 1130 var filterPredicate = Expression.Lambda<Func<TestTable1, bool>>(filterExpression, entityParameter); | |
| 1131 var result = db.GetTable<TestTable1>().Where(filterPredicate).ToList(); | |
| 1132 | |
| 1133 Assert.AreEqual(1, result.Count); | |
| 1134 } | |
| 1135 } | |
| 1136 } | |
| 1137 | |
| 1138 [Test] | |
| 1139 public void EnumMapCustomPredicate2([DataContexts] string context) | |
| 1140 { | |
| 1141 using (var db = GetDataContext(context)) | |
| 1142 { | |
| 1143 using (new Cleaner(db)) | |
| 1144 { | |
| 1145 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1146 { | |
| 1147 Id = RID, | |
| 1148 TestField = VAL2 | |
| 1149 }); | |
| 1150 | |
| 1151 var entityParameter = Expression.Parameter(typeof(TestTable2), "entity"); // parameter name required for BLToolkit | |
| 1152 var filterExpression = Expression.Equal(Expression.Field(entityParameter, "TestField"), Expression.Constant(TestEnum2.Value2)); | |
| 1153 var filterPredicate = Expression.Lambda<Func<TestTable2, bool>>(filterExpression, entityParameter); | |
| 1154 var result = db.GetTable<TestTable2>().Where(filterPredicate).ToList(); | |
| 1155 | |
| 1156 Assert.AreEqual(1, result.Count); | |
| 1157 } | |
| 1158 } | |
| 1159 } | |
| 1160 | |
| 1161 [TableName("LinqDataTypes")] | |
| 1162 class TestTable3 | |
| 1163 { | |
| 1164 [PrimaryKey] | |
| 1165 public int ID; | |
| 1166 | |
| 1167 [MapField("BigIntValue")] | |
| 1168 public TestEnum1? TargetType; | |
| 1169 | |
| 1170 [MapField("IntValue")] | |
| 1171 public int? TargetID; | |
| 1172 } | |
| 1173 | |
| 1174 struct ObjectReference | |
| 1175 { | |
| 1176 public TestEnum1 TargetType; | |
| 1177 public int TargetID; | |
| 1178 public ObjectReference(TestEnum1 targetType, int tagetId) | |
| 1179 { | |
| 1180 TargetType = targetType; | |
| 1181 TargetID = tagetId; | |
| 1182 } | |
| 1183 } | |
| 1184 | |
| 1185 [Test] | |
| 1186 public void Test_4_1_18_Regression1() | |
| 1187 { | |
| 1188 ForEachProvider(db => | |
| 1189 { | |
| 1190 using (new Cleaner(db)) | |
| 1191 { | |
| 1192 db.GetTable<RawTable>().Insert(() => new RawTable() | |
| 1193 { | |
| 1194 Id = RID, | |
| 1195 TestField = VAL2, | |
| 1196 Int32Field = 10 | |
| 1197 }); | |
| 1198 | |
| 1199 var result = db.GetTable<TestTable3>().Where(r => r.ID == RID).Select(_ => new | |
| 1200 { | |
| 1201 Target = _.TargetType != null && _.TargetID != null | |
| 1202 ? new ObjectReference(_.TargetType.Value, _.TargetID.Value) | |
| 1203 : default(ObjectReference?) | |
| 1204 }) | |
| 1205 .ToArray(); | |
| 1206 | |
| 1207 Assert.AreEqual(1, result.Length); | |
| 1208 Assert.NotNull(result[0].Target); | |
| 1209 Assert.AreEqual(10, result[0].Target.Value.TargetID); | |
| 1210 Assert.AreEqual(TestEnum1.Value2, result[0].Target.Value.TargetType); | |
| 1211 } | |
| 1212 }); | |
| 1213 } | |
| 1214 | |
| 1215 [TableName("LinqDataTypes")] | |
| 1216 class TestTable4 | |
| 1217 { | |
| 1218 [PrimaryKey] | |
| 1219 public int ID; | |
| 1220 | |
| 1221 [MapField("BigIntValue")] | |
| 1222 public TestEnum2? TargetType; | |
| 1223 | |
| 1224 [MapField("IntValue")] | |
| 1225 public int? TargetID; | |
| 1226 } | |
| 1227 | |
| 1228 struct ObjectReference2 | |
| 1229 { | |
| 1230 public TestEnum2 TargetType; | |
| 1231 public int TargetID; | |
| 1232 public ObjectReference2(TestEnum2 targetType, int tagetId) | |
| 1233 { | |
| 1234 TargetType = targetType; | |
| 1235 TargetID = tagetId; | |
| 1236 } | |
| 1237 } | |
| 1238 | |
| 1239 [Test] | |
| 1240 public void Test_4_1_18_Regression2() | |
| 1241 { | |
| 1242 ForEachProvider(db => | |
| 1243 { | |
| 1244 using (new Cleaner(db)) | |
| 1245 { | |
| 1246 db.GetTable<RawTable>().Insert(() => new RawTable() | |
| 1247 { | |
| 1248 Id = RID, | |
| 1249 TestField = (long)TestEnum2.Value2, | |
| 1250 Int32Field = 10 | |
| 1251 }); | |
| 1252 | |
| 1253 var result = db.GetTable<TestTable4>().Where(r => r.ID == RID).Select(_ => new | |
| 1254 { | |
| 1255 Target = _.TargetType != null && _.TargetID != null | |
| 1256 ? new ObjectReference2(_.TargetType.Value, _.TargetID.Value) | |
| 1257 : default(ObjectReference2?) | |
| 1258 }) | |
| 1259 .ToArray(); | |
| 1260 | |
| 1261 Assert.AreEqual(1, result.Length); | |
| 1262 Assert.NotNull(result[0].Target); | |
| 1263 Assert.AreEqual(10, result[0].Target.Value.TargetID); | |
| 1264 Assert.AreEqual(TestEnum2.Value2, result[0].Target.Value.TargetType); | |
| 1265 } | |
| 1266 }); | |
| 1267 } | |
| 1268 | |
| 1269 class NullableResult | |
| 1270 { | |
| 1271 public TestEnum1? Value; | |
| 1272 } | |
| 1273 | |
| 1274 [Test] | |
| 1275 public void EnumMapSelectNull([DataContexts] string context) | |
| 1276 { | |
| 1277 using (var db = GetDataContext(context)) | |
| 1278 { | |
| 1279 using (new Cleaner(db)) | |
| 1280 { | |
| 1281 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1282 { | |
| 1283 Id = RID | |
| 1284 }); | |
| 1285 | |
| 1286 var result = db.GetTable<TestTable1>() | |
| 1287 .Where(r => r.Id == RID) | |
| 1288 .Select(r => new NullableResult {Value = r.TestField }) | |
| 1289 .FirstOrDefault(); | |
| 1290 | |
| 1291 Assert.NotNull(result); | |
| 1292 Assert.Null(result.Value); | |
| 1293 } | |
| 1294 } | |
| 1295 } | |
| 1296 | |
| 1297 private TestEnum1 Convert(TestEnum1 val) | |
| 1298 { | |
| 1299 return val; | |
| 1300 } | |
| 1301 | |
| 1302 [Test] | |
| 1303 public void EnumMapSelectNull_Regression([DataContexts] string context) | |
| 1304 { | |
| 1305 using (var db = GetDataContext(context)) | |
| 1306 { | |
| 1307 using (new Cleaner(db)) | |
| 1308 { | |
| 1309 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1310 { | |
| 1311 Id = RID, | |
| 1312 TestField = VAL2 | |
| 1313 }); | |
| 1314 | |
| 1315 var result = db.GetTable<TestTable1>() | |
| 1316 .Where(r => r.Id == RID) | |
| 1317 .Select(r => new NullableResult { Value = Convert(r.TestField) }) | |
| 1318 .FirstOrDefault(); | |
| 1319 | |
| 1320 Assert.NotNull(result); | |
| 1321 Assert.That(result.Value, Is.EqualTo(TestEnum1.Value2)); | |
| 1322 } | |
| 1323 } | |
| 1324 } | |
| 1325 | |
| 1326 [Flags] | |
| 1327 enum TestFlag | |
| 1328 { | |
| 1329 Value1 = 0x1, | |
| 1330 Value2 = 0x2 | |
| 1331 } | |
| 1332 | |
| 1333 [TableName("LinqDataTypes")] | |
| 1334 class TestTable5 | |
| 1335 { | |
| 1336 public int ID; | |
| 1337 public TestFlag IntValue; | |
| 1338 } | |
| 1339 | |
| 1340 [Test] | |
| 1341 public void TestFlagEnum([DataContexts(ProviderName.Access)] string context) | |
| 1342 { | |
| 1343 using (var db = GetDataContext(context)) | |
| 1344 { | |
| 1345 var result = | |
| 1346 from t in db.GetTable<TestTable5>() | |
| 1347 where (t.IntValue & TestFlag.Value1) != 0 | |
| 1348 select t; | |
| 1349 | |
| 1350 var sql = result.ToString(); | |
| 1351 | |
| 1352 Assert.That(sql, Is.Not.Contains("Convert")); | |
| 1353 } | |
| 1354 } | |
| 1355 | |
| 1356 [Test] | |
| 1357 public void EnumMapContainsList1() | |
| 1358 { | |
| 1359 ForEachProvider(db => | |
| 1360 { | |
| 1361 using (new Cleaner(db)) | |
| 1362 { | |
| 1363 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1364 { | |
| 1365 Id = RID, | |
| 1366 TestField = VAL2 | |
| 1367 }); | |
| 1368 | |
| 1369 var set = new HashSet<TestEnum1>(); | |
| 1370 set.Add(TestEnum1.Value2); | |
| 1371 | |
| 1372 Assert.That(db.GetTable<TestTable1>() | |
| 1373 .Where(r => r.Id == RID && set.Contains(r.TestField)).Count(), Is.EqualTo(1)); | |
| 1374 Assert.That(db.GetTable<TestTable1>() | |
| 1375 .Where(r => r.Id == RID && !set.Contains(r.TestField)).Count(), Is.EqualTo(0)); | |
| 1376 } | |
| 1377 }); | |
| 1378 } | |
| 1379 | |
| 1380 [Test] | |
| 1381 public void EnumMapContainsList2() | |
| 1382 { | |
| 1383 ForEachProvider(db => | |
| 1384 { | |
| 1385 using (new Cleaner(db)) | |
| 1386 { | |
| 1387 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1388 { | |
| 1389 Id = RID, | |
| 1390 TestField = VAL2 | |
| 1391 }); | |
| 1392 | |
| 1393 var set = new HashSet<TestEnum2>(); | |
| 1394 set.Add(TestEnum2.Value2); | |
| 1395 | |
| 1396 Assert.That(db.GetTable<TestTable2>().Where(r => r.Id == RID && set.Contains(r.TestField)).Count(), Is.EqualTo(1)); | |
| 1397 Assert.That(db.GetTable<TestTable2>().Where(r => r.Id == RID && !set.Contains(r.TestField)).Count(), Is.EqualTo(0)); | |
| 1398 } | |
| 1399 }); | |
| 1400 } | |
| 1401 | |
| 1402 [Test] | |
| 1403 public void EnumMapContainsList3() | |
| 1404 { | |
| 1405 ForEachProvider(db => | |
| 1406 { | |
| 1407 using (new Cleaner(db)) | |
| 1408 { | |
| 1409 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1410 { | |
| 1411 Id = RID, | |
| 1412 TestField = VAL2 | |
| 1413 }); | |
| 1414 | |
| 1415 var set = new HashSet<TestEnum1?>(); | |
| 1416 set.Add(TestEnum1.Value2); | |
| 1417 | |
| 1418 Assert.That(db.GetTable<NullableTestTable1>() | |
| 1419 .Where(r => r.Id == RID && set.Contains(r.TestField)).Count(), Is.EqualTo(1)); | |
| 1420 Assert.That(db.GetTable<NullableTestTable1>() | |
| 1421 .Where(r => r.Id == RID && !set.Contains(r.TestField)).Count(), Is.EqualTo(0)); | |
| 1422 } | |
| 1423 }); | |
| 1424 } | |
| 1425 | |
| 1426 [Test] | |
| 1427 public void EnumMapContainsList4() | |
| 1428 { | |
| 1429 ForEachProvider(db => | |
| 1430 { | |
| 1431 using (new Cleaner(db)) | |
| 1432 { | |
| 1433 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1434 { | |
| 1435 Id = RID, | |
| 1436 TestField = VAL2 | |
| 1437 }); | |
| 1438 | |
| 1439 var set = new HashSet<TestEnum2?>(); | |
| 1440 set.Add(TestEnum2.Value2); | |
| 1441 | |
| 1442 Assert.That(db.GetTable<NullableTestTable2>() | |
| 1443 .Where(r => r.Id == RID && set.Contains(r.TestField)).Count(), Is.EqualTo(1)); | |
| 1444 Assert.That(db.GetTable<NullableTestTable2>() | |
| 1445 .Where(r => r.Id == RID && !set.Contains(r.TestField)).Count(), Is.EqualTo(0)); | |
| 1446 } | |
| 1447 }); | |
| 1448 } | |
| 1449 | |
| 1450 [Test] | |
| 1451 public void EnumMapIntermediateObject1() | |
| 1452 { | |
| 1453 ForEachProvider(db => | |
| 1454 { | |
| 1455 using (new Cleaner(db)) | |
| 1456 { | |
| 1457 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1458 { | |
| 1459 Id = RID, | |
| 1460 TestField = VAL2 | |
| 1461 }); | |
| 1462 | |
| 1463 Assert.That( | |
| 1464 db.GetTable<TestTable1>() | |
| 1465 .Select(r => new {r.Id, r.TestField}) | |
| 1466 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2).Count(), Is.EqualTo(1)); | |
| 1467 } | |
| 1468 }); | |
| 1469 } | |
| 1470 | |
| 1471 //////[Test] | |
| 1472 public void EnumMapIntermediateObject2() | |
| 1473 { | |
| 1474 ForEachProvider(db => | |
| 1475 { | |
| 1476 using (new Cleaner(db)) | |
| 1477 { | |
| 1478 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1479 { | |
| 1480 Id = RID, | |
| 1481 TestField = VAL2 | |
| 1482 }); | |
| 1483 | |
| 1484 Assert.That( | |
| 1485 db.GetTable<TestTable2>() | |
| 1486 .Select(r => new { r.Id, r.TestField }) | |
| 1487 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2).Count(), Is.EqualTo(1)); | |
| 1488 } | |
| 1489 }); | |
| 1490 } | |
| 1491 | |
| 1492 [Test] | |
| 1493 public void EnumMapIntermediateObject3() | |
| 1494 { | |
| 1495 ForEachProvider(db => | |
| 1496 { | |
| 1497 using (new Cleaner(db)) | |
| 1498 { | |
| 1499 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1500 { | |
| 1501 Id = RID, | |
| 1502 TestField = VAL2 | |
| 1503 }); | |
| 1504 | |
| 1505 Assert.That( | |
| 1506 db.GetTable<NullableTestTable1>() | |
| 1507 .Select(r => new { r.Id, r.TestField }) | |
| 1508 .Where(r => r.Id == RID && r.TestField == TestEnum1.Value2).Count(), Is.EqualTo(1)); | |
| 1509 } | |
| 1510 }); | |
| 1511 } | |
| 1512 | |
| 1513 //////[Test] | |
| 1514 public void EnumMapIntermediateObject4() | |
| 1515 { | |
| 1516 ForEachProvider(db => | |
| 1517 { | |
| 1518 using (new Cleaner(db)) | |
| 1519 { | |
| 1520 db.GetTable<RawTable>().Insert(() => new RawTable | |
| 1521 { | |
| 1522 Id = RID, | |
| 1523 TestField = VAL2 | |
| 1524 }); | |
| 1525 | |
| 1526 Assert.That( | |
| 1527 db.GetTable<NullableTestTable2>() | |
| 1528 .Select(r => new { r.Id, r.TestField }) | |
| 1529 .Where(r => r.Id == RID && r.TestField == TestEnum2.Value2).Count(), Is.EqualTo(1)); | |
| 1530 } | |
| 1531 }); | |
| 1532 } | |
| 1533 } | |
| 1534 } |
