You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(110) |
Nov
(296) |
Dec
(107) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(212) |
Feb
(263) |
Mar
(161) |
Apr
(183) |
May
(183) |
Jun
(75) |
Jul
(106) |
Aug
(88) |
Sep
(227) |
Oct
(143) |
Nov
(154) |
Dec
(53) |
2008 |
Jan
(77) |
Feb
|
Mar
|
Apr
(6) |
May
(103) |
Jun
(296) |
Jul
(54) |
Aug
|
Sep
(379) |
Oct
(283) |
Nov
(224) |
Dec
(214) |
2009 |
Jan
(129) |
Feb
(257) |
Mar
(136) |
Apr
(12) |
May
(329) |
Jun
(434) |
Jul
(375) |
Aug
(171) |
Sep
|
Oct
|
Nov
|
Dec
(54) |
2010 |
Jan
(198) |
Feb
(76) |
Mar
(3) |
Apr
(1) |
May
|
Jun
(62) |
Jul
(210) |
Aug
(447) |
Sep
(330) |
Oct
(257) |
Nov
(133) |
Dec
(453) |
2011 |
Jan
(240) |
Feb
(128) |
Mar
(442) |
Apr
(320) |
May
(428) |
Jun
(141) |
Jul
(13) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: cremor (JIRA) <nh...@gm...> - 2011-04-05 06:59:40
|
[ http://216.121.112.228/browse/NH-2527?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] cremor updated NH-2527: ----------------------- Attachment: NH2527 Additional Test.zip Here is an additional test that should show the bug with all drivers. > AbstractBatcher reuses disposed IDbCommands which causes an ArgumentOutOfRangeException with OracleDataClientDriver > ------------------------------------------------------------------------------------------------------------------- > > Key: NH-2527 > URL: http://216.121.112.228/browse/NH-2527 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.0.0.GA > Reporter: cremor > Priority: Critical > Attachments: NH2527 Additional Test.zip, NH2527 Test.zip > > > The attached test shows that the AbstractBatcher reuses already disposed IDbCommands in some cases (in my case, when an OneToMany entry is inserted and updated in the same commit). This seems to be no problem with some (most?) drivers (I tested SQLite20Driver and OracleClientDriver, both had no problems) but causes an ArgumentOutOfRangeException with the OracleDataClientDriver because the Parameters collection is empty. > The dispose is called from AbstractBatcher.CloseCommand() which is called from OneToManyPersister.DoUpdateRows(). > AbstractBatcher.CloseCommand() checks if 'lastQuery' is the just disposed command and if yes clears it, but doesn't check 'batchCommand'. (Possible fix by calling InvalidateBatchCommand() if batchCommand == cmd.) > Seems like a similar problem was already fixed for Firebird because the method AbstractBatcher.PrepareBatchCommand() checks for an empty CommandText and the comment says that it's unknown why it's empty sometimes. (Other possible fix by comparing batchCommand.Parameters.Count and parameterTypes.Length.) > I don't know which of the two fixes would be better (or if there is an even better fix), therefore I didn't create a patch. > Please note that even with one of the two fixes, the test still fails (with an StaleStateException) if you don't set adonet.batch_size to 0. I don't know why it doesn't work with batching, but this seems like a different bug. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: cremor (JIRA) <nh...@gm...> - 2011-04-05 06:09:37
|
[ http://216.121.112.228/browse/NH-2623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] cremor updated NH-2623: ----------------------- Attachment: NH2623.zip > ISQLExceptionConverter isn't used in AdoTransaction > --------------------------------------------------- > > Key: NH-2623 > URL: http://216.121.112.228/browse/NH-2623 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.1.0 > Reporter: cremor > Priority: Minor > Attachments: NH2623.zip > > > The attached test shows that exceptions that are thrown from the driver in Transaction.Begin/Commit/Rollback are not passed to an ISQLExceptionConverter. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: cremor (JIRA) <nh...@gm...> - 2011-04-05 06:03:39
|
ISQLExceptionConverter isn't used in AdoTransaction --------------------------------------------------- Key: NH-2623 URL: http://216.121.112.228/browse/NH-2623 Project: NHibernate Issue Type: Bug Components: Core Affects Versions: 3.1.0 Reporter: cremor Priority: Minor The attached test shows that exceptions that are thrown from the driver in Transaction.Begin/Commit/Rollback are not passed to an ISQLExceptionConverter. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Patrick E. (JIRA) <nh...@gm...> - 2011-04-05 01:46:48
|
[ http://216.121.112.228/browse/NH-2621?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20827#action_20827 ] Patrick Earl commented on NH-2621: ---------------------------------- To have this issue resolved more quickly, please provide a failing test case. To learn how to write a test, see the JIRA login screen for a link. Also, as a quick thing, could you provide the original source code for the query? Thanks. > Failing Linq OrderBy clause. > ---------------------------- > > Key: NH-2621 > URL: http://216.121.112.228/browse/NH-2621 > Project: NHibernate > Issue Type: Bug > Components: Linq Provider > Affects Versions: 3.0.0.GA > Reporter: Jerome Haltom > > This IQueryable Expression is throwing an error at Ast.ANTLR.Util.LiteralProcessor, line 77. It is failing to parse p.IntId. Says it's not a constant. It's not. It's a property reference for an OrderBy. I'm not sure why it's trying to resolve it as a constant. This ANTLR code is nearly impossible for me to understand. > .Call System.Linq.Queryable.OrderBy( > .Call System.Linq.Queryable.Where( > .Constant<NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule]>(NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule]), > '(.Lambda #Lambda1<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Boolean]>)), > '(.Lambda #Lambda2<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Int32]>)) > .Lambda #Lambda1<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Boolean]>(ISIS.Data.Core.BenefitSchedule $it) { > True && $it.Id == .Constant<System.Guid>(d44f4aac-2ec8-4afc-87e5-6ed5f8a0dfc8) > } > .Lambda #Lambda2<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Int32]>(ISIS.Data.Core.BenefitSchedule $p) { > $p.IntId > } > The expression string looks like: > .OrderBy(.Where(NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule], Quote((it, ) => (AndAlso(p1, Guid.op_Equality(it.Id, p2)))), ), Quote((p, ) => (p.IntId)), ) > I don't see anything wrong with this, except maybe the name p? -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Patrick E. (JIRA) <nh...@gm...> - 2011-04-05 01:40:38
|
[ http://216.121.112.228/browse/NH-2622?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Patrick Earl updated NH-2622: ----------------------------- Description: There is an ignored test case in DynamicProxyTests/ProxiedMembers. One required fix is to change string typeName = param.ParameterType.Name; to: string typeName = param.ParameterType.FullName; in: DefaultMethodEmitter.cs However, after doing this, the test still crashes the runtime, likely due to invalid IL being generated. was: There is an ignored test case in DynamicProxyTests/ProxiedMembers. One required fix is to change string typeName = param.ParameterType.Name; to: string typeName = param.ParameterType.FullName; However, after doing this, the test still crashes the runtime, likely due to invalid IL being generated. > Proxying fails for methods with out and ref arguments > ----------------------------------------------------- > > Key: NH-2622 > URL: http://216.121.112.228/browse/NH-2622 > Project: NHibernate > Issue Type: Bug > Components: ByteCode providers > Affects Versions: 3.2.0 > Reporter: Patrick Earl > Priority: Critical > > There is an ignored test case in DynamicProxyTests/ProxiedMembers. One required fix is to change > string typeName = param.ParameterType.Name; > to: > string typeName = param.ParameterType.FullName; > in: > DefaultMethodEmitter.cs > However, after doing this, the test still crashes the runtime, likely due to invalid IL being generated. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Patrick E. (JIRA) <nh...@gm...> - 2011-04-05 01:36:45
|
Proxying fails for methods with out and ref arguments ----------------------------------------------------- Key: NH-2622 URL: http://216.121.112.228/browse/NH-2622 Project: NHibernate Issue Type: Bug Components: ByteCode providers Affects Versions: 3.2.0 Reporter: Patrick Earl Priority: Critical There is an ignored test case in DynamicProxyTests/ProxiedMembers. One required fix is to change string typeName = param.ParameterType.Name; to: string typeName = param.ParameterType.FullName; However, after doing this, the test still crashes the runtime, likely due to invalid IL being generated. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Jerome H. (JIRA) <nh...@gm...> - 2011-04-04 21:51:46
|
Failing Linq OrderBy clause. ---------------------------- Key: NH-2621 URL: http://216.121.112.228/browse/NH-2621 Project: NHibernate Issue Type: Bug Components: Linq Provider Affects Versions: 3.0.0.GA Reporter: Jerome Haltom This IQueryable Expression is throwing an error at Ast.ANTLR.Util.LiteralProcessor, line 77. It is failing to parse p.IntId. Says it's not a constant. It's not. It's a property reference for an OrderBy. I'm not sure why it's trying to resolve it as a constant. This ANTLR code is nearly impossible for me to understand. .Call System.Linq.Queryable.OrderBy( .Call System.Linq.Queryable.Where( .Constant<NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule]>(NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule]), '(.Lambda #Lambda1<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Boolean]>)), '(.Lambda #Lambda2<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Int32]>)) .Lambda #Lambda1<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Boolean]>(ISIS.Data.Core.BenefitSchedule $it) { True && $it.Id == .Constant<System.Guid>(d44f4aac-2ec8-4afc-87e5-6ed5f8a0dfc8) } .Lambda #Lambda2<System.Func`2[ISIS.Data.Core.BenefitSchedule,System.Int32]>(ISIS.Data.Core.BenefitSchedule $p) { $p.IntId } The expression string looks like: .OrderBy(.Where(NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.BenefitSchedule], Quote((it, ) => (AndAlso(p1, Guid.op_Equality(it.Id, p2)))), ), Quote((p, ) => (p.IntId)), ) I don't see anything wrong with this, except maybe the name p? -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Mark J. (JIRA) <nh...@gm...> - 2011-04-04 14:45:28
|
[ http://216.121.112.228/browse/NH-2329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20826#action_20826 ] Mark Junker commented on NH-2329: --------------------------------- I did work around this problem by using Linq and splitting the SQL statement into two. First, I fetch all Id's I'm interested in, then I use the list of Id's to fetch the real data. I don't know if the problem still exists in the current release. > No JOINs for SQL statement created, condition references unknown alias > ---------------------------------------------------------------------- > > Key: NH-2329 > URL: http://216.121.112.228/browse/NH-2329 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.0.0.Alpha2 > Reporter: Mark Junker > Priority: Major > Attachments: JoinTests.cs > > > The example in the attachment fails with the following error: > NHibernate.Test.Criteria.JoinTests.JoinOverJoin: > NHibernate.Exceptions.GenericADOException : could not execute query > [ SELECT this_.Id as Id44_0_, this_.Foo as Foo44_0_, this_.moreInt as moreInt44_0_, this_.moreString as moreString44_0_ FROM Stuff this_ WHERE s2x2_.Id = @p0 ] > Positional parameters: #0>2 > [SQL: SELECT this_.Id as Id44_0_, this_.Foo as Foo44_0_, this_.moreInt as moreInt44_0_, this_.moreString as moreString44_0_ FROM Stuff this_ WHERE s2x2_.Id = @p0] > ----> System.Data.SqlClient.SqlException : Der mehrteilige Bezeichner "s2x2_.Id" konnte nicht gebunden werden. > The problem is that there's a reference to "s2x2" in the condition, but the name isn't defined in the SQL statement. "s2x2" should be a table alias name from a JOIN statement. > As you can see, I'm creating two joins and the condition queries the elements in the second join. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Ricardo P. (JIRA) <nh...@gm...> - 2011-04-04 14:04:55
|
[ http://216.121.112.228/browse/NH-2620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20825#action_20825 ] Ricardo Peres commented on NH-2620: ----------------------------------- My fault: not entirely true, StatelessSessionImpl does have a FlushMode property, but it throws a NotSupportedException. Perhaps this property should be either implemented or removed. > Stateless Session, Named SQL Query and Flush Mode > ------------------------------------------------- > > Key: NH-2620 > URL: http://216.121.112.228/browse/NH-2620 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.1.0 > Reporter: Ricardo Peres > > When the flush mode for a named SQL query is specified and the named query is called by a stateless session, it throws a method not found exception due to the fact that StatelessSessionImpl does not have a FlushMode property. > Example: > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" namespace="NHibernateGeneratorsTest.Domain" assembly="NHibernateGeneratorsTest"> > <query name="AllCustomers" read-only="true" cacheable="false" flush-mode="never" fetch-size="500"> > <![CDATA[ > from Customer c > ]]> > </query> > </hibernate-mapping> > using (IStatelessSession session = factory.OpenStatelessSession()) > { > session.GetNamedQuery("AllCustomers").List(); > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Ricardo P. (JIRA) <nh...@gm...> - 2011-04-04 14:01:38
|
Stateless Session, Named SQL Query and Flush Mode ------------------------------------------------- Key: NH-2620 URL: http://216.121.112.228/browse/NH-2620 Project: NHibernate Issue Type: Bug Components: Core Affects Versions: 3.1.0 Reporter: Ricardo Peres When the flush mode for a named SQL query is specified and the named query is called by a stateless session, it throws a method not found exception due to the fact that StatelessSessionImpl does not have a FlushMode property. Example: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" namespace="NHibernateGeneratorsTest.Domain" assembly="NHibernateGeneratorsTest"> <query name="AllCustomers" read-only="true" cacheable="false" flush-mode="never" fetch-size="500"> <![CDATA[ from Customer c ]]> </query> </hibernate-mapping> using (IStatelessSession session = factory.OpenStatelessSession()) { session.GetNamedQuery("AllCustomers").List(); } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Ricardo P. (JIRA) <nh...@gm...> - 2011-04-04 13:42:38
|
Dialect Scope for Named SQL Query --------------------------------- Key: NH-2619 URL: http://216.121.112.228/browse/NH-2619 Project: NHibernate Issue Type: Improvement Components: Core Affects Versions: 3.2.0 Reporter: Ricardo Peres It would be useful to allow named SQL queries (the <sql-query/> element) to be scoped for a given dialect, or set of dialects, like it is for <database-object/>. Something like this: <sql-query name="AllCustomers"> <![CDATA[ some sql.. END;]]> <dialect-scope name="NHibernate.Dialect.Oracle8iDialect"/> <dialect-scope name="NHibernate.Dialect.Oracle9iDialect"/> <dialect-scope name="NHibernate.Dialect.Oracle10gDialect"/> </sql-query> -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: James C. (JIRA) <nh...@gm...> - 2011-04-04 09:56:53
|
[ http://216.121.112.228/browse/NH-2329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20824#action_20824 ] James Crowley commented on NH-2329: ----------------------------------- Mark, did you figure out what was going here? I'm having a similar issue at the moment and can't figure out what I've done wrong! > No JOINs for SQL statement created, condition references unknown alias > ---------------------------------------------------------------------- > > Key: NH-2329 > URL: http://216.121.112.228/browse/NH-2329 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.0.0.Alpha2 > Reporter: Mark Junker > Priority: Major > Attachments: JoinTests.cs > > > The example in the attachment fails with the following error: > NHibernate.Test.Criteria.JoinTests.JoinOverJoin: > NHibernate.Exceptions.GenericADOException : could not execute query > [ SELECT this_.Id as Id44_0_, this_.Foo as Foo44_0_, this_.moreInt as moreInt44_0_, this_.moreString as moreString44_0_ FROM Stuff this_ WHERE s2x2_.Id = @p0 ] > Positional parameters: #0>2 > [SQL: SELECT this_.Id as Id44_0_, this_.Foo as Foo44_0_, this_.moreInt as moreInt44_0_, this_.moreString as moreString44_0_ FROM Stuff this_ WHERE s2x2_.Id = @p0] > ----> System.Data.SqlClient.SqlException : Der mehrteilige Bezeichner "s2x2_.Id" konnte nicht gebunden werden. > The problem is that there's a reference to "s2x2" in the condition, but the name isn't defined in the SQL statement. "s2x2" should be a table alias name from a JOIN statement. > As you can see, I'm creating two joins and the condition queries the elements in the second join. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Eugenyi V. (JIRA) <nh...@gm...> - 2011-04-02 23:12:35
|
[ http://216.121.112.228/browse/NH-2618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20823#action_20823 ] Eugenyi Vinogradnyi commented on NH-2618: ----------------------------------------- Repost to Firebird .NET Data provider tracker http://tracker.firebirdsql.org/browse/DNET-376 > FireBird GUID Type coversion error > ---------------------------------- > > Key: NH-2618 > URL: http://216.121.112.228/browse/NH-2618 > Project: NHibernate > Issue Type: Bug > Components: DataProviders / Dialects > Affects Versions: 3.0.0.GA > Reporter: Eugenyi Vinogradnyi > Priority: Major > > Firebird 2.5 store Uuid into left to right convetion as "CHAR(16) CHARACTER SET OCTETS" (see http://www.firebirdfaq.org/faq98/). But NHibernate into GuidType constructs System.Guid with System.Guid(byte[]) constructor, but System.GuidType shoul be constructed with Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) for correct representation. Also see Firebird 2.5 embeded fuctions UUID_TO_CHAR() and CHAR_TO_UUID(). > System.Guid reflection: > {{{ > // Creates a new guid from an array of bytes. > // > public Guid(byte[] b) > { > if (b==null) > throw new ArgumentNullException("b"); > if (b.Length != 16) > throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_GuidArrayCtor"), "16")); > > _a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0]; > _b = (short)(((int)b[5] << 8) | b[4]); > _c = (short)(((int)b[7] << 8) | b[6]); > _d = b[8]; > _e = b[9]; > _f = b[10]; > _g = b[11]; > _h = b[12]; > _i = b[13]; > _j = b[14]; > _k = b[15]; > } > // Creates a new GUID initialized to the value represented by the > // arguments. The bytes are specified like this to avoid endianness issues. > // > public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) > { > _a = a; > _b = b; > _c = c; > _d = d; > _e = e; > _f = f; > _g = g; > _h = h; > _i = i; > _j = j; > _k = k; > } > }}} > Database SQL script example: > {{{ > CREATE DOMAIN FGUID_D_KEY AS CHAR(16) CHARACTER SET OCTETS NOT NULL; > CREATE DOMAIN FGUID_D AS CHAR(16) CHARACTER SET OCTETS; > CREATE TABLE SYSTEM$DATABASE ( > SYSTEM_GUID FGUID_D_KEY, > SUBSYSTEM_GUID FGUID_D_KEY > ); > SET TERM ^ ; > CREATE OR ALTER TRIGGER SYSTEM$DATABASE_BI0 FOR SYSTEM$DATABASE > ACTIVE BEFORE INSERT POSITION 0 > AS > BEGIN > /* Gen SYSTEM_GUID if not defined */ > IF (NEW.SYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SYSTEM_GUID = GEN_UUID(); > END > /* Gen SUBSYSTEM_GUID if not defined */ > IF (NEW.SUBSYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SUBSYSTEM_GUID = GEN_UUID(); > END > END > ^ > SET TERM ; ^ > INSERT INTO SYSTEM$DATABASE (SYSTEM_GUID, SUBSYSTEM_GUID) VALUES (NULL, NULL); > }}} > Symbolic example of NUnit test: > {{{ > ... > private class Guids > { > public Guid MsGuid { get; set; } > public string FbStrGuid { get; set; } > } > [Test] > public void TestFunc() > { > tempDbWrapper.WrapSession( > session => > { > var guids = > session.CreateSQLQuery( > "SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE") > .SetResultTransformer( > new FuzzyAliasToBeanResultTransformer<Guids>() > .AddBeanProp("SYSTEM_GUID", "MsGuid") > .AddBeanProp("SYSTEM_GUID2", "FbStrGuid")) > .UniqueResult<Guids>(); > var fbGuid = new Guid(guids.FbStrGuid); > Console.WriteLine("MSGuid = {0}", guids.MsGuid); > Console.WriteLine("DBGuid = {0}", fbGuid); > Assert.AreEqual(guids.MsGuid, fbGuid); > }); > } > }}} > Execution Result: > {{{ > TestFunc : Failed > NHibernate: SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE > MSGuid = cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > DBGuid = 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > Expected: cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > But was: 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > }}} > > Best regards, > Eugenyi Vinogradnyi (aka ssdi). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Eugenyi V. (JIRA) <nh...@gm...> - 2011-04-02 21:49:34
|
[ http://216.121.112.228/browse/NH-2618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20822#action_20822 ] Eugenyi Vinogradnyi commented on NH-2618: ----------------------------------------- Ok. Then I will repost this message onto Firebird ADO.NET Data Provider tracker (http://tracker.firebirdsql.org/secure/IssueNavigator.jspa?reset=true&&pid=10003&fixfor=10371&status=5&status=6&sorter/field=issuekey&sorter/order=DESC). Thanks for quick reply. > FireBird GUID Type coversion error > ---------------------------------- > > Key: NH-2618 > URL: http://216.121.112.228/browse/NH-2618 > Project: NHibernate > Issue Type: Bug > Components: DataProviders / Dialects > Affects Versions: 3.0.0.GA > Reporter: Eugenyi Vinogradnyi > Priority: Major > > Firebird 2.5 store Uuid into left to right convetion as "CHAR(16) CHARACTER SET OCTETS" (see http://www.firebirdfaq.org/faq98/). But NHibernate into GuidType constructs System.Guid with System.Guid(byte[]) constructor, but System.GuidType shoul be constructed with Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) for correct representation. Also see Firebird 2.5 embeded fuctions UUID_TO_CHAR() and CHAR_TO_UUID(). > System.Guid reflection: > {{{ > // Creates a new guid from an array of bytes. > // > public Guid(byte[] b) > { > if (b==null) > throw new ArgumentNullException("b"); > if (b.Length != 16) > throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_GuidArrayCtor"), "16")); > > _a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0]; > _b = (short)(((int)b[5] << 8) | b[4]); > _c = (short)(((int)b[7] << 8) | b[6]); > _d = b[8]; > _e = b[9]; > _f = b[10]; > _g = b[11]; > _h = b[12]; > _i = b[13]; > _j = b[14]; > _k = b[15]; > } > // Creates a new GUID initialized to the value represented by the > // arguments. The bytes are specified like this to avoid endianness issues. > // > public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) > { > _a = a; > _b = b; > _c = c; > _d = d; > _e = e; > _f = f; > _g = g; > _h = h; > _i = i; > _j = j; > _k = k; > } > }}} > Database SQL script example: > {{{ > CREATE DOMAIN FGUID_D_KEY AS CHAR(16) CHARACTER SET OCTETS NOT NULL; > CREATE DOMAIN FGUID_D AS CHAR(16) CHARACTER SET OCTETS; > CREATE TABLE SYSTEM$DATABASE ( > SYSTEM_GUID FGUID_D_KEY, > SUBSYSTEM_GUID FGUID_D_KEY > ); > SET TERM ^ ; > CREATE OR ALTER TRIGGER SYSTEM$DATABASE_BI0 FOR SYSTEM$DATABASE > ACTIVE BEFORE INSERT POSITION 0 > AS > BEGIN > /* Gen SYSTEM_GUID if not defined */ > IF (NEW.SYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SYSTEM_GUID = GEN_UUID(); > END > /* Gen SUBSYSTEM_GUID if not defined */ > IF (NEW.SUBSYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SUBSYSTEM_GUID = GEN_UUID(); > END > END > ^ > SET TERM ; ^ > INSERT INTO SYSTEM$DATABASE (SYSTEM_GUID, SUBSYSTEM_GUID) VALUES (NULL, NULL); > }}} > Symbolic example of NUnit test: > {{{ > ... > private class Guids > { > public Guid MsGuid { get; set; } > public string FbStrGuid { get; set; } > } > [Test] > public void TestFunc() > { > tempDbWrapper.WrapSession( > session => > { > var guids = > session.CreateSQLQuery( > "SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE") > .SetResultTransformer( > new FuzzyAliasToBeanResultTransformer<Guids>() > .AddBeanProp("SYSTEM_GUID", "MsGuid") > .AddBeanProp("SYSTEM_GUID2", "FbStrGuid")) > .UniqueResult<Guids>(); > var fbGuid = new Guid(guids.FbStrGuid); > Console.WriteLine("MSGuid = {0}", guids.MsGuid); > Console.WriteLine("DBGuid = {0}", fbGuid); > Assert.AreEqual(guids.MsGuid, fbGuid); > }); > } > }}} > Execution Result: > {{{ > TestFunc : Failed > NHibernate: SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE > MSGuid = cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > DBGuid = 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > Expected: cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > But was: 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > }}} > > Best regards, > Eugenyi Vinogradnyi (aka ssdi). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-02 21:43:33
|
[ http://216.121.112.228/browse/NH-2607?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20821#action_20821 ] Fabio Maulo commented on NH-2607: --------------------------------- LOL!!! > Proxifier should not try to proxy sealed and non public methods > --------------------------------------------------------------- > > Key: NH-2607 > URL: http://216.121.112.228/browse/NH-2607 > Project: NHibernate > Issue Type: Bug > Components: ByteCode providers > Affects Versions: 3.2.0 > Reporter: Anton > Priority: Major > Fix For: 3.2.0 > > Attachments: ProxyFactory.patch > > > ProxyFactory tries to proxify "sealed" methods and non-public (internal) methods. > It cannot be done in .NET -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-02 21:41:34
|
[ http://216.121.112.228/browse/NH-2596?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20820#action_20820 ] Fabio Maulo commented on NH-2596: --------------------------------- Don't worry, there is no problem. > changes made in IPreInsert/UpdateEventListener are not persisted into DB on inherited classes > --------------------------------------------------------------------------------------------- > > Key: NH-2596 > URL: http://216.121.112.228/browse/NH-2596 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.0.0.Alpha3 > Reporter: Filip Kinsky > Priority: Major > Attachments: NHListenerTest.zip, NHListenerTest_NH31.zip > > > We're logging modification date in few of our persisted classes using simple > interface and basic IPreInsert/UpdateEventListener implementation which uses > this code to set LastModified field: > var trackable = entity as ITrackModificationDate; > if (trackable != null) > { > trackable.LastModified = DateTime.Now; > persister.SetPropertyValue(state, "LastModified", trackable.LastModified); > } > This works for basic classes without any inheritance hierarchy, but when I > map inherited classes (LastModified field implemented by the hierarchy > root) and update some property which exists just in the inherited class, the > listener is triggered, but the modified LastModified property value is not > being persisted into database. I isolated the problem and implemented > attached failing test, but I'm not able to figure out what should I do in > the listener to force NH to update the DB properly. > Test classes: > public class Thing : ITrackModificationDate > { > public virtual long Id { get; set; } > public virtual DateTime LastModified { get; set; } > } > public class InheritedThing: Thing > { > public virtual string SomeText { get; set; } > } > public class ThingMap : ClassMap<Thing> > { > public ThingMap() > { > Id(x => x.Id).GeneratedBy.Assigned(); > Map(x => x.LastModified); > } > } > public class InheritedThingMap: SubclassMap<InheritedThing> > { > public InheritedThingMap() > { > Map(x => x.SomeText); > } > } > Failing test: > [Fact] > public void InheritedThing_LastModified_Should_BeSetOnUpdate() > { > var t = new InheritedThing {Id = 1, SomeText = "aa"}; > session.Save(t); > session.Flush(); > session.Clear(); > > Thread.Sleep(1000); > t = session.Get<InheritedThing>(1L); > t.SomeText = "bb"; > session.Update(t); > session.Flush(); > session.Clear(); > > t = session.Get<InheritedThing>(1L); > Assert.True(DateTime.Now.Subtract(t.LastModified).TotalSeconds < 1); //this fails - LastModified property isn't updated in DB > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-02 21:39:30
|
[ http://216.121.112.228/browse/NH-2617?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Fabio Maulo closed NH-2617. --------------------------- Resolution: Duplicate See NH-2596 > PreUpdate event data changes on an entity which is only modified in the PreUpdate event is not persisted > -------------------------------------------------------------------------------------------------------- > > Key: NH-2617 > URL: http://216.121.112.228/browse/NH-2617 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.1.0 > Reporter: Scott Findlater > Priority: Critical > Attachments: NHibernate.Test.zip, WTF.zip > > > Overview: With NHibernate I am experimenting with a 3 layered hierarchy using joined subclasses. There is a Category, which inherits from AuditableEntity (to add PreUpdate and PreInsert audit trail), which finally inherits from an Entity. > Problem: None of the data changes to the AuditableEntity object, which are carried out exactly as Ayende's blog post, are being persisted to the database. The AuditableEntity objects properties are successfully updated by the PreUpdate code, but it is as if NHibernate is not seeing the AuditableEntity as dirty as no update sql statement occurs. > Hbm: > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="Learning" > namespace="Learning.entities"> > <class name="Entity" > > <id name="Id" type="guid"> > <generator class="guid.comb"></generator> > </id> > <version name="Version"/> > <joined-subclass name="AuditableEntity" > > <key column="AuditableEntity_id"></key> > <property name="CreatedOn" ></property> > <property name="CreatedBy" ></property> > <property name="LastModifiedOn" ></property> > <property name="LastModifiedBy" ></property> > <joined-subclass name="Category"> > <key column="AuditableEntity_id"></key> > <property name="Name" /> > </joined-subclass> > </joined-subclass> > </class> > </hibernate-mapping> > NHibernate config for listeners: > <event type="pre-insert"> > <listener class="Learning.eventlisteners.AuditInsertEventListener, Learning" /> > </event> > <event type="pre-update"> > <listener class="Learning.eventlisteners.AuditUpdateEventListener, Learning" /> > </event> > PreUpdate code: > namespace Learning.eventlisteners > { > public class AuditInsertEventListener : IPreInsertEventListener > { > public bool OnPreInsert(PreInsertEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var createdOn = DateTime.Now; > var createdBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "CreatedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "CreatedBy", createdBy); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", createdBy); > audit.CreatedOn = createdOn; > audit.CreatedBy = createdBy; > audit.LastModifiedOn = createdOn; > audit.LastModifiedBy = createdBy; > return false; > } > } > public static class AuditCommon > { > internal static void Set(IEntityPersister persister, IList<object> state, string propertyName, object value) > { > var index = Array.IndexOf(persister.PropertyNames, propertyName); > if (index == -1) > return; > state[index] = value; > } > } > public class AuditUpdateEventListener : IPreUpdateEventListener > { > public bool OnPreUpdate(PreUpdateEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var lastModifiedOn = DateTime.Now.AddSeconds(28); > var lastModifiedBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", lastModifiedOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", lastModifiedBy); > audit.LastModifiedOn = lastModifiedOn; > audit.LastModifiedBy = lastModifiedBy; > return false; > } > } > } > Code: > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > session.SaveOrUpdate(category); > transaction.Commit(); > } > An observation: if I manually update just one of the AuditableEntity properties before calling SaveOrUpdate, the PreUpdate event is obviously fired and appropriate data changes are made, and then the AuditableEntity data IS persisted to the database. > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > category.CreatedOn = DateTime.Now; > session.SaveOrUpdate(category); > transaction.Commit(); > } > So I believe there to be a bug where NHibernate is not seeing an entity as dirty if it is only updated in the PreUpdate handler. > Posted on StackOverflow http://stackoverflow.com/questions/5502748/nhibernate-joined-subclass-hierarchy-preupdate-event-data-changes-on-an-entity -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Fabio M. (JIRA) <nh...@gm...> - 2011-04-02 21:31:37
|
[ http://216.121.112.228/browse/NH-2618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20818#action_20818 ] Fabio Maulo commented on NH-2618: --------------------------------- The responsibility about how store a DbType.Guid is by the .NET FB's data-provider not by NH > FireBird GUID Type coversion error > ---------------------------------- > > Key: NH-2618 > URL: http://216.121.112.228/browse/NH-2618 > Project: NHibernate > Issue Type: Bug > Components: DataProviders / Dialects > Affects Versions: 3.0.0.GA > Reporter: Eugenyi Vinogradnyi > Priority: Major > > Firebird 2.5 store Uuid into left to right convetion as "CHAR(16) CHARACTER SET OCTETS" (see http://www.firebirdfaq.org/faq98/). But NHibernate into GuidType constructs System.Guid with System.Guid(byte[]) constructor, but System.GuidType shoul be constructed with Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) for correct representation. Also see Firebird 2.5 embeded fuctions UUID_TO_CHAR() and CHAR_TO_UUID(). > System.Guid reflection: > {{{ > // Creates a new guid from an array of bytes. > // > public Guid(byte[] b) > { > if (b==null) > throw new ArgumentNullException("b"); > if (b.Length != 16) > throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_GuidArrayCtor"), "16")); > > _a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0]; > _b = (short)(((int)b[5] << 8) | b[4]); > _c = (short)(((int)b[7] << 8) | b[6]); > _d = b[8]; > _e = b[9]; > _f = b[10]; > _g = b[11]; > _h = b[12]; > _i = b[13]; > _j = b[14]; > _k = b[15]; > } > // Creates a new GUID initialized to the value represented by the > // arguments. The bytes are specified like this to avoid endianness issues. > // > public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) > { > _a = a; > _b = b; > _c = c; > _d = d; > _e = e; > _f = f; > _g = g; > _h = h; > _i = i; > _j = j; > _k = k; > } > }}} > Database SQL script example: > {{{ > CREATE DOMAIN FGUID_D_KEY AS CHAR(16) CHARACTER SET OCTETS NOT NULL; > CREATE DOMAIN FGUID_D AS CHAR(16) CHARACTER SET OCTETS; > CREATE TABLE SYSTEM$DATABASE ( > SYSTEM_GUID FGUID_D_KEY, > SUBSYSTEM_GUID FGUID_D_KEY > ); > SET TERM ^ ; > CREATE OR ALTER TRIGGER SYSTEM$DATABASE_BI0 FOR SYSTEM$DATABASE > ACTIVE BEFORE INSERT POSITION 0 > AS > BEGIN > /* Gen SYSTEM_GUID if not defined */ > IF (NEW.SYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SYSTEM_GUID = GEN_UUID(); > END > /* Gen SUBSYSTEM_GUID if not defined */ > IF (NEW.SUBSYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SUBSYSTEM_GUID = GEN_UUID(); > END > END > ^ > SET TERM ; ^ > INSERT INTO SYSTEM$DATABASE (SYSTEM_GUID, SUBSYSTEM_GUID) VALUES (NULL, NULL); > }}} > Symbolic example of NUnit test: > {{{ > ... > private class Guids > { > public Guid MsGuid { get; set; } > public string FbStrGuid { get; set; } > } > [Test] > public void TestFunc() > { > tempDbWrapper.WrapSession( > session => > { > var guids = > session.CreateSQLQuery( > "SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE") > .SetResultTransformer( > new FuzzyAliasToBeanResultTransformer<Guids>() > .AddBeanProp("SYSTEM_GUID", "MsGuid") > .AddBeanProp("SYSTEM_GUID2", "FbStrGuid")) > .UniqueResult<Guids>(); > var fbGuid = new Guid(guids.FbStrGuid); > Console.WriteLine("MSGuid = {0}", guids.MsGuid); > Console.WriteLine("DBGuid = {0}", fbGuid); > Assert.AreEqual(guids.MsGuid, fbGuid); > }); > } > }}} > Execution Result: > {{{ > TestFunc : Failed > NHibernate: SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE > MSGuid = cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > DBGuid = 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > Expected: cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > But was: 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > }}} > > Best regards, > Eugenyi Vinogradnyi (aka ssdi). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Eugenyi V. (JIRA) <nh...@gm...> - 2011-04-02 14:02:33
|
[ http://216.121.112.228/browse/NH-2618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=20817#action_20817 ] Eugenyi Vinogradnyi commented on NH-2618: ----------------------------------------- See also [#NH-677] and [#NH-1000]. > FireBird GUID Type coversion error > ---------------------------------- > > Key: NH-2618 > URL: http://216.121.112.228/browse/NH-2618 > Project: NHibernate > Issue Type: Bug > Components: DataProviders / Dialects > Affects Versions: 3.0.0.GA > Reporter: Eugenyi Vinogradnyi > Priority: Major > > Firebird 2.5 store Uuid into left to right convetion as "CHAR(16) CHARACTER SET OCTETS" (see http://www.firebirdfaq.org/faq98/). But NHibernate into GuidType constructs System.Guid with System.Guid(byte[]) constructor, but System.GuidType shoul be constructed with Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) for correct representation. Also see Firebird 2.5 embeded fuctions UUID_TO_CHAR() and CHAR_TO_UUID(). > System.Guid reflection: > {{{ > // Creates a new guid from an array of bytes. > // > public Guid(byte[] b) > { > if (b==null) > throw new ArgumentNullException("b"); > if (b.Length != 16) > throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_GuidArrayCtor"), "16")); > > _a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0]; > _b = (short)(((int)b[5] << 8) | b[4]); > _c = (short)(((int)b[7] << 8) | b[6]); > _d = b[8]; > _e = b[9]; > _f = b[10]; > _g = b[11]; > _h = b[12]; > _i = b[13]; > _j = b[14]; > _k = b[15]; > } > // Creates a new GUID initialized to the value represented by the > // arguments. The bytes are specified like this to avoid endianness issues. > // > public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) > { > _a = a; > _b = b; > _c = c; > _d = d; > _e = e; > _f = f; > _g = g; > _h = h; > _i = i; > _j = j; > _k = k; > } > }}} > Database SQL script example: > {{{ > CREATE DOMAIN FGUID_D_KEY AS CHAR(16) CHARACTER SET OCTETS NOT NULL; > CREATE DOMAIN FGUID_D AS CHAR(16) CHARACTER SET OCTETS; > CREATE TABLE SYSTEM$DATABASE ( > SYSTEM_GUID FGUID_D_KEY, > SUBSYSTEM_GUID FGUID_D_KEY > ); > SET TERM ^ ; > CREATE OR ALTER TRIGGER SYSTEM$DATABASE_BI0 FOR SYSTEM$DATABASE > ACTIVE BEFORE INSERT POSITION 0 > AS > BEGIN > /* Gen SYSTEM_GUID if not defined */ > IF (NEW.SYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SYSTEM_GUID = GEN_UUID(); > END > /* Gen SUBSYSTEM_GUID if not defined */ > IF (NEW.SUBSYSTEM_GUID IS NULL) THEN > BEGIN > NEW.SUBSYSTEM_GUID = GEN_UUID(); > END > END > ^ > SET TERM ; ^ > INSERT INTO SYSTEM$DATABASE (SYSTEM_GUID, SUBSYSTEM_GUID) VALUES (NULL, NULL); > }}} > Symbolic example of NUnit test: > {{{ > ... > private class Guids > { > public Guid MsGuid { get; set; } > public string FbStrGuid { get; set; } > } > [Test] > public void TestFunc() > { > tempDbWrapper.WrapSession( > session => > { > var guids = > session.CreateSQLQuery( > "SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE") > .SetResultTransformer( > new FuzzyAliasToBeanResultTransformer<Guids>() > .AddBeanProp("SYSTEM_GUID", "MsGuid") > .AddBeanProp("SYSTEM_GUID2", "FbStrGuid")) > .UniqueResult<Guids>(); > var fbGuid = new Guid(guids.FbStrGuid); > Console.WriteLine("MSGuid = {0}", guids.MsGuid); > Console.WriteLine("DBGuid = {0}", fbGuid); > Assert.AreEqual(guids.MsGuid, fbGuid); > }); > } > }}} > Execution Result: > {{{ > TestFunc : Failed > NHibernate: SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE > MSGuid = cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > DBGuid = 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > Expected: cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 > But was: 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 > }}} > > Best regards, > Eugenyi Vinogradnyi (aka ssdi). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Eugenyi V. (JIRA) <nh...@gm...> - 2011-04-02 13:53:30
|
FireBird GUID Type coversion error ---------------------------------- Key: NH-2618 URL: http://216.121.112.228/browse/NH-2618 Project: NHibernate Issue Type: Bug Components: DataProviders / Dialects Affects Versions: 3.0.0.GA Reporter: Eugenyi Vinogradnyi Priority: Major Firebird 2.5 store Uuid into left to right convetion as "CHAR(16) CHARACTER SET OCTETS" (see http://www.firebirdfaq.org/faq98/). But NHibernate into GuidType constructs System.Guid with System.Guid(byte[]) constructor, but System.GuidType shoul be constructed with Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) for correct representation. Also see Firebird 2.5 embeded fuctions UUID_TO_CHAR() and CHAR_TO_UUID(). System.Guid reflection: {{{ // Creates a new guid from an array of bytes. // public Guid(byte[] b) { if (b==null) throw new ArgumentNullException("b"); if (b.Length != 16) throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Arg_GuidArrayCtor"), "16")); _a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0]; _b = (short)(((int)b[5] << 8) | b[4]); _c = (short)(((int)b[7] << 8) | b[6]); _d = b[8]; _e = b[9]; _f = b[10]; _g = b[11]; _h = b[12]; _i = b[13]; _j = b[14]; _k = b[15]; } // Creates a new GUID initialized to the value represented by the // arguments. The bytes are specified like this to avoid endianness issues. // public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k) { _a = a; _b = b; _c = c; _d = d; _e = e; _f = f; _g = g; _h = h; _i = i; _j = j; _k = k; } }}} Database SQL script example: {{{ CREATE DOMAIN FGUID_D_KEY AS CHAR(16) CHARACTER SET OCTETS NOT NULL; CREATE DOMAIN FGUID_D AS CHAR(16) CHARACTER SET OCTETS; CREATE TABLE SYSTEM$DATABASE ( SYSTEM_GUID FGUID_D_KEY, SUBSYSTEM_GUID FGUID_D_KEY ); SET TERM ^ ; CREATE OR ALTER TRIGGER SYSTEM$DATABASE_BI0 FOR SYSTEM$DATABASE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN /* Gen SYSTEM_GUID if not defined */ IF (NEW.SYSTEM_GUID IS NULL) THEN BEGIN NEW.SYSTEM_GUID = GEN_UUID(); END /* Gen SUBSYSTEM_GUID if not defined */ IF (NEW.SUBSYSTEM_GUID IS NULL) THEN BEGIN NEW.SUBSYSTEM_GUID = GEN_UUID(); END END ^ SET TERM ; ^ INSERT INTO SYSTEM$DATABASE (SYSTEM_GUID, SUBSYSTEM_GUID) VALUES (NULL, NULL); }}} Symbolic example of NUnit test: {{{ ... private class Guids { public Guid MsGuid { get; set; } public string FbStrGuid { get; set; } } [Test] public void TestFunc() { tempDbWrapper.WrapSession( session => { var guids = session.CreateSQLQuery( "SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE") .SetResultTransformer( new FuzzyAliasToBeanResultTransformer<Guids>() .AddBeanProp("SYSTEM_GUID", "MsGuid") .AddBeanProp("SYSTEM_GUID2", "FbStrGuid")) .UniqueResult<Guids>(); var fbGuid = new Guid(guids.FbStrGuid); Console.WriteLine("MSGuid = {0}", guids.MsGuid); Console.WriteLine("DBGuid = {0}", fbGuid); Assert.AreEqual(guids.MsGuid, fbGuid); }); } }}} Execution Result: {{{ TestFunc : Failed NHibernate: SELECT SYSTEM_GUID, UUID_TO_CHAR(SYSTEM_GUID) AS SYSTEM_GUID2 FROM SYSTEM$DATABASE MSGuid = cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 DBGuid = 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 Expected: cbe4709d-5cea-4078-b1f5-2adabdcdb1f7 But was: 9d70e4cb-ea5c-7840-b1f5-2adabdcdb1f7 }}} Best regards, Eugenyi Vinogradnyi (aka ssdi). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Roger (JIRA) <nh...@gm...> - 2011-04-01 22:05:25
|
[ http://216.121.112.228/browse/NHE-1?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Roger resolved NHE-1. --------------------- Resolution: Fixed Fix Version/s: 1.0 Beta 1 Ported > Port audit strategy > ------------------- > > Key: NHE-1 > URL: http://216.121.112.228/browse/NHE-1 > Project: NHibernate.Envers > Issue Type: New Feature > Components: Core > Affects Versions: 1.0 alpha 1 > Reporter: Roger > Assignee: Roger > Priority: Minor > Fix For: 1.0 Beta 1 > > > Port audit strategy from (Hibernate) Envers. > Info here > http://opensource.atlassian.com/projects/hibernate/browse/HHH-3763 > http://opensource.atlassian.com/projects/hibernate/browse/HHH-5372 > http://docs.jboss.org/hibernate/envers/3.6/reference/en-US/html_single/#config-audit-strategy -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Scott F. (JIRA) <nh...@gm...> - 2011-04-01 21:25:25
|
[ http://216.121.112.228/browse/NH-2617?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Scott Findlater updated NH-2617: -------------------------------- Attachment: WTF.zip > PreUpdate event data changes on an entity which is only modified in the PreUpdate event is not persisted > -------------------------------------------------------------------------------------------------------- > > Key: NH-2617 > URL: http://216.121.112.228/browse/NH-2617 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.1.0 > Reporter: Scott Findlater > Priority: Critical > Attachments: NHibernate.Test.zip, WTF.zip > > > Overview: With NHibernate I am experimenting with a 3 layered hierarchy using joined subclasses. There is a Category, which inherits from AuditableEntity (to add PreUpdate and PreInsert audit trail), which finally inherits from an Entity. > Problem: None of the data changes to the AuditableEntity object, which are carried out exactly as Ayende's blog post, are being persisted to the database. The AuditableEntity objects properties are successfully updated by the PreUpdate code, but it is as if NHibernate is not seeing the AuditableEntity as dirty as no update sql statement occurs. > Hbm: > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="Learning" > namespace="Learning.entities"> > <class name="Entity" > > <id name="Id" type="guid"> > <generator class="guid.comb"></generator> > </id> > <version name="Version"/> > <joined-subclass name="AuditableEntity" > > <key column="AuditableEntity_id"></key> > <property name="CreatedOn" ></property> > <property name="CreatedBy" ></property> > <property name="LastModifiedOn" ></property> > <property name="LastModifiedBy" ></property> > <joined-subclass name="Category"> > <key column="AuditableEntity_id"></key> > <property name="Name" /> > </joined-subclass> > </joined-subclass> > </class> > </hibernate-mapping> > NHibernate config for listeners: > <event type="pre-insert"> > <listener class="Learning.eventlisteners.AuditInsertEventListener, Learning" /> > </event> > <event type="pre-update"> > <listener class="Learning.eventlisteners.AuditUpdateEventListener, Learning" /> > </event> > PreUpdate code: > namespace Learning.eventlisteners > { > public class AuditInsertEventListener : IPreInsertEventListener > { > public bool OnPreInsert(PreInsertEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var createdOn = DateTime.Now; > var createdBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "CreatedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "CreatedBy", createdBy); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", createdBy); > audit.CreatedOn = createdOn; > audit.CreatedBy = createdBy; > audit.LastModifiedOn = createdOn; > audit.LastModifiedBy = createdBy; > return false; > } > } > public static class AuditCommon > { > internal static void Set(IEntityPersister persister, IList<object> state, string propertyName, object value) > { > var index = Array.IndexOf(persister.PropertyNames, propertyName); > if (index == -1) > return; > state[index] = value; > } > } > public class AuditUpdateEventListener : IPreUpdateEventListener > { > public bool OnPreUpdate(PreUpdateEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var lastModifiedOn = DateTime.Now.AddSeconds(28); > var lastModifiedBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", lastModifiedOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", lastModifiedBy); > audit.LastModifiedOn = lastModifiedOn; > audit.LastModifiedBy = lastModifiedBy; > return false; > } > } > } > Code: > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > session.SaveOrUpdate(category); > transaction.Commit(); > } > An observation: if I manually update just one of the AuditableEntity properties before calling SaveOrUpdate, the PreUpdate event is obviously fired and appropriate data changes are made, and then the AuditableEntity data IS persisted to the database. > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > category.CreatedOn = DateTime.Now; > session.SaveOrUpdate(category); > transaction.Commit(); > } > So I believe there to be a bug where NHibernate is not seeing an entity as dirty if it is only updated in the PreUpdate handler. > Posted on StackOverflow http://stackoverflow.com/questions/5502748/nhibernate-joined-subclass-hierarchy-preupdate-event-data-changes-on-an-entity -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Scott F. (JIRA) <nh...@gm...> - 2011-04-01 21:22:26
|
[ http://216.121.112.228/browse/NH-2617?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Scott Findlater updated NH-2617: -------------------------------- Attachment: NHibernate.Test.zip Hi, I have tried to follow the NHibernate.Tests project in order to submit a test case to show this error. I am not too sure I have done the right thing - this is my first interation with an open source project. As such I have uploaded a second zip file which contains a simple solution to demonstrate what I think is a bug. Kind regards, Scott. > PreUpdate event data changes on an entity which is only modified in the PreUpdate event is not persisted > -------------------------------------------------------------------------------------------------------- > > Key: NH-2617 > URL: http://216.121.112.228/browse/NH-2617 > Project: NHibernate > Issue Type: Bug > Components: Core > Affects Versions: 3.1.0 > Reporter: Scott Findlater > Priority: Critical > Attachments: NHibernate.Test.zip > > > Overview: With NHibernate I am experimenting with a 3 layered hierarchy using joined subclasses. There is a Category, which inherits from AuditableEntity (to add PreUpdate and PreInsert audit trail), which finally inherits from an Entity. > Problem: None of the data changes to the AuditableEntity object, which are carried out exactly as Ayende's blog post, are being persisted to the database. The AuditableEntity objects properties are successfully updated by the PreUpdate code, but it is as if NHibernate is not seeing the AuditableEntity as dirty as no update sql statement occurs. > Hbm: > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" > assembly="Learning" > namespace="Learning.entities"> > <class name="Entity" > > <id name="Id" type="guid"> > <generator class="guid.comb"></generator> > </id> > <version name="Version"/> > <joined-subclass name="AuditableEntity" > > <key column="AuditableEntity_id"></key> > <property name="CreatedOn" ></property> > <property name="CreatedBy" ></property> > <property name="LastModifiedOn" ></property> > <property name="LastModifiedBy" ></property> > <joined-subclass name="Category"> > <key column="AuditableEntity_id"></key> > <property name="Name" /> > </joined-subclass> > </joined-subclass> > </class> > </hibernate-mapping> > NHibernate config for listeners: > <event type="pre-insert"> > <listener class="Learning.eventlisteners.AuditInsertEventListener, Learning" /> > </event> > <event type="pre-update"> > <listener class="Learning.eventlisteners.AuditUpdateEventListener, Learning" /> > </event> > PreUpdate code: > namespace Learning.eventlisteners > { > public class AuditInsertEventListener : IPreInsertEventListener > { > public bool OnPreInsert(PreInsertEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var createdOn = DateTime.Now; > var createdBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "CreatedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "CreatedBy", createdBy); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", createdOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", createdBy); > audit.CreatedOn = createdOn; > audit.CreatedBy = createdBy; > audit.LastModifiedOn = createdOn; > audit.LastModifiedBy = createdBy; > return false; > } > } > public static class AuditCommon > { > internal static void Set(IEntityPersister persister, IList<object> state, string propertyName, object value) > { > var index = Array.IndexOf(persister.PropertyNames, propertyName); > if (index == -1) > return; > state[index] = value; > } > } > public class AuditUpdateEventListener : IPreUpdateEventListener > { > public bool OnPreUpdate(PreUpdateEvent @event) > { > var audit = @event.Entity as IAuditable; > if (audit == null) > return false; > var lastModifiedOn = DateTime.Now.AddSeconds(28); > var lastModifiedBy = loggedOnProfile; > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", lastModifiedOn); > AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", lastModifiedBy); > audit.LastModifiedOn = lastModifiedOn; > audit.LastModifiedBy = lastModifiedBy; > return false; > } > } > } > Code: > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > session.SaveOrUpdate(category); > transaction.Commit(); > } > An observation: if I manually update just one of the AuditableEntity properties before calling SaveOrUpdate, the PreUpdate event is obviously fired and appropriate data changes are made, and then the AuditableEntity data IS persisted to the database. > using (var session = SessionFactory.OpenSession()) > using (var transaction = session.BeginTransaction()) > { > var category = session.Query<Category>().First(); > category.Name = "Updated"; > category.CreatedOn = DateTime.Now; > session.SaveOrUpdate(category); > transaction.Commit(); > } > So I believe there to be a bug where NHibernate is not seeing an entity as dirty if it is only updated in the PreUpdate handler. > Posted on StackOverflow http://stackoverflow.com/questions/5502748/nhibernate-joined-subclass-hierarchy-preupdate-event-data-changes-on-an-entity -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Scott F. (JIRA) <nh...@gm...> - 2011-04-01 21:07:26
|
PreUpdate event data changes on an entity which is only modified in the PreUpdate event is not persisted -------------------------------------------------------------------------------------------------------- Key: NH-2617 URL: http://216.121.112.228/browse/NH-2617 Project: NHibernate Issue Type: Bug Components: Core Affects Versions: 3.1.0 Reporter: Scott Findlater Priority: Critical Overview: With NHibernate I am experimenting with a 3 layered hierarchy using joined subclasses. There is a Category, which inherits from AuditableEntity (to add PreUpdate and PreInsert audit trail), which finally inherits from an Entity. Problem: None of the data changes to the AuditableEntity object, which are carried out exactly as Ayende's blog post, are being persisted to the database. The AuditableEntity objects properties are successfully updated by the PreUpdate code, but it is as if NHibernate is not seeing the AuditableEntity as dirty as no update sql statement occurs. Hbm: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Learning" namespace="Learning.entities"> <class name="Entity" > <id name="Id" type="guid"> <generator class="guid.comb"></generator> </id> <version name="Version"/> <joined-subclass name="AuditableEntity" > <key column="AuditableEntity_id"></key> <property name="CreatedOn" ></property> <property name="CreatedBy" ></property> <property name="LastModifiedOn" ></property> <property name="LastModifiedBy" ></property> <joined-subclass name="Category"> <key column="AuditableEntity_id"></key> <property name="Name" /> </joined-subclass> </joined-subclass> </class> </hibernate-mapping> NHibernate config for listeners: <event type="pre-insert"> <listener class="Learning.eventlisteners.AuditInsertEventListener, Learning" /> </event> <event type="pre-update"> <listener class="Learning.eventlisteners.AuditUpdateEventListener, Learning" /> </event> PreUpdate code: namespace Learning.eventlisteners { public class AuditInsertEventListener : IPreInsertEventListener { public bool OnPreInsert(PreInsertEvent @event) { var audit = @event.Entity as IAuditable; if (audit == null) return false; var createdOn = DateTime.Now; var createdBy = loggedOnProfile; AuditCommon.Set(@event.Persister, @event.State, "CreatedOn", createdOn); AuditCommon.Set(@event.Persister, @event.State, "CreatedBy", createdBy); AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", createdOn); AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", createdBy); audit.CreatedOn = createdOn; audit.CreatedBy = createdBy; audit.LastModifiedOn = createdOn; audit.LastModifiedBy = createdBy; return false; } } public static class AuditCommon { internal static void Set(IEntityPersister persister, IList<object> state, string propertyName, object value) { var index = Array.IndexOf(persister.PropertyNames, propertyName); if (index == -1) return; state[index] = value; } } public class AuditUpdateEventListener : IPreUpdateEventListener { public bool OnPreUpdate(PreUpdateEvent @event) { var audit = @event.Entity as IAuditable; if (audit == null) return false; var lastModifiedOn = DateTime.Now.AddSeconds(28); var lastModifiedBy = loggedOnProfile; AuditCommon.Set(@event.Persister, @event.State, "LastModifiedOn", lastModifiedOn); AuditCommon.Set(@event.Persister, @event.State, "LastModifiedBy", lastModifiedBy); audit.LastModifiedOn = lastModifiedOn; audit.LastModifiedBy = lastModifiedBy; return false; } } } Code: using (var session = SessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { var category = session.Query<Category>().First(); category.Name = "Updated"; session.SaveOrUpdate(category); transaction.Commit(); } An observation: if I manually update just one of the AuditableEntity properties before calling SaveOrUpdate, the PreUpdate event is obviously fired and appropriate data changes are made, and then the AuditableEntity data IS persisted to the database. using (var session = SessionFactory.OpenSession()) using (var transaction = session.BeginTransaction()) { var category = session.Query<Category>().First(); category.Name = "Updated"; category.CreatedOn = DateTime.Now; session.SaveOrUpdate(category); transaction.Commit(); } So I believe there to be a bug where NHibernate is not seeing an entity as dirty if it is only updated in the PreUpdate handler. Posted on StackOverflow http://stackoverflow.com/questions/5502748/nhibernate-joined-subclass-hierarchy-preupdate-event-data-changes-on-an-entity -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Patrick E. (JIRA) <nh...@gm...> - 2011-04-01 17:11:54
|
Support Trim() function in Linq ------------------------------- Key: NH-2616 URL: http://216.121.112.228/browse/NH-2616 Project: NHibernate Issue Type: New Feature Components: Linq Provider Affects Versions: 3.1.0 Reporter: Patrick Earl Assignee: Patrick Earl -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://216.121.112.228/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |