User: mzywitza
Date: 2010/02/18 11:13 AM
Added:
/ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Model/
DiscriminatorFormula.cs
Modified:
/ActiveRecord/trunk/src/
Changes.txt
/ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/
Castle.ActiveRecord.Framework.Internal.Tests-vs2008.csproj,
XmlGenerationTestCase.cs
/ActiveRecord/trunk/src/Castle.ActiveRecord/Attributes/
ActiveRecordAttribute.cs
/ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/
ActiveRecordModelBuilder.cs
/ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/Visitors/
XmlGenerationVisitor.cs
Log:
Applied Patch by Vladimir Okhotnikov for AR-ISSUE-166
Directory Changes:
Directory: /ActiveRecord/trunk/src/
===================================
Property changes on: ActiveRecord/trunk/src
___________________________________________________________________
Directory: /svn:ignore/
=======================
- _ReSharper.Castle.ActiveRecord-vs2008
bin
+ _ReSharper.Castle.ActiveRecord-vs2008
bin
Castle.ActiveRecord-vs2008.4.5.resharper.user
*.suo
---
ActiveRecord/trunk/src/Castle.ActiveRecord/Attributes/ActiveRecordAttribute.cs
2010-02-17 23:27:59 UTC (rev 6742)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord/Attributes/ActiveRecordAttribute.cs
2010-02-18 18:13:23 UTC (rev 6743)
@@ -44,6 +44,7 @@
private String discriminatorValue;
private String discriminatorColumn;
private String discriminatorLength;
+ private String discriminatorFormula;
private String where;
private Type proxy;
private Type persister;
@@ -60,7 +61,7 @@
private OptimisticLocking locking = OptimisticLocking.Version;
private bool lazySpecified;
- /// <summary>
+ /// <summary>
/// Uses the class name as table name
/// </summary>
public ActiveRecordAttribute() {}
@@ -151,6 +152,16 @@
}
/// <summary>
+ /// Gets or sets discriminator formula: "an arbitrary SQL
expression that is executed when a type has to be evaluated.
+ /// Allows content-based discrimination" as NH
documentation puts it
+ /// </summary>
+ public string DiscriminatorFormula
+ {
+ get { return discriminatorFormula; }
+ set { discriminatorFormula = value; }
+ }
+
+ /// <summary>
/// SQL condition to retrieve objects
/// </summary>
File Changes:
Directory: /ActiveRecord/trunk/src/Castle.ActiveRecord/Attributes/
==================================================================
File [modified]: ActiveRecordAttribute.cs
Delta lines: +2 -2
===================================================================
---
ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/ActiveRecordModelBuilder.cs
2010-02-17 23:27:59 UTC (rev 6742)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/ActiveRecordModelBuilder.cs
2010-02-18 18:13:23 UTC (rev 6743)
@@ -150,7 +150,7 @@
{
model.ActiveRecordAtt = attribute;
- if (attribute.DiscriminatorColumn != null)
+ if (attribute.DiscriminatorColumn != null ||
attribute.DiscriminatorFormula != null)
{
model.IsDiscriminatorBase = true;
@@ -560,7 +560,7 @@
if (attrs.Length != 0)
{
ActiveRecordAttribute
arAttribute = attrs[0] as ActiveRecordAttribute;
- if
(arAttribute.DiscriminatorColumn != null)
+ if
(arAttribute.DiscriminatorColumn != null || arAttribute.DiscriminatorFormula !=
null)
return false;
}
Directory: /ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/
================================================================================
File [modified]: Castle.ActiveRecord.Framework.Internal.Tests-vs2008.csproj
Delta lines: +33 -0
===================================================================
---
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Model/DiscriminatorFormula.cs
(rev 0)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Model/DiscriminatorFormula.cs
2010-02-18 18:13:23 UTC (rev 6743)
@@ -0,0 +1,34 @@
+namespace Castle.ActiveRecord.Framework.Internal.Tests.Model {
+ [ActiveRecord(DiscriminatorFormula = "CASE WHEN Tag IS NULL THEN 0 ELSE
1 END", DiscriminatorType = "Int32", DiscriminatorValue = "0")]
+ internal class DiscriminatorFormula {
+ private int id;
+ private int version;
+
+ [PrimaryKey]
+ public int Id
+ {
+ get { return id; }
+ set { id = value; }
+ }
+
+ [Version]
+ public int Version
+ {
+ get { return version; }
+ set { version = value; }
+ }
+ }
+
+ [ActiveRecord(DiscriminatorValue = "1")]
+ internal class DiscriminatorFormulaWithTag : DiscriminatorFormula
+ {
+ private string tag;
+
+ [Property]
+ public string Tag
+ {
+ get { return tag; }
+ set { tag = value; }
+ }
+ }
File [modified]: XmlGenerationTestCase.cs
Delta lines: +2 -0
===================================================================
--- ActiveRecord/trunk/src/Changes.txt 2010-02-17 23:27:59 UTC (rev 6742)
+++ ActiveRecord/trunk/src/Changes.txt 2010-02-18 18:13:23 UTC (rev 6743)
@@ -17,9 +17,11 @@
- Added basic support for CpBT (see IConversation interface and tests for
usage)
- Added support for lazy="extra" by setting Lazy=true and ExtraLazy=true
(Patch by Eddie Cianci, AR-ISSUE-279)
+- Added support for discriminator formulae (Patch by Vladimir Okhotnikov,
AR-ISSUE-166)
- Bugs fixed:
AR-ISSUE-157
+ AR-ISSUE-166
AR-ISSUE-180
AR-ISSUE-192
Directory: /ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/
==========================================================================
File [modified]: ActiveRecordModelBuilder.cs
Delta lines: +4 -3
===================================================================
---
ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/Visitors/XmlGenerationVisitor.cs
2010-02-17 23:27:59 UTC (rev 6742)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/Visitors/XmlGenerationVisitor.cs
2010-02-18 18:13:23 UTC (rev 6743)
@@ -1280,10 +1280,11 @@
{
if (model.IsDiscriminatorBase)
{
- AppendF("<discriminator{0}{1}{2} />",
- MakeAtt("column",
model.ActiveRecordAtt.DiscriminatorColumn),
+ AppendF("<discriminator{0}{1}{2}{3} />",
+ WriteIfNonNull("column",
model.ActiveRecordAtt.DiscriminatorColumn),
WriteIfNonNull("type",
model.ActiveRecordAtt.DiscriminatorType),
- WriteIfNonNull("length",
model.ActiveRecordAtt.DiscriminatorLength)
+ WriteIfNonNull("length",
model.ActiveRecordAtt.DiscriminatorLength),
+ WriteIfNonNull("formula",
model.ActiveRecordAtt.DiscriminatorFormula)
);
}
Directory:
/ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Model/
======================================================================================
File [added]: DiscriminatorFormula.cs
Delta lines: +30 -0
===================================================================
---
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/XmlGenerationTestCase.cs
2010-02-17 23:27:59 UTC (rev 6742)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/XmlGenerationTestCase.cs
2010-02-18 18:13:23 UTC (rev 6743)
@@ -1595,5 +1595,35 @@
Assert.AreEqual(expected, xml);
}
+
+ [Test]
+ public void DiscriminatorFormula()
+ {
+ ActiveRecordModelBuilder builder = new
ActiveRecordModelBuilder();
+ builder.Create(typeof(DiscriminatorFormulaWithTag));
+ ActiveRecordModel model =
builder.Create(typeof(DiscriminatorFormula));
+ Assert.IsNotNull(model);
+
+ String xml = Process(builder, model);
+
+ const string expected = "<?xml version=\"1.0\"
encoding=\"utf-16\"?>\r\n" +
+
"<hibernate-mapping auto-import=\"true\" default-lazy=\"false\"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"urn:nhibernate-mapping-2.2\">\r\n" +
+ "
<class
name=\"Castle.ActiveRecord.Framework.Internal.Tests.Model.DiscriminatorFormula,
Castle.ActiveRecord.Framework.Internal.Tests\" table=\"DiscriminatorFormula\"
discriminator-value=\"0\">\r\n" +
+ "
<id name=\"Id\" access=\"property\" column=\"Id\" type=\"Int32\"
unsaved-value=\"0\">\r\n" +
+ "
<generator class=\"native\">\r\n" +
+ "
</generator>\r\n" +
+ "
</id>\r\n" +
+ "
<discriminator type=\"Int32\" formula=\"CASE WHEN Tag IS NULL THEN 0 ELSE 1
END\" />\r\n" +
+ " <version name=\"Version\"
access=\"property\" column=\"Version\" type=\"Int32\" />\r\n" +
+ "
<subclass
name=\"Castle.ActiveRecord.Framework.Internal.Tests.Model.DiscriminatorFormulaWithTag,
Castle.ActiveRecord.Framework.Internal.Tests\" discriminator-value=\"1\">\r\n"
+
+ "
<property name=\"Tag\" access=\"property\" type=\"String\">\r\n" +
+ "
<column name=\"Tag\"/>\r\n" +
+ "
</property>\r\n" +
+ "
</subclass>\r\n" +
+ "
</class>\r\n" +
+
"</hibernate-mapping>\r\n";
+
+ Assert.AreEqual(expected, xml);
+ }
}
Directory:
/ActiveRecord/trunk/src/Castle.ActiveRecord/Framework/Internal/Visitors/
===================================================================================
File [modified]: XmlGenerationVisitor.cs
Delta lines: +1 -0
===================================================================
---
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Castle.ActiveRecord.Framework.Internal.Tests-vs2008.csproj
2010-02-17 23:27:59 UTC (rev 6742)
+++
ActiveRecord/trunk/src/Castle.ActiveRecord.Framework.Internal.Tests/Castle.ActiveRecord.Framework.Internal.Tests-vs2008.csproj
2010-02-18 18:13:23 UTC (rev 6743)
@@ -186,6 +186,7 @@
<Compile Include="Model\CompositeKeyForClassWithCompositeKey.cs" />
<Compile Include="Model\ClassADynamicInsertUpdate.cs" />
<Compile Include="Model\ClassWithExtraLazyOnHasMany.cs" />
+ <Compile Include="Model\DiscriminatorFormula.cs" />
<Compile Include="Model\HasManyToAnyWithBadList.cs" />
<Compile Include="Model\HasAndBelongsToManyWithBadList.cs" />
Directory: /ActiveRecord/trunk/src/
===================================
File [modified]: Changes.txt
Delta lines: +0 -0
===================================================================
--
You received this message because you are subscribed to the Google Groups
"Castle Project Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-commits?hl=en.