public void TestMovePrevUnique()
        {
            testName = "TestMovePrevUnique";
            SetUpTest(true);
            string dbFileName    = testHome + "/" + testName + ".db";
            string dbSecFileName = testHome + "/" + testName +
                                   "_sec.db";

            BTreeDatabase          db;
            SecondaryBTreeDatabase secDB;

            OpenSecDB(dbFileName, dbSecFileName, out db,
                      out secDB);
            WriteRecords(db);

            SecondaryCursor cursor = secDB.SecondaryCursor();
            KeyValuePair <DatabaseEntry, KeyValuePair <
                              DatabaseEntry, DatabaseEntry> > pair;
            DatabaseEntry pKey, pData;

            pKey  = new DatabaseEntry(BitConverter.GetBytes((int)6));
            pData = new DatabaseEntry(BitConverter.GetBytes((int)10));
            pair  = new KeyValuePair <DatabaseEntry, KeyValuePair <
                                          DatabaseEntry, DatabaseEntry> >(pData,
                                                                          new KeyValuePair <DatabaseEntry, DatabaseEntry>(
                                                                              pKey, pData));
            cursor.Move(pair, true);
            Assert.IsTrue(cursor.MovePrevUnique());
            Assert.AreNotEqual(BitConverter.GetBytes((int)10),
                               cursor.Current.Key.Data);

            cursor.Close();
            secDB.Close();
            db.Close();
        }
Пример #2
0
        public void TestMovePrevUniqueWithLockingInfo()
        {
            testName = "TestMovePrevUniqueWithLockingInfo";
            testHome = testFixtureHome + "/" + testName;
            string dbFileName    = testName + ".db";
            string dbSecFileName = testName + "_sec.db";

            Configuration.ClearDir(testHome);

            /*
             * Open environment, primary database and
             * secondary database.
             */
            BTreeDatabase          db;
            DatabaseEnvironment    env;
            SecondaryBTreeDatabase secDB;

            OpenSecDBInTxn(testHome, dbFileName,
                           dbSecFileName, out env, out db, out secDB);

            // Write ten records into the database.
            WriteRecordsInTxn(db, env);

            Transaction     cursorTxn = env.BeginTransaction();
            SecondaryCursor cursor    =
                secDB.SecondaryCursor(cursorTxn);
            LockingInfo lockingInfo = new LockingInfo();

            lockingInfo.IsolationDegree = Isolation.DEGREE_TWO;
            lockingInfo.ReadModifyWrite = true;

            /*
             * Move the cursor to the record(10, 6) and move to the
             * previous unique record which has different key from
             * the record(10,6).
             */
            KeyValuePair <DatabaseEntry, KeyValuePair <
                              DatabaseEntry, DatabaseEntry> > pair;
            DatabaseEntry pKey, pData;

            pKey  = new DatabaseEntry(BitConverter.GetBytes((int)6));
            pData = new DatabaseEntry(BitConverter.GetBytes((int)10));
            pair  = new KeyValuePair <DatabaseEntry, KeyValuePair <
                                          DatabaseEntry, DatabaseEntry> >(pData,
                                                                          new KeyValuePair <DatabaseEntry, DatabaseEntry>(
                                                                              pKey, pData));
            cursor.Move(pair, true, lockingInfo);
            Assert.IsTrue(cursor.MovePrevUnique(lockingInfo));
            Assert.AreNotEqual(BitConverter.GetBytes((int)10),
                               cursor.Current.Key.Data);

            cursor.Close();
            cursorTxn.Commit();

            // Close all.
            secDB.Close();
            db.Close();
            env.Close();
        }