Mercurial > cpython-lru_cache-weakref
annotate Lib/sqlite3/dump.py @ 66978:aed2bbafa550 3.1
Blocked revisions 87324 via svnmerge
........
r87324 | r.david.murray | 2010-12-16 14:08:51 -0500 (Thu, 16 Dec 2010) | 9 lines
#10719: restore messages generated on invalid compileall args
Before the introduction of filename arguments to compileall it gave semi useful
messages about not being able to 'list' names that weren't valid directories.
This fix restores that behavior. In addition to the test for this case, the
patch also adds a test for the default behavior of compileall when no arguments
are provided, and fixes a bug in one of the previously added tests.
........
| author | R. David Murray <rdmurray@bitdance.com> |
|---|---|
| date | Thu, 16 Dec 2010 19:10:16 +0000 |
| parents | 872abed7d069 |
| children | 60aa7dacb605 |
| rev | line source |
|---|---|
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
1 # Mimic the sqlite3 console shell's .dump command |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
2 # Author: Paul Kippes <kippesp@gmail.com> |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
3 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
4 def _iterdump(connection): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
5 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
6 Returns an iterator to the dump of the database in an SQL text format. |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
7 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
8 Used to produce an SQL dump of the database. Useful to save an in-memory |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
9 database for later restoration. This function should not be called |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
10 directly but instead called from the Connection method, iterdump(). |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
11 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
12 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
13 cu = connection.cursor() |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
14 yield('BEGIN TRANSACTION;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
15 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
16 # sqlite_master table contains the SQL CREATE statements for the database. |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
17 q = """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
18 SELECT name, type, sql |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
19 FROM sqlite_master |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
20 WHERE sql NOT NULL AND |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
21 type == 'table' |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
22 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
23 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
24 for table_name, type, sql in schema_res.fetchall(): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
25 if table_name == 'sqlite_sequence': |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
26 yield('DELETE FROM sqlite_sequence;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
27 elif table_name == 'sqlite_stat1': |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
28 yield('ANALYZE sqlite_master;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
29 elif table_name.startswith('sqlite_'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
30 continue |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
31 # NOTE: Virtual table support not implemented |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
32 #elif sql.startswith('CREATE VIRTUAL TABLE'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
33 # qtable = table_name.replace("'", "''") |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
34 # yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
35 # "VALUES('table','%s','%s',0,'%s');" % |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
36 # qtable, |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
37 # qtable, |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
38 # sql.replace("''")) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
39 else: |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
40 yield('%s;' % sql) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
41 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
42 # Build the insert statement for each row of the current table |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
43 res = cu.execute("PRAGMA table_info('%s')" % table_name) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
44 column_names = [str(table_info[1]) for table_info in res.fetchall()] |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
45 q = "SELECT 'INSERT INTO \"%(tbl_name)s\" VALUES(" |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
46 q += ",".join(["'||quote(" + col + ")||'" for col in column_names]) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
47 q += ")' FROM '%(tbl_name)s'" |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
48 query_res = cu.execute(q % {'tbl_name': table_name}) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
49 for row in query_res: |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
50 yield("%s;" % row[0]) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
51 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
52 # Now when the type is 'index', 'trigger', or 'view' |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
53 q = """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
54 SELECT name, type, sql |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
55 FROM sqlite_master |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
56 WHERE sql NOT NULL AND |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
57 type IN ('index', 'trigger', 'view') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
58 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
59 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
60 for name, type, sql in schema_res.fetchall(): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
61 yield('%s;' % sql) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
62 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
63 yield('COMMIT;') |
