symbian-qemu-0.9.1-12/python-2.6.1/Lib/bsddb/test/test_join.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """TestCases for using the DB.join and DBCursor.join_item methods.
       
     2 """
       
     3 
       
     4 import os
       
     5 
       
     6 import unittest
       
     7 
       
     8 from test_all import db, dbshelve, test_support, verbose, \
       
     9         get_new_environment_path, get_new_database_path
       
    10 
       
    11 #----------------------------------------------------------------------
       
    12 
       
    13 ProductIndex = [
       
    14     ('apple', "Convenience Store"),
       
    15     ('blueberry', "Farmer's Market"),
       
    16     ('shotgun', "S-Mart"),              # Aisle 12
       
    17     ('pear', "Farmer's Market"),
       
    18     ('chainsaw', "S-Mart"),             # "Shop smart.  Shop S-Mart!"
       
    19     ('strawberry', "Farmer's Market"),
       
    20 ]
       
    21 
       
    22 ColorIndex = [
       
    23     ('blue', "blueberry"),
       
    24     ('red', "apple"),
       
    25     ('red', "chainsaw"),
       
    26     ('red', "strawberry"),
       
    27     ('yellow', "peach"),
       
    28     ('yellow', "pear"),
       
    29     ('black', "shotgun"),
       
    30 ]
       
    31 
       
    32 class JoinTestCase(unittest.TestCase):
       
    33     keytype = ''
       
    34 
       
    35     def setUp(self):
       
    36         self.filename = self.__class__.__name__ + '.db'
       
    37         self.homeDir = get_new_environment_path()
       
    38         self.env = db.DBEnv()
       
    39         self.env.open(self.homeDir, db.DB_CREATE | db.DB_INIT_MPOOL | db.DB_INIT_LOCK )
       
    40 
       
    41     def tearDown(self):
       
    42         self.env.close()
       
    43         test_support.rmtree(self.homeDir)
       
    44 
       
    45     def test01_join(self):
       
    46         if verbose:
       
    47             print '\n', '-=' * 30
       
    48             print "Running %s.test01_join..." % \
       
    49                   self.__class__.__name__
       
    50 
       
    51         # create and populate primary index
       
    52         priDB = db.DB(self.env)
       
    53         priDB.open(self.filename, "primary", db.DB_BTREE, db.DB_CREATE)
       
    54         map(lambda t, priDB=priDB: apply(priDB.put, t), ProductIndex)
       
    55 
       
    56         # create and populate secondary index
       
    57         secDB = db.DB(self.env)
       
    58         secDB.set_flags(db.DB_DUP | db.DB_DUPSORT)
       
    59         secDB.open(self.filename, "secondary", db.DB_BTREE, db.DB_CREATE)
       
    60         map(lambda t, secDB=secDB: apply(secDB.put, t), ColorIndex)
       
    61 
       
    62         sCursor = None
       
    63         jCursor = None
       
    64         try:
       
    65             # lets look up all of the red Products
       
    66             sCursor = secDB.cursor()
       
    67             # Don't do the .set() in an assert, or you can get a bogus failure
       
    68             # when running python -O
       
    69             tmp = sCursor.set('red')
       
    70             self.assert_(tmp)
       
    71 
       
    72             # FIXME: jCursor doesn't properly hold a reference to its
       
    73             # cursors, if they are closed before jcursor is used it
       
    74             # can cause a crash.
       
    75             jCursor = priDB.join([sCursor])
       
    76 
       
    77             if jCursor.get(0) != ('apple', "Convenience Store"):
       
    78                 self.fail("join cursor positioned wrong")
       
    79             if jCursor.join_item() != 'chainsaw':
       
    80                 self.fail("DBCursor.join_item returned wrong item")
       
    81             if jCursor.get(0)[0] != 'strawberry':
       
    82                 self.fail("join cursor returned wrong thing")
       
    83             if jCursor.get(0):  # there were only three red items to return
       
    84                 self.fail("join cursor returned too many items")
       
    85         finally:
       
    86             if jCursor:
       
    87                 jCursor.close()
       
    88             if sCursor:
       
    89                 sCursor.close()
       
    90             priDB.close()
       
    91             secDB.close()
       
    92 
       
    93 
       
    94 def test_suite():
       
    95     suite = unittest.TestSuite()
       
    96 
       
    97     suite.addTest(unittest.makeSuite(JoinTestCase))
       
    98 
       
    99     return suite