annotate Lib/sqlite3/dump.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +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;')