Mercurial > cpython-lru_cache-weakref
annotate Lib/sqlite3/dump.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 2cdb599172ab |
| children | 2a417ad8bfbf |
| 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 |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
4 # Every identifier in sql is quoted based on a comment in sqlite |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
5 # documentation "SQLite adds new keywords from time to time when it |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
6 # takes on new features. So to prevent your code from being broken by |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
7 # future enhancements, you should normally quote any identifier that |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
8 # is an English language word, even if you do not have to." |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
9 |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
10 def _iterdump(connection): |
|
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 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
|
13 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
14 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
|
15 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
|
16 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
|
17 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
18 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
19 cu = connection.cursor() |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
20 yield('BEGIN TRANSACTION;') |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
21 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
22 # 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
|
23 q = """ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
24 SELECT "name", "type", "sql" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
25 FROM "sqlite_master" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
26 WHERE "sql" NOT NULL AND |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
27 "type" == 'table' |
|
81367
2cdb599172ab
#15545: fix sqlite3.iterdump regression on unsortable row_factory objects.
R David Murray <rdmurray@bitdance.com>
parents:
74891
diff
changeset
|
28 ORDER BY "name" |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
29 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
30 schema_res = cu.execute(q) |
|
81367
2cdb599172ab
#15545: fix sqlite3.iterdump regression on unsortable row_factory objects.
R David Murray <rdmurray@bitdance.com>
parents:
74891
diff
changeset
|
31 for table_name, type, sql in schema_res.fetchall(): |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
32 if table_name == 'sqlite_sequence': |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
33 yield('DELETE FROM "sqlite_sequence";') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
34 elif table_name == 'sqlite_stat1': |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
35 yield('ANALYZE "sqlite_master";') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
36 elif table_name.startswith('sqlite_'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
37 continue |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
38 # NOTE: Virtual table support not implemented |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
39 #elif sql.startswith('CREATE VIRTUAL TABLE'): |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
40 # qtable = table_name.replace("'", "''") |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
41 # yield("INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"\ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
42 # "VALUES('table','{0}','{0}',0,'{1}');".format( |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
43 # qtable, |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
44 # sql.replace("''"))) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
45 else: |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
46 yield('{0};'.format(sql)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
47 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
48 # Build the insert statement for each row of the current table |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
49 table_name_ident = table_name.replace('"', '""') |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
50 res = cu.execute('PRAGMA table_info("{0}")'.format(table_name_ident)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
51 column_names = [str(table_info[1]) for table_info in res.fetchall()] |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
52 q = """SELECT 'INSERT INTO "{0}" VALUES({1})' FROM "{0}";""".format( |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
53 table_name_ident, |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
54 ",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names)) |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
55 query_res = cu.execute(q) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
56 for row in query_res: |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
57 yield("{0};".format(row[0])) |
|
46176
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 # 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
|
60 q = """ |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
61 SELECT "name", "type", "sql" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
62 FROM "sqlite_master" |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
63 WHERE "sql" NOT NULL AND |
|
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
64 "type" IN ('index', 'trigger', 'view') |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
65 """ |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
66 schema_res = cu.execute(q) |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
67 for name, type, sql in schema_res.fetchall(): |
|
74891
60aa7dacb605
Fix sqlite3.Connection.iterdump on tables/fields with reserved names or quotes
Petri Lehtinen <petri@digip.org>
parents:
46176
diff
changeset
|
68 yield('{0};'.format(sql)) |
|
46176
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
69 |
|
872abed7d069
Added missing files for new iterdump method.
Gerhard Häring <gh@ghaering.de>
parents:
diff
changeset
|
70 yield('COMMIT;') |
