66- Concrete Table Inheritance (CTI)
77"""
88
9- from __future__ import annotations
10-
119import datetime
12- from typing import TYPE_CHECKING , Any
10+ from typing import TYPE_CHECKING , Any , Optional
1311
1412import pytest
1513from sqlalchemy import ForeignKey , MetaData , select
@@ -43,11 +41,11 @@ class STIEmployee(base.CommonTableAttributes, LocalBase):
4341 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
4442
4543 class STIManager (STIEmployee ):
46- department : Mapped [str | None ] = mapped_column (nullable = True )
44+ department : Mapped [Optional [ str ] ] = mapped_column (nullable = True )
4745 __mapper_args__ = {"polymorphic_identity" : "manager" }
4846
4947 class STIEngineer (STIEmployee ):
50- programming_language : Mapped [str | None ] = mapped_column (nullable = True )
48+ programming_language : Mapped [Optional [ str ] ] = mapped_column (nullable = True )
5149 __mapper_args__ = {"polymorphic_identity" : "engineer" }
5250
5351 # Verify all use same table (auto-generated from parent class name)
@@ -74,11 +72,11 @@ class Employee(base.CommonTableAttributes, LocalBase):
7472 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
7573
7674 class Manager (Employee ):
77- department : Mapped [str | None ] = mapped_column (default = None )
75+ department : Mapped [Optional [ str ] ] = mapped_column (default = None )
7876 __mapper_args__ = {"polymorphic_identity" : "manager" }
7977
8078 class Engineer (Employee ):
81- programming_language : Mapped [str | None ] = mapped_column (default = None )
79+ programming_language : Mapped [Optional [ str ] ] = mapped_column (default = None )
8280 __mapper_args__ = {"polymorphic_identity" : "engineer" }
8381
8482 # Verify columns exist in single table
@@ -104,11 +102,11 @@ class Employee(base.CommonTableAttributes, LocalBase):
104102 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
105103
106104 class Manager (Employee ):
107- department : Mapped [str | None ] = mapped_column (default = None )
105+ department : Mapped [Optional [ str ] ] = mapped_column (default = None )
108106 __mapper_args__ = {"polymorphic_identity" : "manager" }
109107
110108 class SeniorManager (Manager ):
111- budget : Mapped [int | None ] = mapped_column (default = None )
109+ budget : Mapped [Optional [ int ] ] = mapped_column (default = None )
112110 __mapper_args__ = {"polymorphic_identity" : "senior_manager" }
113111
114112 # All three levels use same table
@@ -137,11 +135,11 @@ class Employee(base.CommonTableAttributes, LocalBase):
137135 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
138136
139137 class Manager (Employee ):
140- department : Mapped [str | None ] = mapped_column (default = None )
138+ department : Mapped [Optional [ str ] ] = mapped_column (default = None )
141139 __mapper_args__ = {"polymorphic_identity" : "manager" }
142140
143141 class Engineer (Employee ):
144- programming_language : Mapped [str | None ] = mapped_column (default = None )
142+ programming_language : Mapped [Optional [ str ] ] = mapped_column (default = None )
145143 __mapper_args__ = {"polymorphic_identity" : "engineer" }
146144
147145 # Create tables
@@ -445,7 +443,7 @@ class Employee(TimestampMixin, base.CommonTableAttributes, LocalBase):
445443 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
446444
447445 class Manager (Employee ):
448- department : Mapped [str | None ] = mapped_column (default = None )
446+ department : Mapped [Optional [ str ] ] = mapped_column (default = None )
449447 __mapper_args__ = {"polymorphic_identity" : "manager" }
450448
451449 # STI works despite mixin
@@ -505,7 +503,7 @@ class Employee(base.CommonTableAttributes, LocalBase):
505503 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
506504
507505 class Manager (Employee ):
508- department : Mapped [str | None ] = mapped_column (default = None )
506+ department : Mapped [Optional [ str ] ] = mapped_column (default = None )
509507 # No __mapper_args__ - should still detect STI from parent
510508
511509 # Should use parent table even without explicit polymorphic_identity
@@ -550,15 +548,15 @@ class Employee(base.CommonTableAttributes, LocalBase):
550548 __mapper_args__ = {"polymorphic_on" : "type" , "polymorphic_identity" : "employee" }
551549
552550 class Manager (Employee ):
553- level : Mapped [int | None ] = mapped_column (default = None )
551+ level : Mapped [Optional [ int ] ] = mapped_column (default = None )
554552 __mapper_args__ = {"polymorphic_identity" : "manager" }
555553
556554 class SeniorManager (Manager ):
557- budget : Mapped [int | None ] = mapped_column (default = None )
555+ budget : Mapped [Optional [ int ] ] = mapped_column (default = None )
558556 __mapper_args__ = {"polymorphic_identity" : "senior_manager" }
559557
560558 class ExecutiveManager (SeniorManager ):
561- bonus : Mapped [int | None ] = mapped_column (default = None )
559+ bonus : Mapped [Optional [ int ] ] = mapped_column (default = None )
562560 __mapper_args__ = {"polymorphic_identity" : "executive_manager" }
563561
564562 # All levels use same table
0 commit comments