Changeset 729 for trunk/tests


Ignore:
Timestamp:
Jan 12, 2016, 4:29:07 PM (4 years ago)
Author:
cito
Message:

Simplify caching and handling of class names

The caches now use the class names as keys as they are passed in.
We do not automatically calculate the qualified name any more,
since this causes too much overhead. Also, we fill the pkey cache
not pro-actively with tables from all possible schemes any more.

Most of the internal auxiliary functions for handling class names
could be discarded by making good use of quote_ident and reglass.

Location:
trunk/tests
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/test_classic.py

    r648 r729  
    7676        try:
    7777            db.query("CREATE VIEW _test_vschema AS "
    78                 "SELECT _test, 'abc'::text AS _test2  FROM _test_schema")
     78                "SELECT _test, 'abc'::text AS _test2 FROM _test_schema")
    7979        except Error:
    8080            pass
     
    111111        self.assertEqual(db.pkey('public._test_schema'), '_test')
    112112        self.assertEqual(db.pkey('_test1._test_schema'), '_test1')
    113 
    114         self.assertEqual(db.pkey('_test_schema',
    115                 {'test1': 'a', 'test2.test3': 'b'}),
    116                 {'public.test1': 'a', 'test2.test3': 'b'})
    117         self.assertEqual(db.pkey('test1'), 'a')
    118         self.assertEqual(db.pkey('public.test1'), 'a')
     113        self.assertEqual(db.pkey('_test2._test_schema'), '_test2')
     114        self.assertRaises(KeyError, db.pkey, '_test_vschema')
    119115
    120116    def test_get(self):
  • trunk/tests/test_classic_dbwrapper.py

    r725 r729  
    595595            self.assertEqual(r, frozenset([
    596596                'a_very_long_column_name', 'with space', '42']))
    597             self.assertEqual(pkey('%s0' % t, 'none'), 'none')
    598             self.assertEqual(pkey('%s0' % t), 'none')
    599             pkey(None, {'%s0' % t: 'a', 'public."%s1"' % t: 'b'})
     597            # a newly added primary key will be detected
     598            query('alter table "%s0" add primary key (a)' % t)
    600599            self.assertEqual(pkey('%s0' % t), 'a')
     600            # a changed primary key will not be detected,
     601            # indicating that the internal cache is operating
     602            query('alter table "%s1" rename column b to x' % t)
    601603            self.assertEqual(pkey('%s1' % t), 'b')
    602             pkey(None, {})
    603             self.assertRaises(KeyError, pkey, '%s0' % t)
     604            # we get the changed primary key when the cache is flushed
     605            self.assertEqual(pkey('%s1' % t, flush=True), 'x')
    604606            for n in range(7):
    605607                query('drop table "%s%d"' % (t, n))
     
    717719            self.assertRaises(pg.ProgrammingError, get, table, 2)
    718720            r = get(table, 2, 'n')
    719             oid_table = table
    720             if ' ' in table:
    721                 oid_table = '"%s"' % oid_table
    722             oid_table = 'oid(public.%s)' % oid_table
     721            oid_table = 'oid(%s)' % table
    723722            self.assertIn(oid_table, r)
    724723            oid = r[oid_table]
     
    798797                " v4 varchar(4), c4 char(4), t text,"
    799798                " b boolean, ts timestamp) with oids" % table)
    800             oid_table = table
    801             if ' ' in table:
    802                 oid_table = '"%s"' % oid_table
    803             oid_table = 'oid(public.%s)' % oid_table
     799            oid_table = 'oid(%s)' % table
    804800            tests = [dict(i2=None, i4=None, i8=None),
    805801                (dict(i2='', i4='', i8=''), dict(i2=None, i4=None, i8=None)),
     
    13241320        self.assertEqual(get("s4.t4", 1, 'n')['d'], 4)
    13251321
    1326     def testMangling(self):
     1322    def testMunging(self):
    13271323        get = self.db.get
    13281324        query = self.db.query
    13291325        r = get("t", 1, 'n')
    1330         self.assertIn('oid(public.t)', r)
     1326        self.assertIn('oid(t)', r)
    13311327        query("set search_path to s2")
    13321328        r = get("t2", 1, 'n')
    1333         self.assertIn('oid(s2.t2)', r)
     1329        self.assertIn('oid(t2)', r)
    13341330        query("set search_path to s3")
    13351331        r = get("t", 1, 'n')
    1336         self.assertIn('oid(s3.t)', r)
     1332        self.assertIn('oid(t)', r)
    13371333
    13381334
  • trunk/tests/test_classic_functions.py

    r680 r729  
    3131except NameError:  # Python >= 3.0
    3232    unicode = str
    33 
    34 
    35 class TestAuxiliaryFunctions(unittest.TestCase):
    36     """Test the auxiliary functions external to the connection class."""
    37 
    38     def testIsQuoted(self):
    39         f = pg._is_quoted
    40         self.assertTrue(f('A'))
    41         self.assertTrue(f('0'))
    42         self.assertTrue(f('#'))
    43         self.assertTrue(f('*'))
    44         self.assertTrue(f('.'))
    45         self.assertTrue(f(' '))
    46         self.assertTrue(f('a b'))
    47         self.assertTrue(f('a+b'))
    48         self.assertTrue(f('a*b'))
    49         self.assertTrue(f('a.b'))
    50         self.assertTrue(f('0ab'))
    51         self.assertTrue(f('aBc'))
    52         self.assertTrue(f('ABC'))
    53         self.assertTrue(f('"a"'))
    54         self.assertTrue(not f('a'))
    55         self.assertTrue(not f('a0'))
    56         self.assertTrue(not f('_'))
    57         self.assertTrue(not f('_a'))
    58         self.assertTrue(not f('_0'))
    59         self.assertTrue(not f('_a_0_'))
    60         self.assertTrue(not f('ab'))
    61         self.assertTrue(not f('ab0'))
    62         self.assertTrue(not f('abc'))
    63         self.assertTrue(not f('abc'))
    64         if 'À'.isalpha():
    65             self.assertTrue(not f('À'))
    66             self.assertTrue(f('Ä'))
    67             self.assertTrue(not f('kÀse'))
    68             self.assertTrue(f('KÀse'))
    69             self.assertTrue(not f('emmentaler_kÀse'))
    70             self.assertTrue(f('emmentaler kÀse'))
    71             self.assertTrue(f('EmmentalerKÀse'))
    72             self.assertTrue(f('Emmentaler KÀse'))
    73 
    74     def testIsUnquoted(self):
    75         f = pg._is_unquoted
    76         self.assertTrue(f('A'))
    77         self.assertTrue(not f('0'))
    78         self.assertTrue(not f('#'))
    79         self.assertTrue(not f('*'))
    80         self.assertTrue(not f('.'))
    81         self.assertTrue(not f(' '))
    82         self.assertTrue(not f('a b'))
    83         self.assertTrue(not f('a+b'))
    84         self.assertTrue(not f('a*b'))
    85         self.assertTrue(not f('a.b'))
    86         self.assertTrue(not f('0ab'))
    87         self.assertTrue(f('aBc'))
    88         self.assertTrue(f('ABC'))
    89         self.assertTrue(not f('"a"'))
    90         self.assertTrue(f('a0'))
    91         self.assertTrue(f('_'))
    92         self.assertTrue(f('_a'))
    93         self.assertTrue(f('_0'))
    94         self.assertTrue(f('_a_0_'))
    95         self.assertTrue(f('ab'))
    96         self.assertTrue(f('ab0'))
    97         self.assertTrue(f('abc'))
    98         if 'À'.isalpha():
    99             self.assertTrue(f('À'))
    100             self.assertTrue(f('Ä'))
    101             self.assertTrue(f('kÀse'))
    102             self.assertTrue(f('KÀse'))
    103             self.assertTrue(f('emmentaler_kÀse'))
    104             self.assertTrue(not f('emmentaler kÀse'))
    105             self.assertTrue(f('EmmentalerKÀse'))
    106             self.assertTrue(not f('Emmentaler KÀse'))
    107 
    108     def testSplitFirstPart(self):
    109         f = pg._split_first_part
    110         self.assertEqual(f('a.b'), ['a', 'b'])
    111         self.assertEqual(f('a.b.c'), ['a', 'b.c'])
    112         self.assertEqual(f('"a.b".c'), ['a.b', 'c'])
    113         self.assertEqual(f('a."b.c"'), ['a', '"b.c"'])
    114         self.assertEqual(f('A.b.c'), ['a', 'b.c'])
    115         self.assertEqual(f('Ab.c'), ['ab', 'c'])
    116         self.assertEqual(f('aB.c'), ['ab', 'c'])
    117         self.assertEqual(f('AB.c'), ['ab', 'c'])
    118         self.assertEqual(f('A b.c'), ['A b', 'c'])
    119         self.assertEqual(f('a B.c'), ['a B', 'c'])
    120         self.assertEqual(f('"A".b.c'), ['A', 'b.c'])
    121         self.assertEqual(f('"A""B".c'), ['A"B', 'c'])
    122         self.assertEqual(f('a.b.c.d.e.f.g'), ['a', 'b.c.d.e.f.g'])
    123         self.assertEqual(f('"a.b.c.d.e.f".g'), ['a.b.c.d.e.f', 'g'])
    124         self.assertEqual(f('a.B.c.D.e.F.g'), ['a', 'B.c.D.e.F.g'])
    125         self.assertEqual(f('A.b.C.d.E.f.G'), ['a', 'b.C.d.E.f.G'])
    126 
    127     def testSplitParts(self):
    128         f = pg._split_parts
    129         self.assertEqual(f('a.b'), ['a', 'b'])
    130         self.assertEqual(f('a.b.c'), ['a', 'b', 'c'])
    131         self.assertEqual(f('"a.b".c'), ['a.b', 'c'])
    132         self.assertEqual(f('a."b.c"'), ['a', 'b.c'])
    133         self.assertEqual(f('A.b.c'), ['a', 'b', 'c'])
    134         self.assertEqual(f('Ab.c'), ['ab', 'c'])
    135         self.assertEqual(f('aB.c'), ['ab', 'c'])
    136         self.assertEqual(f('AB.c'), ['ab', 'c'])
    137         self.assertEqual(f('A b.c'), ['A b', 'c'])
    138         self.assertEqual(f('a B.c'), ['a B', 'c'])
    139         self.assertEqual(f('"A".b.c'), ['A', 'b', 'c'])
    140         self.assertEqual(f('"A""B".c'), ['A"B', 'c'])
    141         self.assertEqual(f('a.b.c.d.e.f.g'),
    142             ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
    143         self.assertEqual(f('"a.b.c.d.e.f".g'),
    144             ['a.b.c.d.e.f', 'g'])
    145         self.assertEqual(f('a.B.c.D.e.F.g'),
    146             ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
    147         self.assertEqual(f('A.b.C.d.E.f.G'),
    148             ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
    149 
    150     def testJoinParts(self):
    151         f = pg._join_parts
    152         self.assertEqual(f(('a',)), 'a')
    153         self.assertEqual(f(('a', 'b')), 'a.b')
    154         self.assertEqual(f(('a', 'b', 'c')), 'a.b.c')
    155         self.assertEqual(f(('a', 'b', 'c', 'd', 'e', 'f', 'g')),
    156             'a.b.c.d.e.f.g')
    157         self.assertEqual(f(('A', 'b')), '"A".b')
    158         self.assertEqual(f(('a', 'B')), 'a."B"')
    159         self.assertEqual(f(('a b', 'c')), '"a b".c')
    160         self.assertEqual(f(('a', 'b c')), 'a."b c"')
    161         self.assertEqual(f(('a_b', 'c')), 'a_b.c')
    162         self.assertEqual(f(('a', 'b_c')), 'a.b_c')
    163         self.assertEqual(f(('0', 'a')), '"0".a')
    164         self.assertEqual(f(('0_', 'a')), '"0_".a')
    165         self.assertEqual(f(('_0', 'a')), '_0.a')
    166         self.assertEqual(f(('_a', 'b')), '_a.b')
    167         self.assertEqual(f(('a', 'B', '0', 'c0', 'C0',
    168             'd e', 'f_g', 'h.i', 'jklm', 'nopq')),
    169             'a."B"."0".c0."C0"."d e".f_g."h.i".jklm.nopq')
    170 
    171     def testOidKey(self):
    172         f = pg._oid_key
    173         self.assertEqual(f('a'), 'oid(a)')
    174         self.assertEqual(f('a.b'), 'oid(a.b)')
    17533
    17634
Note: See TracChangeset for help on using the changeset viewer.