annotate UnitTests/Linq/IdlTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Linq.Expressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data.Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Data.Linq.Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public partial class IdlTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 class IdlProvidersAttribute : IncludeDataContextsAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public IdlProvidersAttribute()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 : base(ProviderName.SQLite, ProviderName.MySql, "Sql2005", "Sql2008")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 private void ForProvider(string providerName, Action<ITestDataContext> func)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 ForEachProvider(Providers.Select(p => p.Name).Except(new[] { providerName }).ToArray(), func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 private void ForMySqlProvider(Action<ITestDataContext> func)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 ForEachProvider(Providers.Select(p => p.Name).Except(new[] { ProviderName.MySql }).ToArray(), func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 #region PersonWithId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public interface IHasID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 int ID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 [TableName(Name = "Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public class PersonWithId : IHasID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 public PersonWithId()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public PersonWithId(int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 ID = id;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 public PersonWithId(int id, string firstName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 ID = id;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 FirstName = firstName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 [Identity, PrimaryKey]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [SequenceName("Firebird", "PersonID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 [MapField("PersonID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 public int ID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 public string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public string LastName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 [Nullable] public string MiddleName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public Gender Gender;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 [MapIgnore]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public string Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 get { return FirstName + " " + LastName; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 return Equals(obj as PersonWithId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 public bool Equals(PersonWithId other)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 if (ReferenceEquals(null, other)) return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 if (ReferenceEquals(this, other)) return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 other.ID == ID &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 Equals(other.LastName, LastName) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 Equals(other.MiddleName, MiddleName) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 other.Gender == Gender &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 Equals(other.FirstName, FirstName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 unchecked
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 var result = ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 result = (result * 397) ^ (LastName != null ? LastName.GetHashCode() : 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 result = (result * 397) ^ (MiddleName != null ? MiddleName.GetHashCode() : 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 result = (result * 397) ^ Gender.GetHashCode();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 result = (result * 397) ^ (FirstName != null ? FirstName.GetHashCode() : 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 return result;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 #region ObjectId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 public interface IHasObjectId2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 ObjectId Id { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 public interface IHasObjectId1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 ObjectId Id { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public struct ObjectId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public ObjectId(int value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 m_value = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 private int m_value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 public int Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 get { return m_value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 set { m_value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public static implicit operator int(ObjectId val)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 return val.m_value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 public class WithObjectIdBase : IHasObjectId1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public ObjectId Id { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 public class PersonWithObjectId : WithObjectIdBase, IHasObjectId2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 public string FistName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 public struct NullableObjectId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 public NullableObjectId(int? value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 m_value = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 private int? m_value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public int? Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 get { return m_value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 set { m_value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 public static implicit operator int?(NullableObjectId val)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 return val.m_value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 public void TestComplexExpression([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 // failed with BLToolkit.Data.Linq.LinqException : 'new StationObjectId() {Value = ConvertNullable(child.ChildID)}'
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 // cannot be converted to SQL.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 var source = from child in db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 NullableId = new NullableObjectId { Value = child.ChildID }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 var query = from e in source where e.NullableId == 1 select e;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 var result = query.ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 Assert.That(result, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 public void TestJoin([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 // failed with System.ArgumentOutOfRangeException : Index was out of range. Must be non-negative and less than
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 // the size of the collection.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 // Parameter name: index
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 var source = from p1 in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 join p2 in db.Person on p1.ID equals p2.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 new { ID1 = new ObjectId { Value = p1.ID }, FirstName2 = p2.FirstName, };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 var query = from p1 in source select p1.ID1.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 var result = query.ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 Assert.That(result, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 public void TestNullableExpression([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 // failed with System.NullReferenceException : Object reference not set to an instance of an object.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 var source = from obj in db.Person select new { Id = obj.ID, };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 // fails for bool?, double?, int32?, int64?, string
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 // works for byte?, int16?, DateTime?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 double? @p1 = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 var r = from c in source where @p1 != null select c;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 Assert.That(r.ToArray(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 public void TestLookupWithInterfaceProperty([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 var r = GetById<PersonWithId>(db, 1).SingleOrDefault();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 Assert.That(r, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 #region ObjectExt
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 public abstract class ObjectWithId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 public ObjectId Id;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 public class ParentEx : ObjectWithId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 public int? Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 public void TestForObjectExt([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 var r = from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 select new ParentEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 Id = new ObjectId { Value = p.ParentID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 Value1 = p.Value1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 Assert.That(r.ToArray(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 private void getData(ITestDataContext db, IEnumerable<int?> d, IEnumerable<int?> compareWith)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 var r1 = db.GrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 .Where(x => d.Contains(x.ParentID))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 .GroupBy(x => x.ChildID, x => x.GrandChildID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 .ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 foreach (var group in r1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 Assert.That(compareWith.Any(x => group.Contains(x)), Is.True);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 public void TestForGroupBy([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 /* no error in first call */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 getData(db, new List<int?> { 2 }, new List<int?> { 211, 212, 221, 222 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 /* error in second and more calls */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 /*
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 * GROUP BY select clause is correct
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 SELECT x.ChildID FROM GrandChild x WHERE x.ParentID IN (3) GROUP BY x.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 * But next SELECT clause contains "x.ParentID IN (2)" instead "x.ParentID IN (3)"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 -- DECLARE ?p1 Int32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 -- SET ?p1 = 31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 SELECT x.GrandChildID FROM GrandChild x WHERE x.ParentID IN (2) AND x.ChildID = ?p1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 */
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 getData(db, new List<int?> { 3 }, new List<int?> { 311, 312, 313, 321, 333 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 public void TestLinqMax([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 Assert.That(db.Patient.Where(x => x.PersonID < 0).Select(x => (int?)x.PersonID).Max(), Is.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 Assert.That(db.Patient.Where(x => x.PersonID < 0).Max(x => (int?)x.PersonID), Is.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 Assert.Catch<InvalidOperationException>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 () => db.Patient.Where(x => x.PersonID < 0).Select(x => x.PersonID).Max());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 Assert.Catch<InvalidOperationException>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 () => db.Patient.Where(x => x.PersonID < 0).Max(x => x.PersonID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 public void TestConvertFunction([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 var ds = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 var r1 = ds.Patients().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 var r2 = ds.Persons().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 Assert.That(r1, Is.Not.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 Assert.That(r2, Is.Not.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 var r3 = ds.Patients().ToIdlPatientEx(ds);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 var r4 = r3.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 Assert.That(r4, Is.Not.Empty);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 public void TestJoinOrder([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 var source = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 // Success when use result from second JOIN
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 var query1 = from p1 in source.GrandChilds()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 join p2 in source.Persons() on p1.ParentID equals p2.Id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 join p3 in source.Persons() on p1.ChildID equals p3.Id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 p1.ChildID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 p1.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 //Parent = p2,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 Child = p3,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 var data1 = query1.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 // Fail when use result from first JOIN
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 var query2 = from p1 in source.GrandChilds()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 join p2 in source.Persons() on p1.ParentID equals p2.Id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 join p3 in source.Persons() on p1.ChildID equals p3.Id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 select
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 new
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 p1.ChildID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 p1.ParentID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 Parent = p2,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 //Child = p3,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 var data2 = query2.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 public void TestDistinctWithGroupBy([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 const int parentId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 var source = db.Parent.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 // Success when query is executed in memory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 TestDistinctWithGroupBy(source.AsQueryable());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 // Failed when query is executed on sql server
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 TestDistinctWithGroupBy(db.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 private static void TestDistinctWithGroupBy(IQueryable<Parent> source)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 const int score = 4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 var q = source.Select(x => new { Key = x.Value1, MatchScore = score })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 .Distinct();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 var qq = q.GroupBy(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 x => x.Key,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 (key, x) => new { Id = key, MatchScore = x.Sum(y => y.MatchScore) })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 .Select(x => new { x.Id, x.MatchScore });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 var result = qq.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 Assert.That(result.Select(x => x.MatchScore), Is.All.EqualTo(score));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 private static IQueryable<T> GetById<T>(ITestDataContext db, int id) where T : class, IHasID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 return db.GetTable<T>().Where(obj => obj.ID == id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 public void ImplicitCastTest([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 var people =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 select new IdlPerson
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 Id = new ObjectId { Value = p.ID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 Name = p.FirstName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 var sql1 = (from p in people where p.Id == 1 select p).ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 var sql2 = (from p in people where p.Id.Value == 1 select p).ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 Assert.That(sql1, Is.EqualTo(sql2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 public void ListvsArrayTest([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 var st = "John";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 //SQL - x.FirstName IN ('John')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 var queryList = from x in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 where new List<string> { st }.Contains(x.FirstName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 select x.ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 //SQL - x.FirstName IN ('J', 'o', 'h', 'n')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 var queryArray = from x in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 where new[] { st }.Contains(x.FirstName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 select x.ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 Assert.That(queryList.ToList(), Is.EqualTo(queryArray.ToList()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 public void ConcatJoinOrderByTest([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 var query = from y in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 ((from pat in db.Patient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 where pat.Diagnosis == "a"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 select pat)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 .Concat
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 (
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 from pat in db.Patient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 where pat.Diagnosis == "b"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 select pat))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 join person in db.Person on y.PersonID equals person.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 orderby person.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 select new { Id = person.ID, Id2 = y.PersonID };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 Assert.That(query.ToList(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 public void TestIsContainedInArrayOfEnumValues([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 var types2 = new[] { TypeValue.Value2, TypeValue.Value3, TypeValue.Value4 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 var result = (from x in db.Parent4 where types2.Contains(x.Value1) select x)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 .ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 Assert.That(result, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 public void TestQueryWithInterface([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 var persons =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 from x in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 select new PersonWithObjectId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 Id = new ObjectId { Value = x.ID },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 FistName = x.FirstName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 // this works
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 var r1 = FilterSourceByIdDefinedInBaseClass(persons, 5).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 Assert.That(r1, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 // and this works
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 var r2 = FilterSourceByIdDefinedInInterface1(persons, 5).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547 Assert.That(r2, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 // but this fails
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 var r3 = FilterSourceByIdDefinedInInterface2(persons, 5).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 Assert.That(r3, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556 public void TestBugCountWithOrderBy([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 var q1 = db.Person.OrderBy(x => x.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 var q2 = from p in q1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 join p2 in db.Person on p.ID equals p2.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566 select p2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 Assert.DoesNotThrow(() => q2.Max(x => x.ID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 Assert.DoesNotThrow(() => q2.Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 public void TestUpdateWithTargetByAssociationProperty([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 TestUpdateByAssociationProperty(providerName, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 public void TestSetUpdateWithoutTargetByAssociationProperty([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582 TestUpdateByAssociationProperty(providerName, false);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585 private void TestUpdateByAssociationProperty(string providerName, bool useUpdateWithTarget)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 const int childId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 const int parentId = 20000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 db.Parent.Insert(() => new Parent { ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 db.Child.Insert(() => new Child { ChildID = childId, ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 var parents = from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600 where child.ChildID == childId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 select child.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 if (useUpdateWithTarget)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605 // this failed for MySql and SQLite but works with MS SQL
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 Assert.DoesNotThrow(() => parents.Update(db.Parent, x => new Parent { Value1 = 5 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610 // this works with MySql but failed for SQLite and MS SQL
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 Assert.DoesNotThrow(() => parents.Set(x => x.Value1, 5).Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 db.Child.Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623 private IQueryable<T> FilterSourceByIdDefinedInBaseClass<T>(IQueryable<T> source, int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 where T : WithObjectIdBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626 return from x in source where x.Id == id select x;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 private IQueryable<T> FilterSourceByIdDefinedInInterface1<T>(IQueryable<T> source, int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 where T : IHasObjectId1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 return from x in source where x.Id == id select x;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 private IQueryable<T> FilterSourceByIdDefinedInInterface2<T>(IQueryable<T> source, int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636 where T : IHasObjectId2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 return from x in source where x.Id == id select x;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 public void TestComparePropertyOfEnumTypeToVaribleInSubquery([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 var gender = Gender.Other;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 var q = from x in db.Patient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 join y in db.Person.Where(x => x.Gender == gender) on x.PersonID equals y.ID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 select x;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 var r = q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 Assert.That(r, Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659 public void ConcatOrderByTest([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 var q = from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 where p.ID < 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667 select new { Rank = 0, FirstName = (string)null, LastName = (string)null };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 var q2 =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 q.Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 from p in db.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 select new { Rank = p.ID, p.FirstName, p.LastName });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 var resultquery = (from x in q2 orderby x.Rank, x.FirstName, x.LastName select x).ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 var rqr = resultquery.LastIndexOf(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 "ORDER BY", System.StringComparison.InvariantCultureIgnoreCase);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677 var rqp =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 (resultquery.Substring(rqr + "ORDER BY".Length).Split(',')).Select(p => p.Trim()).ToArray();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680 Assert.That(rqp.Count(), Is.EqualTo(3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 public void TestContainsForNullableDateTimeWithOnlyNullValue1([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 var dates = new DateTime?[] { null };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 // Ensures that the query works properly in memory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694 // ReSharper disable RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 var resultCount = db.Types2.ToList().Count(x => dates.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 // ReSharper restore RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697 Assert.That(resultCount, Is.GreaterThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 var result = db.Types2.Count(x => dates.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 Assert.That(result, Is.EqualTo(resultCount));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 public void TestContainsForNullableDateTimeWithOnlyNullValue2([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 // Ensures that the query works properly in memory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 // ReSharper disable RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 var resultCount = db.Types2.ToList().Count(x => new DateTime?[] { null }.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 // ReSharper restore RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 Assert.That(resultCount, Is.GreaterThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 var result = db.Types2.Count(x => new DateTime?[] { null }.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 Assert.That(result, Is.EqualTo(resultCount));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 public void TestContainsForNullableDateTimeWithNullAndNotNullValues1([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729 var date = new DateTime(2009, 9, 24, 9, 19, 29, 90);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 var dates = new DateTime?[] { null, date };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732 // Ensures that the query works properly in memory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 // ReSharper disable RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734 var resultCount = db.Types2.ToList().Count(x => dates.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 // ReSharper restore RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736 Assert.That(resultCount, Is.GreaterThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 var result = db.Types2.Count(x => dates.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739 Assert.That(result, Is.EqualTo(resultCount));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 public void TestContainsForNullableDateTimeWithNullAndNotNullValues2([IdlProviders] string providerName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 ForProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 providerName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 // Ensures that the query works properly in memory
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751 // ReSharper disable RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 var resultCount = db.Types2.ToList().Count(x => new DateTime?[] { null, new DateTime(2009, 9, 24, 9, 19, 29, 90) }.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 // ReSharper restore RemoveToList.2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 Assert.That(resultCount, Is.GreaterThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756 var result = db.Types2.Count(x => new DateTime?[] { null, new DateTime(2009, 9, 24, 9, 19, 29, 90) }.Contains(x.DateTimeValue2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 Assert.That(result, Is.EqualTo(resultCount));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761 #region GenericQuery classes
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 public abstract partial class GenericQueryBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 private readonly IdlPatientSource m_ds;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 protected GenericQueryBase(ITestDataContext ds)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 m_ds = new IdlPatientSource(ds);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772 #region Object sources
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 protected IQueryable<IdlPerson> AllPersons
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776 get { return m_ds.Persons(); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 protected IQueryable<IdlPatient> AllPatients
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 get { return m_ds.Patients(); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784 protected IQueryable<IdlGrandChild> AllGrandChilds
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786 get { return m_ds.GrandChilds(); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 public abstract IEnumerable<object> Query();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794 public class GenericConcatQuery : GenericQueryBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 private String @p1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 private Int32 @p2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 public GenericConcatQuery(ITestDataContext ds, object[] args)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 : base(ds)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 @p1 = (String)args[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803 @p2 = (Int32)args[1];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806 public override IEnumerable<object> Query()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808 return (from y in AllPersons
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 select y.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 .Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 from x in AllPersons
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 from z in AllPatients
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 where (x.Name == @p1 || z.Id == new ObjectId { Value = @p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814 select x.Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815 );
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 public class GenericConcatJoinOrderQuery : GenericQueryBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821 private String @p1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 private Int32 @p2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824 public GenericConcatJoinOrderQuery(ITestDataContext ds, object[] args)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825 : base(ds)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 @p1 = (String)args[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 @p2 = (Int32)args[1];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 public override IEnumerable<object> Query()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 return (from j in
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 (from y in AllPersons
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 select new { FirstName = y.Name })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 .Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 from x in AllPersons
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838 from z in AllPatients
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 where (x.Name == @p1 || z.Id == new ObjectId { Value = @p2 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840 select new { FirstName = x.Name }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841 )
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 join g in AllGrandChilds on j.FirstName equals @p1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843 orderby g.ParentID.Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844 select new { FirstName = g.ParentID.Value.ToString() });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 public void TestMono01()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856 var ds = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 var t = "A";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858 var query =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 (from y in ds.Persons()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860 select y.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861 .Concat(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 from x in ds.Persons()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863 where x.Name == t
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864 select x.Name
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 );
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867 Assert.That(query.ToList(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872 public void TestMono03()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875 db => Assert.That(new GenericConcatQuery(db, new object[] { "A", 1 }).Query().ToList(), Is.Not.Null));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879 public void TestMono04()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883 Assert.That(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 new GenericConcatJoinOrderQuery(db, new object[] { "A", 1 }).Query().ToList(), Is.Not.Null));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 public static IQueryable<TSource> Concat2<TSource>(IQueryable<TSource> source1, IEnumerable<TSource> source2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 return source1.Provider.CreateQuery<TSource>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 Expression.Call(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891 null,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 typeof (Queryable).GetMethod("Concat").MakeGenericMethod(typeof (TSource)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893 new[] { source1.Expression, Expression.Constant(source2, typeof (IEnumerable<TSource>)) }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897 public void TestMonoConcat()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902 var ds = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 var t = "A";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 var query = Concat2(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905 from y in ds.Persons() select y.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 from x in ds.Persons() where x.Name == t select x.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908 Assert.That(query.ToList(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 public void TestMonoConcat2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918 var ds = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919 var t = "A";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 var query1 = Concat2(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 from y in ds.Persons() select y.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922 from x in ds.Persons() where x.Name == t select x.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924 Assert.That(query1.ToList(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 ForMySqlProvider(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928 db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930 var ds = new IdlPatientSource(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931 var t = "A";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932 var query2 = Concat2(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933 from y in ds.Persons() select y.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 from x in ds.Persons() where x.Name == t select x.Name);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 Assert.That(query2.ToList(), Is.Not.Null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 #region TestConvertFunction classes
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943 public class IdlPatient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945 public IdlTest.ObjectId Id { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948 public class IdlPerson
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950 public IdlTest.ObjectId Id { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 public string Name { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 public class IdlGrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 public IdlTest.ObjectId ParentID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957 public IdlTest.ObjectId ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 public IdlTest.ObjectId GrandChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961 public class IdlPatientEx : IdlPatient
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 public IdlPerson Person { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966 public class IdlPatientSource
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
967 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
968 private readonly ITestDataContext m_dc;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
969
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
970 public IdlPatientSource(ITestDataContext dc)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
971 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
972 m_dc = dc;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
973 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
974
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
975 public IQueryable<IdlGrandChild> GrandChilds()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
976 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
977 return m_dc.GrandChild.Select(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
978 x => new IdlGrandChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
979 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
980 ChildID = new IdlTest.ObjectId { Value = x.ChildID.Value },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
981 GrandChildID = new IdlTest.ObjectId { Value = x.GrandChildID.Value },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
982 ParentID = new IdlTest.ObjectId { Value = x.ParentID.Value }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
983 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
984 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
985
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
986 public IQueryable<IdlPatient> Patients()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
987 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
988 return m_dc.Patient.Select(x => new IdlPatient { Id = new IdlTest.ObjectId { Value = x.PersonID }, });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
989 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
990
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
991 public IQueryable<IdlPerson> Persons()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
992 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
993 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
994 m_dc.Person.Select(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
995 x => new IdlPerson { Id = new IdlTest.ObjectId { Value = x.ID }, Name = x.FirstName, });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
996 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
997 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
998
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
999 public static class IdlPersonConverterExtensions
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1000 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1001 public static IEnumerable<IdlPatientEx> ToIdlPatientEx(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1002 this IQueryable<IdlPatient> list, IdlPatientSource source)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1003 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1004 return from x in list
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1005 join person in source.Persons() on x.Id.Value equals person.Id.Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1006 select new IdlPatientEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1007 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1008 Id = x.Id,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1009 Person =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1010 new IdlPerson { Id = new IdlTest.ObjectId { Value = person.Id }, Name = person.Name, },
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1011 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1012 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1013 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1014
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1015 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1016 }