#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.
This commit is contained in:
R David Murray 2013-01-10 21:10:40 -05:00
parent bcd9971b05
commit 32851d61f2
3 changed files with 9 additions and 3 deletions

View File

@ -43,7 +43,7 @@ def _iterdump(connection):
# qtable, # qtable,
# sql.replace("''"))) # sql.replace("''")))
else: else:
yield('{0};'.format(sql)) yield('%s;' % sql)
# Build the insert statement for each row of the current table # Build the insert statement for each row of the current table
table_name_ident = table_name.replace('"', '""') table_name_ident = table_name.replace('"', '""')
@ -54,7 +54,7 @@ def _iterdump(connection):
",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names)) ",".join("""'||quote("{0}")||'""".format(col.replace('"', '""')) for col in column_names))
query_res = cu.execute(q) query_res = cu.execute(q)
for row in query_res: for row in query_res:
yield("{0};".format(row[0])) yield("%s;" % row[0])
# Now when the type is 'index', 'trigger', or 'view' # Now when the type is 'index', 'trigger', or 'view'
q = """ q = """
@ -65,6 +65,6 @@ def _iterdump(connection):
""" """
schema_res = cu.execute(q) schema_res = cu.execute(q)
for name, type, sql in schema_res.fetchall(): for name, type, sql in schema_res.fetchall():
yield('{0};'.format(sql)) yield('%s;' % sql)
yield('COMMIT;') yield('COMMIT;')

View File

@ -29,6 +29,8 @@ class DumpTests(unittest.TestCase):
, ,
"INSERT INTO \"t1\" VALUES(2,'foo2',30,30);" "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, " \ "CREATE TABLE t2(id integer, t2_i1 integer, " \
"t2_i2 integer, primary key (id)," \ "t2_i2 integer, primary key (id)," \
"foreign key(t2_i1) references t1(t1_i1));" "foreign key(t2_i1) references t1(t1_i1));"

View File

@ -186,6 +186,10 @@ Core and Builtins
Library 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 - 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 failing if the connection used a row factory (such as sqlite3.Row) that
produced unsortable objects. (Regression was introduced by fix for 9750). produced unsortable objects. (Regression was introduced by fix for 9750).