public void RemoveChild(DataBaseFileEntry dataBaseFileEntry) { InitChildrenIfNecessary(); var list = childrenWeakReference.GetTarget(true, Session); list.Remove(dataBaseFileEntry); list.Update(); }
public void IndexSample(bool useServerSession) { string brandName = "Toyota"; string color = "Blue"; int maxPassengers = 5; int fuelCapacity = 40; double litresPer100Kilometers = 5; DateTime modelYear = new DateTime(2003, 1, 1); string modelName = "Highlander"; int maxSpeed = 200; int odometer = 100000; string registrationState = "Texas"; string registrationPlate = "TX343434"; string insurancePolicy = "CAA7878787"; DriversLicense license = new DriversLicense("California", "B7788888", DateTime.Now + new TimeSpan(1825, 0, 0, 0)); Person person = new Person("Mats Persson", license); InsuranceCompany insuranceCompany = new InsuranceCompany("Allstate", "858727878"); Car car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); foreach (Database db in session.OpenAllDatabases(true)) if (db.DatabaseNumber >= 10 || db.DatabaseNumber == SessionBase.IndexDescriptorDatabaseNumber) session.DeleteDatabase(db); session.Commit(); session.BeginUpdate(); DatabaseLocation defaultLocation = session.DatabaseLocations.Default(); List<Database> dbList = session.OpenLocationDatabases(defaultLocation, true); foreach (Database db in dbList) if (db.DatabaseNumber > Database.InitialReservedDatabaseNumbers) session.DeleteDatabase(db); session.DeleteLocation(defaultLocation); session.Commit(); CreateDirectoryAndCopyLicenseDb(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); int ct = 0; var mIndex = session.Index<Motorcycle>(); if (mIndex != null) foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 0); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); for (int i = 0; i < 10000; i++) { Motorcycle mc = new Motorcycle(); session.Persist(mc); } session.Commit(); session.BeginUpdate(); int ct = 0; var mIndex = session.Index<Car>(); if (mIndex != null) foreach (Car c in mIndex) { Assert.NotNull(c); ++ct; } Assert.AreEqual(ct, 0); ct = 0; session.RegisterClass(typeof(Person)); foreach (Person p in session.AllObjects<Person>(true, false)) { Assert.NotNull(p); ++ct; } session.Commit(); session.BeginRead(); ct = 0; foreach (Motorcycle mc in session.AllObjects<Motorcycle>(false, true)) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); session.Commit(); session.BeginRead(); ct = 0; foreach (Motorcycle mc in session.AllObjects<Motorcycle>(false, true)) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); session.Abort(); session.BeginRead(); ct = 0; foreach (Motorcycle mc in session.AllObjects<Motorcycle>(false, true)) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); session.Commit(); session.BeginRead(); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); session.Abort(); session.BeginRead(); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); session.Commit(); try { ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 10000); } catch (NotInTransactionException ex) { Console.WriteLine(ex.Message); } session.BeginUpdate(); ct = 0; foreach (Motorcycle mc in session.AllObjects<Motorcycle>(false, true)) if (++ct % 2 == 0) mc.Unpersist(session); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) ++ct; Assert.AreEqual(ct, 5000); session.Abort(); session.BeginUpdate(); ct = 0; foreach (Motorcycle mc in session.AllObjects<Motorcycle>(false, true)) if (++ct % 2 == 0) mc.Unpersist(session); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 5000); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 5000); ct = 0; try { foreach (Motorcycle mc in session.Index<Motorcycle>("ccx")) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 5000); } catch (FieldDoesNotExistException) { } session.Commit(); session.BeginUpdate(); ct = 0; double prior = -44.0; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); mc.CC = mc.CC - prior; prior = mc.CC; ++ct; } Assert.AreEqual(ct, 2500); for (int i = 0; i < 95000; i++) { Motorcycle mc = new Motorcycle(); session.Persist(mc); } session.FlushUpdates(); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 100000); session.Abort(); session.BeginUpdate(); ct = 0; prior = double.MinValue; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); Assert.GreaterOrEqual(mc.CC, prior); prior = mc.CC; ++ct; if (ct < 25) Console.Write(prior.ToString() + " "); } ct = 0; prior = -44.0; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); mc.CC = mc.CC - prior; prior = mc.CC; ++ct; } Assert.AreEqual(ct, 2500); session.Commit(); session.BeginUpdate(); ct = 0; prior = double.MinValue; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); Assert.GreaterOrEqual(mc.CC, prior); prior = mc.CC; ++ct; } for (int i = 0; i < 95000; i++) { Motorcycle mc = new Motorcycle(); session.Persist(mc); DataBaseFileEntry dbEntry = new DataBaseFileEntry { Something = "Something" }; session.Persist(dbEntry); mc.AddChild(dbEntry); mc.AddChild(dbEntry); } session.FlushUpdates(); ct = 0; foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); ++ct; } Assert.AreEqual(ct, 100000); session.Commit(); session.BeginRead(); session.Abort(); session.BeginUpdate(); foreach (Motorcycle mc in session.Index<Motorcycle>()) { Assert.NotNull(mc); VelocityDbList<DataBaseFileEntry> children = mc.Children; if (children != null && children.Count > 0) mc.RemoveChild(children[0]); ++ct; } session.Commit(); session.BeginRead(); ct = 0; prior = double.MinValue; foreach (Motorcycle mc in session.Index<Motorcycle>("cc")) { Assert.NotNull(mc); Assert.GreaterOrEqual(mc.CC, prior); prior = mc.CC; ++ct; } Assert.AreEqual(ct, 100000); session.Commit(); Console.WriteLine("Motorcycle index Test OK"); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); session.Persist(car); registrationState = "Maine"; car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); session.Persist(car); color = "Red"; maxPassengers = 5; fuelCapacity = 50; litresPer100Kilometers = 8; modelYear = new DateTime(2006, 1, 1); brandName = "Toyota"; modelName = "Tacoma"; maxSpeed = 210; odometer = 50000; registrationState = "Texas"; registrationPlate = "TX343433"; insurancePolicy = "CAA7878777"; car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); session.Persist(car); color = "Black"; maxPassengers = 5; fuelCapacity = 60; litresPer100Kilometers = 3; modelYear = new DateTime(2001, 1, 1); brandName = "Lincoln"; modelName = "Town Car"; maxSpeed = 220; odometer = 250000; registrationState = "Texas"; registrationPlate = "TX543433"; insurancePolicy = "CAA7878775"; for (int i = 0; i < 1; i++) { registrationState = RandomString(2); registrationPlate = RandomString(12); car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); session.Persist(car); color = null; maxPassengers = i; fuelCapacity = 60; litresPer100Kilometers = 3; modelYear = new DateTime(2001, 1, 1); brandName = "Null Car"; modelName = null; maxSpeed = 220; odometer = 250000; insurancePolicy = null; } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); Console.WriteLine("Blue Cars"); BTreeSet<Car> bTree = session.Index<Car>("color"); foreach (Car c in (from aCar in bTree where aCar.Color == "Blue" select aCar)) Console.WriteLine(c.ToStringDetails(session)); Console.WriteLine("Cars in fuel efficierncy order"); foreach (Car c in session.Index<Car>("litresPer100Kilometers")) Console.WriteLine(c.ToStringDetails(session)); Console.WriteLine("Vehicles ordered modelYear, brandName, modelName, color"); foreach (Vehicle v in session.Index<Vehicle>()) Console.WriteLine(v.ToStringDetails(session)); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear serach) of the matching Car objects in the BTreeSet Car c = (from aCar in session.Index<Car>("color") where aCar.Color == "Blue" select aCar).First(); c.Color = "Green"; session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear serach) of the matching Car objects in the BTreeSet Car c = (from aCar in session.Index<Car>("color") where aCar.Color == "Green" select aCar).First(); UInt64 id = c.Id; session.DeleteObject(id); session.Abort(); session.BeginUpdate(); session.DeleteObject(id); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear serach) of the matching Car objects in the BTreeSet Console.WriteLine("Blue Cars"); foreach (Car c in (from aCar in session.Index<Car>("color") where aCar.Color == "Blue" select aCar)) Console.WriteLine(c.ToStringDetails(session)); session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); for (int i = 0; i < 10000; i++) { // add some junk to make search harder car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, i, odometer, registrationState, registrationPlate + i, insuranceCompany, insurancePolicy); session.Persist(car); } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear serach) of the matching Car objects in the BTreeSet Console.WriteLine("Blue Cars"); foreach (Car c in (from aCar in session.Index<Car>("color") where aCar.Color == "Blue" select aCar)) Console.WriteLine(c.ToStringDetails(session)); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); Car c = (from aCar in session.Index<Car>("color") where aCar.Color == "Blue" select aCar).First(); c.Unpersist(session); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); foreach (Car c in session.Index<Car>()) Console.WriteLine(c.ToStringDetails(session)); Console.WriteLine("Blue Cars"); foreach (Car c in (from aCar in session.Index<Car>() where aCar.Color == "Blue" select aCar)) Console.WriteLine(c.ToStringDetails(session)); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); InsuranceCompany prior = insuranceCompany; try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompany("AAA", "858787878"); insuranceCompany.Persist(session, prior); prior = insuranceCompany; } Assert.IsTrue(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(InsuranceCompany))); var q = from company in session.Index<InsuranceCompany>("name", db) where company.Name == "AAA" select company; foreach (InsuranceCompany company in q) Console.WriteLine(company.ToStringDetails(session)); // only one will match session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); InsuranceCompany prior = insuranceCompany; try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompany("AAA", "858787878"); session.Persist(insuranceCompany); } Assert.IsTrue(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(InsuranceCompany))); var q = from company in session.Index<InsuranceCompany>("name", db) where company.Name == "AAA" select company; foreach (InsuranceCompany company in q) Console.WriteLine(company.ToStringDetails(session)); // only one will match bool exists = (from anEntry in session.Index<InsuranceCompany>("name", db) where anEntry.Name == "AAA" select 0).Any(); Assert.IsTrue(exists); session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompanySpecial("AAA", "858787878"); session.Persist(insuranceCompany); } Assert.IsTrue(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginUpdate(); try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompanySpecial2("AAA", "858787878"); session.Persist(insuranceCompany); } Assert.IsTrue(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); } using (SessionBase session = useServerSession ? (SessionBase)new ServerClientSession(systemDir) : (SessionBase)new SessionNoServer(systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(InsuranceCompanySpecial))); var q = from company in session.Index<InsuranceCompany>("name", db) where company.Name == "AAA" select company; foreach (InsuranceCompany company in q) Console.WriteLine(company.ToStringDetails(session)); // only one will match bool exists = (from anEntry in session.Index<InsuranceCompanySpecial>("name", db) where anEntry.Name == "AAA" select 0).Any(); Assert.IsTrue(exists); session.Commit(); } }