annotate Lib/sqlite3/dump.py @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents 872abed7d069
children 60aa7dacb605
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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;')