MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / test_delete_cascade

Method test_delete_cascade

test/orm/test_dynamic.py:1466–1523  ·  view source on GitHub ↗
(
        self, delete_cascade_configured, user_address_fixture
    )

Source from the content-addressed store, hash-verified

1464
1465 @testing.combinations(True, False, argnames="delete_cascade_configured")
1466 def test_delete_cascade(
1467 self, delete_cascade_configured, user_address_fixture
1468 ):
1469 addresses = self.tables.addresses
1470 User, Address = user_address_fixture(
1471 addresses_args={
1472 "order_by": addresses.c.id,
1473 "backref": "user",
1474 "cascade": (
1475 "save-update"
1476 if not delete_cascade_configured
1477 else "all, delete"
1478 ),
1479 }
1480 )
1481
1482 sess = fixture_session(
1483 autoflush=True,
1484 )
1485 u = User(name="ed")
1486 u.addresses.add_all(
1487 [Address(email_address=letter) for letter in "abcdef"]
1488 )
1489 sess.add(u)
1490 sess.commit()
1491
1492 from sqlalchemy import case
1493
1494 # the byzantine syntax here is so the query works on MSSQL
1495 isnull_stmt = select(
1496 case((addresses.c.user_id == None, True), else_=False),
1497 func.count("*"),
1498 ).group_by(
1499 case((addresses.c.user_id == None, True), else_=False),
1500 addresses.c.user_id,
1501 )
1502
1503 eq_(
1504 {isnull: count for isnull, count in sess.execute(isnull_stmt)},
1505 {False: 6},
1506 )
1507
1508 sess.delete(u)
1509
1510 sess.commit()
1511
1512 if not delete_cascade_configured:
1513 eq_(
1514 {isnull: count for isnull, count in sess.execute(isnull_stmt)},
1515 {True: 6},
1516 )
1517 else:
1518 eq_(
1519 sess.connection()
1520 .execute(select(func.count("*")).select_from(addresses))
1521 .scalar(),
1522 0,
1523 )

Callers

nothing calls this directly

Calls 15

fixture_sessionFunction · 0.90
selectFunction · 0.90
caseFunction · 0.90
eq_Function · 0.90
UserClass · 0.70
AddressClass · 0.70
add_allMethod · 0.45
addMethod · 0.45
commitMethod · 0.45
group_byMethod · 0.45
countMethod · 0.45
executeMethod · 0.45

Tested by

no test coverage detected