From 44170aee47a021883c6244f702de2e4385a5cd1d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 9 Dec 2022 15:56:15 -0500 Subject: look out for extras=None in freeze Fixed issue where :meth:`_engine.Result.freeze` method would not work for textual SQL using either :func:`_sql.text` or :meth:`_engine.Connection.exec_driver_sql`. Fixes: #8963 Change-Id: Ia131c6ac41a4adf32eb1bf1abf23930ef395f16c --- test/sql/test_resultset.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'test/sql') diff --git a/test/sql/test_resultset.py b/test/sql/test_resultset.py index 7f1124c84..66584c96e 100644 --- a/test/sql/test_resultset.py +++ b/test/sql/test_resultset.py @@ -107,6 +107,52 @@ class CursorResultTest(fixtures.TablesTest): Column("y", String(50)), ) + @testing.variation( + "type_", ["text", "driversql", "core", "textstar", "driverstar"] + ) + def test_freeze(self, type_, connection): + """test #8963""" + + users = self.tables.users + connection.execute( + users.insert(), + [ + dict(user_id=1, user_name="john"), + dict(user_id=2, user_name="jack"), + ], + ) + + if type_.core: + stmt = select(users).order_by(users.c.user_id) + else: + if "star" in type_.name: + stmt = "select * from users order by user_id" + else: + stmt = "select user_id, user_name from users order by user_id" + + if "text" in type_.name: + stmt = text(stmt) + + if "driver" in type_.name: + result = connection.exec_driver_sql(stmt) + else: + result = connection.execute(stmt) + + frozen = result.freeze() + + unfrozen = frozen() + eq_(unfrozen.keys(), ["user_id", "user_name"]) + eq_(unfrozen.all(), [(1, "john"), (2, "jack")]) + + unfrozen = frozen() + eq_( + unfrozen.mappings().all(), + [ + {"user_id": 1, "user_name": "john"}, + {"user_id": 2, "user_name": "jack"}, + ], + ) + @testing.requires.insert_executemany_returning def test_splice_horizontally(self, connection): users = self.tables.users -- cgit v1.2.1