public void QuerySomeBicycles() { try { using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(Bicycle))); Bicycle b1 = db.AllObjects <Bicycle>().ElementAt(50005); Bicycle b2 = db.AllObjects <Bicycle>().ElementAt <Bicycle>(50005); if (b1 != b2) { throw new UnexpectedException("b1 != b2"); } var src = from Bicycle bike in db.AllObjects <Bicycle>() where bike.Color == "blue" select bike; foreach (Bicycle bike in src) { Console.WriteLine(bike.ToStringDetails(session)); } session.Commit(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public void AutoPlacementDbRollover(int howMany) { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); FourPerPage f; for (UInt64 i = 0; i < 1000000; i++) { f = new FourPerPage(i); session.Persist(f); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); UInt32 dbNum = session.DatabaseNumberOf(typeof(FourPerPage)); Database db = session.OpenDatabase(dbNum); int ct = 0; foreach (FourPerPage f in db.AllObjects <FourPerPage>()) { ct++; } Assert.AreEqual(ct, howMany); session.Commit(); } }
public void aaaE_Chris() { var person = new PersonChris() { Name = "John", Address = "123 Blah St" }; using (var session1 = new SessionNoServer(s_systemDir)) { // Persist instance of Person within transaction session1.BeginUpdate(); session1.Persist(person); session1.Commit(); // Create new transaction and make changes to Person and add child object Job session1.BeginUpdate(); person.Name = "Bob"; person.Jobs.Add(new Job { Name = "clean house" }); // Do not commit previous transaction (keep open) and attempt to read person using another session and a read transaction using (var session2 = new SessionNoServer(s_systemDir)) { session2.BeginRead(); uint dbNum = session2.DatabaseNumberOf(typeof(PersonChris)); Database db = session2.OpenDatabase(dbNum); var person1 = db.AllObjects <PersonChris>().First(); // IOException is thrown here session2.Commit(); } } }
public void MultipleThreadsAdding() { bool doClearAll = SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase; SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase = false; try { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); session.RegisterClass(typeof(AutoPlacement)); // build in type but not yet registered as a one session.RegisterClass(typeof(ObservableList <int>)); session.RegisterClass(typeof(Dokument)); UInt32 dbNum = session.DatabaseNumberOf(typeof(Dokument)); Database db = session.OpenDatabase(dbNum, false, false); if (db == null) { db = session.NewDatabase(dbNum, 0, typeof(Dokument).ToGenericTypeString()); } Dokument doc = new Dokument(); session.Persist(doc); session.Commit(); } using (ServerClientSessionShared sharedReadSession = new ServerClientSessionShared(systemDir)) { sharedReadSession.BeginRead(); Parallel.ForEach(Enumerable.Range(1, 3), (num) => LockConflict(sharedReadSession)); } } finally { SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase = doClearAll; } }
static readonly string s_systemDir = "UpdateClass"; // appended to SessionBase.BaseDatabasePath static int Main(string[] args) { try { Trace.Listeners.Add(new ConsoleTraceListener()); VelocityDbSchema.Samples.UpdateClass.UpdatedClass updatedClassObject; int ct1 = 0; using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.SetTraceDbActivity(Schema.SchemaDB); session.BeginUpdate(); session.UpdateClass(typeof(VelocityDbSchema.Samples.UpdateClass.UpdatedClass)); // call this when you have updated the class since first storing instances of this type or since last call to UpdateClass UInt32 dbNum = session.DatabaseNumberOf(typeof(VelocityDbSchema.Samples.UpdateClass.UpdatedClass)); foreach (var obj in session.AllObjects <VelocityDbSchema.Samples.UpdateClass.UpdatedClass>()) { Console.Write(obj.ToString() + " has members: "); foreach (DataMember member in obj.GetDataMembers()) { Console.Write(member.ToString() + " "); } Console.WriteLine(); obj.UpdateTypeVersion(); // comment out if you DO NOT want to migrate this object to the latest version of the class ct1++; } int ct2 = 0; Database db = session.OpenDatabase(dbNum, true, false); if (db != null) { foreach (var obj in db.AllObjects <VelocityDbSchema.Samples.UpdateClass.UpdatedClass>()) { ct2++; } } Debug.Assert(ct1 == ct2); updatedClassObject = new VelocityDbSchema.Samples.UpdateClass.UpdatedClass(); session.Persist(updatedClassObject); session.Commit(); MoveToDifferentFullClassName(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); return(1); } return(0); }
static readonly string s_systemDir = "UpdateClass"; // appended to SessionBase.BaseDatabasePath static int Main(string[] args) { try { UpdatedClass updatedClassObject; int ct1 = 0; using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.BeginUpdate(); session.UpdateClass(typeof(UpdatedClass)); // call this when you have updated the class since first storing instances of this type or since last call to UpdateClass UInt32 dbNum = session.DatabaseNumberOf(typeof(UpdatedClass)); foreach (UpdatedClass obj in session.AllObjects<UpdatedClass>()) { Console.Write(obj.ToString() + " has members: "); foreach (DataMember member in obj.GetDataMembers()) { Console.Write(member.ToString() + " "); } Console.WriteLine(); obj.UpdateTypeVersion(); // comment out if you DO NOT want to migrate this object to the latest version of the class ct1++; } int ct2 = 0; Database db = session.OpenDatabase(dbNum, true, false); if (db != null) foreach (UpdatedClass obj in db.AllObjects<UpdatedClass>()) ct2++; Debug.Assert(ct1 == ct2); updatedClassObject = new UpdatedClass(); session.Persist(updatedClassObject); session.Commit(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); return 1; } return 0; }
public void Rajan() { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); session.Persist("A"); session.Persist("B"); session.Persist("C"); Placement place = new Placement(900, 1, 1); session.Persist("D", place); session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(string))); var strings = from string str in db.AllObjects <string>() where str.Length > 0 select str; foreach (var item in strings) { Console.WriteLine(item); } db = session.OpenDatabase(900); strings = from string str in db.AllObjects <string>() where str.Length > 0 select str; foreach (var item in strings) { Console.WriteLine(item); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); BTreeMap <string, VelocityDbList <int> > map = new BTreeMap <string, VelocityDbList <int> >(null, session); session.Persist(map); session.Commit(); } }
public void QuerySomeBicycles() { try { using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.BeginRead(); Database db = session.OpenDatabase(session.DatabaseNumberOf(typeof(Bicycle))); Bicycle b1 = db.AllObjects<Bicycle>().ElementAt(50005); Bicycle b2 = db.AllObjects<Bicycle>().ElementAt<Bicycle>(50005); if (b1 != b2) throw new UnexpectedException("b1 != b2"); var src = from Bicycle bike in db.AllObjects<Bicycle>() where bike.Color == "blue" select bike; foreach (Bicycle bike in src) Console.WriteLine(bike.ToStringDetails(session)); session.Commit(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
public void StringInternTest(int howMany) { UInt64 myId = 0; using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); StringInternArrayOfStrings doIntern = new StringInternArrayOfStrings(howMany); myId = session.Persist(doIntern); session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); UInt32 dbNum = session.DatabaseNumberOf(typeof(StringInternArrayOfStrings)); Database db = session.OpenDatabase(dbNum); long beforeRead = GC.GetTotalMemory(true); StringInternArrayOfStrings myIntern = (StringInternArrayOfStrings)session.Open(myId); long afterRead = GC.GetTotalMemory(true); System.Console.WriteLine("Memory before reading large string array object: " + beforeRead + " After read: " + afterRead + " " + myIntern.ToString()); session.Commit(); } }
public void CreateDataAndIterateSession(int numObj) { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Placement place = new Placement(dbNum, 100); for (int i = 0; i < numObj; i++) { NotSharingPage ns = new NotSharingPage(); session.Persist(ns); SharingPageTypeA sA = new SharingPageTypeA(); session.Persist(sA); SharingPageTypeB sB = new SharingPageTypeB(); if (i % 5 == 0) { sB.Persist(session, place); } else if (i % 1001 == 0) { sB.Persist(session, sA); } else if (i % 3001 == 0) { sB.Persist(session, ns); } else { session.Persist(sB); } } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum); AllObjects <NotSharingPage> all = session.AllObjects <NotSharingPage>(true, false); OfType all2 = session.OfType(typeof(NotSharingPage), true, false); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); Database dbA = session.OpenDatabase(dbNum); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Database dbB = session.OpenDatabase(dbNum); AllObjects <SharingPageTypeA> allA = session.AllObjects <SharingPageTypeA>(true, false); AllObjects <SharingPageTypeB> allB = session.AllObjects <SharingPageTypeB>(true, false); int start = numObj / 2; NotSharingPage ns = all.ElementAt(numObj); NotSharingPage ns2 = (NotSharingPage)all2.ElementAt(numObj); Assert.AreEqual(ns, ns2); SharingPageTypeA sA = allA.ElementAt(15); SharingPageTypeB sB = allB.ElementAt(10); for (int i = start; i < numObj; i++) { ns = all.ElementAt(i); } //for (int i = start; i < numObj; i++) // ns = all.Skip(i).T //for (int i = start; i < numObj; i++) // sA = allA.ElementAt(i); all.Skip(100); all2.Skip(100); for (int i = start; i < numObj; i += 5) { ns = all.ElementAt(i); ns2 = (NotSharingPage)all2.ElementAt(i); Assert.AreEqual(ns, ns2); } for (int i = 5; i < 100; i += 5) { sB = allB.ElementAt(i); } for (int i = 0; i < numObj; i += 45000) { ns = all.ElementAt(i); } session.Commit(); session.BeginUpdate(); session.DeleteDatabase(db); session.DeleteDatabase(dbA); session.DeleteDatabase(dbB); session.Commit(); } }
public void CreateDataAndIterateDb(int numObj) { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.Verify(); session.Commit(); session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); db = session.OpenDatabase(dbNum, true, false); if (db != null) { session.DeleteDatabase(db); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.Verify(); session.Commit(); session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Placement place = new Placement(dbNum, 100); for (int i = 0; i < numObj; i++) { NotSharingPage ns = new NotSharingPage(); session.Persist(ns); SharingPageTypeA sA = new SharingPageTypeA(); session.Persist(sA); SharingPageTypeB sB = new SharingPageTypeB(); if (i % 5 == 0) { sB.Persist(session, place); } else if (i % 1001 == 0) { sB.Persist(session, sA); } else if (i % 3001 == 0) { sB.Persist(session, ns); } else { session.Persist(sB); } } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.Verify(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum); AllObjects <NotSharingPage> all = db.AllObjects <NotSharingPage>(); int ct = all.Count(); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); OfType ofType = db.OfType(typeof(NotSharingPage)); int ct2 = (int)ofType.Count; Assert.AreEqual(ct, ct2); Database dbA = session.OpenDatabase(dbNum); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Database dbB = session.OpenDatabase(dbNum); AllObjects <SharingPageTypeA> allA = dbA.AllObjects <SharingPageTypeA>(); AllObjects <SharingPageTypeB> allB = dbB.AllObjects <SharingPageTypeB>(); OfType allA2 = dbA.OfType(typeof(SharingPageTypeA)); int start = numObj / 2; NotSharingPage ns = all.ElementAt(numObj); SharingPageTypeA sA = allA.ElementAt(numObj); SharingPageTypeA sA2 = (SharingPageTypeA)allA2.ElementAt(numObj); Assert.AreEqual(sA, sA2); sA = allA.ElementAt(10); sA2 = (SharingPageTypeA)allA2.ElementAt(10); Assert.AreEqual(sA, sA2); //MethodInfo method = typeof(Database).GetMethod("AllObjects"); //MethodInfo generic = method.MakeGenericMethod(sA.GetType()); //dynamic itr = generic.Invoke(dbA, new object[]{ true }); //SharingPageTypeA sAb = itr.ElementAt(numObj); //Assert.AreEqual(sA, sAb); //SharingPageTypeA sAc = itr.ElementAt(numObj); SharingPageTypeB sB = allB.ElementAt(numObj); List <NotSharingPage> notSharingPageList = all.Skip(100).ToList(); List <SharingPageTypeA> sharingPageTypeA = allA.Take(5).Skip(100).ToList(); for (int i = start; i < numObj; i++) { sA = allA.ElementAt(i); } for (int i = start; i < numObj; i += 5) { ns = all.ElementAt(i); } for (int i = start; i < numObj; i += 5) { sB = allB.ElementAt(i); } for (int i = 0; i < numObj; i += 45000) { ns = all.ElementAt(i); } int allB_count = allB.Count(); for (int i = 0; i < allB_count - 1; i++) { Assert.NotNull(allB.ElementAt(i)); } session.Commit(); session.BeginUpdate(); session.DeleteDatabase(db); session.DeleteDatabase(dbA); session.DeleteDatabase(dbB); session.Commit(); } }
public void CreateDataAndIterateSession(int numObj) { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Placement place = new Placement(dbNum, 100); for (int i = 0; i < numObj; i++) { NotSharingPage ns = new NotSharingPage(); session.Persist(ns); SharingPageTypeA sA = new SharingPageTypeA(); session.Persist(sA); SharingPageTypeB sB = new SharingPageTypeB(); if (i % 5 == 0) sB.Persist(session, place); else if (i % 1001 == 0) sB.Persist(session, sA); else if (i % 3001 == 0) sB.Persist(session, ns); else session.Persist(sB); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum); AllObjects<NotSharingPage> all = session.AllObjects<NotSharingPage>(true, false); OfType all2 = session.OfType(typeof(NotSharingPage), true, false); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); Database dbA = session.OpenDatabase(dbNum); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Database dbB = session.OpenDatabase(dbNum); AllObjects<SharingPageTypeA> allA = session.AllObjects<SharingPageTypeA>(true, false); AllObjects<SharingPageTypeB> allB = session.AllObjects<SharingPageTypeB>(true, false); int start = numObj / 2; NotSharingPage ns = all.ElementAt(numObj - 1); // zero based index so deduct one NotSharingPage ns2 = (NotSharingPage)all2.ElementAt(numObj - 1); Assert.AreEqual(ns, ns2); SharingPageTypeA sA = allA.ElementAt(15); SharingPageTypeB sB = allB.ElementAt(10); for (int i = start; i < numObj; i++) ns = all.ElementAt(i); //for (int i = start; i < numObj; i++) // ns = all.Skip(i).T //for (int i = start; i < numObj; i++) // sA = allA.ElementAt(i); all.Skip(100); all2.Skip(100); for (int i = start; i < numObj; i += 5) { ns = all.ElementAt(i); ns2 = (NotSharingPage)all2.ElementAt(i); Assert.AreEqual(ns, ns2); } for (int i = 5; i < 100; i += 5) sB = allB.ElementAt(i); for (int i = 0; i < numObj; i += 45000) ns = all.ElementAt(i); session.Commit(); session.BeginUpdate(); session.DeleteDatabase(db); session.DeleteDatabase(dbA); session.DeleteDatabase(dbB); session.Commit(); } }
public void CreateDataAndIterateDb(int numObj) { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.Verify(); session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); db = session.OpenDatabase(dbNum, true, false); if (db != null) session.DeleteDatabase(db); session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.Verify(); session.BeginUpdate(); UInt32 dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Placement place = new Placement(dbNum, 100); for (int i = 0; i < numObj; i++) { NotSharingPage ns = new NotSharingPage(); session.Persist(ns); SharingPageTypeA sA = new SharingPageTypeA(); session.Persist(sA); SharingPageTypeB sB = new SharingPageTypeB(); if (i % 5 == 0) sB.Persist(session, place); else if (i % 1001 == 0) sB.Persist(session, sA); else if (i % 3001 == 0) sB.Persist(session, ns); else session.Persist(sB); } session.Commit(); } using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginRead(); session.Verify(); UInt32 dbNum = session.DatabaseNumberOf(typeof(NotSharingPage)); Database db = session.OpenDatabase(dbNum); AllObjects<NotSharingPage> all = db.AllObjects<NotSharingPage>(); ulong ct = all.Count(); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeA)); OfType ofType = db.OfType(typeof(NotSharingPage)); ulong ct2 = ofType.Count(); Assert.AreEqual(ct, ct2); Database dbA = session.OpenDatabase(dbNum); dbNum = session.DatabaseNumberOf(typeof(SharingPageTypeB)); Database dbB = session.OpenDatabase(dbNum); AllObjects<SharingPageTypeA> allA = dbA.AllObjects<SharingPageTypeA>(); AllObjects<SharingPageTypeB> allB = dbB.AllObjects<SharingPageTypeB>(); OfType allA2 = dbA.OfType(typeof(SharingPageTypeA)); int start = numObj / 2; NotSharingPage ns = all.ElementAt(numObj); SharingPageTypeA sA = allA.ElementAt(numObj); SharingPageTypeA sA2 = (SharingPageTypeA)allA2.ElementAt(numObj); Assert.AreEqual(sA, sA2); sA = allA.ElementAt(10); sA2 = (SharingPageTypeA)allA2.ElementAt(10); Assert.AreEqual(sA, sA2); //MethodInfo method = typeof(Database).GetMethod("AllObjects"); //MethodInfo generic = method.MakeGenericMethod(sA.GetType()); //dynamic itr = generic.Invoke(dbA, new object[]{ true }); //SharingPageTypeA sAb = itr.ElementAt(numObj); //Assert.AreEqual(sA, sAb); //SharingPageTypeA sAc = itr.ElementAt(numObj); SharingPageTypeB sB = allB.ElementAt(numObj); List<NotSharingPage> notSharingPageList = all.Skip(100).ToList(); List<SharingPageTypeA> sharingPageTypeA = allA.Take(5).Skip(100).ToList(); for (int i = start; i < numObj; i++) sA = allA.ElementAt(i); for (int i = start; i < numObj; i += 5) ns = all.ElementAt(i); for (int i = start; i < numObj; i += 5) sB = allB.ElementAt(i); for (int i = 0; i < numObj; i += 45000) ns = all.ElementAt(i); int allB_count = (int) allB.Count(); for (int i = 0; i < allB_count - 1; i++) { Assert.NotNull(allB.ElementAt(i)); } session.Commit(); session.BeginUpdate(); session.DeleteDatabase(db); session.DeleteDatabase(dbA); session.DeleteDatabase(dbB); session.Commit(); } }
public void MultipleThreadsAdding() { bool doClearAll = SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase; SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase = false; try { using (SessionNoServer session = new SessionNoServer(systemDir)) { session.BeginUpdate(); session.RegisterClass(typeof(AutoPlacement)); // build in type but not yet registered as a one session.RegisterClass(typeof(ObservableList<int>)); session.RegisterClass(typeof(Dokument)); UInt32 dbNum = session.DatabaseNumberOf(typeof(Dokument)); Database db = session.OpenDatabase(dbNum, false, false); if (db == null) db = session.NewDatabase(dbNum, 0, typeof(Dokument).ToGenericTypeString()); Dokument doc = new Dokument(); session.Persist(doc); session.Commit(); } using (ServerClientSessionShared sharedReadSession = new ServerClientSessionShared(systemDir)) { sharedReadSession.BeginRead(); Parallel.ForEach(Enumerable.Range(1, 3), (num) => LockConflict(sharedReadSession)); } } finally { SessionBase.ClearAllCachedObjectsWhenDetectingUpdatedDatabase = doClearAll; } }
[TestCase(false)] // test will fail if pessimistic locking is used public void SingleReaderSingleUpdater4(bool useReaderCommit) { using (SessionNoServer updater = new SessionNoServer(systemDir, 5000)) using (SessionNoServer reader = new SessionNoServer(systemDir, 5000)) { updater.SetTraceAllDbActivity(); reader.SetTraceAllDbActivity(); updater.BeginUpdate(); UInt32 dbNum = updater.DatabaseNumberOf(typeof(Man)); Database db = updater.OpenDatabase(dbNum, true, false); if (db != null) updater.DeleteDatabase(db); updater.Commit(); updater.BeginUpdate(); Man man = new Man(); for (int i = 0; i < 100; i++) { man = new Man(); updater.Persist(man); } updater.Commit(); reader.BeginRead(); updater.BeginUpdate(); db = reader.OpenDatabase(dbNum); foreach (Page page in db) Assert.True(page.PageInfo.VersionNumber == 1); if (useReaderCommit) reader.Commit(); if (useReaderCommit) reader.BeginRead(); else reader.ForceDatabaseCacheValidation(); for (int i = 1; i < 25; i++) { db = reader.OpenDatabase(dbNum); foreach (Page page in db) { if (page.PageNumber > 1) // skip AutoPlacemnt page { Assert.True(page.PageInfo.VersionNumber == (ulong)i); Man man2 = (Man)reader.Open(dbNum, page.PageNumber, 1, false); Man manUpdated = (Man)updater.Open(dbNum, page.PageNumber, 1, true); } } if (useReaderCommit) { reader.Commit(); reader.BeginRead(); } else reader.ForceDatabaseCacheValidation(); updater.Commit(); updater.BeginUpdate(); } Database db2 = reader.OpenDatabase(dbNum); db = updater.OpenDatabase(dbNum); for (int i = 25; i < 50; i++) { foreach (Page page in db) { if (page.PageNumber > 1) { Assert.True(page.PageInfo.VersionNumber == (ulong)i); Man manUpdated = (Man)updater.Open(dbNum, page.PageNumber, 1, true); } } updater.Commit(); updater.BeginUpdate(); db2 = reader.OpenDatabase(dbNum); foreach (Page page in db2) { if (page.PageNumber > 1) { //Assert.True(page.PageInfo.VersionNumber == (ulong)i + 1); Man man2 = (Man)reader.Open(dbNum, page.PageNumber, 1, false); } } reader.ClearPageCache(); System.GC.Collect(); } reader.Commit(); updater.Commit(); } }
public void Create1Vertices(bool vertexIdSetPerVertexType) { DataCache.MaximumMemoryUse = 10000000000; // 10 GB bool dirExist = Directory.Exists(systemDir); try { if (Directory.Exists(systemDir)) Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases. Directory.CreateDirectory(systemDir); File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); } catch { File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); } using (SessionNoServer session = new SessionNoServer(systemDir, 5000, false, true)) { session.BeginUpdate(); Graph g = new Graph(session, vertexIdSetPerVertexType); session.Persist(g); VertexType userType = g.NewVertexType("User"); VertexType otherType = g.NewVertexType("Other"); PropertyType userNamePropertyType = g.NewVertexProperty(userType, "NAME", DataType.String, PropertyKind.Indexed); VertexType powerUserType = g.NewVertexType("PowerUser", userType); EdgeType userFriendEdgeType = g.NewEdgeType("Friend", true, userType, userType); EdgeType userBestFriendEdgeType = g.NewEdgeType("Best Friend", true, userType, userType, userFriendEdgeType); EdgeType otherEdgeType = g.NewEdgeType("Other", true, userType, userType); PropertyType bestFriendPropertyType = g.NewEdgeProperty(userFriendEdgeType, "START", DataType.DateTime, PropertyKind.Indexed); Vertex kinga = userType.NewVertex(); Vertex robin = userType.NewVertex(); Vertex mats = powerUserType.NewVertex(); Vertex chiran = powerUserType.NewVertex(); Vertex other = otherType.NewVertex(); Edge bestFriend = kinga.AddEdge(userBestFriendEdgeType, robin); Edge otherEdge = kinga.AddEdge(otherEdgeType, robin); DateTime now = DateTime.UtcNow; mats.SetProperty("Address", 1); bestFriend.SetProperty(bestFriendPropertyType, now); kinga.SetProperty(userNamePropertyType, "Kinga"); if (g.VertexIdSetPerType == false) mats.SetProperty(userNamePropertyType, "Mats"); else { try { mats.SetProperty(userNamePropertyType, "Mats"); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } } try { other.SetProperty(userNamePropertyType, "Mats"); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } try { otherEdge.SetProperty(bestFriendPropertyType, now); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } Vertex findMats = userNamePropertyType.GetPropertyVertex("Mats", true); var list = userNamePropertyType.GetPropertyVertices("Mats", true).ToList(); //Edge findWhen = bestFriendPropertyType.GetPropertyEdge(now); //var list2 = bestFriendPropertyType.GetPropertyEdges(now); Console.WriteLine(findMats); // session.Commit(); // session.BeginRead(); PropertyType adressProperty = g.FindVertexProperty(powerUserType, "Address"); Vertex find1 = adressProperty.GetPropertyVertex(1, true); session.Abort(); /*session.BeginUpdate(); g.Unpersist(session); session.Commit(); dirExist = Directory.Exists(systemDir); try { if (Directory.Exists(systemDir)) Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases. Directory.CreateDirectory(systemDir); File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); } catch { File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); }*/ } using (SessionNoServer session = new SessionNoServer(systemDir, 5000, false, true)) { session.BeginUpdate(); session.DefaultDatabaseLocation().CompressPages = PageInfo.compressionKind.None; Graph g = new Graph(session, vertexIdSetPerVertexType); session.Persist(g); Graph g2 = new Graph(session); session.Persist(g2); Graph g3 = new Graph(session); session.Persist(g3); UInt32 dbNum = session.DatabaseNumberOf(typeof(Graph)); Graph g4 = (Graph)session.Open(dbNum, 2, 1, true); // g4 == g Graph g5 = (Graph)session.Open(dbNum, 2, 2, true); // g5 == g2 Graph g6 = (Graph)session.Open(dbNum, 2, 3, true); // g6 == g3 for (int i = 4; i < 8; i++) { Graph gt = new Graph(session); session.Persist(gt); } Graph g7 = new Graph(session); Placement place = new Placement(dbNum, 15); session.Persist(place, g7); // SCHEMA VertexType userType = g.NewVertexType("User"); VertexType locationType = g.NewVertexType("Location"); VertexType aVertexType = g.NewVertexType("A"); VertexType bVertexType = g.NewVertexType("B"); VertexType cVertexType = g.NewVertexType("C"); EdgeType uEdge = g.NewEdgeType("unrestricted", true); Vertex aVertex = g.NewVertex(aVertexType); Vertex bVertex = g.NewVertex(bVertexType); Vertex cVertex = g.NewVertex(cVertexType); Edge abEdge = (Edge)aVertex.AddEdge("unrestricted", bVertex); Edge bcEdge = (Edge)aVertex.AddEdge("unrestricted", cVertex); Dictionary<Vertex, HashSet<Edge>> traverse = aVertex.Traverse(uEdge, Direction.Out); abEdge.Remove(); Dictionary<Vertex, HashSet<Edge>> traverse2 = aVertex.Traverse(uEdge, Direction.Out); EdgeType friendEdgeType = g.NewEdgeType("Friend", true, userType, userType); EdgeType userLocationEdgeType = g.NewEdgeType("UserLocation", true, userType, locationType); // DATA Random rand = new Random(5); for (int i = 0; i < numberOfUserVertices / 100; i++) { int vId = rand.Next(numberOfUserVertices); try { if (g.VertexIdSetPerType) userType.GetVertex(vId); else g.GetVertex(vId); try { userType.NewVertex(vId); Assert.Fail(); } catch (VertexAllreadyExistException) { } } catch (VertexDoesNotExistException) { userType.NewVertex(vId); userType.GetVertex(vId); } } for (int i = 0; i < numberOfUserVertices / 10000; i++) { int vId = rand.Next(numberOfUserVertices); try { Vertex v = userType.GetVertex(vId); v.SetProperty("test", 1); } catch (VertexDoesNotExistException) { } } for (int i = 0; i < numberOfUserVertices / 10000; i++) { int vId = rand.Next(numberOfUserVertices); try { Vertex v = userType.GetVertex(vId); userType.RemoveVertex(v); } catch (VertexDoesNotExistException) { } } foreach (Vertex v in userType.GetVertices().ToArray()) userType.RemoveVertex(v); Assert.AreEqual(0, userType.GetVertices().Count()); for (int i = 100000; i < numberOfUserVertices; i++) userType.NewVertex(); for (int i = 1; i < 100000; i++) userType.NewVertex(); for (int i = 1; i < numberOfLocationVertices; i++) locationType.NewVertex(); session.Commit(); session.BeginRead(); foreach (var x in session.AllObjects<BTreeSet<Range<VertexId>>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeSet<EdgeType>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeSet<EdgeIdVertexId>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<EdgeId, VelocityDbList<ElementId>>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<string, PropertyType>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<string, EdgeType>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<string, VertexType>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<VertexId, BTreeSet<EdgeIdVertexId>>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<VertexType, BTreeMap<VertexId, BTreeSet<EdgeIdVertexId>>>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); foreach (var x in session.AllObjects<BTreeMap<EdgeType, BTreeMap<VertexType, BTreeMap<VertexId, BTreeSet<EdgeIdVertexId>>>>>(false, true)) Assert.True(x.ToDoBatchAddCount == 0); session.Commit(); Validate(); } }
static readonly string s_systemDir = "Indexes"; // appended to SessionBase.BaseDatabasePath static void Main(string[] args) { try { Trace.Listeners.Add(new ConsoleTraceListener()); 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { // cleanup data from a possible prior run session.BeginUpdate(); foreach (Database db in session.OpenAllDatabases(true)) if (db.DatabaseNumber >= 10 || db.DatabaseNumber == SessionBase.IndexDescriptorDatabaseNumber) session.DeleteDatabase(db); session.Commit(); File.Copy(s_licenseDbFile, Path.Combine(session.SystemDirectory, "4.odb")); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Console.WriteLine("Running with databases in directory: " + session.SystemDirectory); //session.AddToIndexInSeperateThread = false; 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"; car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); session.Persist(car); session.Commit(); } using (SessionNoServer session = new SessionNoServer(s_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 efficiency 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); Car c = (from aCar in session.Index<Car>("color") where aCar.Color == "Blue" select aCar).First(); c.Unpersist(session); session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); InsuranceCompany prior = insuranceCompany; try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompany("AAA", "858787878"); session.Persist(insuranceCompany); } Debug.Assert(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); Customer joe = new Customer("Joe"); session.Persist(joe); Customer karim = new Customer("Karim"); session.Persist(karim); Customer tony = new Customer("Tony"); session.Persist(tony); Customer wayne = new Customer("Wayne"); session.Persist(wayne); Order order = new Order(joe); Payment payment = new Payment(order); order = new Order(karim); payment = new Payment(order); payment = new Payment(order); payment = new Payment(order); order = new Order(tony); payment = new Payment(order); payment = new Payment(order); order = new Order(wayne); payment = new Payment(order); session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); var karim = (from customer in session.Index<Customer>("m_name") where customer.Name == "Karim" select customer).FirstOrDefault(); var karimOrders = karim.Orders; var karimOrderFromOrders = (from order in session.Index<Order>("m_customer") where order.Customer == karim select order).ToArray(); session.Commit(); session.BeginUpdate(); karim = (from customer in session.Index<Customer>("m_name") where customer.Name == "Karim" select customer).FirstOrDefault(); karim.StreetAddress = "1623 Bonita Ave"; session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
[TestCase(false)] // test will fail if pessimistic locking is used public void SingleReaderSingleUpdater4(bool useReaderCommit) { using (SessionNoServer updater = new SessionNoServer(systemDir, 5000)) using (SessionNoServer reader = new SessionNoServer(systemDir, 5000)) { updater.SetTraceAllDbActivity(); reader.SetTraceAllDbActivity(); updater.BeginUpdate(); UInt32 dbNum = updater.DatabaseNumberOf(typeof(Man)); Database db = updater.OpenDatabase(dbNum, true, false); if (db != null) { updater.DeleteDatabase(db); } updater.Commit(); updater.BeginUpdate(); Man man = new Man(); for (int i = 0; i < 100; i++) { man = new Man(); updater.Persist(man); } updater.Commit(); reader.BeginRead(); updater.BeginUpdate(); db = reader.OpenDatabase(dbNum); foreach (Page page in db) { Assert.True(page.PageInfo.VersionNumber == 1); } if (useReaderCommit) { reader.Commit(); } if (useReaderCommit) { reader.BeginRead(); } else { reader.ForceDatabaseCacheValidation(); } for (int i = 1; i < 25; i++) { db = reader.OpenDatabase(dbNum); foreach (Page page in db) { if (page.PageNumber > 1) // skip AutoPlacemnt page { Assert.True(page.PageInfo.VersionNumber == (ulong)i); Man man2 = (Man)reader.Open(dbNum, page.PageNumber, 1, false); Man manUpdated = (Man)updater.Open(dbNum, page.PageNumber, 1, true); } } if (useReaderCommit) { reader.Commit(); reader.BeginRead(); } else { reader.ForceDatabaseCacheValidation(); } updater.Commit(); updater.BeginUpdate(); } Database db2 = reader.OpenDatabase(dbNum); db = updater.OpenDatabase(dbNum); for (int i = 25; i < 50; i++) { foreach (Page page in db) { if (page.PageNumber > 1) { Assert.True(page.PageInfo.VersionNumber == (ulong)i); Man manUpdated = (Man)updater.Open(dbNum, page.PageNumber, 1, true); } } updater.Commit(); updater.BeginUpdate(); db2 = reader.OpenDatabase(dbNum); foreach (Page page in db2) { if (page.PageNumber > 1) { //Assert.True(page.PageInfo.VersionNumber == (ulong)i + 1); Man man2 = (Man)reader.Open(dbNum, page.PageNumber, 1, false); } } reader.ClearPageCache(); System.GC.Collect(); } reader.Commit(); updater.Commit(); } }
public void Create1Vertices(bool vertexIdSetPerVertexType) { DataCache.MaximumMemoryUse = 10000000000; // 10 GB bool dirExist = Directory.Exists(systemDir); try { if (Directory.Exists(systemDir)) { Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases. } Directory.CreateDirectory(systemDir); File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); } catch { File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); } using (SessionNoServer session = new SessionNoServer(systemDir, 5000, false, true)) { session.BeginUpdate(); Graph g = new Graph(session, vertexIdSetPerVertexType); session.Persist(g); VertexType userType = g.NewVertexType("User"); VertexType otherType = g.NewVertexType("Other"); PropertyType userNamePropertyType = g.NewVertexProperty(userType, "NAME", DataType.String, PropertyKind.Indexed); VertexType powerUserType = g.NewVertexType("PowerUser", userType); EdgeType userFriendEdgeType = g.NewEdgeType("Friend", true, userType, userType); EdgeType userBestFriendEdgeType = g.NewEdgeType("Best Friend", true, userType, userType, userFriendEdgeType); EdgeType otherEdgeType = g.NewEdgeType("Other", true, userType, userType); PropertyType bestFriendPropertyType = g.NewEdgeProperty(userFriendEdgeType, "START", DataType.DateTime, PropertyKind.Indexed); Vertex kinga = userType.NewVertex(); Vertex robin = userType.NewVertex(); Vertex mats = powerUserType.NewVertex(); Vertex chiran = powerUserType.NewVertex(); Vertex other = otherType.NewVertex(); Edge bestFriend = kinga.AddEdge(userBestFriendEdgeType, robin); Edge otherEdge = kinga.AddEdge(otherEdgeType, robin); DateTime now = DateTime.Now; mats.SetProperty("Address", 1); bestFriend.SetProperty(bestFriendPropertyType, now); kinga.SetProperty(userNamePropertyType, "Kinga"); if (g.VertexIdSetPerType == false) { mats.SetProperty(userNamePropertyType, "Mats"); } else { try { mats.SetProperty(userNamePropertyType, "Mats"); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } } try { other.SetProperty(userNamePropertyType, "Mats"); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } try { otherEdge.SetProperty(bestFriendPropertyType, now); Assert.Fail("Invalid property for VertexType not handled"); } catch (Exception) { } Vertex findMats = userNamePropertyType.GetPropertyVertex("Mats", true); var list = userNamePropertyType.GetPropertyVertices("Mats", true).ToList(); //Edge findWhen = bestFriendPropertyType.GetPropertyEdge(now); //var list2 = bestFriendPropertyType.GetPropertyEdges(now); Console.WriteLine(findMats); // session.Commit(); // session.BeginRead(); PropertyType adressProperty = g.FindVertexProperty(powerUserType, "Address"); Vertex find1 = adressProperty.GetPropertyVertex(1, true); session.Abort(); /*session.BeginUpdate(); * g.Unpersist(session); * session.Commit(); * dirExist = Directory.Exists(systemDir); * try * { * if (Directory.Exists(systemDir)) * Directory.Delete(systemDir, true); // remove systemDir from prior runs and all its databases. * Directory.CreateDirectory(systemDir); * File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); * } * catch * { * File.Copy(licenseDbFile, Path.Combine(systemDir, "4.odb")); * }*/ } using (SessionNoServer session = new SessionNoServer(systemDir, 5000, false, true)) { session.BeginUpdate(); session.DefaultDatabaseLocation().CompressPages = PageInfo.compressionKind.None; Graph g = new Graph(session, vertexIdSetPerVertexType); session.Persist(g); Graph g2 = new Graph(session); session.Persist(g2); Graph g3 = new Graph(session); session.Persist(g3); UInt32 dbNum = session.DatabaseNumberOf(typeof(Graph)); Graph g4 = (Graph)session.Open(dbNum, 2, 1, true); // g4 == g Graph g5 = (Graph)session.Open(dbNum, 2, 2, true); // g5 == g2 Graph g6 = (Graph)session.Open(dbNum, 2, 3, true); // g6 == g3 for (int i = 4; i < 8; i++) { Graph gt = new Graph(session); session.Persist(gt); } Graph g7 = new Graph(session); Placement place = new Placement(dbNum, 15); session.Persist(place, g7); // SCHEMA VertexType userType = g.NewVertexType("User"); VertexType locationType = g.NewVertexType("Location"); VertexType aVertexType = g.NewVertexType("A"); VertexType bVertexType = g.NewVertexType("B"); VertexType cVertexType = g.NewVertexType("C"); EdgeType uEdge = g.NewEdgeType("unrestricted", true); Vertex aVertex = g.NewVertex(aVertexType); Vertex bVertex = g.NewVertex(bVertexType); Vertex cVertex = g.NewVertex(cVertexType); Edge abEdge = (Edge)aVertex.AddEdge("unrestricted", bVertex); Edge bcEdge = (Edge)aVertex.AddEdge("unrestricted", cVertex); Dictionary <Vertex, HashSet <Edge> > traverse = aVertex.Traverse(uEdge, Direction.Out); abEdge.Remove(); Dictionary <Vertex, HashSet <Edge> > traverse2 = aVertex.Traverse(uEdge, Direction.Out); EdgeType friendEdgeType = g.NewEdgeType("Friend", true, userType, userType); EdgeType userLocationEdgeType = g.NewEdgeType("UserLocation", true, userType, locationType); // DATA Random rand = new Random(5); for (int i = 0; i < numberOfUserVertices / 100; i++) { int vId = rand.Next(numberOfUserVertices); try { if (g.VertexIdSetPerType) { userType.GetVertex(vId); } else { g.GetVertex(vId); } try { userType.NewVertex(vId); Assert.Fail(); } catch (VertexAllreadyExistException) { } } catch (VertexDoesNotExistException) { userType.NewVertex(vId); userType.GetVertex(vId); } } for (int i = 0; i < numberOfUserVertices / 10000; i++) { int vId = rand.Next(numberOfUserVertices); try { Vertex v = userType.GetVertex(vId); v.SetProperty("test", 1); } catch (VertexDoesNotExistException) { } } for (int i = 0; i < numberOfUserVertices / 10000; i++) { int vId = rand.Next(numberOfUserVertices); try { Vertex v = userType.GetVertex(vId); userType.RemoveVertex(v); } catch (VertexDoesNotExistException) { } } foreach (Vertex v in userType.GetVertices().ToArray()) { userType.RemoveVertex(v); } Assert.AreEqual(0, userType.GetVertices().Count()); for (int i = 100000; i < numberOfUserVertices; i++) { userType.NewVertex(); } for (int i = 1; i < 100000; i++) { userType.NewVertex(); } for (int i = 1; i < numberOfLocationVertices; i++) { locationType.NewVertex(); } session.Commit(); session.BeginRead(); foreach (var x in session.AllObjects <BTreeSet <Range <VertexId> > >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeSet <EdgeType> >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeSet <EdgeIdVertexId> >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <EdgeId, VelocityDbList <ElementId> > >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <string, PropertyType> >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <string, EdgeType> >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <string, VertexType> >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <VertexId, BTreeSet <EdgeIdVertexId> > >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <VertexType, BTreeMap <VertexId, BTreeSet <EdgeIdVertexId> > > >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } foreach (var x in session.AllObjects <BTreeMap <EdgeType, BTreeMap <VertexType, BTreeMap <VertexId, BTreeSet <EdgeIdVertexId> > > > >(false, true)) { Assert.True(x.ToDoBatchAddCount == 0); } session.Commit(); Validate(); } }
static readonly string s_systemDir = "Indexes"; // appended to SessionBase.BaseDatabasePath static void Main(string[] args) { try { Trace.Listeners.Add(new ConsoleTraceListener()); 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { // cleanup data from a possible prior run session.BeginUpdate(); foreach (Database db in session.OpenAllDatabases(true)) { if (db.DatabaseNumber >= 10 || db.DatabaseNumber == SessionBase.IndexDescriptorDatabaseNumber) { session.DeleteDatabase(db); } } session.Commit(); File.Copy(s_licenseDbFile, Path.Combine(session.SystemDirectory, "4.odb")); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Console.WriteLine("Running with databases in directory: " + session.SystemDirectory); //session.AddToIndexInSeperateThread = false; 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"; car = new Car(color, maxPassengers, fuelCapacity, litresPer100Kilometers, modelYear, brandName, modelName, maxSpeed, odometer, registrationState, registrationPlate, insuranceCompany, insurancePolicy); session.Persist(car); session.Commit(); } using (SessionNoServer session = new SessionNoServer(s_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 efficiency 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; session.BeginUpdate(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); // these LINQ statements will trigger a binary search lookup (not a linear search) 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 (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); Car c = (from aCar in session.Index <Car>("color") where aCar.Color == "Blue" select aCar).First(); c.Unpersist(session); session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); InsuranceCompany prior = insuranceCompany; try { for (int i = 0; i < 100000; i++) { insuranceCompany = new InsuranceCompany("AAA", "858787878"); session.Persist(insuranceCompany); } Debug.Assert(false); // should not get here } catch (UniqueConstraintException) { } session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); 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(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginUpdate(); Customer joe = new Customer("Joe"); session.Persist(joe); Customer karim = new Customer("Karim"); session.Persist(karim); Customer tony = new Customer("Tony"); session.Persist(tony); Customer wayne = new Customer("Wayne"); session.Persist(wayne); Order order = new Order(joe); Payment payment = new Payment(order); order = new Order(karim); payment = new Payment(order); payment = new Payment(order); payment = new Payment(order); order = new Order(tony); payment = new Payment(order); payment = new Payment(order); order = new Order(wayne); payment = new Payment(order); session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } using (SessionNoServer session = new SessionNoServer(s_systemDir)) { session.TraceIndexUsage = true; Stopwatch sw = new Stopwatch(); sw.Start(); session.BeginRead(); var karim = (from customer in session.Index <Customer>("m_name") where customer.Name == "Karim" select customer).FirstOrDefault(); var karimOrders = karim.Orders; var karimOrderFromOrders = (from order in session.Index <Order>("m_customer") where order.Customer == karim select order).ToArray(); session.Commit(); session.BeginUpdate(); karim = (from customer in session.Index <Customer>("m_name") where customer.Name == "Karim" select customer).FirstOrDefault(); karim.StreetAddress = "1623 Bonita Ave"; session.Commit(); sw.Stop(); Console.WriteLine(sw.Elapsed); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }