Skip to content

Commit 161ff3c

Browse files
authored
Implement support of SqlCheck in mapping by code (#2743)
Fixes #869
1 parent e4c0cd5 commit 161ff3c

20 files changed

+659
-27
lines changed

src/NHibernate.Test/MappingByCode/MappersTests/JoinMapperTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,20 @@ public void CanSetSqlInsert()
112112
Assert.That(hbmJoin.SqlInsert.Text[0], Is.EqualTo("blah"));
113113
}
114114

115+
[Test]
116+
public void CanSetSqlInsertWithCheck()
117+
{
118+
var mapdoc = new HbmMapping();
119+
var hbmJoin = new HbmJoin();
120+
var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc);
121+
mapper.SqlInsert("blah", SqlCheck.RowCount);
122+
123+
Assert.That(hbmJoin.SqlInsert, Is.Not.Null);
124+
Assert.That(hbmJoin.SqlInsert.Text[0], Is.EqualTo("blah"));
125+
Assert.That(hbmJoin.SqlInsert.checkSpecified, Is.True);
126+
Assert.That(hbmJoin.SqlInsert.check, Is.EqualTo(HbmCustomSQLCheck.Rowcount));
127+
}
128+
115129
[Test]
116130
public void SetSqlUpdate()
117131
{
@@ -124,6 +138,20 @@ public void SetSqlUpdate()
124138
Assert.That(hbmJoin.SqlUpdate.Text[0], Is.EqualTo("blah"));
125139
}
126140

141+
[Test]
142+
public void SetSqlUpdateWithCheck()
143+
{
144+
var mapdoc = new HbmMapping();
145+
var hbmJoin = new HbmJoin();
146+
var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc);
147+
mapper.SqlUpdate("blah", SqlCheck.RowCount);
148+
149+
Assert.That(hbmJoin.SqlUpdate, Is.Not.Null);
150+
Assert.That(hbmJoin.SqlUpdate.Text[0], Is.EqualTo("blah"));
151+
Assert.That(hbmJoin.SqlUpdate.checkSpecified, Is.True);
152+
Assert.That(hbmJoin.SqlUpdate.check, Is.EqualTo(HbmCustomSQLCheck.Rowcount));
153+
}
154+
127155
[Test]
128156
public void SetSqlDelete()
129157
{
@@ -136,6 +164,20 @@ public void SetSqlDelete()
136164
Assert.That(hbmJoin.SqlDelete.Text[0], Is.EqualTo("blah"));
137165
}
138166

