Skip to content

Commit 704fba2

Browse files
author
mrhihi
committed
fix for NH-2053 Extend the filter-def usage to subclasses
1 parent 0bf6e35 commit 704fba2

File tree

9 files changed

+51
-1
lines changed

9 files changed

+51
-1
lines changed

src/NHibernate/Cfg/MappingSchema/Hbm.generated.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4033,7 +4033,11 @@ public partial class HbmJoinedSubclass {
40334033
/// <remarks/>
40344034
[System.Xml.Serialization.XmlAttributeAttribute()]
40354035
public string node;
4036-
4036+
4037+
/// <remarks/>
4038+
[System.Xml.Serialization.XmlElementAttribute("filter")]
4039+
public HbmFilter[] filter;
4040+
40374041
public HbmJoinedSubclass() {
40384042
this.dynamicupdate = false;
40394043
this.dynamicinsert = false;
@@ -4619,6 +4623,10 @@ public partial class HbmSubclass {
46194623
/// <remarks/>
46204624
[System.Xml.Serialization.XmlAttributeAttribute()]
46214625
public string node;
4626+
4627+
/// <remarks/>
4628+
[System.Xml.Serialization.XmlElementAttribute("filter")]
4629+
public HbmFilter[] filter;
46224630

46234631
public HbmSubclass() {
46244632
this.dynamicupdate = false;

src/NHibernate/Cfg/XmlHbmBinding/JoinedSubclassBinder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public void Bind(HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, Me
2121
{
2222
PersistentClass superModel = GetSuperclass(joinedSubclassMapping.extends);
2323
HandleJoinedSubclass(superModel, joinedSubclassMapping, inheritedMetas);
24+
new FiltersBinder(superModel, Mappings).Bind(joinedSubclassMapping.filter);
2425
}
2526

2627
public void HandleJoinedSubclass(PersistentClass model, HbmJoinedSubclass joinedSubclassMapping, IDictionary<string, MetaAttribute> inheritedMetas)

src/NHibernate/Cfg/XmlHbmBinding/SubclassBinder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public void Bind(HbmSubclass subClassMapping, IDictionary<string, MetaAttribute>
2121
{
2222
PersistentClass superModel = GetSuperclass(subClassMapping.extends);
2323
HandleSubclass(superModel, subClassMapping, inheritedMetas);
24+
new FiltersBinder(superModel, Mappings).Bind(subClassMapping.filter);
2425
}
2526

2627
public void HandleSubclass(PersistentClass model, HbmSubclass subClassMapping, IDictionary<string, MetaAttribute> inheritedMetas)

src/NHibernate/Mapping/ByCode/IJoinedSubclassMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public interface IJoinedSubclassAttributesMapper : IEntityAttributesMapper, IEnt
1010
void Key(Action<IKeyMapper> keyMapping);
1111
void Extends(System.Type baseType);
1212
void SchemaAction(SchemaAction action);
13+
void Filter(string filterName, Action<IFilterMapper> filterMapping);
1314
}
1415

1516
public interface IJoinedSubclassMapper : IJoinedSubclassAttributesMapper, IPropertyContainerMapper {}
@@ -21,6 +22,7 @@ public interface IJoinedSubclassAttributesMapper<TEntity> : IEntityAttributesMap
2122
void Schema(string schemaName);
2223
void Key(Action<IKeyMapper<TEntity>> keyMapping);
2324
void SchemaAction(SchemaAction action);
25+
void Filter(string filterName, Action<IFilterMapper> filterMapping);
2426
}
2527

2628
public interface IJoinedSubclassMapper<TEntity> : IJoinedSubclassAttributesMapper<TEntity>, IPropertyContainerMapper<TEntity> where TEntity : class {}

src/NHibernate/Mapping/ByCode/ISubclassMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public interface ISubclassAttributesMapper : IEntityAttributesMapper, IEntitySql
66
{
77
void DiscriminatorValue(object value);
88
void Extends(System.Type baseType);
9+
void Filter(string filterName, Action<IFilterMapper> filterMapping);
910
}
1011

1112
public interface ISubclassMapper : ISubclassAttributesMapper, IPropertyContainerMapper
@@ -16,6 +17,7 @@ public interface ISubclassMapper : ISubclassAttributesMapper, IPropertyContainer
1617
public interface ISubclassAttributesMapper<TEntity> : IEntityAttributesMapper, IEntitySqlsMapper where TEntity : class
1718
{
1819
void DiscriminatorValue(object value);
20+
void Filter(string filterName, Action<IFilterMapper> filterMapping);
1921
}
2022

2123
public interface ISubclassMapper<TEntity> : ISubclassAttributesMapper<TEntity>, IPropertyContainerMapper<TEntity> where TEntity : class

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public void Schema(string schemaName)
127127
CustomizersHolder.AddCustomizer(typeof (TEntity), (IJoinedSubclassAttributesMapper m) => m.Schema(schemaName));
128128
}
129129

130+
public void Filter(string filterName, Action<IFilterMapper> filterMapping)
131+
{
132+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IJoinedSubclassAttributesMapper m) => m.Filter(filterName, filterMapping));
133+
}
134+
130135
#endregion
131136

132137
#region IConformistHoldersProvider Members

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ public void DiscriminatorValue(object value)
2828
CustomizersHolder.AddCustomizer(typeof (TEntity), (ISubclassMapper m) => m.DiscriminatorValue(value));
2929
}
3030

31+
public void Filter(string filterName, Action<IFilterMapper> filterMapping)
32+
{
33+
CustomizersHolder.AddCustomizer(typeof(TEntity), (IJoinedSubclassAttributesMapper m) => m.Filter(filterName, filterMapping));
34+
}
35+
3136
#endregion
3237

3338
private Dictionary<string, IJoinMapper<TEntity>> JoinCustomizers

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,19 @@ public void SchemaAction(SchemaAction action)
189189
classMapping.schemaaction = action.ToSchemaActionString();
190190
}
191191

192+
public void Filter(string filterName, Action<IFilterMapper> filterMapping)
193+
{
194+
if (filterMapping == null)
195+
{
196+
filterMapping = x => { };
197+
}
198+
var hbmFilter = new HbmFilter();
199+
var filterMapper = new FilterMapper(filterName, hbmFilter);
200+
filterMapping(filterMapper);
201+
Dictionary<string, HbmFilter> filters = classMapping.filter != null ? classMapping.filter.ToDictionary(f => f.name, f => f) : new Dictionary<string, HbmFilter>(1);
202+
filters[filterName] = hbmFilter;
203+
classMapping.filter = filters.Values.ToArray();
204+
}
192205
#endregion
193206
}
194207
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,19 @@ public void SqlDelete(string sql)
177177

178178
public void Subselect(string sql) {}
179179

180+
public void Filter(string filterName, Action<IFilterMapper> filterMapping)
181+
{
182+
if (filterMapping == null)
183+
{
184+
filterMapping = x => { };
185+
}
186+
var hbmFilter = new HbmFilter();
187+
var filterMapper = new FilterMapper(filterName, hbmFilter);
188+
filterMapping(filterMapper);
189+
Dictionary<string, HbmFilter> filters = classMapping.filter != null ? classMapping.filter.ToDictionary(f => f.name, f => f) : new Dictionary<string, HbmFilter>(1);
190+
filters[filterName] = hbmFilter;
191+
classMapping.filter = filters.Values.ToArray();
192+
}
180193
#endregion
181194
}
182195
}

0 commit comments

Comments
 (0)