public void Constraints() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; if (Dialect is MsSql2000Dialect) { s.Save(sm); } else { s.Save(sm, (long)2); } t.Commit(); s.Close(); s = OpenSession(); s.Delete("from sm in class SubMulti"); t = s.BeginTransaction(); t.Commit(); s.Close(); }
public async Task ConstraintsAsync() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; if (TestDialect.HasIdentityNativeGenerator) { await(s.SaveAsync(sm)); } else { await(s.SaveAsync(sm, (long)2)); } await(t.CommitAsync()); s.Close(); s = OpenSession(); await(s.DeleteAsync("from sm in class SubMulti")); t = s.BeginTransaction(); await(t.CommitAsync()); s.Close(); }
public void Constraints() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; if (TestDialect.HasIdentityNativeGenerator) { s.Save(sm); } else { s.Save(sm, (long)2); } t.Commit(); s.Close(); s = OpenSession(); s.Delete("from sm in class SubMulti"); t = s.BeginTransaction(); t.Commit(); s.Close(); }
public async Task ConstraintsAsync() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; if (Dialect is MsSql2000Dialect) { await(s.SaveAsync(sm)); } else { await(s.SaveAsync(sm, (long)2)); } await(t.CommitAsync()); s.Close(); s = OpenSession(); await(s.DeleteAsync("from sm in class SubMulti")); t = s.BeginTransaction(); await(t.CommitAsync()); s.Close(); }
public void SubclassCollection() { ISession s = OpenSession(); SubMulti sm = new SubMulti(); SubMulti sm1 = new SubMulti(); SubMulti sm2 = new SubMulti(); IList list = new ArrayList(); IList anotherList = new ArrayList(); sm.Children = list; sm.MoreChildren = anotherList; sm.ExtraProp = "foo"; list.Add(sm1); list.Add(sm2); anotherList.Add(sm1); anotherList.Add(sm2); sm1.Parent = sm; sm2.Parent = sm; object id = s.Save(sm); s.Save(sm1); s.Save(sm2); s.Flush(); s.Close(); sessions.Evict(typeof(SubMulti)); s = OpenSession(); // TODO: I don't understand why h2.0.3/h2.1 issues a select statement here Assert.AreEqual(2, s.CreateQuery( "select s from SubMulti as sm join sm.Children as s where s.Amount>-1 and s.Name is null").List(). Count); Assert.AreEqual(2, s.CreateQuery("select elements(sm.Children) from SubMulti as sm").List().Count); Assert.AreEqual(1, s.CreateQuery( "select distinct sm from SubMulti as sm join sm.Children as s where s.Amount>-1 and s.Name is null") .List().Count); sm = (SubMulti)s.Load(typeof(SubMulti), id); Assert.AreEqual(2, sm.Children.Count); ICollection filterColl = s.CreateFilter(sm.MoreChildren, "select count(*) where this.Amount>-1 and this.Name is null").List(); foreach (object obj in filterColl) { Assert.AreEqual(2, obj); // only want the first one break; } Assert.AreEqual("FOO", sm.Derived, "should have uppercased the column in a formula"); IEnumerator enumer = s.CreateQuery("select distinct s from s in class SubMulti where s.MoreChildren[1].Amount < 1.0").Enumerable(). GetEnumerator(); Assert.IsTrue(enumer.MoveNext()); Assert.AreSame(sm, enumer.Current); Assert.AreEqual(2, sm.MoreChildren.Count); s.Delete(sm); foreach (object obj in sm.Children) { s.Delete(obj); } s.Flush(); s.Close(); }
public void MultiTableGeneratedId() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); Multi multi = new Multi(); multi.ExtraProp = "extra"; multi.Name = "name"; Top simp = new Top(); simp.Date = DateTime.Now; simp.Name = "simp"; object multiId = s.Save(multi); object simpId = s.Save(simp); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; object smId = s.Save(sm); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi.ExtraProp += "2"; multi.Name = "new name"; s.Update(multi, multiId); simp.Name = "new name"; s.Update(simp, simpId); sm.Amount = 456.7f; s.Update(sm, smId); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (Multi)s.Load(typeof(Multi), multiId); Assert.AreEqual("extra2", multi.ExtraProp); multi.ExtraProp += "3"; Assert.AreEqual("new name", multi.Name); multi.Name = "newer name"; sm = (SubMulti)s.Load(typeof(SubMulti), smId); Assert.AreEqual(456.7f, sm.Amount); sm.Amount = 23423f; t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (Multi)s.Load(typeof(Top), multiId); simp = (Top)s.Load(typeof(Top), simpId); Assert.IsFalse(simp is Multi); // Can't see the point of this test since the variable is declared as Multi! //Assert.IsTrue( multi is Multi ); Assert.AreEqual("extra23", multi.ExtraProp); Assert.AreEqual("newer name", multi.Name); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); IEnumerable enumer = s.CreateQuery("select\n\ns from s in class Top where s.Count>0").Enumerable(); bool foundSimp = false; bool foundMulti = false; bool foundSubMulti = false; foreach (object obj in enumer) { if ((obj is Top) && !(obj is Multi)) { foundSimp = true; } if ((obj is Multi) && !(obj is SubMulti)) { foundMulti = true; } if (obj is SubMulti) { foundSubMulti = true; } } Assert.IsTrue(foundSimp); Assert.IsTrue(foundMulti); Assert.IsTrue(foundSubMulti); s.CreateQuery("from m in class Multi where m.Count>0 and m.ExtraProp is not null").List(); s.CreateQuery("from m in class Top where m.Count>0 and m.Name is not null").List(); s.CreateQuery("from m in class Lower where m.Other is not null").List(); s.CreateQuery("from m in class Multi where m.Other.id = 1").List(); s.CreateQuery("from m in class SubMulti where m.Amount > 0.0").List(); Assert.AreEqual(2, s.CreateQuery("from m in class Multi").List().Count); Assert.AreEqual(3, s.CreateQuery("from s in class Top").List().Count); Assert.AreEqual(0, s.CreateQuery("from s in class Lower").List().Count); Assert.AreEqual(1, s.CreateQuery("from sm in class SubMulti").List().Count); if (IsClassicParser) { s.CreateQuery("from ls in class Lower, s in ls.Bag.elements where s.id is not null").List(); s.CreateQuery("from sm in class SubMulti where exists sm.Children.elements").List(); } else { s.CreateQuery("from ls in class Lower, s in elements(ls.Bag) where s.id is not null").List(); s.CreateQuery("from sm in class SubMulti where exists elements(sm.Children)").List(); } t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); if (TestDialect.SupportsSelectForUpdateOnOuterJoin) { multi = (Multi)s.Load(typeof(Top), multiId, LockMode.Upgrade); } simp = (Top)s.Load(typeof(Top), simpId); s.Lock(simp, LockMode.UpgradeNoWait); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); s.Update(multi, multiId); s.Delete(multi); Assert.AreEqual(2, s.Delete("from s in class Top")); t.Commit(); s.Close(); }
public void MultiTable() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); Multi multi = new Multi(); multi.ExtraProp = "extra"; multi.Name = "name"; Top simp = new Top(); simp.Date = DateTime.Now; simp.Name = "simp"; object mid; object sid; if (Dialect is MsSql2000Dialect) { mid = s.Save(multi); sid = s.Save(simp); } else { mid = 123L; sid = 1234L; s.Save(multi, mid); s.Save(simp, sid); } SubMulti sm = new SubMulti(); sm.Amount = 66.5f; object smid; if (Dialect is MsSql2000Dialect) { smid = s.Save(sm); } else { smid = 2L; s.Save(sm, smid); } t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi.ExtraProp = multi.ExtraProp + "2"; multi.Name = "new name"; s.Update(multi, mid); simp.Name = "new name"; s.Update(simp, sid); sm.Amount = 456.7f; s.Update(sm, smid); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (Multi)s.Load(typeof(Multi), mid); Assert.AreEqual("extra2", multi.ExtraProp); multi.ExtraProp = multi.ExtraProp + "3"; Assert.AreEqual("new name", multi.Name); multi.Name = "newer name"; sm = (SubMulti)s.Load(typeof(SubMulti), smid); Assert.AreEqual(456.7f, sm.Amount); sm.Amount = 23423f; t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (Multi)s.Load(typeof(Top), mid); simp = (Top)s.Load(typeof(Top), sid); Assert.IsFalse(simp is Multi); Assert.AreEqual("extra23", multi.ExtraProp); Assert.AreEqual("newer name", multi.Name); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); IEnumerator enumer = s.CreateQuery("select\n\ns from s in class Top where s.Count>0").Enumerable().GetEnumerator(); bool foundSimp = false; bool foundMulti = false; bool foundSubMulti = false; while (enumer.MoveNext()) { object o = enumer.Current; if ((o is Top) && !(o is Multi)) { foundSimp = true; } if ((o is Multi) && !(o is SubMulti)) { foundMulti = true; } if (o is SubMulti) { foundSubMulti = true; } } Assert.IsTrue(foundSimp); Assert.IsTrue(foundMulti); Assert.IsTrue(foundSubMulti); s.CreateQuery("from m in class Multi where m.Count>0 and m.ExtraProp is not null").List(); s.CreateQuery("from m in class Top where m.Count>0 and m.Name is not null").List(); s.CreateQuery("from m in class Lower where m.Other is not null").List(); s.CreateQuery("from m in class Multi where m.Other.id = 1").List(); s.CreateQuery("from m in class SubMulti where m.Amount > 0.0").List(); Assert.AreEqual(2, s.CreateQuery("from m in class Multi").List().Count); //if( !(dialect is Dialect.HSQLDialect) ) //{ Assert.AreEqual(1, s.CreateQuery("from m in class Multi where m.class = SubMulti").List().Count); Assert.AreEqual(1, s.CreateQuery("from m in class Top where m.class = Multi").List().Count); //} Assert.AreEqual(3, s.CreateQuery("from s in class Top").List().Count); Assert.AreEqual(0, s.CreateQuery("from ls in class Lower").List().Count); Assert.AreEqual(1, s.CreateQuery("from sm in class SubMulti").List().Count); if (IsClassicParser) { s.CreateQuery("from ls in class Lower, s in ls.Bag.elements where s.id is not null").List(); s.CreateQuery("from ls in class Lower, s in ls.Set.elements where s.id is not null").List(); s.CreateQuery("from sm in class SubMulti where exists sm.Children.elements").List(); } else { s.CreateQuery("from ls in class Lower, s in elements(ls.Bag) where s.id is not null").List(); s.CreateQuery("from ls in class Lower, s in elements(ls.Set) where s.id is not null").List(); s.CreateQuery("from sm in class SubMulti where exists elements(sm.Children)").List(); } t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); if (TestDialect.SupportsSelectForUpdateOnOuterJoin) { multi = (Multi)s.Load(typeof(Top), mid, LockMode.Upgrade); } simp = (Top)s.Load(typeof(Top), sid); s.Lock(simp, LockMode.UpgradeNoWait); t.Commit(); s.Close(); s = OpenSession(); t = s.BeginTransaction(); s.Update(multi, mid); s.Delete(multi); Assert.AreEqual(2, s.Delete("from s in class Top")); t.Commit(); s.Close(); }
public async Task SubclassCollectionAsync() { ISession s = OpenSession(); SubMulti sm = new SubMulti(); SubMulti sm1 = new SubMulti(); SubMulti sm2 = new SubMulti(); sm.Children = new List <SubMulti> { sm1, sm2 }; sm.MoreChildren = new List <SubMulti> { sm1, sm2 }; sm.ExtraProp = "foo"; sm1.Parent = sm; sm2.Parent = sm; object id = await(s.SaveAsync(sm)); await(s.SaveAsync(sm1)); await(s.SaveAsync(sm2)); await(s.FlushAsync()); s.Close(); await(Sfi.EvictAsync(typeof(SubMulti))); s = OpenSession(); // TODO: I don't understand why h2.0.3/h2.1 issues a select statement here Assert.AreEqual(2, (await(s.CreateQuery( "select s from SubMulti as sm join sm.Children as s where s.Amount>-1 and s.Name is null").ListAsync())). Count); Assert.AreEqual(2, (await(s.CreateQuery("select elements(sm.Children) from SubMulti as sm").ListAsync())).Count); Assert.AreEqual(1, (await(s.CreateQuery( "select distinct sm from SubMulti as sm join sm.Children as s where s.Amount>-1 and s.Name is null") .ListAsync())).Count); sm = (SubMulti)await(s.LoadAsync(typeof(SubMulti), id)); Assert.AreEqual(2, sm.Children.Count); ICollection filterColl = await((await(s.CreateFilterAsync(sm.MoreChildren, "select count(*) where this.Amount>-1 and this.Name is null"))).ListAsync()); foreach (object obj in filterColl) { Assert.AreEqual(2, obj); // only want the first one break; } Assert.AreEqual("FOO", sm.Derived, "should have uppercased the column in a formula"); IEnumerator enumer = (await(s.CreateQuery("select distinct s from s in class SubMulti where s.MoreChildren[1].Amount < 1.0").EnumerableAsync())). GetEnumerator(); Assert.IsTrue(enumer.MoveNext()); Assert.AreSame(sm, enumer.Current); Assert.AreEqual(2, sm.MoreChildren.Count); await(s.DeleteAsync(sm)); foreach (object obj in sm.Children) { await(s.DeleteAsync(obj)); } await(s.FlushAsync()); s.Close(); }
public async Task MultiTableGeneratedIdAsync() { ISession s = OpenSession(); ITransaction t = s.BeginTransaction(); MultiEntity multi = new MultiEntity(); multi.ExtraProp = "extra"; multi.Name = "name"; Top simp = new Top(); simp.Date = DateTime.Now; simp.Name = "simp"; object multiId = await(s.SaveAsync(multi)); object simpId = await(s.SaveAsync(simp)); SubMulti sm = new SubMulti(); sm.Amount = 66.5f; object smId = await(s.SaveAsync(sm)); await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi.ExtraProp += "2"; multi.Name = "new name"; await(s.UpdateAsync(multi, multiId)); simp.Name = "new name"; await(s.UpdateAsync(simp, simpId)); sm.Amount = 456.7f; await(s.UpdateAsync(sm, smId)); await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (MultiEntity)await(s.LoadAsync(typeof(MultiEntity), multiId)); Assert.AreEqual("extra2", multi.ExtraProp); multi.ExtraProp += "3"; Assert.AreEqual("new name", multi.Name); multi.Name = "newer name"; sm = (SubMulti)await(s.LoadAsync(typeof(SubMulti), smId)); Assert.AreEqual(456.7f, sm.Amount); sm.Amount = 23423f; await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); multi = (MultiEntity)await(s.LoadAsync(typeof(Top), multiId)); simp = (Top)await(s.LoadAsync(typeof(Top), simpId)); Assert.IsFalse(simp is MultiEntity); Assert.AreEqual("extra23", multi.ExtraProp); Assert.AreEqual("newer name", multi.Name); await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); IEnumerable enumer = await(s.CreateQuery("select\n\ns from s in class Top where s.Count>0").EnumerableAsync()); bool foundSimp = false; bool foundMulti = false; bool foundSubMulti = false; foreach (object obj in enumer) { if ((obj is Top) && !(obj is MultiEntity)) { foundSimp = true; } if ((obj is MultiEntity) && !(obj is SubMulti)) { foundMulti = true; } if (obj is SubMulti) { foundSubMulti = true; } } Assert.IsTrue(foundSimp); Assert.IsTrue(foundMulti); Assert.IsTrue(foundSubMulti); await(s.CreateQuery("from m in class Multi where m.Count>0 and m.ExtraProp is not null").ListAsync()); await(s.CreateQuery("from m in class Top where m.Count>0 and m.Name is not null").ListAsync()); await(s.CreateQuery("from m in class Lower where m.Other is not null").ListAsync()); await(s.CreateQuery("from m in class Multi where m.Other.id = 1").ListAsync()); await(s.CreateQuery("from m in class SubMulti where m.Amount > 0.0").ListAsync()); Assert.AreEqual(2, (await(s.CreateQuery("from m in class Multi").ListAsync())).Count); Assert.AreEqual(3, (await(s.CreateQuery("from s in class Top").ListAsync())).Count); Assert.AreEqual(0, (await(s.CreateQuery("from s in class Lower").ListAsync())).Count); Assert.AreEqual(1, (await(s.CreateQuery("from sm in class SubMulti").ListAsync())).Count); await(s.CreateQuery("from ls in class Lower, s in elements(ls.Bag) where s.id is not null").ListAsync()); await(s.CreateQuery("from sm in class SubMulti where exists elements(sm.Children)").ListAsync()); await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); if (TestDialect.SupportsSelectForUpdateOnOuterJoin) { multi = (MultiEntity)await(s.LoadAsync(typeof(Top), multiId, LockMode.Upgrade)); } simp = (Top)await(s.LoadAsync(typeof(Top), simpId)); await(s.LockAsync(simp, LockMode.UpgradeNoWait)); await(t.CommitAsync()); s.Close(); s = OpenSession(); t = s.BeginTransaction(); await(s.UpdateAsync(multi, multiId)); await(s.DeleteAsync(multi)); Assert.AreEqual(2, await(s.DeleteAsync("from s in class Top"))); await(t.CommitAsync()); s.Close(); }