annotate tests/capabilities.py @ 48:f4fd8c20511c MySQLdb

Read a default file in the test setUp. Since Python 2.4, int() will return longs if needed so make all long references int as in Python 3.0 there is no more long due to int/long unification (new ints are old longs).
author adustman
date Sun, 22 Feb 2009 20:01:31 +0000
parents d55bfb1a4701
children 4aaed7e1d782
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
1 #!/usr/bin/env python -O
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
2 """ Script to test database capabilities and the DB-API interface
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
3 for functionality and memory leaks.
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
4
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
5 Adapted from a script by M-A Lemburg.
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
6
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
7 """
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
8 from time import time
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
9 import array
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
10 import unittest
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
11
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
12
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
13 class DatabaseTest(unittest.TestCase):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
14
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
15 db_module = None
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
16 connect_args = ()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
17 connect_kwargs = dict()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
18 create_table_extra = ''
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
19 rows = 10
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
20 debug = False
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
21
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
22 def setUp(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
23 import gc
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
24 db = self.db_module.connect(*self.connect_args, **self.connect_kwargs)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
25 self.connection = db
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
26 self.cursor = db.cursor()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
27 self.BLOBText = ''.join([chr(i) for i in range(256)] * 100);
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
28 self.BLOBUText = u''.join([unichr(i) for i in range(16384)])
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
29 self.BLOBBinary = self.db_module.Binary(''.join([chr(i) for i in range(256)] * 16))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
30
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
31 leak_test = True
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
32
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
33 def tearDown(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
34 if self.leak_test:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
35 import gc
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
36 del self.cursor
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
37 orphans = gc.collect()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
38 self.failIf(orphans, "%d orphaned objects found after deleting cursor" % orphans)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
39
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
40 del self.connection
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
41 orphans = gc.collect()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
42 self.failIf(orphans, "%d orphaned objects found after deleting connection" % orphans)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
43
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
44 def table_exists(self, name):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
45 try:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
46 self.cursor.execute('select * from %s where 1=0' % name)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
47 except:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
48 return False
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
49 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
50 return True
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
51
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
52 def quote_identifier(self, ident):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
53 return '"%s"' % ident
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
54
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
55 def new_table_name(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
56 i = id(self.cursor)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
57 while True:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
58 name = self.quote_identifier('tb%08x' % i)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
59 if not self.table_exists(name):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
60 return name
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
61 i = i + 1
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
62
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
63 def create_table(self, columndefs):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
64
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
65 """ Create a table using a list of column definitions given in
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
66 columndefs.
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
67
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
68 generator must be a function taking arguments (row_number,
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
69 col_number) returning a suitable data object for insertion
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
70 into the table.
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
71
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
72 """
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
73 self.table = self.new_table_name()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
74 self.cursor.execute('CREATE TABLE %s (%s) %s' %
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
75 (self.table,
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
76 ',\n'.join(columndefs),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
77 self.create_table_extra))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
78
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
79 def check_data_integrity(self, columndefs, generator):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
80 # insert
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
81 self.create_table(columndefs)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
82 insert_statement = ('INSERT INTO %s VALUES (%s)' %
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
83 (self.table,
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
84 ','.join(['%s'] * len(columndefs))))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
85 data = [ [ generator(i,j) for j in range(len(columndefs)) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
86 for i in range(self.rows) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
87 if self.debug:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
88 print data
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
89 self.cursor.executemany(insert_statement, data)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
90 self.connection.commit()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
91 # verify
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
92 self.cursor.execute('select * from %s' % self.table)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
93 l = self.cursor.fetchall()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
94 if self.debug:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
95 print l
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
96 self.assertEquals(len(l), self.rows)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
97 try:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
98 for i in range(self.rows):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
99 for j in range(len(columndefs)):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
100 self.assertEquals(l[i][j], generator(i,j))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
101 finally:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
102 if not self.debug:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
103 self.cursor.execute('drop table %s' % (self.table))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
104
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
105 def test_transactions(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
106 columndefs = ( 'col1 INT', 'col2 VARCHAR(255)')
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
107 def generator(row, col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
108 if col == 0: return row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
109 else: return ('%i' % (row%10))*255
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
110 self.create_table(columndefs)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
111 insert_statement = ('INSERT INTO %s VALUES (%s)' %
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
112 (self.table,
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
113 ','.join(['%s'] * len(columndefs))))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
114 data = [ [ generator(i,j) for j in range(len(columndefs)) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
115 for i in range(self.rows) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
116 self.cursor.executemany(insert_statement, data)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
117 # verify
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
118 self.connection.commit()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
119 self.cursor.execute('select * from %s' % self.table)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
120 l = self.cursor.fetchall()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
121 self.assertEquals(len(l), self.rows)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
122 for i in range(self.rows):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
123 for j in range(len(columndefs)):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
124 self.assertEquals(l[i][j], generator(i,j))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
125 delete_statement = 'delete from %s where col1=%%s' % self.table
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
126 self.cursor.execute(delete_statement, (0,))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
127 self.cursor.execute('select col1 from %s where col1=%s' % \
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
128 (self.table, 0))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
129 l = self.cursor.fetchall()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
130 self.failIf(l, "DELETE didn't work")
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
131 self.connection.rollback()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
132 self.cursor.execute('select col1 from %s where col1=%s' % \
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
133 (self.table, 0))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
134 l = self.cursor.fetchall()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
135 self.failUnless(len(l) == 1, "ROLLBACK didn't work")
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
136 self.cursor.execute('drop table %s' % (self.table))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
137
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
138 def test_truncation(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
139 columndefs = ( 'col1 INT', 'col2 VARCHAR(255)')
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
140 def generator(row, col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
141 if col == 0: return row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
142 else: return ('%i' % (row%10))*((255-self.rows/2)+row)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
143 self.create_table(columndefs)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
144 insert_statement = ('INSERT INTO %s VALUES (%s)' %
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
145 (self.table,
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
146 ','.join(['%s'] * len(columndefs))))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
147
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
148 try:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
149 self.cursor.execute(insert_statement, (0, '0'*256))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
150 except Warning:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
151 if self.debug: print self.cursor.messages
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
152 except self.connection.DataError:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
153 pass
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
154 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
155 self.fail("Over-long column did not generate warnings/exception with single insert")
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
156
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
157 self.connection.rollback()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
158
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
159 try:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
160 for i in range(self.rows):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
161 data = []
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
162 for j in range(len(columndefs)):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
163 data.append(generator(i,j))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
164 self.cursor.execute(insert_statement,tuple(data))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
165 except Warning:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
166 if self.debug: print self.cursor.messages
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
167 except self.connection.DataError:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
168 pass
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
169 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
170 self.fail("Over-long columns did not generate warnings/exception with execute()")
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
171
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
172 self.connection.rollback()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
173
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
174 try:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
175 data = [ [ generator(i,j) for j in range(len(columndefs)) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
176 for i in range(self.rows) ]
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
177 self.cursor.executemany(insert_statement, data)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
178 except Warning:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
179 if self.debug: print self.cursor.messages
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
180 except self.connection.DataError:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
181 pass
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
182 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
183 self.fail("Over-long columns did not generate warnings/exception with executemany()")
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
184
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
185 self.connection.rollback()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
186 self.cursor.execute('drop table %s' % (self.table))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
187
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
188 def test_CHAR(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
189 # Character data
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
190 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
191 return ('%i' % ((row+col) % 10)) * 255
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
192 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
193 ('col1 char(255)','col2 char(255)'),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
194 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
195
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
196 def test_INT(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
197 # Number data
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
198 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
199 return row*row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
200 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
201 ('col1 INT',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
202 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
203
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
204 def test_DECIMAL(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
205 # DECIMAL
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
206 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
207 from decimal import Decimal
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
208 return Decimal("%d.%02d" % (row, col))
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
209 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
210 ('col1 DECIMAL(5,2)',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
211 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
212
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
213 def test_DATE(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
214 ticks = time()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
215 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
216 return self.db_module.DateFromTicks(ticks+row*86400-col*1313)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
217 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
218 ('col1 DATE',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
219 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
220
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
221 def test_TIME(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
222 ticks = time()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
223 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
224 return self.db_module.TimeFromTicks(ticks+row*86400-col*1313)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
225 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
226 ('col1 TIME',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
227 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
228
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
229 def test_DATETIME(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
230 ticks = time()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
231 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
232 return self.db_module.TimestampFromTicks(ticks+row*86400-col*1313)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
233 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
234 ('col1 DATETIME',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
235 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
236
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
237 def test_TIMESTAMP(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
238 ticks = time()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
239 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
240 return self.db_module.TimestampFromTicks(ticks+row*86400-col*1313)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
241 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
242 ('col1 TIMESTAMP',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
243 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
244
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
245 def test_fractional_TIMESTAMP(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
246 ticks = time()
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
247 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
248 return self.db_module.TimestampFromTicks(ticks+row*86400-col*1313+row*0.7*col/3.0)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
249 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
250 ('col1 TIMESTAMP',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
251 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
252
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
253 def test_LONG(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
254 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
255 if col == 0:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
256 return row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
257 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
258 return self.BLOBUText # 'BLOB Text ' * 1024
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
259 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
260 ('col1 INT','col2 LONG'),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
261 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
262
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
263 def test_TEXT(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
264 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
265 return self.BLOBUText # 'BLOB Text ' * 1024
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
266 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
267 ('col2 TEXT',),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
268 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
269
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
270 def test_LONG_BYTE(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
271 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
272 if col == 0:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
273 return row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
274 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
275 return self.BLOBBinary # 'BLOB\000Binary ' * 1024
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
276 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
277 ('col1 INT','col2 LONG BYTE'),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
278 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
279
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
280 def test_BLOB(self):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
281 def generator(row,col):
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
282 if col == 0:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
283 return row
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
284 else:
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
285 return self.BLOBBinary # 'BLOB\000Binary ' * 1024
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
286 self.check_data_integrity(
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
287 ('col1 INT','col2 BLOB'),
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
288 generator)
d55bfb1a4701 Tons of changes from major refactoring/cleanup. This is all really broken
adustman
parents:
diff changeset
289