You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(248) |
May
(82) |
Jun
(90) |
Jul
(177) |
Aug
(253) |
Sep
(157) |
Oct
(151) |
Nov
(143) |
Dec
(278) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(152) |
Feb
(107) |
Mar
(177) |
Apr
(133) |
May
(259) |
Jun
(81) |
Jul
(119) |
Aug
(306) |
Sep
(416) |
Oct
(240) |
Nov
(329) |
Dec
(206) |
2006 |
Jan
(466) |
Feb
(382) |
Mar
(153) |
Apr
(162) |
May
(133) |
Jun
(21) |
Jul
(18) |
Aug
(37) |
Sep
(97) |
Oct
(114) |
Nov
(110) |
Dec
(28) |
2007 |
Jan
(74) |
Feb
(65) |
Mar
(49) |
Apr
(76) |
May
(43) |
Jun
(15) |
Jul
(68) |
Aug
(55) |
Sep
(63) |
Oct
(59) |
Nov
(70) |
Dec
(66) |
2008 |
Jan
(71) |
Feb
(60) |
Mar
(120) |
Apr
(31) |
May
(48) |
Jun
(81) |
Jul
(107) |
Aug
(51) |
Sep
(80) |
Oct
(83) |
Nov
(83) |
Dec
(79) |
2009 |
Jan
(83) |
Feb
(110) |
Mar
(97) |
Apr
(91) |
May
(291) |
Jun
(250) |
Jul
(197) |
Aug
(58) |
Sep
(54) |
Oct
(122) |
Nov
(68) |
Dec
(34) |
2010 |
Jan
(50) |
Feb
(17) |
Mar
(63) |
Apr
(61) |
May
(84) |
Jun
(81) |
Jul
(138) |
Aug
(144) |
Sep
(78) |
Oct
(26) |
Nov
(30) |
Dec
(61) |
2011 |
Jan
(33) |
Feb
(35) |
Mar
(166) |
Apr
(221) |
May
(109) |
Jun
(76) |
Jul
(27) |
Aug
(37) |
Sep
(1) |
Oct
(4) |
Nov
(2) |
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
(2) |
Apr
(2) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(3) |
Oct
(2) |
Nov
|
Dec
(1) |
2014 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <fab...@us...> - 2009-02-21 03:59:28
|
Revision: 4094 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4094&view=rev Author: fabiomaulo Date: 2009-02-21 03:59:26 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Fix NH-1684 (tests are included in tests for union-subclass) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2009-02-21 03:47:19 UTC (rev 4093) +++ trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2009-02-21 03:59:26 UTC (rev 4094) @@ -459,5 +459,10 @@ { return new MsSqlDataBaseSchema(connection); } + + public override bool SupportsUnionAll + { + get { return true; } + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-21 03:47:21
|
Revision: 4093 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4093&view=rev Author: fabiomaulo Date: 2009-02-21 03:47:19 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Fix NH-1668 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Driver/IngresDriver.cs Modified: trunk/nhibernate/src/NHibernate/Driver/IngresDriver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/IngresDriver.cs 2009-02-21 03:16:40 UTC (rev 4092) +++ trunk/nhibernate/src/NHibernate/Driver/IngresDriver.cs 2009-02-21 03:47:19 UTC (rev 4093) @@ -9,27 +9,18 @@ /// </remarks> public class IngresDriver : ReflectionBasedDriver { - /// <summary></summary> - public IngresDriver() : base( - "Ca.Ingres.Client", - "Ca.Ingres.Client.IngresConnection", - "Ca.Ingres.Client.IngresCommand") - { - } + public IngresDriver() : base("Ingres.Client", "Ingres.Client.IngresConnection", "Ingres.Client.IngresCommand") {} - /// <summary></summary> public override bool UseNamedPrefixInSql { get { return false; } } - /// <summary></summary> public override bool UseNamedPrefixInParameter { get { return false; } } - /// <summary></summary> public override string NamedPrefix { get { return String.Empty; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-21 03:16:43
|
Revision: 4092 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4092&view=rev Author: fabiomaulo Date: 2009-02-21 03:16:40 +0000 (Sat, 21 Feb 2009) Log Message: ----------- The other test for the same fixed issue (fixed in the last commit) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs 2009-02-21 03:05:27 UTC (rev 4091) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs 2009-02-21 03:16:40 UTC (rev 4092) @@ -1,14 +1,12 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; using System.Data; -using System.Text; +using NHibernate.Cfg; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH1677 { - [TestFixture,Ignore] - public class EntityModeMapCriteria:BugTestCase + [TestFixture] + public class EntityModeMapCriteria : BugTestCase { private const int NumberOfRecordPerEntity = 10; private const string Entity1Name = "Entity1"; @@ -17,18 +15,17 @@ private const string Entity2Property = "Entity2Property"; private const string EntityPropertyPrefix = "Record"; - protected override void Configure(NHibernate.Cfg.Configuration configuration) + protected override void Configure(Configuration configuration) { base.Configure(configuration); - configuration.SetProperty("default_entity_mode", - EntityModeHelper.ToString(EntityMode.Map)); + configuration.SetProperty("default_entity_mode", EntityModeHelper.ToString(EntityMode.Map)); } protected override void OnSetUp() { - using (var s = OpenSession()) + using (ISession s = OpenSession()) { - using (var tx = s.BeginTransaction(IsolationLevel.ReadCommitted)) + using (ITransaction tx = s.BeginTransaction(IsolationLevel.ReadCommitted)) { for (int i = 0; i < NumberOfRecordPerEntity; i++) { @@ -47,39 +44,39 @@ } } } + protected override void OnTearDown() { - using(var s=OpenSession()) + using (ISession s = OpenSession()) { - using(var tx=s.BeginTransaction()) + using (ITransaction tx = s.BeginTransaction()) { s.Delete(string.Format("from {0}", Entity1Name)); + s.Delete(string.Format("from {0}", Entity2Name)); tx.Commit(); } - } } + [Test] public void EntityModeMapFailsWithCriteria() { - using (var sf = cfg.BuildSessionFactory()) + using (ISessionFactory sf = cfg.BuildSessionFactory()) { - - using (var s = sf.OpenSession()) + using (ISession s = sf.OpenSession()) { - var query = s.CreateQuery(string.Format("from {0}", Entity1Name)); - var entity1List = query.List(); - Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // OK, Count == 10 + IQuery query = s.CreateQuery(string.Format("from {0}", Entity1Name)); + IList entity1List = query.List(); + Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // OK, Count == 10 } - using (var s = sf.OpenSession()) + using (ISession s = sf.OpenSession()) { - var entity1Criteria = s.CreateCriteria(Entity1Name); - var entity1List = entity1Criteria.List(); - Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // KO !!! Count == 20 !!! + ICriteria entity1Criteria = s.CreateCriteria(Entity1Name); + IList entity1List = entity1Criteria.List(); + Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // KO !!! Count == 20 !!! } } } } - -} +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-21 03:05:30
|
Revision: 4091 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4091&view=rev Author: fabiomaulo Date: 2009-02-21 03:05:27 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Fix NH-1677 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs trunk/nhibernate/src/NHibernate.Test/EntityModeTest/Map/Basic/DynamicClassFixture.cs Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-02-20 20:18:28 UTC (rev 4090) +++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-02-21 03:05:27 UTC (rev 4091) @@ -583,26 +583,37 @@ public string[] GetImplementors(string className) { System.Type clazz = null; - // NH Different implementation: we have better performance checking, first of all, if we know the class - // and take the System.Type directly from the persister (className have high probability to be entityName) - IEntityPersister checkPersister; - if (entityPersisters.TryGetValue(className, out checkPersister)) - { - clazz = checkPersister.GetMappedClass(EntityMode.Poco); - } - if (clazz == null) + // NH Different implementation for performance: a class without at least a namespace sure can't be found by reflection + if (className.IndexOf('.') > 0) { - try + IEntityPersister checkPersister; + // NH Different implementation: we have better performance checking, first of all, if we know the class + // and take the System.Type directly from the persister (className have high probability to be entityName) + if (entityPersisters.TryGetValue(className, out checkPersister)) { - clazz = ReflectHelper.ClassForFullName(className); + // NH : take care with this because we are forcing the Poco EntityMode + clazz = checkPersister.GetMappedClass(EntityMode.Poco); } - catch (Exception) + + if (clazz == null) { - return new string[] {className}; //for a dynamic-class + try + { + clazz = ReflectHelper.ClassForFullName(className); + } + catch (Exception) + { + clazz = null; + } } } + if (clazz == null) + { + return new[] {className}; //for a dynamic-class + } + List<string> results = new List<string>(); foreach (IEntityPersister p in entityPersisters.Values) { Modified: trunk/nhibernate/src/NHibernate.Test/EntityModeTest/Map/Basic/DynamicClassFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/EntityModeTest/Map/Basic/DynamicClassFixture.cs 2009-02-20 20:18:28 UTC (rev 4090) +++ trunk/nhibernate/src/NHibernate.Test/EntityModeTest/Map/Basic/DynamicClassFixture.cs 2009-02-21 03:05:27 UTC (rev 4091) @@ -3,6 +3,7 @@ using NHibernate.Cfg; using NHibernate.Engine; using NUnit.Framework; +using NHibernate.Criterion; namespace NHibernate.Test.EntityModeTest.Map.Basic { @@ -24,13 +25,30 @@ configuration.SetProperty(Environment.DefaultEntityMode, EntityModeHelper.ToString(EntityMode.Map)); } + public delegate IDictionary SingleCarQueryDelegate(ISession session); + public delegate IList AllModelQueryDelegate(ISession session); + [Test] - public void TestLazyDynamicClass() + public void ShouldWorkWithHQL() { + TestLazyDynamicClass(s => (IDictionary) s.CreateQuery("from ProductLine pl order by pl.Description").UniqueResult(), + s => s.CreateQuery("from Model m").List()); + } + + [Test] + public void ShouldWorkWithCriteria() + { + TestLazyDynamicClass( + s => (IDictionary) s.CreateCriteria("ProductLine").AddOrder(Order.Asc("Description")).UniqueResult(), + s => s.CreateCriteria("Model").List()); + } + + public void TestLazyDynamicClass(SingleCarQueryDelegate singleCarQueryHandler, AllModelQueryDelegate allModelQueryHandler) + { ITransaction t; - using(ISession s = OpenSession()) + using (ISession s = OpenSession()) { - ISessionImplementor si = (ISessionImplementor) s; + var si = (ISessionImplementor)s; Assert.IsTrue(si.EntityMode == EntityMode.Map, "Incorrectly handled default_entity_mode"); ISession other = s.GetSession(EntityMode.Poco); other.Close(); @@ -55,9 +73,7 @@ hsv["Name"] = "hsv"; hsv["Description"] = "Holden hsv"; - models = new List<IDictionary>(); - models.Add(monaro); - models.Add(hsv); + models = new List<IDictionary> {monaro, hsv}; cars["Models"] = models; @@ -68,19 +84,19 @@ using (ISession s = OpenSession()) { t = s.BeginTransaction(); - cars = (IDictionary) s.CreateQuery("from ProductLine pl order by pl.Description").UniqueResult(); - models = (IList) cars["Models"]; + cars = singleCarQueryHandler(s); + models = (IList)cars["Models"]; Assert.IsFalse(NHibernateUtil.IsInitialized(models)); Assert.AreEqual(2, models.Count); Assert.IsTrue(NHibernateUtil.IsInitialized(models)); s.Clear(); - IList list = s.CreateQuery("from Model m").List(); + IList list = allModelQueryHandler(s); foreach (IDictionary ht in list) { Assert.IsFalse(NHibernateUtil.IsInitialized(ht["ProductLine"])); } - IDictionary model = (IDictionary) list[0]; - Assert.IsTrue(((IList) ((IDictionary) model["ProductLine"])["Models"]).Contains(model)); + var model = (IDictionary)list[0]; + Assert.IsTrue(((IList)((IDictionary)model["ProductLine"])["Models"]).Contains(model)); s.Clear(); t.Commit(); @@ -89,7 +105,7 @@ using (ISession s = OpenSession()) { t = s.BeginTransaction(); - cars = (IDictionary) s.CreateQuery("from ProductLine pl order by pl.Description").UniqueResult(); + cars = singleCarQueryHandler(s); s.Delete(cars); t.Commit(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-20 20:18:33
|
Revision: 4090 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4090&view=rev Author: fabiomaulo Date: 2009-02-20 20:18:28 +0000 (Fri, 20 Feb 2009) Log Message: ----------- Fix NH-1678 and NH-1686 Possible breaking change (see release notes) Modified Paths: -------------- trunk/nhibernate/releasenotes.txt trunk/nhibernate/src/NHibernate/ISession.cs trunk/nhibernate/src/NHibernate/IStatelessSession.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessSessionFixture.cs Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/releasenotes.txt 2009-02-20 20:18:28 UTC (rev 4090) @@ -7,7 +7,8 @@ * compatible only with .NET2.0 SP1 or above (System.DateTimeOffset) ##### Possible Breaking Changes for external frameworks ##### - * ISession interface have additional methods + * ISession interface has additional methods + * IStatelessSession interface has additional methods * DefaultProxyFactoryFactory removed * IProxyFactoryFactory now provide the IProxyValidator implementation Modified: trunk/nhibernate/src/NHibernate/ISession.cs =================================================================== --- trunk/nhibernate/src/NHibernate/ISession.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate/ISession.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -739,6 +739,21 @@ /// <summary> /// Creates a new <c>Criteria</c> for the entity class. /// </summary> + /// <typeparam name="T">The entity class</typeparam> + /// <returns>An ICriteria object</returns> + ICriteria CreateCriteria<T>() where T : class; + + /// <summary> + /// Creates a new <c>Criteria</c> for the entity class with a specific alias + /// </summary> + /// <typeparam name="T">The entity class</typeparam> + /// <param name="alias">The alias of the entity</param> + /// <returns>An ICriteria object</returns> + ICriteria CreateCriteria<T>(string alias) where T : class; + + /// <summary> + /// Creates a new <c>Criteria</c> for the entity class. + /// </summary> /// <param name="persistentClass">The class to Query</param> /// <returns>An ICriteria object</returns> ICriteria CreateCriteria(System.Type persistentClass); Modified: trunk/nhibernate/src/NHibernate/IStatelessSession.cs =================================================================== --- trunk/nhibernate/src/NHibernate/IStatelessSession.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate/IStatelessSession.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -130,7 +130,7 @@ /// <typeparam name="T">A class, which is persistent, or has persistent subclasses</typeparam> /// <returns> The <see cref="ICriteria"/>. </returns> /// <remarks>Entities returned by the query are detached.</remarks> - ICriteria CreateCriteria<T>(); + ICriteria CreateCriteria<T>() where T: class; /// <summary> /// Create a new <see cref="ICriteria"/> instance, for the given entity class, @@ -140,8 +140,27 @@ /// <param name="alias">The alias of the entity</param> /// <returns> The <see cref="ICriteria"/>. </returns> /// <remarks>Entities returned by the query are detached.</remarks> - ICriteria CreateCriteria<T>(string alias); + ICriteria CreateCriteria<T>(string alias) where T : class; + /// <summary> + /// Create a new <see cref="ICriteria"/> instance, for the given entity class, + /// or a superclass of an entity class. + /// </summary> + /// <param name="entityType">A class, which is persistent, or has persistent subclasses</param> + /// <returns> The <see cref="ICriteria"/>. </returns> + /// <remarks>Entities returned by the query are detached.</remarks> + ICriteria CreateCriteria(System.Type entityType); + + /// <summary> + /// Create a new <see cref="ICriteria"/> instance, for the given entity class, + /// or a superclass of an entity class, with the given alias. + /// </summary> + /// <param name="entityType">A class, which is persistent, or has persistent subclasses</param> + /// <param name="alias">The alias of the entity</param> + /// <returns> The <see cref="ICriteria"/>. </returns> + /// <remarks>Entities returned by the query are detached.</remarks> + ICriteria CreateCriteria(System.Type entityType, string alias); + /// <summary> /// Create a new <see cref="ICriteria"/> instance, for the given entity name. /// </summary> Modified: trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -1515,6 +1515,11 @@ return plan.PerformIterate<T>(queryParameters, this); } + public ICriteria CreateCriteria<T>() where T: class + { + return CreateCriteria(typeof (T)); + } + public ICriteria CreateCriteria(System.Type persistentClass) { CheckAndUpdateSessionStatus(); @@ -1522,6 +1527,11 @@ return new CriteriaImpl(persistentClass, this); } + public ICriteria CreateCriteria<T>(string alias) where T : class + { + return CreateCriteria(typeof (T), alias); + } + public ICriteria CreateCriteria(System.Type persistentClass, string alias) { CheckAndUpdateSessionStatus(); Modified: trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate/Impl/StatelessSessionImpl.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -664,10 +664,9 @@ /// <typeparam name="T">A class, which is persistent, or has persistent subclasses</typeparam> /// <returns> The <see cref="ICriteria"/>. </returns> /// <remarks>Entities returned by the query are detached.</remarks> - public ICriteria CreateCriteria<T>() + public ICriteria CreateCriteria<T>() where T: class { - CheckAndUpdateSessionStatus(); - return new CriteriaImpl(typeof(T), this); + return CreateCriteria(typeof (T)); } /// <summary> @@ -678,12 +677,23 @@ /// <param name="alias">The alias of the entity</param> /// <returns> The <see cref="ICriteria"/>. </returns> /// <remarks>Entities returned by the query are detached.</remarks> - public ICriteria CreateCriteria<T>(string alias) + public ICriteria CreateCriteria<T>(string alias) where T : class { + return CreateCriteria(typeof(T), alias); + } + + public ICriteria CreateCriteria(System.Type entityType) + { CheckAndUpdateSessionStatus(); - return new CriteriaImpl(typeof(T), alias, this); + return new CriteriaImpl(entityType, this); } + public ICriteria CreateCriteria(System.Type entityType, string alias) + { + CheckAndUpdateSessionStatus(); + return new CriteriaImpl(entityType, alias, this); + } + /// <summary> /// Create a new <see cref="ICriteria"/> instance, for the given entity name. /// </summary> @@ -692,7 +702,8 @@ /// <remarks>Entities returned by the query are detached.</remarks> public ICriteria CreateCriteria(string entityName) { - throw new NotImplementedException(); + CheckAndUpdateSessionStatus(); + return new CriteriaImpl(entityName, this); } /// <summary> @@ -705,7 +716,8 @@ /// <remarks>Entities returned by the query are detached.</remarks> public ICriteria CreateCriteria(string entityName, string alias) { - throw new NotImplementedException(); + CheckAndUpdateSessionStatus(); + return new CriteriaImpl(entityName, alias, this); } /// <summary> Begin a NHibernate transaction.</summary> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -1274,7 +1274,7 @@ ITransaction t = s.BeginTransaction(); // HQL: from Animal a where a.mother.class = Reptile - ICriteria c = s.CreateCriteria(typeof(Animal), "a") + ICriteria c = s.CreateCriteria<Animal>("a") .CreateAlias("mother", "m") .Add(Property.ForName("m.class").Eq(typeof(Reptile))); c.List(); @@ -1298,7 +1298,7 @@ { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); - s.CreateCriteria(typeof(Course)).SetProjection(Projections.Property("CourseCode")).List(); + s.CreateCriteria<Course>().SetProjection(Projections.Property("CourseCode")).List(); CriteriaTransformer.Clone(s.CreateCriteria(typeof(Course)).SetProjection(Projections.Id())).List(); t.Rollback(); s.Close(); Modified: trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessSessionFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessSessionFixture.cs 2009-02-20 19:48:11 UTC (rev 4089) +++ trunk/nhibernate/src/NHibernate.Test/Stateless/StatelessSessionFixture.cs 2009-02-20 20:18:28 UTC (rev 4090) @@ -77,10 +77,14 @@ Assert.AreEqual("Blahs", doc2.Name); Assert.AreEqual(doc.Text, doc2.Text); - doc2 = (Document)ss.CreateCriteria<Document>().UniqueResult(); + doc2 = ss.CreateCriteria<Document>().UniqueResult<Document>(); Assert.AreEqual("Blahs", doc2.Name); Assert.AreEqual(doc.Text, doc2.Text); + doc2 = (Document)ss.CreateCriteria(typeof(Document)).UniqueResult(); + Assert.AreEqual("Blahs", doc2.Name); + Assert.AreEqual(doc.Text, doc2.Text); + using (tx = ss.BeginTransaction()) { ss.Delete(doc); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-20 19:48:13
|
Revision: 4089 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4089&view=rev Author: fabiomaulo Date: 2009-02-20 19:48:11 +0000 (Fri, 20 Feb 2009) Log Message: ----------- Fix NH-1679 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/CriterionUtil.cs trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs Added Paths: ----------- trunk/nhibernate/src/NHibernate/Criterion/IPropertyProjection.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/CriterionUtil.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/CriterionUtil.cs 2009-02-19 09:55:56 UTC (rev 4088) +++ trunk/nhibernate/src/NHibernate/Criterion/CriterionUtil.cs 2009-02-20 19:48:11 UTC (rev 4089) @@ -101,11 +101,13 @@ params object[] values) { List<TypedValue> types = new List<TypedValue>(); - if (projection == null) + var propertyProjection = projection as IPropertyProjection; + if (projection == null || propertyProjection != null) { + var pn = propertyProjection != null ? propertyProjection.PropertyName : propertyName; foreach (object value in values) { - TypedValue typedValue = criteriaQuery.GetTypedValue(criteria, propertyName, value); + TypedValue typedValue = criteriaQuery.GetTypedValue(criteria, pn, value); types.Add(typedValue); } } Added: trunk/nhibernate/src/NHibernate/Criterion/IPropertyProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/IPropertyProjection.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Criterion/IPropertyProjection.cs 2009-02-20 19:48:11 UTC (rev 4089) @@ -0,0 +1,7 @@ +namespace NHibernate.Criterion +{ + public interface IPropertyProjection + { + string PropertyName { get; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2009-02-19 09:55:56 UTC (rev 4088) +++ trunk/nhibernate/src/NHibernate/Criterion/PropertyProjection.cs 2009-02-20 19:48:11 UTC (rev 4089) @@ -10,7 +10,7 @@ /// A property value, or grouped property value /// </summary> [Serializable] - public class PropertyProjection : SimpleProjection + public class PropertyProjection : SimpleProjection, IPropertyProjection { private string propertyName; private bool grouped; Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-02-19 09:55:56 UTC (rev 4088) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-02-20 19:48:11 UTC (rev 4089) @@ -447,6 +447,7 @@ <Compile Include="Bytecode\HibernateByteCodeException.cs" /> <Compile Include="Bytecode\ProxyFactoryFactoryNotConfiguredException.cs" /> <Compile Include="Bytecode\UnableToLoadProxyFactoryFactoryException.cs" /> + <Compile Include="Criterion\IPropertyProjection.cs" /> <Compile Include="Dialect\MsSql2008Dialect.cs" /> <Compile Include="Dialect\InformixDialect0940.cs" /> <Compile Include="Dialect\InformixDialect1000.cs" /> Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs 2009-02-19 09:55:56 UTC (rev 4088) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs 2009-02-20 19:48:11 UTC (rev 4089) @@ -10,13 +10,13 @@ [Test] public void UsingExpression() { - TestAction(criteria => { criteria.Add(Expression.Eq("alias.BooleanData", true)); }); + TestAction(criteria => criteria.Add(Restrictions.Eq("alias.BooleanData", true))); } - [Test,Ignore] + [Test] public void UsingExpressionProjection() { - TestAction(criteria => { criteria.Add(Expression.Eq(Projections.Property("alias.BooleanData"), true)); }); + TestAction(criteria => criteria.Add(Restrictions.Eq(Projections.Property("alias.BooleanData"), true))); } protected override void OnSetUp() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <te...@us...> - 2009-02-19 09:56:03
|
Revision: 4088 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4088&view=rev Author: tehlike Date: 2009-02-19 09:55:56 +0000 (Thu, 19 Feb 2009) Log Message: ----------- Adding Tests for NH-1677 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Fixture.cs 2009-02-19 09:55:56 UTC (rev 4088) @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data; +using System.Text; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1677 +{ + [TestFixture,Ignore] + public class EntityModeMapCriteria:BugTestCase + { + private const int NumberOfRecordPerEntity = 10; + private const string Entity1Name = "Entity1"; + private const string Entity1Property = "Entity1Property"; + private const string Entity2Name = "Entity2"; + private const string Entity2Property = "Entity2Property"; + private const string EntityPropertyPrefix = "Record"; + + protected override void Configure(NHibernate.Cfg.Configuration configuration) + { + base.Configure(configuration); + configuration.SetProperty("default_entity_mode", + EntityModeHelper.ToString(EntityMode.Map)); + } + + protected override void OnSetUp() + { + using (var s = OpenSession()) + { + using (var tx = s.BeginTransaction(IsolationLevel.ReadCommitted)) + { + for (int i = 0; i < NumberOfRecordPerEntity; i++) + { + var entity1 = new Hashtable(); + entity1[Entity1Property] = EntityPropertyPrefix + i; + s.SaveOrUpdate(Entity1Name, entity1); + } + + for (int i = 0; i < NumberOfRecordPerEntity; i++) + { + var entity2 = new Hashtable(); + entity2[Entity2Property] = EntityPropertyPrefix + i; + s.SaveOrUpdate(Entity2Name, entity2); + } + tx.Commit(); + } + } + } + protected override void OnTearDown() + { + using(var s=OpenSession()) + { + using(var tx=s.BeginTransaction()) + { + s.Delete(string.Format("from {0}", Entity1Name)); + tx.Commit(); + } + + } + } + [Test] + public void EntityModeMapFailsWithCriteria() + { + using (var sf = cfg.BuildSessionFactory()) + { + + using (var s = sf.OpenSession()) + { + var query = s.CreateQuery(string.Format("from {0}", Entity1Name)); + var entity1List = query.List(); + Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // OK, Count == 10 + } + + using (var s = sf.OpenSession()) + { + var entity1Criteria = s.CreateCriteria(Entity1Name); + var entity1List = entity1Criteria.List(); + Assert.AreEqual(NumberOfRecordPerEntity, entity1List.Count); // KO !!! Count == 20 !!! + } + } + } + } + +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1677/Mappings.hbm.xml 2009-02-19 09:55:56 UTC (rev 4088) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<hibernate-mapping xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:nhibernate-mapping-2.2"> + <class entity-name="Entity1" table="Table1"> + <id name="Id" column="Id" type="Int32"> + <generator class="native"/> + </id> + <property name="Entity1Property" column="Table1Column" type="String"/> + </class> + <class entity-name="Entity2" table="Table2"> + <id column="Id" type="Int32" name="Id"> + <generator class="native"/> + </id> + <property name="Entity2Property" column="Table2Column" type="String"/> + </class> +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-16 22:14:57 UTC (rev 4087) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-19 09:55:56 UTC (rev 4088) @@ -627,6 +627,7 @@ <Compile Include="NHSpecificTest\NH1643\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1654\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1654\Employee.cs" /> + <Compile Include="NHSpecificTest\NH1677\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1679\DomainClass.cs" /> <Compile Include="NHSpecificTest\NH1679\Fixture.cs" /> <Compile Include="NHSpecificTest\NH280\Fixture.cs" /> @@ -1659,6 +1660,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1677\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1679\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\Evicting\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1490\MappingsFilterAsBoolean.hbm.xml" /> @@ -1798,4 +1800,4 @@ if exist "$(ProjectDir)hibernate.cfg.xml" (copy "$(ProjectDir)hibernate.cfg.xml" "hibernate.cfg.xml") copy /y "..\..\..\NHibernate.DomainModel\ABC.hbm.xml" "ABC.hbm.xml"</PostBuildEvent> </PropertyGroup> -</Project> +</Project> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dav...@us...> - 2009-02-16 22:28:08
|
Revision: 4087 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4087&view=rev Author: davybrion Date: 2009-02-16 22:14:57 +0000 (Mon, 16 Feb 2009) Log Message: ----------- these 2 project files had incorrect references to non-existing locations of the nunit assemblies Modified Paths: -------------- trunk/nhibernate/src/Iesi.Collections.Test/Iesi.Collections.Test.csproj trunk/nhibernate/src/NHibernate.Examples/NHibernate.Examples.csproj Property Changed: ---------------- trunk/nhibernate/src/Iesi.Collections.Test/ trunk/nhibernate/src/NHibernate.Examples/ Property changes on: trunk/nhibernate/src/Iesi.Collections.Test ___________________________________________________________________ Modified: svn:ignore - bin obj AssemblyInfo.cs + bin obj AssemblyInfo.cs [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto Modified: trunk/nhibernate/src/Iesi.Collections.Test/Iesi.Collections.Test.csproj =================================================================== --- trunk/nhibernate/src/Iesi.Collections.Test/Iesi.Collections.Test.csproj 2009-02-13 23:06:46 UTC (rev 4086) +++ trunk/nhibernate/src/Iesi.Collections.Test/Iesi.Collections.Test.csproj 2009-02-16 22:14:57 UTC (rev 4087) @@ -39,7 +39,7 @@ <ItemGroup> <Reference Include="nunit.framework, Version=2.2.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77"> <SpecificVersion>False</SpecificVersion> - <HintPath>..\..\lib\net\nunit.framework.dll</HintPath> + <HintPath>..\..\lib\net\2.0\nunit.framework.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Data" /> Property changes on: trunk/nhibernate/src/NHibernate.Examples ___________________________________________________________________ Modified: svn:ignore - bin obj .#* *.user *.xsx + bin obj .#* *.user *.xsx [Bb]in [Dd]ebug [Rr]elease *.aps *.eto Modified: trunk/nhibernate/src/NHibernate.Examples/NHibernate.Examples.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Examples/NHibernate.Examples.csproj 2009-02-13 23:06:46 UTC (rev 4086) +++ trunk/nhibernate/src/NHibernate.Examples/NHibernate.Examples.csproj 2009-02-16 22:14:57 UTC (rev 4087) @@ -81,7 +81,7 @@ </Reference> <Reference Include="nunit.framework"> <Name>nunit.framework</Name> - <HintPath>..\..\lib\net\nunit.framework.dll</HintPath> + <HintPath>..\..\lib\net\2.0\nunit.framework.dll</HintPath> </Reference> <Reference Include="System"> <Name>System</Name> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <te...@us...> - 2009-02-13 23:06:50
|
Revision: 4086 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4086&view=rev Author: tehlike Date: 2009-02-13 23:06:46 +0000 (Fri, 13 Feb 2009) Log Message: ----------- Marking some meta as [Serializable] Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ForeignKey.cs trunk/nhibernate/src/NHibernate/Mapping/Table.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ForeignKey.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ForeignKey.cs 2009-02-13 21:28:04 UTC (rev 4085) +++ trunk/nhibernate/src/NHibernate/Mapping/ForeignKey.cs 2009-02-13 23:06:46 UTC (rev 4086) @@ -2,12 +2,14 @@ using System.Collections.Generic; using System.Text; using NHibernate.Util; +using System; namespace NHibernate.Mapping { /// <summary> /// A Foreign Key constraint in the database. /// </summary> + [Serializable] public class ForeignKey : Constraint { private Table referencedTable; Modified: trunk/nhibernate/src/NHibernate/Mapping/Table.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-02-13 21:28:04 UTC (rev 4085) +++ trunk/nhibernate/src/NHibernate/Mapping/Table.cs 2009-02-13 23:06:46 UTC (rev 4086) @@ -1003,7 +1003,7 @@ } #region Nested type: ForeignKeyKey - + [Serializable] internal class ForeignKeyKey : IEqualityComparer<ForeignKeyKey> { internal List<Column> columns; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-13 21:28:29
|
Revision: 4085 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4085&view=rev Author: darioquintana Date: 2009-02-13 21:28:04 +0000 (Fri, 13 Feb 2009) Log Message: ----------- tests for NH1679, not fixed yet Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/DomainClass.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/DomainClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/DomainClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/DomainClass.cs 2009-02-13 21:28:04 UTC (rev 4085) @@ -0,0 +1,9 @@ +namespace NHibernate.Test.NHSpecificTest.NH1679 +{ + public class DomainClass + { + public int Id { get; set; } + + public bool BooleanData { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Fixture.cs 2009-02-13 21:28:04 UTC (rev 4085) @@ -0,0 +1,59 @@ +using System.Collections; +using NHibernate.Criterion; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1679 +{ + [TestFixture] + public class Fixture : BugTestCase + { + [Test] + public void UsingExpression() + { + TestAction(criteria => { criteria.Add(Expression.Eq("alias.BooleanData", true)); }); + } + + [Test,Ignore] + public void UsingExpressionProjection() + { + TestAction(criteria => { criteria.Add(Expression.Eq(Projections.Property("alias.BooleanData"), true)); }); + } + + protected override void OnSetUp() + { + base.OnSetUp(); + using (ISession session = OpenSession()) + { + var entity = new DomainClass(); + entity.Id = 1; + entity.BooleanData = true; + session.Save(entity); + session.Flush(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession session = OpenSession()) + { + string hql = "from System.Object"; + session.Delete(hql); + session.Flush(); + } + } + + public void TestAction(System.Action<DetachedCriteria> action) + { + using (ISession session = OpenSession()) + { + DetachedCriteria criteria = DetachedCriteria.For<DomainClass>("alias"); + + action.Invoke(criteria); + + IList l = criteria.GetExecutableCriteria(session).List(); + Assert.AreNotEqual(l, null); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1679/Mappings.hbm.xml 2009-02-13 21:28:04 UTC (rev 4085) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1679" + default-lazy="false"> + <class name="DomainClass"> + <id name="Id"> + <generator class="assigned" /> + </id> + <property name="BooleanData" /> + </class> +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-12 14:53:40 UTC (rev 4084) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-13 21:28:04 UTC (rev 4085) @@ -627,6 +627,8 @@ <Compile Include="NHSpecificTest\NH1643\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1654\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1654\Employee.cs" /> + <Compile Include="NHSpecificTest\NH1679\DomainClass.cs" /> + <Compile Include="NHSpecificTest\NH1679\Fixture.cs" /> <Compile Include="NHSpecificTest\NH280\Fixture.cs" /> <Compile Include="NHSpecificTest\NH280\Foo.cs" /> <Compile Include="NHSpecificTest\NH1018\Employee.cs" /> @@ -1657,6 +1659,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1679\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\Evicting\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1490\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1293\MappingsFilterAsBoolean.hbm.xml" /> @@ -1795,4 +1798,4 @@ if exist "$(ProjectDir)hibernate.cfg.xml" (copy "$(ProjectDir)hibernate.cfg.xml" "hibernate.cfg.xml") copy /y "..\..\..\NHibernate.DomainModel\ABC.hbm.xml" "ABC.hbm.xml"</PostBuildEvent> </PropertyGroup> -</Project> \ No newline at end of file +</Project> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <te...@us...> - 2009-02-12 14:53:45
|
Revision: 4084 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4084&view=rev Author: tehlike Date: 2009-02-12 14:53:40 +0000 (Thu, 12 Feb 2009) Log Message: ----------- Removing SessionFactoryTests since it is no longer necessary to serialize SessionFactory Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/SessionFactoryTest/ Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-12 07:05:27 UTC (rev 4083) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-12 14:53:40 UTC (rev 4084) @@ -931,8 +931,6 @@ <Compile Include="QueryTest\PositionalParametersFixture.cs" /> <Compile Include="QueryTest\QueryParametersFixture.cs" /> <Compile Include="ReflectionOptimizerTest\LcgFixture.cs" /> - <Compile Include="SessionFactoryTest\Item.cs" /> - <Compile Include="SessionFactoryTest\SessionFactorySerializationFixture.cs" /> <Compile Include="SqlTest\Custom\CustomSQLSupportTest.cs" /> <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" /> <Compile Include="SqlTest\Custom\MySQL\MySQLTest.cs" /> @@ -1669,7 +1667,6 @@ <EmbeddedResource Include="NHSpecificTest\NH1665\Mappings.hbm.xml" /> <EmbeddedResource Include="Generatedkeys\ByTrigger\MyEntity.hbm.xml" /> <EmbeddedResource Include="Generatedkeys\Identity\MyEntityIdentity.hbm.xml" /> - <EmbeddedResource Include="SessionFactoryTest\Item.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1289\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\TimeSpanClass.hbm.xml" /> <EmbeddedResource Include="TypesTest\TimeSpanInt64Class.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2009-02-12 07:05:37
|
Revision: 4083 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4083&view=rev Author: ayenderahien Date: 2009-02-12 07:05:27 +0000 (Thu, 12 Feb 2009) Log Message: ----------- Adding passing tests - evict behavior Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Employee.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Mappings.hbm.xml Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Employee.cs (from rev 4082, trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1001/Employee.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Employee.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Employee.cs 2009-02-12 07:05:27 UTC (rev 4083) @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.Evicting +{ + public class Employee + { + private int id; + + public int Id + { + get { return id; } + set { id = value; } + } + + private string firstName; + + public string FirstName + { + get { return firstName; } + set { firstName = value; } + } + + private string lastName; + + public string LastName + { + get { return lastName; } + set { lastName = value; } + } + } +} Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Employee.cs ___________________________________________________________________ Added: svn:keywords + Id HeadUrl Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Fixture.cs (from rev 4082, trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1001/Fixture.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Fixture.cs 2009-02-12 07:05:27 UTC (rev 4083) @@ -0,0 +1,108 @@ +using NHibernate.Cfg; +using NUnit.Framework; +using NHibernate.Stat; + +namespace NHibernate.Test.NHSpecificTest.Evicting +{ + [TestFixture] + public class Fixture : BugTestCase + { + public override string BugNumber + { + get { return "Evicting"; } + } + + protected override void OnSetUp() + { + base.OnSetUp(); + using (var session = sessions.OpenSession()) + using (var tx = session.BeginTransaction()) + { + session.Save(new Employee + { + Id = 1, + FirstName = "a", + LastName = "b" + }); + tx.Commit(); + } + } + + protected override void OnTearDown() + { + using (var session = sessions.OpenSession()) + using (var tx = session.BeginTransaction()) + { + session.Delete(session.Load<Employee>(1)); + + tx.Commit(); + } + base.OnTearDown(); + } + + + [Test] + public void Can_evict_entity_from_session() + { + using (var session = sessions.OpenSession()) + using (var tx = session.BeginTransaction()) + { + var employee = session.Load<Employee>(1); + Assert.IsTrue(session.Contains(employee)); + + session.Evict(employee); + + Assert.IsFalse(session.Contains(employee)); + + tx.Commit(); + } + } + + [Test] + public void Can_evict_non_persistent_object() + { + + using (var session = sessions.OpenSession()) + using (var tx = session.BeginTransaction()) + { + var employee = new Employee(); + Assert.IsFalse(session.Contains(employee)); + + session.Evict(employee); + + Assert.IsFalse(session.Contains(employee)); + + tx.Commit(); + } + } + + [Test] + public void Can_evict_when_trying_to_evict_entity_from_another_session() + { + + using (var session1 = sessions.OpenSession()) + using (var tx1 = session1.BeginTransaction()) + { + + using (var session2 = sessions.OpenSession()) + using (var tx2 = session2.BeginTransaction()) + { + var employee = session2.Load<Employee>(1); + Assert.IsFalse(session1.Contains(employee)); + Assert.IsTrue(session2.Contains(employee)); + + session1.Evict(employee); + + Assert.IsFalse(session1.Contains(employee)); + + Assert.IsTrue(session2.Contains(employee)); + + tx2.Commit(); + } + + tx1.Commit(); + } + } + + } +} Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Fixture.cs ___________________________________________________________________ Added: svn:keywords + Id HeadUrl Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Mappings.hbm.xml (from rev 4082, trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1001/Mappings.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Mappings.hbm.xml 2009-02-12 07:05:27 UTC (rev 4083) @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.Evicting" + assembly="NHibernate.Test"> + + + <class name="Employee" table="EMPLOYEES" lazy="false"> + <id name="Id" column="EMPLOYEE_ID" type="Int32"> + <generator class="assigned" /> + </id> + + <property name="FirstName" column="FIRST_NAME" type="String" /> + <property name="LastName" column="LAST_NAME" type="String" /> + + </class> +</hibernate-mapping> Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Evicting/Mappings.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-09 20:01:34 UTC (rev 4082) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-12 07:05:27 UTC (rev 4083) @@ -395,6 +395,8 @@ <Compile Include="NHSpecificTest\Dates\DateTime2Fixture.cs" /> <Compile Include="NHSpecificTest\Dates\DateTimeAssert.cs" /> <Compile Include="NHSpecificTest\EntityModeToTuplizerPerf\Fixture.cs" /> + <Compile Include="NHSpecificTest\Evicting\Employee.cs" /> + <Compile Include="NHSpecificTest\Evicting\Fixture.cs" /> <Compile Include="NHSpecificTest\FileStreamSql2008\VendorCatalog.cs" /> <Compile Include="NHSpecificTest\FileStreamSql2008\Fixture.cs" /> <Compile Include="NHSpecificTest\FileStreamSql2008\Convert.cs" /> @@ -1657,6 +1659,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\Evicting\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1490\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1293\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\MySQL\MySQLEmployment.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dav...@us...> - 2009-02-09 20:01:38
|
Revision: 4082 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4082&view=rev Author: davybrion Date: 2009-02-09 20:01:34 +0000 (Mon, 09 Feb 2009) Log Message: ----------- add support for guid.native to MySQL5Dialect Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2009-02-09 00:22:45 UTC (rev 4081) +++ trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2009-02-09 20:01:34 UTC (rev 4082) @@ -49,5 +49,13 @@ return pagingBuilder.ToSqlString(); } + + public override string SelectGUIDString + { + get + { + return "select uuid()"; + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-09 00:22:51
|
Revision: 4081 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4081&view=rev Author: darioquintana Date: 2009-02-09 00:22:45 +0000 (Mon, 09 Feb 2009) Log Message: ----------- passing for PostgreSQL: the type for a System.Boolean is 'boolean' instead of 'int' Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/MappingsFilterAsBoolean.hbm.xml Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/Fixture.cs 2009-02-09 00:14:43 UTC (rev 4080) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/Fixture.cs 2009-02-09 00:22:45 UTC (rev 4081) @@ -1,4 +1,5 @@ using System.Collections.Generic; +using NHibernate.Dialect; using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; @@ -7,6 +8,17 @@ [TestFixture] public class Fixture : BugTestCase { + protected override System.Collections.IList Mappings + { + get + { + if (Dialect is PostgreSQLDialect) + return new[] { "NHSpecificTest.NH1490.MappingsFilterAsBoolean.hbm.xml" }; + + return base.Mappings; + } + } + [Test] public void Can_Translate_Correctly_Without_Filter() { @@ -59,7 +71,11 @@ { s.DisableFilter("onlyActive"); IFilter fltr = s.EnableFilter("onlyActive"); - fltr.SetParameter("activeFlag", 1); + + if (Dialect is PostgreSQLDialect) + fltr.SetParameter("activeFlag", true); + else + fltr.SetParameter("activeFlag", 1); // Customer is parametrized IQuery query = s.CreateQuery("from Customer c where c.Name = :customerName"); @@ -97,7 +113,11 @@ { s.DisableFilter("onlyActive"); IFilter fltr = s.EnableFilter("onlyActive"); - fltr.SetParameter("activeFlag", 1); + if (Dialect is PostgreSQLDialect) + fltr.SetParameter("activeFlag", true); + else + fltr.SetParameter("activeFlag", 1); + // related entity Customer.Category is parametrized IQuery query = s.CreateQuery("from Customer c where c.Category.Name = :catName"); query.SetParameter("catName", "User"); Copied: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/MappingsFilterAsBoolean.hbm.xml (from rev 4079, trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/Mappings.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/MappingsFilterAsBoolean.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1490/MappingsFilterAsBoolean.hbm.xml 2009-02-09 00:22:45 UTC (rev 4081) @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1490"> + + <class name="Customer" table="Customer"> + <id name="Id" column="Id"> + <generator class="native" /> + </id> + <property name="Name" not-null="true" /> + <property name="IsActive" not-null="true" /> + <many-to-one name="Category" lazy="false" column="Category_Id" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> + </class> + + <class name="Category" table="Category" mutable="true"> + <id name="Id" column="Id"> + <generator class="native" /> + </id> + <property name="Name" not-null="true" /> + <property name="IsActive" not-null="true" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> + </class> + + <filter-def name="onlyActive"> + <filter-param name="activeFlag" type="boolean"/> + </filter-def> +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-09 00:14:43 UTC (rev 4080) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-09 00:22:45 UTC (rev 4081) @@ -1657,6 +1657,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1490\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1293\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\MySQL\MySQLEmployment.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\Oracle\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-09 00:15:07
|
Revision: 4080 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4080&view=rev Author: darioquintana Date: 2009-02-09 00:14:43 +0000 (Mon, 09 Feb 2009) Log Message: ----------- passing for PostgreSQL: the type for a System.Boolean is 'boolean' instead of 'int' Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/MappingsFilterAsBoolean.hbm.xml Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Fixture.cs 2009-02-08 23:48:01 UTC (rev 4079) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Fixture.cs 2009-02-09 00:14:43 UTC (rev 4080) @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using NHibernate.Criterion; +using NHibernate.Dialect; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH1293 @@ -8,6 +9,17 @@ [TestFixture] public class Fixture : BugTestCase { + protected override System.Collections.IList Mappings + { + get + { + if (Dialect is PostgreSQLDialect) + return new[] {"NHSpecificTest.NH1293.MappingsFilterAsBoolean.hbm.xml"}; + + return base.Mappings; + } + } + [Test] public void Criteria_Does_Not_Equal_To_HQL() { @@ -29,8 +41,12 @@ { s.DisableFilter("onlyActive"); IFilter fltr = s.EnableFilter("onlyActive"); - fltr.SetParameter("activeFlag", 1); + if(Dialect is PostgreSQLDialect) + fltr.SetParameter("activeFlag", true); + else + fltr.SetParameter("activeFlag", 1); + // with HQL, Category.IsActive=true filter applied, result count=2 IQuery hqlQuery = s.CreateQuery("from Customer c where c.Category.Name = ?"); hqlQuery.SetParameter(0, "User"); // note using positional parameters because of NH-1490 Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Mappings.hbm.xml 2009-02-08 23:48:01 UTC (rev 4079) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Mappings.hbm.xml 2009-02-09 00:14:43 UTC (rev 4080) @@ -5,24 +5,24 @@ <generator class="native" /> </id> <property name="Name" not-null="true" /> - <property name="IsActive" not-null="true" /> - <many-to-one name="Category" lazy="false" column="Category_Id" /> - - <filter name="onlyActive" condition=":activeFlag = IsActive" /> + <property name="IsActive" not-null="true" /> + <many-to-one name="Category" lazy="false" column="Category_Id" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> </class> - - <class name="Category" table="Category" mutable="true"> + + <class name="Category" table="Category" mutable="true"> <id name="Id" column="Id"> <generator class="native" /> </id> - <property name="Name" not-null="true" /> - <property name="IsActive" not-null="true" /> - - <filter name="onlyActive" condition=":activeFlag = IsActive" /> - </class> - - <filter-def name="onlyActive"> + <property name="Name" not-null="true" /> + <property name="IsActive" not-null="true" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> + </class> + + <filter-def name="onlyActive"> <filter-param name="activeFlag" type="int"/> </filter-def> - + </hibernate-mapping> \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/MappingsFilterAsBoolean.hbm.xml (from rev 4079, trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/Mappings.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/MappingsFilterAsBoolean.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1293/MappingsFilterAsBoolean.hbm.xml 2009-02-09 00:14:43 UTC (rev 4080) @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH1293"> + <class name="Customer" table="Customer"> + <id name="Id" column="Id"> + <generator class="native" /> + </id> + <property name="Name" not-null="true" /> + <property name="IsActive" not-null="true" /> + <many-to-one name="Category" lazy="false" column="Category_Id" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> + </class> + + <class name="Category" table="Category" mutable="true"> + <id name="Id" column="Id"> + <generator class="native" /> + </id> + <property name="Name" not-null="true" /> + <property name="IsActive" not-null="true" /> + + <filter name="onlyActive" condition=":activeFlag = IsActive" /> + </class> + + <filter-def name="onlyActive"> + <filter-param name="activeFlag" type="boolean"/> + </filter-def> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 23:48:01 UTC (rev 4079) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-09 00:14:43 UTC (rev 4080) @@ -1657,6 +1657,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1293\MappingsFilterAsBoolean.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\MySQL\MySQLEmployment.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\Oracle\Mappings.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\Oracle\StoredProcedures.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-08 23:48:03
|
Revision: 4079 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4079&view=rev Author: darioquintana Date: 2009-02-08 23:48:01 +0000 (Sun, 08 Feb 2009) Log Message: ----------- passing for PostgreSQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1394/Fixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1394/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1394/Fixture.cs 2009-02-08 23:17:21 UTC (rev 4078) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1394/Fixture.cs 2009-02-08 23:48:01 UTC (rev 4079) @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using NHibernate.Criterion; using NHibernate.Dialect; @@ -75,21 +76,25 @@ { using (ISession s = OpenSession()) { - DetachedCriteria dc = DetachedCriteria.For<Person>("sub"); - dc.CreateCriteria("Pets", "pets").SetProjection(Projections.Min("pets.Weight")).Add( - Restrictions.EqProperty("this.Id", "sub.Id")); + using (new SqlLogSpy()) + { + DetachedCriteria dc = DetachedCriteria.For<Person>("sub"); + dc.CreateCriteria("Pets", "pets").SetProjection(Projections.Min("pets.Weight")).Add( + Restrictions.EqProperty("this.Id", "sub.Id")); - ICriteria c = s.CreateCriteria(typeof (Person)).AddOrder(Order.Asc(Projections.SubQuery(dc))); - IList<Person> list = c.List<Person>(); - int nullRelationOffSet = 2; - if (Dialect is Oracle8iDialect) - { - // Oracle order NULL Last (ASC) - nullRelationOffSet = 0; + ICriteria c = s.CreateCriteria(typeof (Person)).AddOrder(Order.Asc(Projections.SubQuery(dc))); + Console.WriteLine("list()"); + IList<Person> list = c.List<Person>(); + int nullRelationOffSet = 2; + if (Dialect is Oracle8iDialect || Dialect is PostgreSQLDialect) + { + // Oracle order NULL Last (ASC) + nullRelationOffSet = 0; + } + Assert.AreEqual(list[nullRelationOffSet].Name, "Tim"); + Assert.AreEqual(list[nullRelationOffSet + 1].Name, "Joe"); + Assert.AreEqual(list[nullRelationOffSet + 2].Name, "Sally"); } - Assert.AreEqual(list[nullRelationOffSet].Name, "Tim"); - Assert.AreEqual(list[nullRelationOffSet+1].Name, "Joe"); - Assert.AreEqual(list[nullRelationOffSet+2].Name, "Sally"); } } @@ -106,7 +111,7 @@ IList<Person> list = c.List<Person>(); int nullRelationOffSet = 0; - if (Dialect is Oracle8iDialect) + if (Dialect is Oracle8iDialect || Dialect is PostgreSQLDialect) { // Oracle order NULL First (DESC) nullRelationOffSet = 2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-08 23:17:59
|
Revision: 4078 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4078&view=rev Author: darioquintana Date: 2009-02-08 23:17:21 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Ignore test for PostgreSQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs 2009-02-08 22:56:59 UTC (rev 4077) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1280/NH1280Fixture.cs 2009-02-08 23:17:21 UTC (rev 4078) @@ -1,5 +1,6 @@ using System.Collections; using NHibernate.Criterion; +using NHibernate.Dialect; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH1280 @@ -223,6 +224,8 @@ [Test] public void SubstringShouldUseAllParameters() { + if(Dialect is PostgreSQLDialect) Assert.Ignore("The dialect {0} doesn't support LEFT function",Dialect.GetType().Name); + using (ISession s = OpenSession()) { using (ITransaction tx = s.BeginTransaction()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-08 22:57:04
|
Revision: 4077 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4077&view=rev Author: darioquintana Date: 2009-02-08 22:56:59 +0000 (Sun, 08 Feb 2009) Log Message: ----------- You cannot ask for this: Assert.AreEqual(10m, ((InvoiceItem)invLoaded.Items[0]).Quantity); Because for example in PostgreSQL the items are loaded in different order. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Invoice.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Fixture.cs 2009-02-08 22:33:44 UTC (rev 4076) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Fixture.cs 2009-02-08 22:56:59 UTC (rev 4077) @@ -86,11 +86,15 @@ [Test] public void IdBagWithCompositeElementThatContainsAManyToOne_Update() { + InvoiceItem itemToUpdate = null; IdBagWithCompositeElementThatContainsAManyToOne_Setup(); using (ISession s = OpenSession()) { Invoice invToUpdate = s.Get<Invoice>(inv.Id); - ((InvoiceItem)invToUpdate.Items[0]).Quantity = 10m; // update information of an element + + itemToUpdate = ((InvoiceItem)invToUpdate.Items[0]); // update information of an element + itemToUpdate.Quantity = 10m; + invToUpdate.Items.Add(new InvoiceItem(product3, 1)); // update the idbag collection s.Flush(); s.Clear(); @@ -98,8 +102,9 @@ using (ISession s = OpenSession()) { Invoice invLoaded = s.Get<Invoice>(inv.Id); - Assert.AreEqual(10m, ((InvoiceItem)invLoaded.Items[0]).Quantity); Assert.AreEqual(3, invLoaded.Items.Count, "The collection should have a new item"); + Assert.IsTrue(invLoaded.Items.Contains(itemToUpdate)); + s.Clear(); } IdBagWithCompositeElementThatContainsAManyToOne_CleanUp(); Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Invoice.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Invoice.cs 2009-02-08 22:33:44 UTC (rev 4076) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH364/Invoice.cs 2009-02-08 22:56:59 UTC (rev 4077) @@ -53,6 +53,29 @@ get { return _Quantity; } set { _Quantity = value; } } + + public bool Equals(InvoiceItem other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other._Quantity == _Quantity && Equals(other._Product, _Product); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof(InvoiceItem)) return false; + return Equals((InvoiceItem)obj); + } + + public override int GetHashCode() + { + unchecked + { + return (_Quantity.GetHashCode() * 397) ^ (_Product != null ? _Product.GetHashCode() : 0); + } + } } [Serializable] @@ -77,5 +100,25 @@ get { return _Name; } set { _Name = value; } } + + public bool Equals(Product other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other._Id == _Id; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (Product)) return false; + return Equals((Product) obj); + } + + public override int GetHashCode() + { + return _Id; + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-08 22:33:49
|
Revision: 4076 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4076&view=rev Author: darioquintana Date: 2009-02-08 22:33:44 +0000 (Sun, 08 Feb 2009) Log Message: ----------- passing for PostgreSQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs 2009-02-08 21:35:24 UTC (rev 4075) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs 2009-02-08 22:33:44 UTC (rev 4076) @@ -445,9 +445,9 @@ list = s.CreateSQLQuery(EmploymentSQL).SetResultTransformer(CriteriaSpecification.AliasToEntityMap).List(); Assert.AreEqual(1, list.Count); m = (IDictionary) list[0]; - Assert.IsTrue(m.Contains("EMPID")); - Assert.IsTrue(m.Contains("AVALUE")); - Assert.IsTrue(m.Contains("ENDDATE")); + Assert.IsTrue(m.Contains("EMPID") || m.Contains("empid")); + Assert.IsTrue(m.Contains("AVALUE") || m.Contains("avalue")); + Assert.IsTrue(m.Contains("ENDDATE") || m.Contains("enddate")); Assert.AreEqual(8, m.Count); // TODO H3: H3.2 can guess the return column type so they can use just addScalar("employerid"), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dar...@us...> - 2009-02-08 22:23:11
|
Revision: 4075 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4075&view=rev Author: darioquintana Date: 2009-02-08 21:35:24 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Test passing for dialect supporting SupportsIfExistsBeforeTableName (Postgres) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1443/Fixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1443/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1443/Fixture.cs 2009-02-08 19:50:43 UTC (rev 4074) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1443/Fixture.cs 2009-02-08 21:35:24 UTC (rev 4075) @@ -15,8 +15,15 @@ var sb = new StringBuilder(500); su.Execute(x => sb.AppendLine(x), false, false, true); string script = sb.ToString(); - Assert.That(script, Text.Contains("drop table nhibernate.dbo.Aclass")); + + + if (Dialect.Dialect.GetDialect(cfg.Properties).SupportsIfExistsBeforeTableName) + Assert.That(script, Text.Contains("drop table if exists nhibernate.dbo.Aclass")); + else + Assert.That(script, Text.Contains("drop table nhibernate.dbo.Aclass")); + Assert.That(script, Text.Contains("create table nhibernate.dbo.Aclass")); + } [Test] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dav...@us...> - 2009-02-08 19:50:48
|
Revision: 4074 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4074&view=rev Author: davybrion Date: 2009-02-08 19:50:43 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Added some tests for custom SQL and stored procedures with MySQL Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLEmployment.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLTest.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2009-02-08 16:11:27 UTC (rev 4073) +++ trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2009-02-08 19:50:43 UTC (rev 4074) @@ -2,7 +2,7 @@ namespace NHibernate.Dialect { - internal class MySQL5Dialect : MySQLDialect + public class MySQL5Dialect : MySQLDialect { //Reference 5.x //Numeric: Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 16:11:27 UTC (rev 4073) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 19:50:43 UTC (rev 4074) @@ -933,6 +933,7 @@ <Compile Include="SessionFactoryTest\SessionFactorySerializationFixture.cs" /> <Compile Include="SqlTest\Custom\CustomSQLSupportTest.cs" /> <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" /> + <Compile Include="SqlTest\Custom\MySQL\MySQLTest.cs" /> <Compile Include="SqlTest\Custom\Oracle\OracleCustomSQLFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\Version.cs" /> @@ -1656,6 +1657,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="SqlTest\Custom\MySQL\MySQLEmployment.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\Oracle\Mappings.hbm.xml" /> <EmbeddedResource Include="SqlTest\Custom\Oracle\StoredProcedures.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1619\Mappings.hbm.xml" /> Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLEmployment.hbm.xml (from rev 4072, trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLEmployment.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLEmployment.hbm.xml 2009-02-08 19:50:43 UTC (rev 4074) @@ -0,0 +1,217 @@ +<?xml version="1.0"?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! + + This version is for Sybase/mssql +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field.camelcase"> + + <class name="Organization" table="ORGANIZATION"> + <id name="Id" unsaved-value="0" column="ORGID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <set name="Employments" + inverse="true" + order-by="DUMMY"> + <key column="EMPLOYER"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + <loader query-ref="organizationEmployments"/> + </set> + <!-- query-list name="currentEmployments" + query-ref="organizationCurrentEmployments"--> + <loader query-ref="organization"/> + <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> + <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> + </class> + + <class name="Person" table="PERSON"> + <id name="Id" unsaved-value="0" column="PERID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <loader query-ref="person"/> + <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> + <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> + </class> + + <class name="Employment" table="EMPLOYMENT"> + <id name="employmentId" unsaved-value="0" column="EMPID"> + <generator class="increment"/> + </id> + <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/> + <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/> + <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/> + <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> + <property name="RegionCode" column="REGIONCODE" update="false"/> + <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="VALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + <loader query-ref="employment"/> + <sql-insert> + INSERT INTO EMPLOYMENT + (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID) + VALUES (?, ?, now(), UPPER(?), ?, ?, ?) + </sql-insert> + <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> + <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + <return-join alias="pers" property="emp.Employee"/> + </resultset> + + <sql-query name="person"> + <return alias="p" class="Person" lock-mode="upgrade"/> + SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/ + </sql-query> + + <sql-query name="organization"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + SELECT {org.*}, {emp.*} + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + WHERE org.ORGID=? + </sql-query> + + + <!--sql-query name="organization"> + <return alias="org" class="Organization"/> + SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION + WHERE ORGID=? + </sql-query--> + + <sql-query name="allOrganizationsWithEmployees"> + <!-- TODO H3: add flush-mode="never" --> + <return alias="org" class="Organization"/> + SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id} + FROM ORGANIZATION org + INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID + </sql-query> + + <sql-query name="employment"> + <return alias="emp" class="Employment"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId} + FROM EMPLOYMENT + WHERE EMPID = ? + </sql-query> + + <sql-query name="organizationEmployments"> + <load-collection alias="empcol" role="Organization.Employments"/> + SELECT {empcol.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + + <sql-query name="organizationCurrentEmployments"> + <return alias="emp" class="Employment"> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. --> + <return-property name="EndDate" column="myEndDate"/> + </return> + <synchronize table="EMPLOYMENT"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId}, VALUE, CURRENCY + FROM EMPLOYMENT + WHERE EMPLOYER = :id AND ENDDATE IS NULL + ORDER BY STARTDATE ASC + </sql-query> + + <sql-query name="simpleScalar"> + <return-scalar column="name" type="string"/> + <return-scalar column="value" type="long"/> + call simpleScalar(:number) + </sql-query> + + <sql-query name="paramhandling"> + <return-scalar column="value" type="long"/> + <return-scalar column="value2" type="long"/> + call paramHandling(?,?) + </sql-query> + + <sql-query name="paramhandling_mixed"> + <return-scalar column="value" type="long" /> + <return-scalar column="value2" type="long" /> + call paramHandling(?,:second) + </sql-query> + + <sql-query name="selectAllEmployments"> + <return class="Employment"> + <return-property name="Employee" column="EMPLOYEE"/> + <return-property name="Employer" column="EMPLOYER"/> + <return-property name="StartDate" column="STARTDATE"/> + <return-property name="EndDate" column="ENDDATE"/> + <return-property name="RegionCode" column="REGIONCODE"/> + <return-property name="id" column="EMPID"/> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return> + call selectAllEmployments() + </sql-query> + + <database-object> + <create> + CREATE PROCEDURE selectAllEmployments () + SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, + REGIONCODE, EMPID, VALUE, CURRENCY + FROM EMPLOYMENT + </create> + <drop> + DROP PROCEDURE selectAllEmployments + </drop> + </database-object> + + <database-object> + <create> + CREATE PROCEDURE paramHandling (j int, i int) + SELECT j AS value, i AS value2 + </create> + <drop> + DROP PROCEDURE paramHandling + </drop> + </database-object> + + <database-object> + <create> + CREATE PROCEDURE simpleScalar (number int) + SELECT number AS value, 'getAll' AS name + </create> + <drop> + DROP PROCEDURE simpleScalar + </drop> + </database-object> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MySQL/MySQLTest.cs 2009-02-08 19:50:43 UTC (rev 4074) @@ -0,0 +1,20 @@ +using System.Collections; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom.MySQL +{ + [TestFixture] + public class MySQLTest : CustomStoredProcSupportTest + { + protected override IList Mappings + { + get { return new[] { "SqlTest.Custom.MySQL.MySQLEmployment.hbm.xml" }; } + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is MySQL5Dialect || dialect is MySQLDialect; + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-08 16:11:30
|
Revision: 4073 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4073&view=rev Author: fabiomaulo Date: 2009-02-08 16:11:27 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Oracle custom Stored Procedures test (perhaps to fix NH-847 too) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/StoredProcedures.hbm.xml Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 13:37:25 UTC (rev 4072) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 16:11:27 UTC (rev 4073) @@ -933,6 +933,7 @@ <Compile Include="SessionFactoryTest\SessionFactorySerializationFixture.cs" /> <Compile Include="SqlTest\Custom\CustomSQLSupportTest.cs" /> <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" /> + <Compile Include="SqlTest\Custom\Oracle\OracleCustomSQLFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\Version.cs" /> <Compile Include="SecondLevelCacheTest\AnotherItem.cs" /> @@ -1655,6 +1656,8 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="SqlTest\Custom\Oracle\Mappings.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Custom\Oracle\StoredProcedures.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1619\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1665\Mappings.hbm.xml" /> <EmbeddedResource Include="Generatedkeys\ByTrigger\MyEntity.hbm.xml" /> @@ -1771,7 +1774,6 @@ </ItemGroup> <ItemGroup> <Folder Include="Properties\" /> - <Folder Include="SqlTest\Custom\Oracle\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/Mappings.hbm.xml 2009-02-08 16:11:27 UTC (rev 4073) @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! + + This version is for Oracle +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field"> + + <class name="Organization"> + <id name="id" unsaved-value="0" column="orgid"> + <generator class="increment"/> + </id> + <property name="name" not-null="true"/> + <set name="employments" + inverse="true" + order-by="DUMMY"> + <key column="employer"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + <loader query-ref="organizationEmployments"/> + </set> + <!-- query-list name="currentEmployments" + query-ref="organizationCurrentEmployments"--> + <loader query-ref="organization"/> + <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> + <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> + </class> + + <class name="Person"> + <id name="id" unsaved-value="0" column="perid"> + <generator class="increment"/> + </id> + <property name="name" not-null="true"/> + <loader query-ref="person"/> + <sql-insert callable="true" check="none">call createPerson(?,?)</sql-insert> + <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> + <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> + </class> + + <class name="Employment"> + <id name="employmentId" unsaved-value="0" column="empid"> + <generator class="increment"/> + </id> + <many-to-one name="employee" not-null="true" update="false"/> + <many-to-one name="employer" not-null="true" update="false"/> + <property name="startDate" not-null="true" update="false" insert="false"/> + <property name="endDate" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> + <property name="regionCode" update="false"/> + <property name="salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="VALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + <loader query-ref="employment"/> + <sql-insert> + INSERT INTO EMPLOYMENT + (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID) + VALUES (?, ?, CURRENT_DATE, UPPER(?), ?, ?, ?) + </sql-insert> + <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> + <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + <return-join alias="pers" property="emp.employee"/> + </resultset> + + <sql-query name="person"> + <return alias="p" class="Person" lock-mode="upgrade"/> + SELECT NAME AS {p.name}, PERID AS {p.id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/ + </sql-query> + + <sql-query name="organization"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + SELECT {org.*}, {emp.*} + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + WHERE org.ORGID=? + </sql-query> + + <sql-query name="allOrganizationsWithEmployees" flush-mode="never"> + <return alias="org" class="Organization"/> + SELECT DISTINCT org.NAME AS {org.name}, org.ORGID AS {org.id} + FROM ORGANIZATION org + INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID + </sql-query> + + + <sql-query name="employment"> + <return alias="emp" class="Employment"/> + SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer}, + STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate}, + REGIONCODE as {emp.regionCode}, EMPID AS {emp.id} + FROM EMPLOYMENT + WHERE EMPID = ? + </sql-query> + + <sql-query name="organizationEmployments"> + <load-collection alias="empcol" role="Organization.employments"/> + SELECT {empcol.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + <sql-query name="organizationCurrentEmployments"> + <return alias="emp" class="Employment"> + <return-property name="salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + <!-- Here we are remapping endDate. Notice that we can still use {emp.endDate} in the SQL. --> + <return-property name="endDate" column="myEndDate"/> + </return> + <synchronize table="EMPLOYMENT"/> + SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer}, + STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate}, + REGIONCODE as {emp.regionCode}, EMPID AS {emp.id}, VALUE, CURRENCY + FROM EMPLOYMENT + WHERE EMPLOYER = :id AND ENDDATE IS NULL + ORDER BY STARTDATE ASC + </sql-query> + + <database-object> + <create> + CREATE OR REPLACE FUNCTION testParamHandling (j number, i number) + RETURN SYS_REFCURSOR AS st_cursor SYS_REFCURSOR; + BEGIN + OPEN st_cursor FOR + SELECT j as value, i as value2 from dual; + RETURN st_cursor; + END; + </create> + <drop> + DROP FUNCTION testParamHandling + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE FUNCTION simpleScalar (j number) + RETURN SYS_REFCURSOR AS st_cursor SYS_REFCURSOR; + BEGIN + OPEN st_cursor FOR + SELECT j as value, 'getAll' as name from dual; + RETURN st_cursor; + END; + </create> + <drop> + DROP FUNCTION simpleScalar + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE FUNCTION allEmployments + RETURN SYS_REFCURSOR AS st_cursor SYS_REFCURSOR; + BEGIN + OPEN st_cursor FOR + SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, + REGIONCODE, EMPID, VALUE, CURRENCY + FROM EMPLOYMENT; + RETURN st_cursor; + END; + </create> + <drop> + DROP FUNCTION allEmployments + </drop> + </database-object> + + <database-object> + <create> + CREATE OR REPLACE PROCEDURE createPerson(p_name PERSON.NAME%TYPE, p_id PERSON.PERID%TYPE) + AS + rowcount INTEGER; + BEGIN + INSERT INTO PERSON ( PERID, NAME ) VALUES ( p_id, UPPER( p_name ) ); + rowcount := SQL%ROWCOUNT; + IF rowcount = 1 THEN + NULL; + ELSE + RAISE_APPLICATION_ERROR( -20001, 'Unexpected rowcount [' || rowcount || ']' ); + END IF; + END; + </create> + <drop> + DROP PROCEDURE createPerson; + </drop> + </database-object> + + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs 2009-02-08 16:11:27 UTC (rev 4073) @@ -0,0 +1,20 @@ +using System.Collections; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom.Oracle +{ + [TestFixture, Ignore("Not supported yet.")] + public class OracleCustomSQLFixture : CustomStoredProcSupportTest + { + protected override IList Mappings + { + get { return new[] { "SqlTest.Custom.Oracle.Mappings.hbm.xml", "SqlTest.Custom.Oracle.StoredProcedures.hbm.xml" }; } + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is Oracle8iDialect; + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/StoredProcedures.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/StoredProcedures.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/StoredProcedures.hbm.xml 2009-02-08 16:11:27 UTC (rev 4073) @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + This version is for Oracle drivers handling of stored procedures/functions. + + + NOTE: so far this is the JAVA syntax, probably we will do something different in .NET + or we can use the same syntax and solve the problem in each Oracle drive +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field"> + + <sql-query name="simpleScalar" callable="true"> + <return-scalar column="name" type="string"/> + <return-scalar column="value" type="long"/> + call simpleScalar(:number) + </sql-query> + + <sql-query name="paramhandling" callable="true"> + <return-scalar column="value" type="long"/> + <return-scalar column="value2" type="long"/> + call testParamHandling(?,?) + </sql-query> + + <sql-query name="paramhandling_mixed" callable="true"> + <return-scalar column="value" type="long"/> + <return-scalar column="value2" type="long"/> + call testParamHandling(?,:second) + </sql-query> + + <sql-query name="selectAllEmployments" callable="true"> + <return alias="emp" class="Employment"> + <return-property name="employee" column="EMPLOYEE"/> + <return-property name="employer" column="EMPLOYER"/> + <return-property name="startDate" column="STARTDATE"/> + <return-property name="endDate" column="ENDDATE"/> + <return-property name="regionCode" column="REGIONCODE"/> + <return-property name="employmentId" column="EMPID"/> + <return-property name="salary"> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return> + call allEmployments() + </sql-query> + +</hibernate-mapping> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2009-02-08 13:37:29
|
Revision: 4072 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4072&view=rev Author: fabiomaulo Date: 2009-02-08 13:37:25 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Reorganization of Tests about custom queries and StoredProcedure Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Oracle/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcs.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcsTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLTest.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 13:37:25 UTC (rev 4072) @@ -931,6 +931,8 @@ <Compile Include="ReflectionOptimizerTest\LcgFixture.cs" /> <Compile Include="SessionFactoryTest\Item.cs" /> <Compile Include="SessionFactoryTest\SessionFactorySerializationFixture.cs" /> + <Compile Include="SqlTest\Custom\CustomSQLSupportTest.cs" /> + <Compile Include="SqlTest\Custom\CustomStoredProcSupportTest.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" /> <Compile Include="Tools\hbm2ddl\SchemaUpdate\Version.cs" /> <Compile Include="SecondLevelCacheTest\AnotherItem.cs" /> @@ -950,15 +952,14 @@ <Compile Include="SqlCommandTest\TemplateFixture.cs" /> <Compile Include="SqlTest\Dimension.cs" /> <Compile Include="SqlTest\Employment.cs" /> - <Compile Include="SqlTest\FireBirdTest.cs" /> + <Compile Include="SqlTest\Custom\Firebird\FireBirdTest.cs" /> <Compile Include="SqlTest\Query\NativeSQLQueriesFixture.cs" /> - <Compile Include="SqlTest\HandSQLTest.cs" /> - <Compile Include="SqlTest\IdentityInsertWithStoredProcsTest.cs" /> + <Compile Include="SqlTest\Identity\IdentityInsertWithStoredProcsTest.cs" /> <Compile Include="SqlTest\Query\Item.cs" /> <Compile Include="SqlTest\MonetaryAmount.cs" /> <Compile Include="SqlTest\MonetaryAmountUserType.cs" /> - <Compile Include="SqlTest\MSSQLIdentityInsertWithStoredProcsTest.cs" /> - <Compile Include="SqlTest\MSSQLTest.cs" /> + <Compile Include="SqlTest\Identity\MsSQL\MSSQLIdentityInsertWithStoredProcsTest.cs" /> + <Compile Include="SqlTest\Custom\MsSQL\MSSQLTest.cs" /> <Compile Include="SqlTest\NullDateUserType.cs" /> <Compile Include="SqlTest\Order.cs" /> <Compile Include="SqlTest\Organization.cs" /> @@ -1252,7 +1253,7 @@ <EmbeddedResource Include="FilterTest\FilterMapping.hbm.xml" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="SqlTest\MSSQLEmployment.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Custom\MsSQL\MSSQLEmployment.hbm.xml" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="SqlTest\Query\NativeSQLQueries.hbm.xml" /> @@ -1301,7 +1302,7 @@ <EmbeddedResource Include="NHSpecificTest\NH606\Mapping.hbm.xml" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="SqlTest\FireBirdEmployment.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Custom\Firebird\FireBirdEmployment.hbm.xml" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="NHSpecificTest\NH732\Mappings.hbm.xml" /> @@ -1725,7 +1726,7 @@ <EmbeddedResource Include="EntityModeTest\Xml\Basic\AB.hbm.xml" /> <EmbeddedResource Include="EntityModeTest\Xml\Basic\Account.hbm.xml" /> <EmbeddedResource Include="EntityModeTest\Xml\Basic\Employer.hbm.xml" /> - <EmbeddedResource Include="SqlTest\MSSQLIdentityInsertWithStoredProcs.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Identity\MsSQL\MSSQLIdentityInsertWithStoredProcs.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1508\Mappings.hbm.xml" /> <EmbeddedResource Include="GenericTest\OrderedSetGeneric\OrderedSetFixture.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1293\Mappings.hbm.xml" /> @@ -1770,7 +1771,7 @@ </ItemGroup> <ItemGroup> <Folder Include="Properties\" /> - <Folder Include="SqlTest\Custom\" /> + <Folder Include="SqlTest\Custom\Oracle\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomSQLSupportTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,85 @@ +using System; +using System.Collections; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom +{ + public abstract class CustomSQLSupportTest: TestCase + { + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + protected static object GetFirstItem(IEnumerable it) + { + IEnumerator en = it.GetEnumerator(); + return en.MoveNext() ? en.Current : null; + } + + [Test] + public void HandSQL() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + object orgId = s.Save(jboss); + s.Save(ifa); + s.Save(gavin); + s.Save(emp); + t.Commit(); + + t = s.BeginTransaction(); + Person christian = new Person("Christian"); + s.Save(christian); + Employment emp2 = new Employment(christian, jboss, "EU"); + s.Save(emp2); + t.Commit(); + s.Close(); + + sessions.Evict(typeof(Organization)); + sessions.Evict(typeof(Person)); + sessions.Evict(typeof(Employment)); + + s = OpenSession(); + t = s.BeginTransaction(); + jboss = (Organization)s.Get(typeof(Organization), orgId); + Assert.AreEqual(jboss.Employments.Count, 2); + emp = (Employment)GetFirstItem(jboss.Employments); + gavin = emp.Employee; + Assert.AreEqual(gavin.Name, "GAVIN"); + Assert.AreEqual(s.GetCurrentLockMode(gavin), LockMode.Upgrade); + emp.EndDate = DateTime.Today; + Employment emp3 = new Employment(gavin, jboss, "US"); + s.Save(emp3); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + IEnumerator iter = s.GetNamedQuery("allOrganizationsWithEmployees").List().GetEnumerator(); + Assert.IsTrue(iter.MoveNext()); + Organization o = (Organization)iter.Current; + Assert.AreEqual(o.Employments.Count, 3); + + foreach (Employment e in o.Employments) + { + s.Delete(e); + } + + foreach (Employment e in o.Employments) + { + s.Delete(e.Employee); + } + s.Delete(o); + Assert.IsFalse(iter.MoveNext()); + s.Delete(ifa); + t.Commit(); + s.Close(); + } + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/CustomStoredProcSupportTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,73 @@ +using System; +using System.Collections; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom +{ + public abstract class CustomStoredProcSupportTest : CustomSQLSupportTest + { + [Test] + public void ScalarStoredProcedure() + { + ISession s = OpenSession(); + IQuery namedQuery = s.GetNamedQuery("simpleScalar"); + namedQuery.SetInt64("number", 43L); + IList list = namedQuery.List(); + object[] o = (object[])list[0]; + Assert.AreEqual(o[0], "getAll"); + Assert.AreEqual(o[1], 43L); + s.Close(); + } + + [Test] + public void ParameterHandling() + { + ISession s = OpenSession(); + + IQuery namedQuery = s.GetNamedQuery("paramhandling"); + namedQuery.SetInt64(0, 10L); + namedQuery.SetInt64(1, 20L); + IList list = namedQuery.List(); + object[] o = (Object[])list[0]; + Assert.AreEqual(o[0], 10L); + Assert.AreEqual(o[1], 20L); + + namedQuery = s.GetNamedQuery("paramhandling_mixed"); + namedQuery.SetInt64(0, 10L); + namedQuery.SetInt64("second", 20L); + list = namedQuery.List(); + o = (object[])list[0]; + Assert.AreEqual(o[0], 10L); + Assert.AreEqual(o[1], 20L); + s.Close(); + } + + [Test] + public void EntityStoredProcedure() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + s.Save(ifa); + s.Save(jboss); + s.Save(gavin); + s.Save(emp); + + IQuery namedQuery = s.GetNamedQuery("selectAllEmployments"); + IList list = namedQuery.List(); + Assert.IsTrue(list[0] is Employment); + s.Delete(emp); + s.Delete(ifa); + s.Delete(jboss); + s.Delete(gavin); + + t.Commit(); + s.Close(); + } + + } +} \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,235 @@ +<?xml version="1.0"?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! + + This version is for Firebird +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field.camelcase"> + + <class name="Organization" table="ORGANIZATION"> + <id name="Id" unsaved-value="0" column="ORGID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <set name="Employments" + inverse="true" + order-by="DUMMY"> + <key column="EMPLOYER"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + <loader query-ref="organizationEmployments"/> + </set> + <!-- query-list name="currentEmployments" + query-ref="organizationCurrentEmployments"--> + <loader query-ref="organization"/> + <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> + <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> + </class> + + <class name="Person" table="PERSON"> + <id name="Id" unsaved-value="0" column="PERID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <loader query-ref="person"/> + <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> + <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> + </class> + + <class name="Employment" table="EMPLOYMENT"> + <id name="employmentId" unsaved-value="0" column="EMPID"> + <generator class="increment"/> + </id> + <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/> + <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/> + <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/> + <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> + <property name="RegionCode" column="REGIONCODE" update="false"/> + <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="AVALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + <loader query-ref="employment"/> + <sql-insert> + INSERT INTO EMPLOYMENT + (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, AVALUE, CURRENCY, EMPID) + VALUES (?, ?, 'NOW', UPPER(?), ?, ?, ?) + </sql-insert> + <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, AVALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> + <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + <return-join alias="pers" property="emp.Employee"/> + </resultset> + + <sql-query name="person"> + <return alias="p" class="Person" lock-mode="upgrade"/> + SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? FOR UPDATE + </sql-query> + + <sql-query name="organization"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + SELECT {org.*}, {emp.*} + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + WHERE org.ORGID=? + </sql-query> + + + <!--sql-query name="organization"> + <return alias="org" class="Organization"/> + SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION + WHERE ORGID=? + </sql-query--> + + <sql-query name="allOrganizationsWithEmployees"> + <!-- TODO H3: add flush-mode="never" --> + <return alias="org" class="Organization"/> + SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id} + FROM ORGANIZATION org + INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID + </sql-query> + + <sql-query name="employment"> + <return alias="emp" class="Employment"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id} + FROM EMPLOYMENT + WHERE EMPID = ? + </sql-query> + + <sql-query name="organizationEmployments"> + <load-collection alias="empcol" role="Organization.Employments"/> + SELECT {empcol.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + + <sql-query name="organizationCurrentEmployments"> + <return alias="emp" class="Employment"> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="AVALUE"/> + <return-column name="CURRENCY"/> + </return-property> + <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. --> + <return-property name="EndDate" column="myEndDate"/> + </return> + <synchronize table="EMPLOYMENT"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, AVALUE, CURRENCY + FROM EMPLOYMENT + WHERE EMPLOYER = :id AND ENDDATE IS NULL + ORDER BY STARTDATE ASC + </sql-query> + + <sql-query name="simpleScalar"> + <return-scalar column="name" type="string"/> + <return-scalar column="value1" type="long"/> + SELECT * FROM simpleScalar(:number) + </sql-query> + + <sql-query name="paramhandling"> + <return-scalar column="value1" type="long"/> + <return-scalar column="value2" type="long"/> + SELECT * FROM paramHandling( ?, ?) + </sql-query> + + <sql-query name="paramhandling_mixed"> + <return-scalar column="value1" type="long" /> + <return-scalar column="value2" type="long" /> + SELECT * FROM paramHandling( ?, :second) + </sql-query> + + <sql-query name="selectAllEmployments"> + <return class="Employment"> + <return-property name="Employee" column="EMPLOYEE"/> + <return-property name="Employer" column="EMPLOYER"/> + <return-property name="StartDate" column="STARTDATE"/> + <return-property name="EndDate" column="ENDDATE"/> + <return-property name="RegionCode" column="REGIONCODE"/> + <return-property name="id" column="EMPID"/> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="AVALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return> + SELECT * FROM selectAllEmployments + </sql-query> + + <database-object> + <create> +CREATE PROCEDURE selectAllEmployments +RETURNS(EMPLOYEE BIGINT, EMPLOYER BIGINT, STARTDATE TIMESTAMP, ENDDATE DATE, +REGIONCODE VARCHAR(255) CHARACTER SET WIN1252, EMPID BIGINT, AVALUE FLOAT, +CURRENCY VARCHAR(3) CHARACTER SET WIN1252) +AS +BEGIN +FOR SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, REGIONCODE, EMPID, AVALUE, CURRENCY FROM EMPLOYMENT +INTO :EMPLOYEE, :EMPLOYER, :STARTDATE, :ENDDATE, :REGIONCODE, :EMPID, :AVALUE, :CURRENCY DO +SUSPEND; +END; + </create> + <drop> + DROP PROCEDURE selectAllEmployments + </drop> + </database-object> + + <database-object> + <create> +CREATE PROCEDURE paramHandling(J INTEGER, I INTEGER) +RETURNS(VALUE1 INTEGER, VALUE2 INTEGER) +AS +BEGIN +VALUE1 = :J; +VALUE2 = :I; +SUSPEND; +END; + </create> + <drop> + DROP PROCEDURE paramHandling + </drop> + </database-object> + + <database-object> + <create> +CREATE PROCEDURE simpleScalar(ANUMBER INTEGER) +RETURNS(VALUE1 INTEGER, NAME VARCHAR(10) CHARACTER SET UNICODE_FSS) +AS +BEGIN +VALUE1 = :ANUMBER; +NAME = 'getAll'; +SUSPEND; +END; + </create> + <drop> + DROP PROCEDURE simpleScalar + </drop> + </database-object> + +</hibernate-mapping> Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdEmployment.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,20 @@ +using System.Collections; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom.Firebird +{ + [TestFixture] + public class FireBirdTest : CustomStoredProcSupportTest + { + protected override IList Mappings + { + get { return new[] {"SqlTest.Custom.Firebird.FireBirdEmployment.hbm.xml"}; } + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is FirebirdDialect; + } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/Firebird/FireBirdTest.cs ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,221 @@ +<?xml version="1.0"?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! + + This version is for Sybase/mssql +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field.camelcase"> + + <class name="Organization" table="ORGANIZATION"> + <id name="Id" unsaved-value="0" column="ORGID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <set name="Employments" + inverse="true" + order-by="DUMMY"> + <key column="EMPLOYER"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + <loader query-ref="organizationEmployments"/> + </set> + <!-- query-list name="currentEmployments" + query-ref="organizationCurrentEmployments"--> + <loader query-ref="organization"/> + <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> + <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> + </class> + + <class name="Person" table="PERSON"> + <id name="Id" unsaved-value="0" column="PERID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <loader query-ref="person"/> + <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> + <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> + </class> + + <class name="Employment" table="EMPLOYMENT"> + <id name="employmentId" unsaved-value="0" column="EMPID"> + <generator class="increment"/> + </id> + <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/> + <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/> + <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/> + <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> + <property name="RegionCode" column="REGIONCODE" update="false"/> + <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="VALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + <loader query-ref="employment"/> + <sql-insert> + INSERT INTO EMPLOYMENT + (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID) + VALUES (?, ?, getdate(), UPPER(?), ?, ?, ?) + </sql-insert> + <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> + <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + <return-join alias="pers" property="emp.Employee"/> + </resultset> + + <sql-query name="person"> + <return alias="p" class="Person" lock-mode="upgrade"/> + SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/ + </sql-query> + + <sql-query name="organization"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + SELECT {org.*}, {emp.*} + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + WHERE org.ORGID=? + </sql-query> + + + <!--sql-query name="organization"> + <return alias="org" class="Organization"/> + SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION + WHERE ORGID=? + </sql-query--> + + <sql-query name="allOrganizationsWithEmployees"> + <!-- TODO H3: add flush-mode="never" --> + <return alias="org" class="Organization"/> + SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id} + FROM ORGANIZATION org + INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID + </sql-query> + + + + + + <sql-query name="employment"> + <return alias="emp" class="Employment"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId} + FROM EMPLOYMENT + WHERE EMPID = ? + </sql-query> + + <sql-query name="organizationEmployments"> + <load-collection alias="empcol" role="Organization.Employments"/> + SELECT {empcol.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + + <sql-query name="organizationCurrentEmployments"> + <return alias="emp" class="Employment"> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. --> + <return-property name="EndDate" column="myEndDate"/> + </return> + <synchronize table="EMPLOYMENT"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.employmentId}, VALUE, CURRENCY + FROM EMPLOYMENT + WHERE EMPLOYER = :id AND ENDDATE IS NULL + ORDER BY STARTDATE ASC + </sql-query> + + <sql-query name="simpleScalar"> + <return-scalar column="name" type="string"/> + <return-scalar column="value" type="long"/> + exec simpleScalar :number + </sql-query> + + <sql-query name="paramhandling"> + <return-scalar column="value" type="long"/> + <return-scalar column="value2" type="long"/> + exec paramHandling ?, ? + </sql-query> + + <sql-query name="paramhandling_mixed"> + <return-scalar column="value" type="long" /> + <return-scalar column="value2" type="long" /> + exec paramHandling ?, :second + </sql-query> + + <sql-query name="selectAllEmployments"> + <return class="Employment"> + <return-property name="Employee" column="EMPLOYEE"/> + <return-property name="Employer" column="EMPLOYER"/> + <return-property name="StartDate" column="STARTDATE"/> + <return-property name="EndDate" column="ENDDATE"/> + <return-property name="RegionCode" column="REGIONCODE"/> + <return-property name="id" column="EMPID"/> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return> + exec selectAllEmployments + </sql-query> + + <database-object> + <create> + CREATE PROCEDURE selectAllEmployments AS + SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, + REGIONCODE, EMPID, VALUE, CURRENCY + FROM EMPLOYMENT + </create> + <drop> + DROP PROCEDURE selectAllEmployments + </drop> + </database-object> + + <database-object> + <create> + CREATE PROCEDURE paramHandling @j int, @i int AS + SELECT @j as value, @i as value2 + </create> + <drop> + DROP PROCEDURE paramHandling + </drop> + </database-object> + + <database-object> + <create> + CREATE PROCEDURE simpleScalar @number int AS + SELECT @number as value, 'getAll' as name + </create> + <drop> + DROP PROCEDURE simpleScalar + </drop> + </database-object> + +</hibernate-mapping> Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLEmployment.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,20 @@ +using System.Collections; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Custom.MsSQL +{ + [TestFixture] + public class MSSQLTest : CustomStoredProcSupportTest + { + protected override IList Mappings + { + get { return new[] { "SqlTest.Custom.MsSQL.MSSQLEmployment.hbm.xml" }; } + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is MsSql2000Dialect; + } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/MsSQL/MSSQLTest.cs ___________________________________________________________________ Added: svn:mergeinfo + Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072) @@ -1,235 +0,0 @@ -<?xml version="1.0"?> -<!-- - - This mapping demonstrates the use of Hibernate with - all-handwritten SQL! - - This version is for Firebird ---> -<hibernate-mapping - xmlns="urn:nhibernate-mapping-2.2" - assembly="NHibernate.Test" - namespace="NHibernate.Test.SqlTest" - default-access="field.camelcase"> - - <class name="Organization" table="ORGANIZATION"> - <id name="Id" unsaved-value="0" column="ORGID"> - <generator class="increment"/> - </id> - <property name="Name" not-null="true" column="NAME"/> - <set name="Employments" - inverse="true" - order-by="DUMMY"> - <key column="EMPLOYER"/> - <!-- only needed for DDL generation --> - <one-to-many class="Employment"/> - <loader query-ref="organizationEmployments"/> - </set> - <!-- query-list name="currentEmployments" - query-ref="organizationCurrentEmployments"--> - <loader query-ref="organization"/> - <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> - <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> - <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> - </class> - - <class name="Person" table="PERSON"> - <id name="Id" unsaved-value="0" column="PERID"> - <generator class="increment"/> - </id> - <property name="Name" not-null="true" column="NAME"/> - <loader query-ref="person"/> - <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert> - <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> - <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> - </class> - - <class name="Employment" table="EMPLOYMENT"> - <id name="employmentId" unsaved-value="0" column="EMPID"> - <generator class="increment"/> - </id> - <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/> - <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/> - <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/> - <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> - <property name="RegionCode" column="REGIONCODE" update="false"/> - <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> - <column name="AVALUE" sql-type="float"/> - <column name="CURRENCY"/> - </property> - <loader query-ref="employment"/> - <sql-insert> - INSERT INTO EMPLOYMENT - (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, AVALUE, CURRENCY, EMPID) - VALUES (?, ?, 'NOW', UPPER(?), ?, ?, ?) - </sql-insert> - <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, AVALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> - <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> - </class> - - <resultset name="org-emp-regionCode"> - <return-scalar column="regionCode" type="string"/> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.Employments"/> - </resultset> - - <resultset name="org-emp-person"> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.Employments"/> - <return-join alias="pers" property="emp.Employee"/> - </resultset> - - <sql-query name="person"> - <return alias="p" class="Person" lock-mode="upgrade"/> - SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? FOR UPDATE - </sql-query> - - <sql-query name="organization"> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.Employments"/> - SELECT {org.*}, {emp.*} - FROM ORGANIZATION org - LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER - WHERE org.ORGID=? - </sql-query> - - - <!--sql-query name="organization"> - <return alias="org" class="Organization"/> - SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION - WHERE ORGID=? - </sql-query--> - - <sql-query name="allOrganizationsWithEmployees"> - <!-- TODO H3: add flush-mode="never" --> - <return alias="org" class="Organization"/> - SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id} - FROM ORGANIZATION org - INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID - </sql-query> - - <sql-query name="employment"> - <return alias="emp" class="Employment"/> - SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, - STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, - REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id} - FROM EMPLOYMENT - WHERE EMPID = ? - </sql-query> - - <sql-query name="organizationEmployments"> - <load-collection alias="empcol" role="Organization.Employments"/> - SELECT {empcol.*} - FROM EMPLOYMENT empcol - WHERE EMPLOYER = :id - ORDER BY STARTDATE ASC, EMPLOYEE ASC - </sql-query> - - - <sql-query name="organizationCurrentEmployments"> - <return alias="emp" class="Employment"> - <return-property name="Salary"> - <!-- as multi column properties are not supported via the - {}-syntax, we need to provide an explicit column list for salary via <return-property> --> - <return-column name="AVALUE"/> - <return-column name="CURRENCY"/> - </return-property> - <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. --> - <return-property name="EndDate" column="myEndDate"/> - </return> - <synchronize table="EMPLOYMENT"/> - SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, - STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, - REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, AVALUE, CURRENCY - FROM EMPLOYMENT - WHERE EMPLOYER = :id AND ENDDATE IS NULL - ORDER BY STARTDATE ASC - </sql-query> - - <sql-query name="simpleScalar"> - <return-scalar column="name" type="string"/> - <return-scalar column="value1" type="long"/> - SELECT * FROM simpleScalar(:number) - </sql-query> - - <sql-query name="paramhandling"> - <return-scalar column="value1" type="long"/> - <return-scalar column="value2" type="long"/> - SELECT * FROM paramHandling( ?, ?) - </sql-query> - - <sql-query name="paramhandling_mixed"> - <return-scalar column="value1" type="long" /> - <return-scalar column="value2" type="long" /> - SELECT * FROM paramHandling( ?, :second) - </sql-query> - - <sql-query name="selectAllEmployments"> - <return class="Employment"> - <return-property name="Employee" column="EMPLOYEE"/> - <return-property name="Employer" column="EMPLOYER"/> - <return-property name="StartDate" column="STARTDATE"/> - <return-property name="EndDate" column="ENDDATE"/> - <return-property name="RegionCode" column="REGIONCODE"/> - <return-property name="id" column="EMPID"/> - <return-property name="Salary"> - <!-- as multi column properties are not supported via the - {}-syntax, we need to provide an explicit column list for salary via <return-property> --> - <return-column name="AVALUE"/> - <return-column name="CURRENCY"/> - </return-property> - </return> - SELECT * FROM selectAllEmployments - </sql-query> - - <database-object> - <create> -CREATE PROCEDURE selectAllEmployments -RETURNS(EMPLOYEE BIGINT, EMPLOYER BIGINT, STARTDATE TIMESTAMP, ENDDATE DATE, -REGIONCODE VARCHAR(255) CHARACTER SET WIN1252, EMPID BIGINT, AVALUE FLOAT, -CURRENCY VARCHAR(3) CHARACTER SET WIN1252) -AS -BEGIN -FOR SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE, REGIONCODE, EMPID, AVALUE, CURRENCY FROM EMPLOYMENT -INTO :EMPLOYEE, :EMPLOYER, :STARTDATE, :ENDDATE, :REGIONCODE, :EMPID, :AVALUE, :CURRENCY DO -SUSPEND; -END; - </create> - <drop> - DROP PROCEDURE selectAllEmployments - </drop> - </database-object> - - <database-object> - <create> -CREATE PROCEDURE paramHandling(J INTEGER, I INTEGER) -RETURNS(VALUE1 INTEGER, VALUE2 INTEGER) -AS -BEGIN -VALUE1 = :J; -VALUE2 = :I; -SUSPEND; -END; - </create> - <drop> - DROP PROCEDURE paramHandling - </drop> - </database-object> - - <database-object> - <create> -CREATE PROCEDURE simpleScalar(ANUMBER INTEGER) -RETURNS(VALUE1 INTEGER, NAME VARCHAR(10) CHARACTER SET UNICODE_FSS) -AS -BEGIN -VALUE1 = :ANUMBER; -NAME = 'getAll'; -SUSPEND; -END; - </create> - <drop> - DROP PROCEDURE simpleScalar - </drop> - </database-object> - -</hibernate-mapping> Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/FireBirdTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -1,21 +0,0 @@ -using System; -using System.Collections; -using NHibernate.Dialect; -using NUnit.Framework; - -namespace NHibernate.Test.SqlTest -{ - [TestFixture] - public class FireBirdTest : HandSQLTest - { - protected override IList Mappings - { - get { return new string[] {"SqlTest.FireBirdEmployment.hbm.xml"}; } - } - - protected override System.Type GetDialect() - { - return typeof(FirebirdDialect); - } - } -} \ No newline at end of file Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/HandSQLTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -1,162 +0,0 @@ -using System; -using System.Collections; -using NHibernate.Cfg; -using NUnit.Framework; - -namespace NHibernate.Test.SqlTest -{ - public abstract class HandSQLTest : TestCase - { - private static object GetFirstItem(IEnumerable it) - { - IEnumerator en = it.GetEnumerator(); - return en.MoveNext() ? en.Current : null; - } - - protected override string MappingsAssembly - { - get { return "NHibernate.Test"; } - } - - protected abstract System.Type GetDialect(); - - private void CheckDialect() - { - if (!GetDialect().IsInstanceOfType(Dialect)) - Assert.Ignore("This test is specific for " + GetDialect()); - } - - protected override void Configure(Configuration cfg) - { - CheckDialect(); - base.Configure(cfg); - } - - [Test] - public void HandSQL() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - object orgId = s.Save(jboss); - s.Save(ifa); - s.Save(gavin); - s.Save(emp); - t.Commit(); - - t = s.BeginTransaction(); - Person christian = new Person("Christian"); - s.Save(christian); - Employment emp2 = new Employment(christian, jboss, "EU"); - s.Save(emp2); - t.Commit(); - s.Close(); - - sessions.Evict(typeof(Organization)); - sessions.Evict(typeof(Person)); - sessions.Evict(typeof(Employment)); - - s = OpenSession(); - t = s.BeginTransaction(); - jboss = (Organization) s.Get(typeof(Organization), orgId); - Assert.AreEqual(jboss.Employments.Count, 2); - emp = (Employment) GetFirstItem(jboss.Employments); - gavin = emp.Employee; - Assert.AreEqual(gavin.Name, "GAVIN"); - Assert.AreEqual(s.GetCurrentLockMode(gavin), LockMode.Upgrade); - emp.EndDate = DateTime.Today; - Employment emp3 = new Employment(gavin, jboss, "US"); - s.Save(emp3); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - IEnumerator iter = s.GetNamedQuery("allOrganizationsWithEmployees").List().GetEnumerator(); - Assert.IsTrue(iter.MoveNext()); - Organization o = (Organization) iter.Current; - Assert.AreEqual(o.Employments.Count, 3); - - foreach (Employment e in o.Employments) - { - s.Delete(e); - } - - foreach (Employment e in o.Employments) - { - s.Delete(e.Employee); - } - s.Delete(o); - Assert.IsFalse(iter.MoveNext()); - s.Delete(ifa); - t.Commit(); - s.Close(); - } - - [Test] - public void ScalarStoredProcedure() - { - ISession s = OpenSession(); - IQuery namedQuery = s.GetNamedQuery("simpleScalar"); - namedQuery.SetInt64("number", 43L); - IList list = namedQuery.List(); - object[] o = (object[]) list[0]; - Assert.AreEqual(o[0], "getAll"); - Assert.AreEqual(o[1], 43L); - s.Close(); - } - - [Test] - public void ParameterHandling() - { - ISession s = OpenSession(); - - IQuery namedQuery = s.GetNamedQuery("paramhandling"); - namedQuery.SetInt64(0, 10L); - namedQuery.SetInt64(1, 20L); - IList list = namedQuery.List(); - object[] o = (Object[]) list[0]; - Assert.AreEqual(o[0], 10L); - Assert.AreEqual(o[1], 20L); - - namedQuery = s.GetNamedQuery("paramhandling_mixed"); - namedQuery.SetInt64(0, 10L); - namedQuery.SetInt64("second", 20L); - list = namedQuery.List(); - o = (object[]) list[0]; - Assert.AreEqual(o[0], 10L); - Assert.AreEqual(o[1], 20L); - s.Close(); - } - - [Test] - public void EntityStoredProcedure() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - s.Save(ifa); - s.Save(jboss); - s.Save(gavin); - s.Save(emp); - - IQuery namedQuery = s.GetNamedQuery("selectAllEmployments"); - IList list = namedQuery.List(); - Assert.IsTrue(list[0] is Employment); - s.Delete(emp); - s.Delete(ifa); - s.Delete(jboss); - s.Delete(gavin); - - t.Commit(); - s.Close(); - } - } -} \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,67 @@ +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Identity +{ + public abstract class IdentityInsertWithStoredProcsTest : TestCase + { + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + protected abstract string GetExpectedInsertOrgLogStatement(string orgName); + + /// <summary> + /// Organization should be mappend with "identity" id strategy AND custom sql-insert (a stored proc). + /// The insert stored proc will return the new primary key and NH should recognize it and apply it + /// just like a normal insert. + /// </summary> + [Test] + public void InsertUsesStoredProc() + { + using (var spy = new SqlLogSpy()) + { + Organization ifa; + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + ifa = new Organization("IFA"); + s.Save(ifa); + t.Commit(); + } + + Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents"); + Assert.AreEqual(1, ifa.Id, "ifa.Id"); + Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 1"); + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Delete(ifa); + t.Commit(); + } + } + + using (var spy = new SqlLogSpy()) + { + Organization efa; + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + efa = new Organization("EFA"); + s.Save(efa); + t.Commit(); + } + + Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents"); + Assert.AreEqual(2, efa.Id, "efa.Id"); + Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 2"); + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Delete(efa); + t.Commit(); + } + } + } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/IdentityInsertWithStoredProcsTest.cs ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcs.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,201 @@ +<?xml version="1.0"?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! + + This version is for Sybase/mssql +--> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest" + default-access="field.camelcase"> + + <class name="Organization" table="ORGANIZATION"> + <id name="Id" unsaved-value="0" column="ORGID"> + <generator class="identity"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <set name="Employments" + inverse="true" + order-by="DUMMY"> + <key column="EMPLOYER"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + <loader query-ref="organizationEmployments"/> + </set> + <!-- query-list name="currentEmployments" + query-ref="organizationCurrentEmployments"--> + <loader query-ref="organization"/> + <sql-insert>exec nh_organization_native_id_insert ?</sql-insert> + <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-update> + <sql-delete>DELETE FROM ORGANIZATION WHERE ORGID=?</sql-delete> + </class> + + <class name="Person" table="PERSON"> + <id name="Id" unsaved-value="0" column="PERID"> + <generator class="increment"/> + </id> + <property name="Name" not-null="true" column="NAME"/> + <loader query-ref="person"/> + <sql-insert>INSERT INTO PERSON (NAME, PERID) VALUES ( UPPER(?), ? )</sql-insert> + <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE PERID=?</sql-update> + <sql-delete>DELETE FROM PERSON WHERE PERID=?</sql-delete> + </class> + + <class name="Employment" table="EMPLOYMENT"> + <id name="employmentId" unsaved-value="0" column="EMPID"> + <generator class="increment"/> + </id> + <many-to-one name="Employee" column="EMPLOYEE" not-null="true" update="false"/> + <many-to-one name="Employer" column="EMPLOYER" not-null="true" update="false"/> + <property name="StartDate" column="STARTDATE" not-null="true" update="false" insert="false"/> + <property name="EndDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test"/> + <property name="RegionCode" column="REGIONCODE" update="false"/> + <property name="Salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="VALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + <loader query-ref="employment"/> + <sql-insert> + INSERT INTO EMPLOYMENT + (EMPLOYEE, EMPLOYER, STARTDATE, REGIONCODE, VALUE, CURRENCY, EMPID) + VALUES (?, ?, getdate(), UPPER(?), ?, ?, ?) + </sql-insert> + <sql-update>UPDATE EMPLOYMENT SET ENDDATE=?, VALUE=?, CURRENCY=? WHERE EMPID=?</sql-update> + <sql-delete>DELETE FROM EMPLOYMENT WHERE EMPID=?</sql-delete> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + <return-join alias="pers" property="emp.Employee"/> + </resultset> + + <sql-query name="person"> + <return alias="p" class="Person" lock-mode="upgrade"/> + SELECT NAME AS {p.Name}, PERID AS {p.Id} FROM PERSON WHERE PERID=? /*FOR UPDATE*/ + </sql-query> + + <sql-query name="organization"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.Employments"/> + SELECT {org.*}, {emp.*} + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + WHERE org.ORGID=? + </sql-query> + + + <!--sql-query name="organization"> + <return alias="org" class="Organization"/> + SELECT NAME AS {org.name}, ORGID AS {org.id} FROM ORGANIZATION + WHERE ORGID=? + </sql-query--> + + <sql-query name="allOrganizationsWithEmployees" flush-mode="never"> + <return alias="org" class="Organization"/> + SELECT DISTINCT org.NAME AS {org.Name}, org.ORGID AS {org.Id} + FROM ORGANIZATION org + INNER JOIN EMPLOYMENT e ON e.EMPLOYER = org.ORGID + </sql-query> + + <sql-query name="employment"> + <return alias="emp" class="Employment"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id} + FROM EMPLOYMENT + WHERE EMPID = ? + </sql-query> + + <sql-query name="organizationEmployments"> + <load-collection alias="empcol" role="Organization.Employments"/> + SELECT {empcol.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + + <sql-query name="organizationCurrentEmployments"> + <return alias="emp" class="Employment"> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + <!-- Here we are remapping endDate. Notice that we can still use {emp.EndDate} in the SQL. --> + <return-property name="EndDate" column="myEndDate"/> + </return> + <synchronize table="EMPLOYMENT"/> + SELECT EMPLOYEE AS {emp.Employee}, EMPLOYER AS {emp.Employer}, + STARTDATE AS {emp.StartDate}, ENDDATE AS {emp.EndDate}, + REGIONCODE as {emp.RegionCode}, EMPID AS {emp.Id}, VALUE, CURRENCY + FROM EMPLOYMENT + WHERE EMPLOYER = :id AND ENDDATE IS NULL + ORDER BY STARTDATE ASC + </sql-query> + + <sql-query name="simpleScalar"> + <return-scalar column="name" type="string"/> + <return-scalar column="value" type="long"/> + exec simpleScalar :number + </sql-query> + + <sql-query name="paramhandling"> + <return-scalar column="value" type="long"/> + <return-scalar column="value2" type="long"/> + exec paramHandling ?, ? + </sql-query> + + <sql-query name="paramhandling_mixed"> + <return-scalar column="value" type="long" /> + <return-scalar column="value2" type="long" /> + exec paramHandling ?, :second + </sql-query> + + <sql-query name="selectAllEmployments"> + <return class="Employment"> + <return-property name="Employee" column="EMPLOYEE"/> + <return-property name="Employer" column="EMPLOYER"/> + <return-property name="StartDate" column="STARTDATE"/> + <return-property name="EndDate" column="ENDDATE"/> + <return-property name="RegionCode" column="REGIONCODE"/> + <return-property name="id" column="EMPID"/> + <return-property name="Salary"> + <!-- as multi column properties are not supported via the + {}-syntax, we need to provide an explicit column list for salary via <return-property> --> + <return-column name="VALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return> + exec selectAllEmployments + </sql-query> + + <database-object> + <create> + CREATE PROCEDURE nh_organization_native_id_insert + ( + @NAME as varchar + ) + AS + BEGIN + INSERT INTO organization(NAME) VALUES(@NAME) + SELECT SCOPE_IDENTITY() + END + </create> + <drop> + IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'dbo.nh_organization_native_id_insert') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) + DROP PROCEDURE dbo.nh_organization_native_id_insert + </drop> + </database-object> +</hibernate-mapping> Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcs.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLIdentityInsertWithStoredProcsTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -0,0 +1,25 @@ +using System.Collections; +using NHibernate.Dialect; +using NUnit.Framework; + +namespace NHibernate.Test.SqlTest.Identity.MsSQL +{ + [TestFixture] + public class MSSQLIdentityInsertWithStoredProcsTest : IdentityInsertWithStoredProcsTest + { + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is MsSql2000Dialect; + } + + protected override string GetExpectedInsertOrgLogStatement(string orgName) + { + return string.Format("exec nh_organization_native_id_insert @p0; @p0 = '{0}'", orgName); + } + + protected override IList Mappings + { + get { return new[] { "SqlTest.Identity.MsSQL.MSSQLIdentityInsertWithStoredProcs.hbm.xml" }; } + } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs ___________________________________________________________________ Added: svn:mergeinfo + Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/IdentityInsertWithStoredProcsTest.cs 2009-02-08 13:37:25 UTC (rev 4072) @@ -1,68 +0,0 @@ -using NUnit.Framework; - -namespace NHibernate.Test.SqlTest -{ - // http://jira.nhibernate.org/browse/NH-727 - public abstract class IdentityInsertWithStoredProcsTest : TestCase - { - protected override string MappingsAssembly - { - get { return "NHibernate.Test"; } - } - - protected abstract string GetExpectedInsertOrgLogStatement(string orgName); - - /// <summary> - /// Organization should be mappend with "identity" id strategy AND custom sql-insert (a stored proc). - /// The insert stored proc will return the new primary key and NH should recognize it and apply it - /// just like a normal insert. - /// </summary> - [Test] - public void InsertUsesStoredProc() - { - using (var spy = new SqlLogSpy()) - { - Organization ifa; - using (ISession s = OpenSession()) - using (ITransaction t = s.BeginTransaction()) - { - ifa = new Organization("IFA"); - s.Save(ifa); - t.Commit(); - } - - Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents"); - Assert.AreEqual(1, ifa.Id, "ifa.Id"); - Assert.AreEqual(GetExpectedInsertOrgLogStatement("IFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 1"); - using (ISession s = OpenSession()) - using (ITransaction t = s.BeginTransaction()) - { - s.Delete(ifa); - t.Commit(); - } - } - - using (var spy = new SqlLogSpy()) - { - Organization efa; - using (ISession s = OpenSession()) - using (ITransaction t = s.BeginTransaction()) - { - efa = new Organization("EFA"); - s.Save(efa); - t.Commit(); - } - - Assert.AreEqual(1, spy.Appender.GetEvents().Length, "Num loggedEvents"); - Assert.AreEqual(2, efa.Id, "efa.Id"); - Assert.AreEqual(GetExpectedInsertOrgLogStatement("EFA"), spy.Appender.GetEvents()[0].MessageObject, "Message 2"); - using (ISession s = OpenSession()) - using (ITransaction t = s.BeginTransaction()) - { - s.Delete(efa); - t.Commit(); - } - } - } - } -} \ No newline at end of file Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/MSSQLEmployment.hbm.xml 2009-02-08 13:37:25 UTC (rev 4072) @@ -1,221 +0,0 @@ -<?xml version="1.0"?> -<!-- - - This mapping demonstrates the use of Hibernate with - all-handwritten SQL! - - This version is for Sybase/mssql ---> -<hibernate-mapping - xmlns="urn:nhibernate-mapping-2.2" - assembly="NHibernate.Test" - namespace="NHibernate.Test.SqlTest" - default-access="field.camelcase"> - - <class name="Organization" table="ORGANIZATION"> - <id name="Id" unsaved-value="0" column="ORGID"> - <generator class="increment"/> - </id> - <property name="Name" not-null="true" column="NAME"/> - <set name="Employments" - inverse="true" - order-by="DUMMY"> - <key column="EMPLOYER"/> - <!-- only needed for DDL generation --> - <one-to-many class="Employment"/> - <loader query-ref="organizationEmployments"/> - </set> - <!-- query-list name="currentEmployments" - query-ref="organizationCurrentEmployments"--> - <loader query-ref="organization"/> - <sql-insert>INSERT INTO ORGANIZATION (NAME, ORGID) VALUES ( UPPER(?), ? )</sql-insert> - <sql-update>UPDATE ORGANIZATION SET NAME=UPPER(?) WHERE ORGID=?</sql-upd... [truncated message content] |
From: <fab...@us...> - 2009-02-08 12:46:26
|
Revision: 4071 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4071&view=rev Author: fabiomaulo Date: 2009-02-08 12:46:06 +0000 (Sun, 08 Feb 2009) Log Message: ----------- Reorganization of Tests about custom queries Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/SqlTest/Custom/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueries.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/SelfReferencingCollectionLoadTest.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/SqlTest/General.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/GeneralTest.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.cs trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.hbm.xml trunk/nhibernate/src/NHibernate.Test/SqlTest/SelfReferencingCollectionLoadTest.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-07 22:32:27 UTC (rev 4070) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-02-08 12:46:06 UTC (rev 4071) @@ -951,10 +951,10 @@ <Compile Include="SqlTest\Dimension.cs" /> <Compile Include="SqlTest\Employment.cs" /> <Compile Include="SqlTest\FireBirdTest.cs" /> - <Compile Include="SqlTest\GeneralTest.cs" /> + <Compile Include="SqlTest\Query\NativeSQLQueriesFixture.cs" /> <Compile Include="SqlTest\HandSQLTest.cs" /> <Compile Include="SqlTest\IdentityInsertWithStoredProcsTest.cs" /> - <Compile Include="SqlTest\Item.cs" /> + <Compile Include="SqlTest\Query\Item.cs" /> <Compile Include="SqlTest\MonetaryAmount.cs" /> <Compile Include="SqlTest\MonetaryAmountUserType.cs" /> <Compile Include="SqlTest\MSSQLIdentityInsertWithStoredProcsTest.cs" /> @@ -964,7 +964,7 @@ <Compile Include="SqlTest\Organization.cs" /> <Compile Include="SqlTest\Person.cs" /> <Compile Include="SqlTest\Product.cs" /> - <Compile Include="SqlTest\SelfReferencingCollectionLoadTest.cs" /> + <Compile Include="SqlTest\Query\SelfReferencingCollectionLoadTest.cs" /> <Compile Include="SqlTest\SpaceShip.cs" /> <Compile Include="SqlTest\Speech.cs" /> <Compile Include="Stateless\Document.cs" /> @@ -1255,7 +1255,7 @@ <EmbeddedResource Include="SqlTest\MSSQLEmployment.hbm.xml" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="SqlTest\General.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Query\NativeSQLQueries.hbm.xml" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="NHSpecificTest\NH719\Mappings.hbm.xml" /> @@ -1343,7 +1343,7 @@ <EmbeddedResource Include="NHSpecificTest\NH776\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="SqlTest\Item.hbm.xml" /> + <EmbeddedResource Include="SqlTest\Query\Item.hbm.xml" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="Criteria\Enrolment.hbm.xml" /> @@ -1770,6 +1770,7 @@ </ItemGroup> <ItemGroup> <Folder Include="Properties\" /> + <Folder Include="SqlTest\Custom\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. @@ -1787,4 +1788,4 @@ if exist "$(ProjectDir)hibernate.cfg.xml" (copy "$(ProjectDir)hibernate.cfg.xml" "hibernate.cfg.xml") copy /y "..\..\..\NHibernate.DomainModel\ABC.hbm.xml" "ABC.hbm.xml"</PostBuildEvent> </PropertyGroup> -</Project> +</Project> \ No newline at end of file Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/General.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/General.hbm.xml 2009-02-07 22:32:27 UTC (rev 4070) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/General.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) @@ -1,263 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!-- - - This mapping demonstrates the use of Hibernate with - all-handwritten SQL! - - This version is for Sybase/mssql ---> - -<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="field.camelcase" - namespace="NHibernate.Test.SqlTest" - assembly="NHibernate.Test"> - - <class name="Organization" table="ORGANIZATION"> - <id name="id" unsaved-value="0" column="ORGID"> - <generator class="increment"/> - </id> - <property name="name" column="NAME" not-null="true"/> - <set lazy="true" name="employments" - inverse="true"> - <key column="EMPLOYER"/> - <!-- only needed for DDL generation --> - <one-to-many class="Employment"/> - </set> - </class> - - <class name="Person" table="PERSON"> - <id name="id" unsaved-value="0" column="PERID"> - <generator class="increment"/> - </id> - <property name="name" column="NAME" not-null="true"/> - - </class> - - <class name="Employment" table="EMPLOYMENT"> - <id name="employmentId" unsaved-value="0" column="EMPID"> - <generator class="increment"/> - </id> - <many-to-one name="employee" column="EMPLOYEE" not-null="true" update="false"/> - <many-to-one name="employer" column="EMPLOYER" not-null="true" update="false"/> - <property name="startDate" column="STARTDATE" not-null="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" /> - <property name="endDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" /> - <property name="regionCode" column="REGIONCODE" update="false"/> - <property name="salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> - <column name="AVALUE" sql-type="float"/> - <column name="CURRENCY"/> - </property> - </class> - - <class name="Order" table="TBL_ORDER"> - <composite-id name="orderId" class="Order+OrderIdType"> - <key-property name="orgid"/> - <key-property name="ordernumber"/> - </composite-id> - - <many-to-one name="product"> - <column name="PROD_ORGID"/> - <column name="PROD_NO"/> - </many-to-one> - <many-to-one name="person"/> - </class> - - <class name="Product"> - <composite-id name="productId" class="Product+ProductIdType"> - <key-property name="orgid"/> - <key-property name="productnumber"/> - </composite-id> - - <property name="name"/> - - <set name="orders" inverse="true"> - <key> - <column name="PROD_ORGID"/> - <column name="PROD_NO"/> - </key> - <one-to-many class="Order"/> - </set> - </class> - - <class name="Dimension"> - <id name="id" type="long"> - <generator class="increment"/> - </id> - <property name="length" column="d_len"/> - <property name="width" column="d_width"/> - </class> - - <class name="SpaceShip"> - <id name="id" type="integer"> - <generator class="increment"/> - </id> - <property name="name" column="fld_name"/> - <property name="model" column="fld_model"/> - <property name="speed" column="fld_speed"/> - <component name="dimensions"> - <property name="length" column="fld_length"/> - <property name="width" column="fld_width"/> - </component> - </class> - - <class name="Speech"> - <id name="id" type="integer"> - <generator class="increment"/> - </id> - <property name="name" column="name"/> - <property name="length" column="flength"/> - </class> - - <resultset name="org-emp-regionCode"> - <return-scalar column="regionCode" type="string"/> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.employments"/> - </resultset> - - <resultset name="org-emp-person"> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.employments"/> - <return-join alias="pers" property="emp.employee"/> - </resultset> - - - <resultset name="org-description"> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.employments"/> - </resultset> - - <resultset name="spaceship-vol"> - <return alias="sps" class="SpaceShip"> - <return-property name="id" column="id"/> - <return-property name="name" column="name"/> - <return-property name="model" column="model"/> - <return-property name="speed" column="speed"/> - <return-property name="dimensions.length" column="length"/> - <return-property name="dimensions.width" column="width"/> - </return> - <return-scalar column="surface" type="double" /> - <return-scalar column="volume" type="double" /> - </resultset> - - <resultset name="speech"> - <return alias="sp" class="Speech"> - <return-property name="id" column="id"/> - <return-property name="name" column="name"/> - <return-property name="length" column="flength"/> - </return> - <return-scalar column="scalarName" type="string" /> - </resultset> - - <sql-query name="spaceship" resultset-ref="spaceship-vol"> - select id as id, - fld_name as name, - fld_model as model, - fld_speed as speed, - fld_length as flength, - fld_width as width, - fld_length * fld_width as surface, - fld_length * fld_width *10 as volume - from SpaceShip - </sql-query> - - <sql-query name="orgNamesOnly"> - <return-scalar column="NAME" type="string"/> - SELECT org.NAME FROM ORGANIZATION org - </sql-query> - - <sql-query name="orgNamesAndOrgs"> - <return-scalar column="thename" type="string"/> - <return alias="org" class="Organization"/> - SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id} - FROM ORGANIZATION org - ORDER BY thename - </sql-query> - - <sql-query name="orgsAndOrgNames"> - <return alias="org" class="Organization"/> - <return-scalar column="thename" type="string"/> - SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id} - FROM ORGANIZATION org - ORDER BY thename - </sql-query> - - <sql-query name="orgIdsAndOrgNames"> - <return-scalar column="orgid" type="long"/> - <return-scalar column="thename" type="string"/> - SELECT NAME AS thename, ORGID AS orgid - FROM ORGANIZATION - ORDER BY thename - </sql-query> - - <sql-query name="AllEmploymentAsMapped"> - <return class="Employment"/> - SELECT * FROM EMPLOYMENT - </sql-query> - - <sql-query name="EmploymentAndPerson"> - <return class="Employment"/> - <return class="Person"/> - SELECT * FROM EMPLOYMENT, PERSON - </sql-query> - - <sql-query name="organizationEmploymentsExplicitAliases"> - <load-collection alias="empcol" role="Organization.employments"/> - SELECT empcol.EMPLOYER as {empcol.key}, empcol.EMPID as {empcol.element}, {empcol.element.*} - FROM EMPLOYMENT empcol - WHERE EMPLOYER = :id - ORDER BY STARTDATE ASC, EMPLOYEE ASC - </sql-query> - - <sql-query name="organizationreturnproperty"> - <return alias="org" class="Organization"> - <return-property name="id" column="ORGID"/> - <return-property name="name" column="NAME"/> - </return> - <return-join alias="emp" property="org.employments"> - <return-property name="key" column="EMPLOYER"/> - <return-property name="element" column="EMPID"/> - <return-property name="element.employee" column="EMPLOYEE"/> - <return-property name="element.employer" column="EMPLOYER"/> - <return-property name="element.startDate" column="XSTARTDATE"/> - <return-property name="element.endDate" column="ENDDATE"/> - <return-property name="element.regionCode" column="REGIONCODE"/> - <return-property name="element.employmentId" column="EMPID"/> - <return-property name="element.salary"> - <return-column name="AVALUE"/> - <return-column name="CURRENCY"/> - </return-property> - </return-join> - SELECT org.ORGID as orgid, - org.NAME as name, - emp.EMPLOYER as employer, - emp.EMPID as empid, - emp.EMPLOYEE as employee, - emp.EMPLOYER as employer, - emp.STARTDATE as xstartDate, - emp.ENDDATE as endDate, - emp.REGIONCODE as regionCode, - emp.AVALUE as AVALUE, - emp.CURRENCY as CURRENCY - FROM ORGANIZATION org - LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER - </sql-query> - - - <sql-query name="organizationautodetect" resultset-ref="org-description"> - <!-- equal to "organizationpropertyreturn" but since no {} nor return-property are used hibernate will fallback to use the columns directly from the mapping --> - <return alias="org" class="Organization"/> - <return-join alias="emp" property="org.employments"/> - SELECT org.ORGID as orgid, - org.NAME as name, - emp.EMPLOYER as employer, - emp.EMPID as empid, - emp.EMPLOYEE as employee, - emp.EMPLOYER as employer, - emp.STARTDATE as startDate, - emp.ENDDATE as endDate, - emp.REGIONCODE as regionCode, - emp.AVALUE as AVALUE, - emp.CURRENCY as CURRENCY - FROM ORGANIZATION org - LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER - </sql-query> - -</hibernate-mapping> Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/GeneralTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/GeneralTest.cs 2009-02-07 22:32:27 UTC (rev 4070) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/GeneralTest.cs 2009-02-08 12:46:06 UTC (rev 4071) @@ -1,601 +0,0 @@ -using System; -using System.Collections; -using NHibernate.Transform; -using NUnit.Framework; -using NHibernate.Criterion; - -namespace NHibernate.Test.SqlTest -{ - [TestFixture] - public class GeneralTest : TestCase - { - protected const string OrganizationFetchJoinEmploymentSQL = - "SELECT org.ORGID as {org.id}, " + - " org.NAME as {org.name}, " + - " emp.EMPLOYER as {emp.key}, " + - " emp.EMPID as {emp.element}, " + - " {emp.element.*} " + - "FROM ORGANIZATION org " + - " LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER"; - - protected const string OrganizationJoinEmploymentSQL = - "SELECT org.ORGID as {org.id}, " + - " org.NAME as {org.name}, " + - " {emp.*} " + - "FROM ORGANIZATION org " + - " LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER"; - - protected const string EmploymentSQL = "SELECT * FROM EMPLOYMENT"; - - protected string EmploymentSQLMixedScalarEntity = - "SELECT e.*, e.employer as employerid FROM EMPLOYMENT e"; - - protected const string OrgEmpRegionSQL = - "select {org.*}, {emp.*}, emp.REGIONCODE " + - "from ORGANIZATION org " + - " left outer join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER"; - - protected string OrgEmpPersonSQL = - "select {org.*}, {emp.*}, {pers.*} " + - "from ORGANIZATION org " + - " join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER " + - " join PERSON pers on pers.PERID = emp.EMPLOYEE "; - - protected override IList Mappings - { - get { return new string[] {"SqlTest.General.hbm.xml"}; } - } - - protected override string MappingsAssembly - { - get { return "NHibernate.Test"; } - } - - [Test] - public void FailOnNoAddEntityOrScalar() - { - // Note: this passes, but for the wrong reason. - // there is actually an exception thrown, but it is the database - // throwing a sql exception because the SQL gets passed - // "un-processed"... - ISession s = OpenSession(); - try - { - string sql = "select {org.*} " + - "from organization org"; - s.CreateSQLQuery(sql).List(); - Assert.Fail("Should throw an exception since no AddEntity nor AddScalar has been performed."); - } - catch (HibernateException) - { - // expected behavior - } - finally - { - s.Close(); - } - } - - [Test] - public void SQLQueryInterface() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - - s.Save(ifa); - s.Save(jboss); - s.Save(gavin); - s.Save(emp); - - IList l = s.CreateSQLQuery(OrgEmpRegionSQL) - .AddEntity("org", typeof(Organization)) - .AddJoin("emp", "org.employments") - .AddScalar("regionCode", NHibernateUtil.String) - .List(); - Assert.AreEqual(2, l.Count); - - l = s.CreateSQLQuery(OrgEmpPersonSQL) - .AddEntity("org", typeof(Organization)) - .AddJoin("emp", "org.employments") - .AddJoin("pers", "emp.employee") - .List(); - Assert.AreEqual(l.Count, 1); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - - l = s.CreateSQLQuery("select {org.*}, {emp.*} " + - "from ORGANIZATION org " + - " left outer join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER, ORGANIZATION org2") - .AddEntity("org", typeof(Organization)) - .AddJoin("emp", "org.employments") - .SetResultTransformer(new DistinctRootEntityResultTransformer()) - .List(); - Assert.AreEqual(l.Count, 2); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - - s.Delete(emp); - s.Delete(gavin); - s.Delete(ifa); - s.Delete(jboss); - - t.Commit(); - s.Close(); - } - - [Test] - public void ResultSetMappingDefinition() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - - s.Save(ifa); - s.Save(jboss); - s.Save(gavin); - s.Save(emp); - - IList l = s.CreateSQLQuery(OrgEmpRegionSQL) - .SetResultSetMapping("org-emp-regionCode") - .List(); - Assert.AreEqual(l.Count, 2); - - l = s.CreateSQLQuery(OrgEmpPersonSQL) - .SetResultSetMapping("org-emp-person") - .List(); - Assert.AreEqual(l.Count, 1); - - s.Delete(emp); - s.Delete(gavin); - s.Delete(ifa); - s.Delete(jboss); - - t.Commit(); - s.Close(); - } - - [Test] - public void ScalarValues() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - - object idIfa = s.Save(ifa); - object idJBoss = s.Save(jboss); - - s.Flush(); - - IList result = s.GetNamedQuery("orgNamesOnly").List(); - Assert.IsTrue(result.Contains("IFA")); - Assert.IsTrue(result.Contains("JBoss")); - - result = s.GetNamedQuery("orgNamesOnly").SetResultTransformer(CriteriaSpecification.AliasToEntityMap).List(); - IDictionary m = (IDictionary) result[0]; - Assert.AreEqual(2, result.Count); - Assert.AreEqual(1, m.Count); - Assert.IsTrue(m.Contains("NAME")); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - - IEnumerator iter = s.GetNamedQuery("orgNamesAndOrgs").List().GetEnumerator(); - iter.MoveNext(); - object[] o = (object[]) iter.Current; - Assert.AreEqual(o[0], "IFA"); - Assert.AreEqual(((Organization) o[1]).Name, "IFA"); - iter.MoveNext(); - o = (object[]) iter.Current; - Assert.AreEqual(o[0], "JBoss"); - Assert.AreEqual(((Organization) o[1]).Name, "JBoss"); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - - // test that the ordering of the results is truly based on the order in which they were defined - iter = s.GetNamedQuery("orgsAndOrgNames").List().GetEnumerator(); - iter.MoveNext(); - object[] row = (object[]) iter.Current; - Assert.AreEqual(typeof(Organization), row[0].GetType(), "expecting non-scalar result first"); - Assert.AreEqual(typeof(string), row[1].GetType(), "expecting scalar result second"); - Assert.AreEqual("IFA", ((Organization) row[0]).Name); - Assert.AreEqual(row[1], "IFA"); - iter.MoveNext(); - row = (object[]) iter.Current; - Assert.AreEqual(typeof(Organization), row[0].GetType(), "expecting non-scalar result first"); - Assert.AreEqual(typeof(string), row[1].GetType(), "expecting scalar result second"); - Assert.AreEqual(((Organization) row[0]).Name, "JBoss"); - Assert.AreEqual(row[1], "JBoss"); - Assert.IsFalse(iter.MoveNext()); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - - iter = s.GetNamedQuery("orgIdsAndOrgNames").List().GetEnumerator(); - iter.MoveNext(); - o = (object[]) iter.Current; - Assert.AreEqual(o[1], "IFA"); - Assert.AreEqual(o[0], idIfa); - iter.MoveNext(); - o = (object[]) iter.Current; - Assert.AreEqual(o[1], "JBoss"); - Assert.AreEqual(o[0], idJBoss); - - s.Delete(ifa); - s.Delete(jboss); - t.Commit(); - s.Close(); - } - - [Test] - public void MappedAliasStrategy() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - s.Save(jboss); - s.Save(ifa); - s.Save(gavin); - s.Save(emp); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - IQuery namedQuery = s.GetNamedQuery("AllEmploymentAsMapped"); - IList list = namedQuery.List(); - Assert.AreEqual(1, list.Count); - Employment emp2 = (Employment) list[0]; - Assert.AreEqual(emp2.EmploymentId, emp.EmploymentId); - Assert.AreEqual(emp2.StartDate.Date, emp.StartDate.Date); - Assert.AreEqual(emp2.EndDate, emp.EndDate); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - IQuery sqlQuery = s.GetNamedQuery("EmploymentAndPerson"); - sqlQuery.SetResultTransformer(CriteriaSpecification.AliasToEntityMap); - list = sqlQuery.List(); - Assert.AreEqual(1, list.Count); - object res = list[0]; - AssertClassAssignability(res.GetType(), typeof(IDictionary)); - IDictionary m = (IDictionary) res; - Assert.AreEqual(2, m.Count); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - sqlQuery = s.GetNamedQuery("organizationreturnproperty"); - sqlQuery.SetResultTransformer(CriteriaSpecification.AliasToEntityMap); - list = sqlQuery.List(); - Assert.AreEqual(2, list.Count); - m = (IDictionary) list[0]; - Assert.IsTrue(m.Contains("org")); - AssertClassAssignability(m["org"].GetType(), typeof(Organization)); - Assert.IsTrue(m.Contains("emp")); - AssertClassAssignability(m["emp"].GetType(), typeof(Employment)); - Assert.AreEqual(2, m.Count); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - namedQuery = s.GetNamedQuery("EmploymentAndPerson"); - list = namedQuery.List(); - Assert.AreEqual(1, list.Count); - object[] objs = (object[]) list[0]; - Assert.AreEqual(2, objs.Length); - emp2 = (Employment) objs[0]; - gavin = (Person) objs[1]; - s.Delete(emp2); - s.Delete(jboss); - s.Delete(gavin); - s.Delete(ifa); - t.Commit(); - s.Close(); - } - - /* test for native sql composite id joins which has never been implemented */ - - [Test, Ignore("Failure expected")] - public void CompositeIdJoinsFailureExpected() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Person person = new Person(); - person.Name = "Noob"; - - Product product = new Product(); - product.ProductId = new Product.ProductIdType(); - product.ProductId.Orgid = "x"; - product.ProductId.Productnumber = "1234"; - product.Name = "Hibernate 3"; - - Order order = new Order(); - order.OrderId = new Order.OrderIdType(); - order.OrderId.Ordernumber = "1"; - order.OrderId.Orgid = "y"; - - product.Orders.Add(order); - order.Product = product; - order.Person = person; - - s.Save(product); - s.Save(order); - s.Save(person); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - Product p = (Product) s.CreateQuery("from Product p join fetch p.orders").List()[0]; - Assert.IsTrue(NHibernateUtil.IsInitialized(p.Orders)); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - object[] o = (object[]) s.CreateSQLQuery("select\r\n" + - " product.orgid as {product.id.orgid}," + - " product.productnumber as {product.id.productnumber}," + - " {prod_orders}.orgid as orgid3_1_,\r\n" + - " {prod_orders}.ordernumber as ordernum2_3_1_,\r\n" + - " product.name as {product.name}," + - " {prod_orders.element.*}," + - /*" orders.PROD_NO as PROD4_3_1_,\r\n" + - " orders.person as person3_1_,\r\n" + - " orders.PROD_ORGID as PROD3_0__,\r\n" + - " orders.PROD_NO as PROD4_0__,\r\n" + - " orders.orgid as orgid0__,\r\n" + - " orders.ordernumber as ordernum2_0__ \r\n" +*/ - " from\r\n" + - " Product product \r\n" + - " inner join\r\n" + - " TBL_ORDER {prod_orders} \r\n" + - " on product.orgid={prod_orders}.PROD_ORGID \r\n" + - " and product.productnumber={prod_orders}.PROD_NO") - .AddEntity("product", typeof(Product)) - .AddJoin("prod_orders", "product.orders") - .List()[0]; - - p = (Product) o[0]; - Assert.IsTrue(NHibernateUtil.IsInitialized(p.Orders)); - IEnumerator en = p.Orders.GetEnumerator(); - Assert.IsTrue(en.MoveNext()); - Assert.IsNotNull(en.Current); - t.Commit(); - s.Close(); - } - - [Test] - public void AutoDetectAliasing() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Organization ifa = new Organization("IFA"); - Organization jboss = new Organization("JBoss"); - Person gavin = new Person("Gavin"); - Employment emp = new Employment(gavin, jboss, "AU"); - s.Save(jboss); - s.Save(ifa); - s.Save(gavin); - s.Save(emp); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - IList list = s.CreateSQLQuery(EmploymentSQL) - .AddEntity(typeof(Employment).FullName) - .List(); - Assert.AreEqual(1, list.Count); - - Employment emp2 = (Employment) list[0]; - Assert.AreEqual(emp2.EmploymentId, emp.EmploymentId); - Assert.AreEqual(emp2.StartDate.Date, emp.StartDate.Date); - Assert.AreEqual(emp2.EndDate, emp.EndDate); - - s.Clear(); - - list = s.CreateSQLQuery(EmploymentSQL) - .AddEntity(typeof(Employment).FullName) - .SetResultTransformer(CriteriaSpecification.AliasToEntityMap) - .List(); - Assert.AreEqual(1, list.Count); - IDictionary m = (IDictionary) list[0]; - Assert.IsTrue(m.Contains("Employment")); - Assert.AreEqual(1, m.Count); - - list = s.CreateSQLQuery(EmploymentSQL).List(); - Assert.AreEqual(1, list.Count); - object[] o = (object[]) list[0]; - Assert.AreEqual(8, o.Length); - - list = s.CreateSQLQuery(EmploymentSQL).SetResultTransformer(CriteriaSpecification.AliasToEntityMap).List(); - Assert.AreEqual(1, list.Count); - m = (IDictionary) list[0]; - Assert.IsTrue(m.Contains("EMPID")); - Assert.IsTrue(m.Contains("AVALUE")); - Assert.IsTrue(m.Contains("ENDDATE")); - Assert.AreEqual(8, m.Count); - - // TODO H3: H3.2 can guess the return column type so they can use just addScalar("employerid"), - // but NHibernate currently can't do it. - list = - s.CreateSQLQuery(EmploymentSQLMixedScalarEntity).AddScalar("employerid", NHibernateUtil.Int64).AddEntity( - typeof(Employment)).List(); - Assert.AreEqual(1, list.Count); - o = (object[]) list[0]; - Assert.AreEqual(2, o.Length); - AssertClassAssignability(o[0].GetType(), typeof(long)); - AssertClassAssignability(o[1].GetType(), typeof(Employment)); - - - IQuery queryWithCollection = s.GetNamedQuery("organizationEmploymentsExplicitAliases"); - queryWithCollection.SetInt64("id", jboss.Id); - list = queryWithCollection.List(); - Assert.AreEqual(list.Count, 1); - - s.Clear(); - - list = s.CreateSQLQuery(OrganizationJoinEmploymentSQL) - .AddEntity("org", typeof(Organization)) - .AddJoin("emp", "org.employments") - .List(); - Assert.AreEqual(2, list.Count); - - s.Clear(); - - list = s.CreateSQLQuery(OrganizationFetchJoinEmploymentSQL) - .AddEntity("org", typeof(Organization)) - .AddJoin("emp", "org.employments") - .List(); - Assert.AreEqual(2, list.Count); - - s.Clear(); - - // TODO : why twice? - s.GetNamedQuery("organizationreturnproperty").List(); - list = s.GetNamedQuery("organizationreturnproperty").List(); - Assert.AreEqual(2, list.Count); - - s.Clear(); - - list = s.GetNamedQuery("organizationautodetect").List(); - Assert.AreEqual(2, list.Count); - - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - s.Delete(emp2); - - s.Delete(jboss); - s.Delete(gavin); - s.Delete(ifa); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - Dimension dim = new Dimension(3, int.MaxValue); - s.Save(dim); - // s.Flush(); - s.CreateSQLQuery("select d_len * d_width as surface, d_len * d_width * 10 as volume from Dimension").List(); - s.Delete(dim); - t.Commit(); - s.Close(); - - s = OpenSession(); - t = s.BeginTransaction(); - SpaceShip enterprise = new SpaceShip(); - enterprise.Model = "USS"; - enterprise.Name = "Entreprise"; - enterprise.Speed = 50d; - Dimension d = new Dimension(45, 10); - enterprise.Dimensions = d; - s.Save(enterprise); - // s.Flush(); - object[] result = (object[]) s.GetNamedQuery("spaceship").UniqueResult(); - enterprise = (SpaceShip) result[0]; - Assert.IsTrue(50d == enterprise.Speed); - Assert.IsTrue(450d == ExtractDoubleValue(result[1])); - Assert.IsTrue(4500d == ExtractDoubleValue(result[2])); - s.Delete(enterprise); - t.Commit(); - s.Close(); - } - - [Test] - public void MixAndMatchEntityScalar() - { - ISession s = OpenSession(); - ITransaction t = s.BeginTransaction(); - Speech speech = new Speech(); - speech.Length = 23d; - speech.Name = "Mine"; - s.Save(speech); - s.Flush(); - s.Clear(); - - IList l = s.CreateSQLQuery("select name, id, flength, name as scalarName from Speech") - .SetResultSetMapping("speech") - .List(); - Assert.AreEqual(l.Count, 1); - - t.Rollback(); - s.Close(); - } - - [Test] - public void ParameterList() - { - using (ISession s = OpenSession()) - { - IList l = s.CreateSQLQuery("select id from Speech where id in (:idList)") - .AddScalar("id", NHibernateUtil.Int32) - .SetParameterList("idList", new int[] {0, 1, 2, 3}, NHibernateUtil.Int32) - .List(); - } - } - - private double ExtractDoubleValue(object value) - { - if (value is double) - { - return (double) value; - } - else if (value is decimal) - { - return (double) (decimal) value; - } - else - { - return double.Parse(value.ToString()); - } - } - - public static void AssertClassAssignability(System.Type source, System.Type target) - { - Assert.IsTrue(target.IsAssignableFrom(source), - "Classes were not assignment-compatible : source<" + - source.FullName + - "> target<" + - target.FullName + ">" - ); - } - } -} Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.cs 2009-02-07 22:32:27 UTC (rev 4070) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.cs 2009-02-08 12:46:06 UTC (rev 4071) @@ -1,41 +0,0 @@ -using System; -using Iesi.Collections; - -namespace NHibernate.Test.SqlTest -{ - public class Item - { - private int id; - private int alternativeItemId; - - private ISet alternativeItems; - - protected Item() - { - } - - public Item(int id, int alternativeItemId) - { - this.id = id; - this.alternativeItemId = alternativeItemId; - } - - public virtual int Id - { - get { return id; } - set { id = value; } - } - - public virtual int AlternativeItemId - { - get { return alternativeItemId; } - set { alternativeItemId = value; } - } - - public virtual ISet AlternativeItems - { - get { return alternativeItems; } - set { alternativeItems = value; } - } - } -} \ No newline at end of file Deleted: trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.hbm.xml 2009-02-07 22:32:27 UTC (rev 4070) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" - assembly="NHibernate.Test" - namespace="NHibernate.Test.SqlTest"> - - <class name="Item"> - <id name="Id" column="id"> - <generator class="assigned" /> - </id> - - <property name="AlternativeItemId" update="false" /> - <set name="AlternativeItems"> - <key /> - <one-to-many class="Item" /> - <loader query-ref="getAlternativeItems" /> - <sql-delete>UPDATE Item SET Id = Id WHERE Id = ?</sql-delete> - <sql-delete-all>UPDATE Item SET Id = Id WHERE Id = ?</sql-delete-all> - </set> - </class> - - <sql-query name="getAlternativeItems"> - <load-collection alias="ai" role="Item.AlternativeItems"> - <return-property name="key" column="collectionKey" /> - <return-property name="element" column="Id" /> - <return-property name="element.id" column="Id" /> - <return-property name="element.AlternativeItemId" column="AlternativeItemId" /> - </load-collection> - <!-- Suppose alternate items for every item are all items except the item itself. --> - SELECT CAST(:id AS INTEGER) as collectionKey, Item.* FROM Item WHERE Item.Id != :id - </sql-query> - -</hibernate-mapping> \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.cs 2009-02-08 12:46:06 UTC (rev 4071) @@ -0,0 +1,40 @@ +using Iesi.Collections; + +namespace NHibernate.Test.SqlTest.Query +{ + public class Item + { + private int id; + private int alternativeItemId; + + private ISet alternativeItems; + + protected Item() + { + } + + public Item(int id, int alternativeItemId) + { + this.id = id; + this.alternativeItemId = alternativeItemId; + } + + public virtual int Id + { + get { return id; } + set { id = value; } + } + + public virtual int AlternativeItemId + { + get { return alternativeItemId; } + set { alternativeItemId = value; } + } + + public virtual ISet AlternativeItems + { + get { return alternativeItems; } + set { alternativeItems = value; } + } + } +} \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.cs ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/Item.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.SqlTest.Query"> + + <class name="Item"> + <id name="Id" column="id"> + <generator class="assigned" /> + </id> + + <property name="AlternativeItemId" update="false" /> + <set name="AlternativeItems"> + <key /> + <one-to-many class="Item" /> + <loader query-ref="getAlternativeItems" /> + <sql-delete>UPDATE Item SET Id = Id WHERE Id = ?</sql-delete> + <sql-delete-all>UPDATE Item SET Id = Id WHERE Id = ?</sql-delete-all> + </set> + </class> + + <sql-query name="getAlternativeItems"> + <load-collection alias="ai" role="Item.AlternativeItems"> + <return-property name="key" column="collectionKey" /> + <return-property name="element" column="Id" /> + <return-property name="element.id" column="Id" /> + <return-property name="element.AlternativeItemId" column="AlternativeItemId" /> + </load-collection> + <!-- Suppose alternate items for every item are all items except the item itself. --> + SELECT CAST(:id AS INTEGER) as collectionKey, Item.* FROM Item WHERE Item.Id != :id + </sql-query> + +</hibernate-mapping> \ No newline at end of file Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/Item.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueries.hbm.xml (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/General.hbm.xml) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueries.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueries.hbm.xml 2009-02-08 12:46:06 UTC (rev 4071) @@ -0,0 +1,261 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + + This mapping demonstrates the use of Hibernate with + all-handwritten SQL! +--> + +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="field.camelcase" + namespace="NHibernate.Test.SqlTest" + assembly="NHibernate.Test"> + + <class name="Organization" table="ORGANIZATION"> + <id name="id" unsaved-value="0" column="ORGID"> + <generator class="increment"/> + </id> + <property name="name" column="NAME" not-null="true"/> + <set lazy="true" name="employments" + inverse="true"> + <key column="EMPLOYER"/> + <!-- only needed for DDL generation --> + <one-to-many class="Employment"/> + </set> + </class> + + <class name="Person" table="PERSON"> + <id name="id" unsaved-value="0" column="PERID"> + <generator class="increment"/> + </id> + <property name="name" column="NAME" not-null="true"/> + + </class> + + <class name="Employment" table="EMPLOYMENT"> + <id name="employmentId" unsaved-value="0" column="EMPID"> + <generator class="increment"/> + </id> + <many-to-one name="employee" column="EMPLOYEE" not-null="true" update="false"/> + <many-to-one name="employer" column="EMPLOYER" not-null="true" update="false"/> + <property name="startDate" column="STARTDATE" not-null="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" /> + <property name="endDate" column="ENDDATE" insert="false" type="NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" /> + <property name="regionCode" column="REGIONCODE" update="false"/> + <property name="salary" type="NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test"> + <column name="AVALUE" sql-type="float"/> + <column name="CURRENCY"/> + </property> + </class> + + <class name="Order" table="TBL_ORDER"> + <composite-id name="orderId" class="Order+OrderIdType"> + <key-property name="orgid"/> + <key-property name="ordernumber"/> + </composite-id> + + <many-to-one name="product"> + <column name="PROD_ORGID"/> + <column name="PROD_NO"/> + </many-to-one> + <many-to-one name="person"/> + </class> + + <class name="Product"> + <composite-id name="productId" class="Product+ProductIdType"> + <key-property name="orgid"/> + <key-property name="productnumber"/> + </composite-id> + + <property name="name"/> + + <set name="orders" inverse="true"> + <key> + <column name="PROD_ORGID"/> + <column name="PROD_NO"/> + </key> + <one-to-many class="Order"/> + </set> + </class> + + <class name="Dimension"> + <id name="id" type="long"> + <generator class="increment"/> + </id> + <property name="length" column="d_len"/> + <property name="width" column="d_width"/> + </class> + + <class name="SpaceShip"> + <id name="id" type="integer"> + <generator class="increment"/> + </id> + <property name="name" column="fld_name"/> + <property name="model" column="fld_model"/> + <property name="speed" column="fld_speed"/> + <component name="dimensions"> + <property name="length" column="fld_length"/> + <property name="width" column="fld_width"/> + </component> + </class> + + <class name="Speech"> + <id name="id" type="integer"> + <generator class="increment"/> + </id> + <property name="name" column="name"/> + <property name="length" column="flength"/> + </class> + + <resultset name="org-emp-regionCode"> + <return-scalar column="regionCode" type="string"/> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + </resultset> + + <resultset name="org-emp-person"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + <return-join alias="pers" property="emp.employee"/> + </resultset> + + + <resultset name="org-description"> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + </resultset> + + <resultset name="spaceship-vol"> + <return alias="sps" class="SpaceShip"> + <return-property name="id" column="id"/> + <return-property name="name" column="name"/> + <return-property name="model" column="model"/> + <return-property name="speed" column="speed"/> + <return-property name="dimensions.length" column="length"/> + <return-property name="dimensions.width" column="width"/> + </return> + <return-scalar column="surface" type="double" /> + <return-scalar column="volume" type="double" /> + </resultset> + + <resultset name="speech"> + <return alias="sp" class="Speech"> + <return-property name="id" column="id"/> + <return-property name="name" column="name"/> + <return-property name="length" column="flength"/> + </return> + <return-scalar column="scalarName" type="string" /> + </resultset> + + <sql-query name="spaceship" resultset-ref="spaceship-vol"> + select id as id, + fld_name as name, + fld_model as model, + fld_speed as speed, + fld_length as flength, + fld_width as width, + fld_length * fld_width as surface, + fld_length * fld_width *10 as volume + from SpaceShip + </sql-query> + + <sql-query name="orgNamesOnly"> + <return-scalar column="NAME" type="string"/> + SELECT org.NAME FROM ORGANIZATION org + </sql-query> + + <sql-query name="orgNamesAndOrgs"> + <return-scalar column="thename" type="string"/> + <return alias="org" class="Organization"/> + SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id} + FROM ORGANIZATION org + ORDER BY thename + </sql-query> + + <sql-query name="orgsAndOrgNames"> + <return alias="org" class="Organization"/> + <return-scalar column="thename" type="string"/> + SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id} + FROM ORGANIZATION org + ORDER BY thename + </sql-query> + + <sql-query name="orgIdsAndOrgNames"> + <return-scalar column="orgid" type="long"/> + <return-scalar column="thename" type="string"/> + SELECT NAME AS thename, ORGID AS orgid + FROM ORGANIZATION + ORDER BY thename + </sql-query> + + <sql-query name="AllEmploymentAsMapped"> + <return class="Employment"/> + SELECT * FROM EMPLOYMENT + </sql-query> + + <sql-query name="EmploymentAndPerson"> + <return class="Employment"/> + <return class="Person"/> + SELECT * FROM EMPLOYMENT, PERSON + </sql-query> + + <sql-query name="organizationEmploymentsExplicitAliases"> + <load-collection alias="empcol" role="Organization.employments"/> + SELECT empcol.EMPLOYER as {empcol.key}, empcol.EMPID as {empcol.element}, {empcol.element.*} + FROM EMPLOYMENT empcol + WHERE EMPLOYER = :id + ORDER BY STARTDATE ASC, EMPLOYEE ASC + </sql-query> + + <sql-query name="organizationreturnproperty"> + <return alias="org" class="Organization"> + <return-property name="id" column="ORGID"/> + <return-property name="name" column="NAME"/> + </return> + <return-join alias="emp" property="org.employments"> + <return-property name="key" column="EMPLOYER"/> + <return-property name="element" column="EMPID"/> + <return-property name="element.employee" column="EMPLOYEE"/> + <return-property name="element.employer" column="EMPLOYER"/> + <return-property name="element.startDate" column="XSTARTDATE"/> + <return-property name="element.endDate" column="ENDDATE"/> + <return-property name="element.regionCode" column="REGIONCODE"/> + <return-property name="element.employmentId" column="EMPID"/> + <return-property name="element.salary"> + <return-column name="AVALUE"/> + <return-column name="CURRENCY"/> + </return-property> + </return-join> + SELECT org.ORGID as orgid, + org.NAME as name, + emp.EMPLOYER as employer, + emp.EMPID as empid, + emp.EMPLOYEE as employee, + emp.EMPLOYER as employer, + emp.STARTDATE as xstartDate, + emp.ENDDATE as endDate, + emp.REGIONCODE as regionCode, + emp.AVALUE as AVALUE, + emp.CURRENCY as CURRENCY + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + </sql-query> + + + <sql-query name="organizationautodetect" resultset-ref="org-description"> + <!-- equal to "organizationpropertyreturn" but since no {} nor return-property are used hibernate will fallback to use the columns directly from the mapping --> + <return alias="org" class="Organization"/> + <return-join alias="emp" property="org.employments"/> + SELECT org.ORGID as orgid, + org.NAME as name, + emp.EMPLOYER as employer, + emp.EMPID as empid, + emp.EMPLOYEE as employee, + emp.EMPLOYER as employer, + emp.STARTDATE as startDate, + emp.ENDDATE as endDate, + emp.REGIONCODE as regionCode, + emp.AVALUE as AVALUE, + emp.CURRENCY as CURRENCY + FROM ORGANIZATION org + LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER + </sql-query> + +</hibernate-mapping> Property changes on: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueries.hbm.xml ___________________________________________________________________ Added: svn:mergeinfo + Copied: trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs (from rev 4070, trunk/nhibernate/src/NHibernate.Test/SqlTest/GeneralTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/SqlTest/Query/NativeSQLQueriesFixture.cs 2009-02-08 12:46:06 UTC (rev 4071) @@ -0,0 +1,600 @@ +using System.Collections; +using NHibernate.Transform; +using NUnit.Framework; +using NHibernate.Criterion; + +namespace NHibernate.Test.SqlTest.Query +{ + [TestFixture] + public class GeneralTest : TestCase + { + protected const string OrganizationFetchJoinEmploymentSQL = + "SELECT org.ORGID as {org.id}, " + + " org.NAME as {org.name}, " + + " emp.EMPLOYER as {emp.key}, " + + " emp.EMPID as {emp.element}, " + + " {emp.element.*} " + + "FROM ORGANIZATION org " + + " LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER"; + + protected const string OrganizationJoinEmploymentSQL = + "SELECT org.ORGID as {org.id}, " + + " org.NAME as {org.name}, " + + " {emp.*} " + + "FROM ORGANIZATION org " + + " LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER"; + + protected const string EmploymentSQL = "SELECT * FROM EMPLOYMENT"; + + protected string EmploymentSQLMixedScalarEntity = + "SELECT e.*, e.employer as employerid FROM EMPLOYMENT e"; + + protected const string OrgEmpRegionSQL = + "select {org.*}, {emp.*}, emp.REGIONCODE " + + "from ORGANIZATION org " + + " left outer join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER"; + + protected string OrgEmpPersonSQL = + "select {org.*}, {emp.*}, {pers.*} " + + "from ORGANIZATION org " + + " join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER " + + " join PERSON pers on pers.PERID = emp.EMPLOYEE "; + + protected override IList Mappings + { + get { return new[] { "SqlTest.Query.NativeSQLQueries.hbm.xml" }; } + } + + protected override string MappingsAssembly + { + get { return "NHibernate.Test"; } + } + + [Test] + public void FailOnNoAddEntityOrScalar() + { + // Note: this passes, but for the wrong reason. + // there is actually an exception thrown, but it is the database + // throwing a sql exception because the SQL gets passed + // "un-processed"... + ISession s = OpenSession(); + try + { + string sql = "select {org.*} " + + "from organization org"; + s.CreateSQLQuery(sql).List(); + Assert.Fail("Should throw an exception since no AddEntity nor AddScalar has been performed."); + } + catch (HibernateException) + { + // expected behavior + } + finally + { + s.Close(); + } + } + + [Test] + public void SQLQueryInterface() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + + s.Save(ifa); + s.Save(jboss); + s.Save(gavin); + s.Save(emp); + + IList l = s.CreateSQLQuery(OrgEmpRegionSQL) + .AddEntity("org", typeof(Organization)) + .AddJoin("emp", "org.employments") + .AddScalar("regionCode", NHibernateUtil.String) + .List(); + Assert.AreEqual(2, l.Count); + + l = s.CreateSQLQuery(OrgEmpPersonSQL) + .AddEntity("org", typeof(Organization)) + .AddJoin("emp", "org.employments") + .AddJoin("pers", "emp.employee") + .List(); + Assert.AreEqual(l.Count, 1); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + + l = s.CreateSQLQuery("select {org.*}, {emp.*} " + + "from ORGANIZATION org " + + " left outer join EMPLOYMENT emp on org.ORGID = emp.EMPLOYER, ORGANIZATION org2") + .AddEntity("org", typeof(Organization)) + .AddJoin("emp", "org.employments") + .SetResultTransformer(new DistinctRootEntityResultTransformer()) + .List(); + Assert.AreEqual(l.Count, 2); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + + s.Delete(emp); + s.Delete(gavin); + s.Delete(ifa); + s.Delete(jboss); + + t.Commit(); + s.Close(); + } + + [Test] + public void ResultSetMappingDefinition() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + + s.Save(ifa); + s.Save(jboss); + s.Save(gavin); + s.Save(emp); + + IList l = s.CreateSQLQuery(OrgEmpRegionSQL) + .SetResultSetMapping("org-emp-regionCode") + .List(); + Assert.AreEqual(l.Count, 2); + + l = s.CreateSQLQuery(OrgEmpPersonSQL) + .SetResultSetMapping("org-emp-person") + .List(); + Assert.AreEqual(l.Count, 1); + + s.Delete(emp); + s.Delete(gavin); + s.Delete(ifa); + s.Delete(jboss); + + t.Commit(); + s.Close(); + } + + [Test] + public void ScalarValues() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + + object idIfa = s.Save(ifa); + object idJBoss = s.Save(jboss); + + s.Flush(); + + IList result = s.GetNamedQuery("orgNamesOnly").List(); + Assert.IsTrue(result.Contains("IFA")); + Assert.IsTrue(result.Contains("JBoss")); + + result = s.GetNamedQuery("orgNamesOnly").SetResultTransformer(CriteriaSpecification.AliasToEntityMap).List(); + IDictionary m = (IDictionary) result[0]; + Assert.AreEqual(2, result.Count); + Assert.AreEqual(1, m.Count); + Assert.IsTrue(m.Contains("NAME")); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + + IEnumerator iter = s.GetNamedQuery("orgNamesAndOrgs").List().GetEnumerator(); + iter.MoveNext(); + object[] o = (object[]) iter.Current; + Assert.AreEqual(o[0], "IFA"); + Assert.AreEqual(((Organization) o[1]).Name, "IFA"); + iter.MoveNext(); + o = (object[]) iter.Current; + Assert.AreEqual(o[0], "JBoss"); + Assert.AreEqual(((Organization) o[1]).Name, "JBoss"); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + + // test that the ordering of the results is truly based on the order in which they were defined + iter = s.GetNamedQuery("orgsAndOrgNames").List().GetEnumerator(); + iter.MoveNext(); + object[] row = (object[]) iter.Current; + Assert.AreEqual(typeof(Organization), row[0].GetType(), "expecting non-scalar result first"); + Assert.AreEqual(typeof(string), row[1].GetType(), "expecting scalar result second"); + Assert.AreEqual("IFA", ((Organization) row[0]).Name); + Assert.AreEqual(row[1], "IFA"); + iter.MoveNext(); + row = (object[]) iter.Current; + Assert.AreEqual(typeof(Organization), row[0].GetType(), "expecting non-scalar result first"); + Assert.AreEqual(typeof(string), row[1].GetType(), "expecting scalar result second"); + Assert.AreEqual(((Organization) row[0]).Name, "JBoss"); + Assert.AreEqual(row[1], "JBoss"); + Assert.IsFalse(iter.MoveNext()); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + + iter = s.GetNamedQuery("orgIdsAndOrgNames").List().GetEnumerator(); + iter.MoveNext(); + o = (object[]) iter.Current; + Assert.AreEqual(o[1], "IFA"); + Assert.AreEqual(o[0], idIfa); + iter.MoveNext(); + o = (object[]) iter.Current; + Assert.AreEqual(o[1], "JBoss"); + Assert.AreEqual(o[0], idJBoss); + + s.Delete(ifa); + s.Delete(jboss); + t.Commit(); + s.Close(); + } + + [Test] + public void MappedAliasStrategy() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + s.Save(jboss); + s.Save(ifa); + s.Save(gavin); + s.Save(emp); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + IQuery namedQuery = s.GetNamedQuery("AllEmploymentAsMapped"); + IList list = namedQuery.List(); + Assert.AreEqual(1, list.Count); + Employment emp2 = (Employment) list[0]; + Assert.AreEqual(emp2.EmploymentId, emp.EmploymentId); + Assert.AreEqual(emp2.StartDate.Date, emp.StartDate.Date); + Assert.AreEqual(emp2.EndDate, emp.EndDate); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + IQuery sqlQuery = s.GetNamedQuery("EmploymentAndPerson"); + sqlQuery.SetResultTransformer(CriteriaSpecification.AliasToEntityMap); + list = sqlQuery.List(); + Assert.AreEqual(1, list.Count); + object res = list[0]; + AssertClassAssignability(res.GetType(), typeof(IDictionary)); + IDictionary m = (IDictionary) res; + Assert.AreEqual(2, m.Count); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + sqlQuery = s.GetNamedQuery("organizationreturnproperty"); + sqlQuery.SetResultTransformer(CriteriaSpecification.AliasToEntityMap); + list = sqlQuery.List(); + Assert.AreEqual(2, list.Count); + m = (IDictionary) list[0]; + Assert.IsTrue(m.Contains("org")); + AssertClassAssignability(m["org"].GetType(), typeof(Organization)); + Assert.IsTrue(m.Contains("emp")); + AssertClassAssignability(m["emp"].GetType(), typeof(Employment)); + Assert.AreEqual(2, m.Count); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + namedQuery = s.GetNamedQuery("EmploymentAndPerson"); + list = namedQuery.List(); + Assert.AreEqual(1, list.Count); + object[] objs = (object[]) list[0]; + Assert.AreEqual(2, objs.Length); + emp2 = (Employment) objs[0]; + gavin = (Person) objs[1]; + s.Delete(emp2); + s.Delete(jboss); + s.Delete(gavin); + s.Delete(ifa); + t.Commit(); + s.Close(); + } + + /* test for native sql composite id joins which has never been implemented */ + + [Test, Ignore("Failure expected")] + public void CompositeIdJoinsFailureExpected() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Person person = new Person(); + person.Name = "Noob"; + + Product product = new Product(); + product.ProductId = new Product.ProductIdType(); + product.ProductId.Orgid = "x"; + product.ProductId.Productnumber = "1234"; + product.Name = "Hibernate 3"; + + Order order = new Order(); + order.OrderId = new Order.OrderIdType(); + order.OrderId.Ordernumber = "1"; + order.OrderId.Orgid = "y"; + + product.Orders.Add(order); + order.Product = product; + order.Person = person; + + s.Save(product); + s.Save(order); + s.Save(person); + + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + Product p = (Product) s.CreateQuery("from Product p join fetch p.orders").List()[0]; + Assert.IsTrue(NHibernateUtil.IsInitialized(p.Orders)); + t.Commit(); + s.Close(); + + s = OpenSession(); + t = s.BeginTransaction(); + object[] o = (object[]) s.CreateSQLQuery("select\r\n" + + " product.orgid as {product.id.orgid}," + + " product.productnumber as {product.id.productnumber}," + + " {prod_orders}.orgid as orgid3_1_,\r\n" + + " {prod_orders}.ordernumber as ordernum2_3_1_,\r\n" + + " product.name as {product.name}," + + " {prod_orders.element.*}," + + /*" orders.PROD_NO as PROD4_3_1_,\r\n" + + " orders.person as person3_1_,\r\n" + + " orders.PROD_ORGID as PROD3_0__,\r\n" + + " orders.PROD_NO as PROD4_0__,\r\n" + + " orders.orgid as orgid0__,\r\n" + + " orders.ordernumber as ordernum2_0__ \r\n" +*/ + " from\r\n" + + " Product product \r\n" + + " inner join\r\n" + + " TBL_ORDER {prod_orders} \r\n" + + " on product.orgid={prod_orders}.PROD_ORGID \r\n" + + " and product.productnumber={prod_orders}.PROD_NO") + .AddEntity("product", typeof(Product)) + .AddJoin("prod_orders", "product.orders") + .List()[0]; + + p = (Product) o[0]; + Assert.IsTrue(NHibernateUtil.IsInitialized(p.Orders)); + IEnumerator en = p.Orders.GetEnumerator(); + Assert.IsTrue(en.MoveNext()); + Assert.IsNotNull(en.Current); + t.Commit(); + s.Close(); + } + + [Test] + public void AutoDetectAliasing() + { + ISession s = OpenSession(); + ITransaction t = s.BeginTransaction(); + Organization ifa = new Organization("IFA"); + Organization jboss = new Organization("JBoss"); + Person gavin = new Person("Gavin"); + Employment emp = new Employment(gavin, jboss, "AU"); + s.Save(jboss); + s.Save(ifa); + s.Save(gav... [truncated message content] |
From: <dar...@us...> - 2009-02-07 22:32:50
|
Revision: 4070 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4070&view=rev Author: darioquintana Date: 2009-02-07 22:32:27 +0000 (Sat, 07 Feb 2009) Log Message: ----------- - Bug fixes in Sequence support. - Preparing to support sequence-identity Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2009-02-07 21:16:36 UTC (rev 4069) +++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2009-02-07 22:32:27 UTC (rev 4070) @@ -85,9 +85,14 @@ public override string GetSequenceNextValString(string sequenceName) { - return string.Concat("select nextval ('", sequenceName, "')"); + return string.Concat("select ",GetSelectSequenceNextValString(sequenceName)); } + public override string GetSelectSequenceNextValString(string sequenceName) + { + return string.Concat("nextval ('", sequenceName, "')"); + } + public override string GetCreateSequenceString(string sequenceName) { return "create sequence " + sequenceName; @@ -98,6 +103,11 @@ return "drop sequence " + sequenceName; } + public override SqlString AddIdentifierOutParameterToInsert(SqlString insertString, string identifierColumnName, string parameterName) + { + return insertString.Append(" returning " + identifierColumnName); + } + public override bool SupportsSequences { get { return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |