Mercurial > p > mysql-python > mysqldb-2
annotate tests/capabilities.py @ 32:4a5668deee4a MySQLdb
Merge back r554 for deprecated sets module
author | kylev |
---|---|
date | Wed, 11 Feb 2009 23:45:57 +0000 |
parents | d55bfb1a4701 |
children | 4aaed7e1d782 |
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 |