From 32851d61f2779b4fcefb92fa0a74f814a87211cb Mon Sep 17 00:00:00 2001 From: R David Murray Date: Thu, 10 Jan 2013 21:10:40 -0500 Subject: [PATCH] #15109: revert '%'->'format' changes in 4b105d328fe7 to fix regression. With '%', non-ascii worked because the '%' automatically got promoted to unicode. With format that doesn't happen, which led to encoding errors. This fix goes back to using %, and adds a test to make sure non-ascii string values work in iterdump. --- Lib/sqlite3/dump.py | 6 +++--- Lib/sqlite3/test/dump.py | 2 ++ Misc/NEWS | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Lib/sqlite3/dump.py b/Lib/sqlite3/dump.py index de9c368be3..e5c5ef226d 100644 --- a/Lib/sqlite3/dump.py +++ b/Lib/sqlite3/dump.py @@ -43,7 +43,7 @@ def _iterdump(connection): # qtable, # sql.replace("''"))) else: - yield('{0};'.format(sql)) + yield('%s;' % sql) # Build the insert statement for each row of the current table table_name_ident = table_name.replace('"', '""') @@ -54,7 +54,7 @@ def _iterdump(connection): ",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names)) query_res = cu.execute(q) for row in query_res: - yield("{0};".format(row[0])) + yield("%s;" % row[0]) # Now when the type is 'index', 'trigger', or 'view' q = """ @@ -65,6 +65,6 @@ def _iterdump(connection): """ schema_res = cu.execute(q) for name, type, sql in schema_res.fetchall(): - yield('{0};'.format(sql)) + yield('%s;' % sql) yield('COMMIT;') diff --git a/Lib/sqlite3/test/dump.py b/Lib/sqlite3/test/dump.py index 195c13942a..b7de810c7a 100644 --- a/Lib/sqlite3/test/dump.py +++ b/Lib/sqlite3/test/dump.py @@ -29,6 +29,8 @@ class DumpTests(unittest.TestCase): , "INSERT INTO \"t1\" VALUES(2,'foo2',30,30);" , + u"INSERT INTO \"t1\" VALUES(3,'f\xc3\xb6',40,10);" + , "CREATE TABLE t2(id integer, t2_i1 integer, " \ "t2_i2 integer, primary key (id)," \ "foreign key(t2_i1) references t1(t1_i1));" diff --git a/Misc/NEWS b/Misc/NEWS index 6bb2549a12..469ca8b2fa 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -186,6 +186,10 @@ Core and Builtins Library ------- +- Issue #15109: Fix regression in sqlite3's iterdump method where it would + die with an encoding error if the database contained string values + containing non-ASCII. (Regression was introduced by fix for 9750). + - Issue #15545: Fix regression in sqlite3's iterdump method where it was failing if the connection used a row factory (such as sqlite3.Row) that produced unsortable objects. (Regression was introduced by fix for 9750). -- 2.50.1