@@ -591,3 +591,49 @@ def test_create_schema_sets_location(make_mocked_engine_adapter: t.Callable, moc
591591 'CREATE SCHEMA IF NOT EXISTS "landing"."transactions" WITH (LOCATION=\' s3://raw-data/landing/transactions\' )' , # match '^landing\..*$'
592592 ]
593593 )
594+
595+
596+ def test_session_authorization (trino_mocked_engine_adapter : TrinoEngineAdapter ):
597+ adapter = trino_mocked_engine_adapter
598+
599+ # Test 1: No authorization property - should not execute any authorization commands
600+ with adapter .session ({}):
601+ pass
602+
603+ assert to_sql_calls (adapter ) == []
604+
605+ # Test 2: String authorization
606+ with adapter .session ({"authorization" : "test_user" }):
607+ adapter .execute ("SELECT 1" )
608+
609+ assert to_sql_calls (adapter ) == [
610+ "SET SESSION AUTHORIZATION 'test_user'" ,
611+ "SELECT 1" ,
612+ "RESET SESSION AUTHORIZATION" ,
613+ ]
614+
615+ # Test 3: Expression authorization
616+ adapter .cursor .execute .reset_mock ()
617+ with adapter .session ({"authorization" : exp .Literal .string ("another_user" )}):
618+ adapter .execute ("SELECT 2" )
619+
620+ assert to_sql_calls (adapter ) == [
621+ "SET SESSION AUTHORIZATION 'another_user'" ,
622+ "SELECT 2" ,
623+ "RESET SESSION AUTHORIZATION" ,
624+ ]
625+
626+ # Test 4: RESET is called even if exception occurs during session
627+ adapter .cursor .execute .reset_mock ()
628+ try :
629+ with adapter .session ({"authorization" : "test_user" }):
630+ adapter .execute ("SELECT 1" )
631+ raise RuntimeError ("Test exception" )
632+ except RuntimeError :
633+ pass
634+
635+ assert to_sql_calls (adapter ) == [
636+ "SET SESSION AUTHORIZATION 'test_user'" ,
637+ "SELECT 1" ,
638+ "RESET SESSION AUTHORIZATION" ,
639+ ]
0 commit comments