annotate Lib/sqlite3/test/dump.py @ 82251:bb5a8564e186 2.7

Issue #13153: Tkinter functions now raise TclError instead of ValueError when a unicode argument contains non-BMP character.
author Serhiy Storchaka <storchaka@gmail.com>
date Mon, 18 Feb 2013 13:00:08 +0200
parents 2a417ad8bfbf
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46167
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
1 # Author: Paul Kippes <kippesp@gmail.com>
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
2
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
3 import unittest
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
4 import sqlite3 as sqlite
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
5
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
6 class DumpTests(unittest.TestCase):
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
7 def setUp(self):
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
8 self.cx = sqlite.connect(":memory:")
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
9 self.cu = self.cx.cursor()
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
10
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
11 def tearDown(self):
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
12 self.cx.close()
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
13
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
14 def CheckTableDump(self):
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
15 expected_sqls = [
74891
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
16 """CREATE TABLE "index"("index" blob);"""
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
17 ,
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
18 """INSERT INTO "index" VALUES(X'01');"""
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
19 ,
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
20 """CREATE TABLE "quoted""table"("quoted""field" text);"""
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
21 ,
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
22 """INSERT INTO "quoted""table" VALUES('quoted''value');"""
60aa7dacb605 Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents: 46167
diff changeset
23 ,
46167
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
24 "CREATE TABLE t1(id integer primary key, s1 text, " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
25 "t1_i1 integer not null, i2 integer, unique (s1), " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
26 "constraint t1_idx1 unique (i2));"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
27 ,
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
28 "INSERT INTO \"t1\" VALUES(1,'foo',10,20);"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
29 ,
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
30 "INSERT INTO \"t1\" VALUES(2,'foo2',30,30);"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
31 ,
81378
2a417ad8bfbf #15109: revert '%'->'format' changes in 4b105d328fe7 to fix regression.
R David Murray <rdmurray@bitdance.com>
parents: 81370
diff changeset
32 u"INSERT INTO \"t1\" VALUES(3,'f\xc3\xb6',40,10);"
2a417ad8bfbf #15109: revert '%'->'format' changes in 4b105d328fe7 to fix regression.
R David Murray <rdmurray@bitdance.com>
parents: 81370
diff changeset
33 ,
46167
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
34 "CREATE TABLE t2(id integer, t2_i1 integer, " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
35 "t2_i2 integer, primary key (id)," \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
36 "foreign key(t2_i1) references t1(t1_i1));"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
37 ,
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
38 "CREATE TRIGGER trigger_1 update of t1_i1 on t1 " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
39 "begin " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
40 "update t2 set t2_i1 = new.t1_i1 where t2_i1 = old.t1_i1; " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
41 "end;"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
42 ,
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
43 "CREATE VIEW v1 as select * from t1 left join t2 " \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
44 "using (id);"
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
45 ]
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
46 [self.cu.execute(s) for s in expected_sqls]
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
47 i = self.cx.iterdump()
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
48 actual_sqls = [s for s in i]
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
49 expected_sqls = ['BEGIN TRANSACTION;'] + expected_sqls + \
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
50 ['COMMIT;']
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
51 [self.assertEqual(expected_sqls[i], actual_sqls[i])
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
52 for i in xrange(len(expected_sqls))]
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
53
81370
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
54 def CheckUnorderableRow(self):
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
55 # iterdump() should be able to cope with unorderable row types (issue #15545)
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
56 class UnorderableRow:
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
57 def __init__(self, cursor, row):
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
58 self.row = row
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
59 def __getitem__(self, index):
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
60 return self.row[index]
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
61 self.cx.row_factory = UnorderableRow
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
62 CREATE_ALPHA = """CREATE TABLE "alpha" ("one");"""
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
63 CREATE_BETA = """CREATE TABLE "beta" ("two");"""
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
64 expected = [
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
65 "BEGIN TRANSACTION;",
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
66 CREATE_ALPHA,
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
67 CREATE_BETA,
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
68 "COMMIT;"
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
69 ]
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
70 self.cu.execute(CREATE_BETA)
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
71 self.cu.execute(CREATE_ALPHA)
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
72 got = list(self.cx.iterdump())
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
73 self.assertEqual(expected, got)
bb4e4f0cec2e #15545: sort iterdump via SQL instead of in python code
R David Murray <rdmurray@bitdance.com>
parents: 74891
diff changeset
74
46167
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
75 def suite():
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
76 return unittest.TestSuite(unittest.makeSuite(DumpTests, "Check"))
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
77
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
78 def test():
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
79 runner = unittest.TextTestRunner()
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
80 runner.run(suite())
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
81
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
82 if __name__ == "__main__":
654ad74ade13 These svn adds were forgotten in r62000
Gregory P. Smith <greg@mad-scientist.com>
parents:
diff changeset
83 test()