167+
[Test]
168+
public void SetSqlDeleteWithCheck()
169+
{
170+
var mapdoc = new HbmMapping();
171+
var hbmJoin = new HbmJoin();
172+
var mapper = new JoinMapper(typeof(MyClass), "AA", hbmJoin, mapdoc);
173+
mapper.SqlDelete("blah", SqlCheck.RowCount);
174+
175+
Assert.That(hbmJoin.SqlDelete, Is.Not.Null);
176+
Assert.That(hbmJoin.SqlDelete.Text[0], Is.EqualTo("blah"));
177+
Assert.That(hbmJoin.SqlDelete.checkSpecified, Is.True);
178+
Assert.That(hbmJoin.SqlDelete.check, Is.EqualTo(HbmCustomSQLCheck.Rowcount));
179+
}
180+
139181
[Test]
140182
public void CanSetSqlSubselect()
141183
{
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using NHibernate.Util;
2+
3+
namespace NHibernate.Mapping.ByCode
4+
{
5+
//6.0 TODO: merge into ICollectionSqlsMapper
6+
public interface ICollectionSqlsWithCheckMapper
7+
{
8+
void SqlInsert(string sql, SqlCheck sqlCheck);
9+
void SqlUpdate(string sql, SqlCheck sqlCheck);
10+
void SqlDelete(string sql, SqlCheck sqlCheck);
11+
void SqlDeleteAll(string sql, SqlCheck sqlCheck);
12+
}
13+
14+
public static class CollectionSqlsWithCheckMapperExtensions
15+
{
16+
public static void SqlInsert(this ICollectionSqlsMapper mapper, string sql, SqlCheck sqlCheck)
17+
{
18+
ReflectHelper
19+
.CastOrThrow<ICollectionSqlsWithCheckMapper>(mapper, "SqlInsert with sqlCheck")
20+
.SqlInsert(sql, sqlCheck);
21+
}
22+
23+
public static void SqlUpdate(this ICollectionSqlsMapper mapper, string sql, SqlCheck sqlCheck)
24+
{
25+
ReflectHelper
26+
.CastOrThrow<ICollectionSqlsWithCheckMapper>(mapper, "SqlUpdate with sqlCheck")
27+
.SqlUpdate(sql, sqlCheck);
28+
}
29+
30+
public static void SqlDelete(this ICollectionSqlsMapper mapper, string sql, SqlCheck sqlCheck)
31+
{
32+
ReflectHelper
33+
.CastOrThrow<ICollectionSqlsWithCheckMapper>(mapper, "SqlDelete with sqlCheck")
34+
.SqlDelete(sql, sqlCheck);
35+
}
36+
37+
public static void SqlDeleteAll(this ICollectionSqlsMapper mapper, string sql, SqlCheck sqlCheck)
38+
{
39+
ReflectHelper
40+
.CastOrThrow<ICollectionSqlsWithCheckMapper>(mapper, "SqlDeleteAll with sqlCheck")
41+
.SqlDeleteAll(sql, sqlCheck);
42+
}
43+
}
44+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using NHibernate.Util;
2+
3+
namespace NHibernate.Mapping.ByCode
4+
{
5+
//6.0 TODO: merge into IEntitySqlsMapper
6+
public interface IEntitySqlsWithCheckMapper
7+
{
8+
void SqlInsert(string sql, SqlCheck sqlCheck);
9+
void SqlUpdate(string sql, SqlCheck sqlCheck);
10+
void SqlDelete(string sql, SqlCheck sqlCheck);
11+
}
12+
13+
public static class EntitySqlsWithCheckMapperExtensions
14+
{
15+
public static void SqlInsert(this IEntitySqlsMapper mapper, string sql, SqlCheck sqlCheck)
16+
{
17+
ReflectHelper
18+
.CastOrThrow<IEntitySqlsWithCheckMapper>(mapper, "SqlInsert with sqlCheck")
19+
.SqlInsert(sql, sqlCheck);
20+
}
21+
22+
public static void SqlUpdate(this IEntitySqlsMapper mapper, string sql, SqlCheck sqlCheck)
23+
{
24+
ReflectHelper
25+
.CastOrThrow<IEntitySqlsWithCheckMapper>(mapper, "SqlUpdate with sqlCheck")
26+
.SqlUpdate(sql, sqlCheck);
27+
}
28+
29+
public static void SqlDelete(this IEntitySqlsMapper mapper, string sql, SqlCheck sqlCheck)
30+
{
31+
ReflectHelper
32+
.CastOrThrow<IEntitySqlsWithCheckMapper>(mapper, "SqlDelete with sqlCheck")
33+
.SqlDelete(sql, sqlCheck);
34+
}
35+
}
36+
}

src/NHibernate/Mapping/ByCode/Impl/BagMapper.cs

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace NHibernate.Mapping.ByCode.Impl
1010
{
11-
public class BagMapper : IBagPropertiesMapper
11+
public class BagMapper : IBagPropertiesMapper, ICollectionSqlsWithCheckMapper
1212
{
1313
private readonly IAccessorPropertyMapper entityPropertyMapper;
1414
private readonly KeyMapper keyMapper;
@@ -249,6 +249,17 @@ public void SqlInsert(string sql)
249249
mapping.sqlinsert.Text = new[] {sql};
250250
}
251251

252+
public void SqlInsert(string sql, SqlCheck sqlCheck)
253+
{
254+
if (mapping.SqlInsert == null)
255+
{
256+
mapping.sqlinsert = new HbmCustomSQL();
257+
}
258+
mapping.sqlinsert.Text = new[] {sql};
259+
mapping.sqlinsert.checkSpecified = true;
260+
mapping.sqlinsert.check = sqlCheck.ToHbmSqlCheck();
261+
}
262+
252263
public void SqlUpdate(string sql)
253264
{
254265
if (mapping.SqlUpdate == null)
@@ -258,6 +269,17 @@ public void SqlUpdate(string sql)
258269
mapping.sqlupdate.Text = new[] {sql};
259270
}
260271

272+
public void SqlUpdate(string sql, SqlCheck sqlCheck)
273+
{
274+
if (mapping.SqlUpdate == null)
275+
{
276+
mapping.sqlupdate = new HbmCustomSQL();
277+
}
278+
mapping.sqlupdate.Text = new[] {sql};
279+
mapping.sqlupdate.checkSpecified = true;
280+
mapping.sqlupdate.check = sqlCheck.ToHbmSqlCheck();
281+
}
282+
261283
public void SqlDelete(string sql)
262284
{
263285
if (mapping.SqlDelete == null)
@@ -267,6 +289,17 @@ public void SqlDelete(string sql)
267289
mapping.sqldelete.Text = new[] {sql};
268290
}
269291

292+
public void SqlDelete(string sql, SqlCheck sqlCheck)
293+
{
294+
if (mapping.SqlDelete == null)
295+
{
296+
mapping.sqldelete = new HbmCustomSQL();
297+
}
298+
mapping.sqldelete.Text = new[] {sql};
299+
mapping.sqldelete.checkSpecified = true;
300+
mapping.sqldelete.check = sqlCheck.ToHbmSqlCheck();
301+
}
302+
270303
public void SqlDeleteAll(string sql)
271304
{
272305
if (mapping.SqlDeleteAll == null)
@@ -276,6 +309,17 @@ public void SqlDeleteAll(string sql)
276309
mapping.sqldeleteall.Text = new[] {sql};
277310
}
278311

312+
public void SqlDeleteAll(string sql, SqlCheck sqlCheck)
313+
{
314+
if (mapping.SqlDeleteAll == null)
315+
{
316+
mapping.sqldeleteall = new HbmCustomSQL();
317+
}
318+
mapping.sqldeleteall.Text = new[] {sql};
319+
mapping.sqldeleteall.checkSpecified = true;
320+
mapping.sqldeleteall.check = sqlCheck.ToHbmSqlCheck();
321+
}
322+
279323
public void Subselect(string sql)
280324
{
281325
if (mapping.Subselect == null)
@@ -287,4 +331,4 @@ public void Subselect(string sql)
287331

288332
#endregion
289333
}
290-
}
334+
}

src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace NHibernate.Mapping.ByCode.Impl
1010
{
11-
public class ClassMapper : AbstractPropertyContainerMapper, IClassMapper
11+
public class ClassMapper : AbstractPropertyContainerMapper, IClassMapper, IEntitySqlsWithCheckMapper
1212
{
1313
private readonly HbmClass classMapping;
1414
private readonly IIdMapper idMapper;
@@ -369,6 +369,17 @@ public void SqlInsert(string sql)
369369
classMapping.sqlinsert.Text = new[] {sql};
370370
}
371371

372+
public void SqlInsert(string sql, SqlCheck sqlCheck)
373+
{
374+
if (classMapping.SqlInsert == null)
375+
{
376+
classMapping.sqlinsert = new HbmCustomSQL();
377+
}
378+
classMapping.sqlinsert.Text = new[] { sql };
379+
classMapping.sqlinsert.checkSpecified = true;
380+
classMapping.sqlinsert.check = sqlCheck.ToHbmSqlCheck();
381+
}
382+
372383
public void SqlUpdate(string sql)
373384
{
374385
if (classMapping.SqlUpdate == null)
@@ -378,6 +389,17 @@ public void SqlUpdate(string sql)
378389
classMapping.sqlupdate.Text = new[] {sql};
379390
}
380391

392+
public void SqlUpdate(string sql, SqlCheck sqlCheck)
393+
{
394+
if (classMapping.SqlUpdate == null)
395+
{
396+
classMapping.sqlupdate = new HbmCustomSQL();
397+
}
398+
classMapping.sqlupdate.Text = new[] { sql };
399+
classMapping.sqlupdate.checkSpecified = true;
400+
classMapping.sqlupdate.check = sqlCheck.ToHbmSqlCheck();
401+
}
402+
381403
public void SqlDelete(string sql)
382404
{
383405
if (classMapping.SqlDelete == null)
@@ -387,6 +409,17 @@ public void SqlDelete(string sql)
387409
classMapping.sqldelete.Text = new[] {sql};
388410
}
389411

412+
public void SqlDelete(string sql, SqlCheck sqlCheck)
413+
{
414+
if (classMapping.SqlDelete == null)
415+
{
416+
classMapping.sqldelete = new HbmCustomSQL();
417+
}
418+
classMapping.sqldelete.Text = new[] { sql };
419+
classMapping.sqldelete.checkSpecified = true;
420+
classMapping.sqldelete.check = sqlCheck.ToHbmSqlCheck();
421+
}
422+
390423
public void Subselect(string sql)
391424
{
392425
if (classMapping.Subselect == null)

src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace NHibernate.Mapping.ByCode.Impl.CustomizersImpl
88
{
9-
public class ClassCustomizer<TEntity> : PropertyContainerCustomizer<TEntity>, IClassMapper<TEntity>, IConformistHoldersProvider where TEntity : class
9+
public class ClassCustomizer<TEntity> : PropertyContainerCustomizer<TEntity>, IClassMapper<TEntity>, IConformistHoldersProvider, IEntitySqlsWithCheckMapper where TEntity : class
1010
{
1111
private Dictionary<string, IJoinMapper<TEntity>> joinCustomizers;
1212

@@ -264,16 +264,31 @@ public void SqlInsert(string sql)
264264
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlInsert(sql));
265265
}
266266

267+
public void SqlInsert(string sql, SqlCheck sqlCheck)
268+
{
269+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlInsert(sql, sqlCheck));
270+
}
271+
267272
public void SqlUpdate(string sql)
268273
{
269274
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlUpdate(sql));
270275
}
271276

277+
public void SqlUpdate(string sql, SqlCheck sqlCheck)
278+
{
279+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlUpdate(sql, sqlCheck));
280+
}
281+
272282
public void SqlDelete(string sql)
273283
{
274284
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlDelete(sql));
275285
}
276286

287+
public void SqlDelete(string sql, SqlCheck sqlCheck)
288+
{
289+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.SqlDelete(sql, sqlCheck));
290+
}
291+
277292
public void Subselect(string sql)
278293
{
279294
CustomizersHolder.AddCustomizer(typeof(TEntity), (IClassMapper m) => m.Subselect(sql));
@@ -291,4 +306,4 @@ IModelExplicitDeclarationsHolder IConformistHoldersProvider.ExplicitDeclarations
291306
get { return ExplicitDeclarationsHolder; }
292307
}
293308
}
294-
}
309+
}

0 commit comments

Comments
 (0)