Exemplo n.º 1
0
 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());
     }
 }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
        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();
                }
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
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;
    }
Exemplo n.º 7
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();
            }
        }
Exemplo n.º 8
0
 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());
   }
 }
Exemplo n.º 9
0
        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();
            }
        }
Exemplo n.º 10
0
        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();
            }
        }
Exemplo n.º 11
0
        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();
            }
        }
Exemplo n.º 12
0
    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();
      }
    }
Exemplo n.º 13
0
    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();
      }
    }
Exemplo n.º 14
0
 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;
   }
 }
Exemplo n.º 15
0
 [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();
   }
 }
Exemplo n.º 16
0
    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();
      }
    }
Exemplo n.º 17
0
    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());
      }
    }
Exemplo n.º 18
0
 [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();
         }
 }
Exemplo n.º 19
0
        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();
            }
        }
Exemplo n.º 20
0
        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());
            }
        }