code: def test_update_returning(self, connection, criteria):
      t = self.tables.plain_pk
  
      stmt = t.update().returning(t.c.id, t.c.data)
  
      if criteria.norows:
          stmt = stmt.where(t.c.id == 10)
      elif criteria.rows:
          stmt = stmt.where(t.c.id == 2)
      elif criteria.emptyin:
          stmt = stmt.where(t.c.id.in_([]))
      else:
          criteria.fail()
  
      r = connection.execute(stmt, dict(data="d2_new"))
      assert not r.is_insert
      assert r.returns_rows
      eq_(r.keys(), ["id", "data"])
  
      if criteria.rows:
          eq_(r.all(), [(2, "d2_new")])
      else:
          eq_(r.all(), [])
  
      eq_(
          connection.execute(t.select().order_by(t.c.id)).fetchall(),
          [(1, "d1"), (2, "d2_new"), (3, "d3")]
          if criteria.rows
          else [(1, "d1"), (2, "d2"), (3, "d3")],
      )
  
file_path: sqlalchemy/lib/sqlalchemy/testing/suite/test_update_delete.py
imports: from ..None import fixtures
  from ..assertions import eq_
  from ..schema import Column
  from ..schema import Table
  from ...None import Integer
  from ...None import String
  from ...None import testing
label_desc: Use image node_id 5 for calling the SimpleUpdateDeleteTest obj's underlying member method code with example usage: obj.test_update_returning(connection, criteria) without return types