Skip to content

Commit 2c635cd

Browse files
committed
Made formulas added in conventions remove any attached columns
1 parent 620a39b commit 2c635cd

File tree

8 files changed

+106
-2
lines changed

8 files changed

+106
-2
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using FluentNHibernate.Conventions;
2+
using FluentNHibernate.Conventions.Instances;
3+
4+
namespace FluentNHibernate.Specs.Conventions.Fixtures
5+
{
6+
public class FormulaConvention : IPropertyConvention, IReferenceConvention
7+
{
8+
public const string FormulaValue = "select x from y";
9+
10+
public void Apply(IPropertyInstance instance)
11+
{
12+
instance.Formula(FormulaValue);
13+
}
14+
15+
public void Apply(IManyToOneInstance instance)
16+
{
17+
instance.Formula(FormulaValue);
18+
}
19+
}
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using FluentNHibernate.Mapping;
2+
3+
namespace FluentNHibernate.Specs.Conventions.Fixtures
4+
{
5+
public class FormulaTarget
6+
{
7+
public int Id { get; private set; }
8+
public string Prop { get; private set; }
9+
public FormulaTarget Target { get; private set; }
10+
}
11+
12+
public class FormulaTargetMap : ClassMap<FormulaTarget>
13+
{
14+
public FormulaTargetMap()
15+
{
16+
Id(x => x.Id);
17+
Map(x => x.Prop, "a-column");
18+
References(x => x.Target);
19+
}
20+
}
21+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System.Linq;
2+
using FluentNHibernate.Conventions;
3+
using FluentNHibernate.MappingModel.ClassBased;
4+
using FluentNHibernate.Specs.Conventions.Fixtures;
5+
using Machine.Specifications;
6+
7+
namespace FluentNHibernate.Specs.Conventions
8+
{
9+
[Subject(typeof(IPropertyConvention))]
10+
public class when_a_formula_is_added_to_a_property
11+
{
12+
Establish context = () =>
13+
{
14+
model = new FluentNHibernate.PersistenceModel();
15+
model.Conventions.Add<FormulaConvention>();
16+
model.Add(new FormulaTargetMap());
17+
};
18+
19+
Because of = () =>
20+
mapping = model.BuildMappingFor<FormulaTarget>();
21+
22+
It should_remove_all_columns_from_the_property = () =>
23+
mapping.Properties.Single().Columns.ShouldBeEmpty();
24+
25+
It should_add_the_formula_to_the_property = () =>
26+
mapping.Properties.Single().Formula.ShouldEqual(FormulaConvention.FormulaValue);
27+
28+
static FluentNHibernate.PersistenceModel model;
29+
static ClassMapping mapping;
30+
}
31+
32+
[Subject(typeof(IReferenceConvention))]
33+
public class when_a_formula_is_added_to_a_reference
34+
{
35+
Establish context = () =>
36+
{
37+
model = new FluentNHibernate.PersistenceModel();
38+
model.Conventions.Add<FormulaConvention>();
39+
model.Add(new FormulaTargetMap());
40+
};
41+
42+
Because of = () =>
43+
mapping = model.BuildMappingFor<FormulaTarget>();
44+
45+
It should_remove_all_columns_from_the_property = () =>
46+
mapping.References.Single().Columns.ShouldBeEmpty();
47+
48+
It should_add_the_formula_to_the_property = () =>
49+
mapping.References.Single().Formula.ShouldEqual(FormulaConvention.FormulaValue);
50+
51+
static FluentNHibernate.PersistenceModel model;
52+
static ClassMapping mapping;
53+
}
54+
}

src/FluentNHibernate.Specs/FluentNHibernate.Specs.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@
103103
<Compile Include="Conventions\Fixtures\CollectionConvention.cs" />
104104
<Compile Include="Conventions\Fixtures\FilterClassConvention.cs" />
105105
<Compile Include="Conventions\Fixtures\FilterTarget.cs" />
106+
<Compile Include="Conventions\Fixtures\FormulaConvention.cs" />
107+
<Compile Include="Conventions\Fixtures\FormulaTarget.cs" />
106108
<Compile Include="Conventions\Fixtures\SetCollectionEntity.cs" />
107109
<Compile Include="Conventions\Fixtures\SetCollectionEntityMap.cs" />
108110
<Compile Include="Conventions\Fixtures\SetCompositeElementCollectionEntity.cs" />
@@ -113,6 +115,7 @@
113115
<Compile Include="Conventions\Fixtures\TwoPropertyEntityMap.cs" />
114116
<Compile Include="Conventions\Fixtures\Value.cs" />
115117
<Compile Include="Conventions\ForeignKeyConventionSpecs.cs" />
118+
<Compile Include="Conventions\FormulaConventionSpecs.cs" />
116119
<Compile Include="Extensions.cs" />
117120
<Compile Include="FluentInterface\ClasslikeBehaviors.cs" />
118121
<Compile Include="FluentInterface\ClassMapSpecs\ClassMapSpecs.Cache.cs" />

src/FluentNHibernate/Conventions/Instances/ManyToOneInstance.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ public void Column(string columnName)
3535
public new void Formula(string formula)
3636
{
3737
if (!mapping.IsSpecified("Formula"))
38+
{
3839
mapping.Formula = formula;
40+
mapping.ClearColumns();
41+
}
3942
}
4043

4144
public void CustomClass<T>()

src/FluentNHibernate/Conventions/Instances/PropertyInstance.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,10 @@ public void Column(string columnName)
189189
public new void Formula(string formula)
190190
{
191191
if (!mapping.IsSpecified("Formula"))
192+
{
192193
mapping.Formula = formula;
194+
mapping.ClearColumns();
195+
}
193196
}
194197

195198
public new IGeneratedInstance Generated

src/FluentNHibernate/MappingModel/ColumnBasedMappingBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void AddDefaultColumn(ColumnMapping mapping)
5050

5151
public void ClearColumns()
5252
{
53-
columns.Clear();
53+
columns.ClearAll();
5454
}
5555

5656
public bool Equals(ColumnBasedMappingBase other)

src/FluentNHibernate/MappingModel/ManyToOneMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public void AddDefaultColumn(ColumnMapping column)
131131

132132
public void ClearColumns()
133133
{
134-
columns.Clear();
134+
columns.ClearAll();
135135
}
136136

137137
public override bool IsSpecified(string property)

0 commit comments

Comments
 (0)