Thanks all top replies. Ok I'll grab tortoiseGit and give it a go over this week.
Great comments! Patrick - absolutely I thought of the enum, but went with a more flexible (, lazy) and consistent approach. I'll change this for the better! Henry - I certainly thought of that. I'd have to find out what the Hibernate behaviour is (obviously false, false is valid I'm just not sure of your given combinations) so I should research those and apply the relevant tests to ensure it's conformant. On Nov 29, 11:29 am, Henry Conceição <[email protected]> wrote: > Also, how does this is related to the Insert=True|False and > Update=True|False mapping attributes? > > Cheers, > Henry Conceição > > > > > > > > On Mon, Nov 29, 2010 at 2:14 PM, Patrick Earl <[email protected]> wrote: > > Hi Ian. > > Thanks for thinking to contribute. It's pretty straight-forward to get > > going with GIT if you use something like TortoiseGIT. You can just clone a > > repo you've forked on github, commit, then push. It helps the team > > significantly if your patch is easier to apply. > > In any case, it would be better to use an enum to specify the generated > > type. > > Patrick Earl > > > On Mon, Nov 29, 2010 at 6:16 AM, [email protected] > > <[email protected]> wrote: > > >> Hi, > > >> I've subscribed to the Dev List for a while and have been encouraged > >> to submit a new feature for Castle.ActiveRecord. nHibermnate has the > >> ability (via mapping files) to specify if a field is generated or not > >> (none|insert|always). > > >> I've added support to my local ActiveRecord source and have the > >> following test to ensure it's implemented ok. As I'm not a committer I > >> hoped I could post it up and hope that someone could commit it for me > >> (with perhaps a mention). Anyway if I'm going about this all wrong > >> please let me know, but I think it's a handy feature to add to > >> ActiveRecord..... > > >> I've provided the test and detailed some of the code I used to get it > >> working... but I'm sure there could be a better way, > > >> Cheers > >> ian pender > > >> test : > >> namespace Castle.ActiveRecord.Framework.Internal.Tests.Model > >> { > >> using Castle.ActiveRecord; > > >> [ActiveRecord] > >> public class ClassWithGeneratedProperties : ActiveRecordBase > >> { > >> [PrimaryKey] > >> public int Id { get; set; } > > >> [Property(GeneratedType = "insert")] > >> public int ColumnGeneratedInsert { get; set; } > > >> [Property(GeneratedType = "none")] > >> public int ColumnGeneratedNone { get; set; } > > >> [Property(GeneratedType = "always")] > >> public int ColumnGeneratedAlways { get; set; } > > >> [Property] > >> public int ColumnNoGenerated { get; set; } > >> } > >> } > > >> namespace Castle.ActiveRecord.Framework.Internal.Tests : > > >> XmlGenerationTestCase > > >> [Test] > >> public void SimpleCaseGeneratedType() > >> { > >> ActiveRecordModelBuilder builder = new > >> ActiveRecordModelBuilder(); > >> ActiveRecordModel model = > >> builder.Create(typeof(ClassWithGeneratedProperties)); > >> Assert.IsNotNull(model); > > >> SemanticVerifierVisitor semanticVisitor = new > >> SemanticVerifierVisitor(builder.Models); > >> semanticVisitor.VisitNode(model); > > >> XmlGenerationVisitor xmlVisitor = new > >> XmlGenerationVisitor(); > >> xmlVisitor.CreateXml(model); > > >> String xml = xmlVisitor.Xml; > > >> 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.ClassWithGeneratedProp > >> erties, > >> Castle.ActiveRecord.Framework.Internal.Tests\" table= > >> \"ClassWithGeneratedProperties\">\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" + > >> " <property name=\"ColumnGeneratedInsert\" access= > >> \"property\" type=\"Int32\" generated=\"insert\">\r\n" + > >> " <column name=\"ColumnGeneratedInsert\"/>\r\n" + > >> " </property>\r\n" + > >> " <property name=\"ColumnGeneratedNone\" access= > >> \"property\" type=\"Int32\" generated=\"none\">\r\n" + > >> " <column name=\"ColumnGeneratedNone\"/>\r\n" + > >> " </property>\r\n" + > >> " <property name=\"ColumnGeneratedAlways\" access= > >> \"property\" type=\"Int32\" generated=\"always\">\r\n" + > >> " <column name=\"ColumnGeneratedAlways\"/>\r\n" + > >> " </property>\r\n" + > >> " <property name=\"ColumnNoGenerated\" access= > >> \"property\" type=\"Int32\">\r\n" + > >> " <column name=\"ColumnNoGenerated\"/>\r\n" + > >> " </property>\r\n" + > >> " </class>\r\n" + > >> "</hibernate-mapping>\r\n"; > > >> Assert.AreEqual(expected, xml); > >> } > > >> I got this test working by adding to > > >> namespace Castle.ActiveRecord.PropertyAttribute > > >> /// <summary> > >> /// Set to never|insert|always to specify how the property is > >> generated. If blank not included in mapping > >> /// </summary> > >> public string GeneratedType > >> { > >> get { return generatedType; } > >> set { generatedType = value; } > >> } > > >> and amending > > >> namespace Castle.ActiveRecord.Framework.Internal > > >> public class XmlGenerationVisitor : AbstractDepthFirstVisitor > > >> private void WriteProperty(String name, Type propType, String > >> accessString, String columnType, > >> bool insert, bool update, String > >> formula, > >> String column, int length, bool > >> notNull, > >> bool unique, > >> String uniqueKey, String > >> sqlType, String > >> index, String check, String @default) > >> { > >> WriteProperty(name, propType, accessString, > >> columnType, insert, > >> update, formula, column, > >> length, notNull, unique, uniqueKey, sqlType, index, > >> check, @default, null); > >> } > > >> private void WriteProperty(String name, Type propType, > >> String accessString, String columnType, > >> bool insert, bool update, String > >> formula, > >> String column, int length, bool > >> notNull, > >> bool unique, > >> String uniqueKey, String > >> sqlType, String > >> index, String check, String @default, > >> string generatedFlag) > >> { > >> BeginWriteProperty(accessString, columnType, formula, > >> insert, name, propertyType, update, generatedFlag); > > >> Ident(); > > >> WriteColumn(check, column, index, length, notNull, > >> sqlType, unique, uniqueKey, @default); > > >> Dedent(); > > >> EndWriteProperty(); > >> } > > >> and finally > > >> private void BeginWriteProperty(string accessString, > >> string columnType, > >> string formula, > >> bool insert, > >> string name, > >> Type propertyType, > >> bool update, > >> string generatedValue) > >> { > >> AppendF("<property{0}{1}{2}{3}{4}{5}{6}>", > >> MakeAtt("name", name), > >> WriteIfNonNull("access", accessString), > >> MakeTypeAtt(propertyType, columnType), > >> WriteIfFalse("insert", insert), > >> WriteIfFalse("update", update), > >> WriteIfNonNull("formula", formula), > >> WriteIfNonNull("generated", generatedValue)); > >> } > > >> -- > >> You received this message because you are subscribed to the Google Groups > >> "Castle Project Development List" 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-devel?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Castle Project Development List" 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-devel?hl=en. -- You received this message because you are subscribed to the Google Groups "Castle Project Development List" 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-devel?hl=en.
