@@ -2790,8 +2790,111 @@ public function testInsertOrSkipWithoutDuplicates()
27902790 $ this ->assertCount (2 , $ rows );
27912791 }
27922792
2793- <<<<<<< HEAD
2794- public function testAddColumnWithAlgorithmInstant ()
2793+ public function testCreateView (): void
2794+ {
2795+ // Create a base table
2796+ $ table = new Table ('users ' , [], $ this ->adapter );
2797+ $ table ->addColumn ('name ' , 'string ' )
2798+ ->addColumn ('email ' , 'string ' )
2799+ ->create ();
2800+
2801+ // Insert some data
2802+ $ table ->insert ([
2803+ ['name ' => 'Alice ' , 'email ' => 'alice@example.com ' ],
2804+ ['name ' => 'Bob ' , 'email ' => 'bob@example.com ' ],
2805+ ])->save ();
2806+
2807+ // Create a view
2808+ $ viewTable = new Table ('user_emails ' , [], $ this ->adapter );
2809+ $ viewTable ->createView ('user_emails ' , 'SELECT name, email FROM users ' )
2810+ ->save ();
2811+
2812+ // Query the view
2813+ $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_emails ' );
2814+ $ this ->assertCount (2 , $ rows );
2815+ $ this ->assertEquals ('Alice ' , $ rows [0 ]['name ' ]);
2816+ $ this ->assertEquals ('alice@example.com ' , $ rows [0 ]['email ' ]);
2817+ }
2818+
2819+ public function testDropView (): void
2820+ {
2821+ // Create a base table
2822+ $ table = new Table ('users ' , [], $ this ->adapter );
2823+ $ table ->addColumn ('name ' , 'string ' )->create ();
2824+
2825+ // Create a view
2826+ $ viewTable = new Table ('user_names ' , [], $ this ->adapter );
2827+ $ viewTable ->createView ('user_names ' , 'SELECT name FROM users ' )->save ();
2828+
2829+ // Verify view exists
2830+ $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_names ' );
2831+ $ this ->assertIsArray ($ rows );
2832+
2833+ // Drop the view
2834+ $ viewTable ->dropView ('user_names ' )->save ();
2835+
2836+ // Verify view is dropped
2837+ $ this ->expectException (PDOException::class);
2838+ $ this ->adapter ->fetchAll ('SELECT * FROM user_names ' );
2839+ }
2840+
2841+ public function testCreateTrigger (): void
2842+ {
2843+ // Create tables
2844+ $ table = new Table ('users ' , [], $ this ->adapter );
2845+ $ table ->addColumn ('name ' , 'string ' )
2846+ ->addColumn ('created_count ' , 'integer ' , ['default ' => 0 ])
2847+ ->create ();
2848+
2849+ $ logTable = new Table ('user_log ' , [], $ this ->adapter );
2850+ $ logTable ->addColumn ('action ' , 'string ' )->create ();
2851+
2852+ // Create a trigger
2853+ $ table ->createTrigger (
2854+ 'log_user_insert ' ,
2855+ 'INSERT ' ,
2856+ "INSERT INTO user_log (action) VALUES ('user_created') " ,
2857+ ['timing ' => 'AFTER ' ],
2858+ )->save ();
2859+
2860+ // Insert data to trigger the trigger
2861+ $ table ->insert (['name ' => 'Alice ' , 'created_count ' => 0 ])->save ();
2862+
2863+ // Verify trigger fired
2864+ $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_log ' );
2865+ $ this ->assertCount (1 , $ rows );
2866+ $ this ->assertEquals ('user_created ' , $ rows [0 ]['action ' ]);
2867+ }
2868+
2869+ public function testDropTrigger (): void
2870+ {
2871+ // Create table
2872+ $ table = new Table ('users ' , [], $ this ->adapter );
2873+ $ table ->addColumn ('name ' , 'string ' )->create ();
2874+
2875+ $ logTable = new Table ('user_log ' , [], $ this ->adapter );
2876+ $ logTable ->addColumn ('action ' , 'string ' )->create ();
2877+
2878+ // Create a trigger
2879+ $ table ->createTrigger (
2880+ 'log_user_insert ' ,
2881+ 'INSERT ' ,
2882+ "INSERT INTO user_log (action) VALUES ('user_created') " ,
2883+ ['timing ' => 'AFTER ' ],
2884+ )->save ();
2885+
2886+ // Drop the trigger
2887+ $ table ->dropTrigger ('log_user_insert ' )->save ();
2888+
2889+ // Insert data - trigger should not fire
2890+ $ table ->insert (['name ' => 'Bob ' ])->save ();
2891+
2892+ // Verify trigger did not fire
2893+ $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_log ' );
2894+ $ this ->assertCount (0 , $ rows );
2895+ }
2896+
2897+ public function testAddColumnWithAlgorithmInstant (): void
27952898 {
27962899 $ table = new Table ('users ' , [], $ this ->adapter );
27972900 $ table ->addColumn ('email ' , 'string ' )
@@ -2805,7 +2908,7 @@ public function testAddColumnWithAlgorithmInstant()
28052908 $ this ->assertTrue ($ this ->adapter ->hasColumn ('users ' , 'status ' ));
28062909 }
28072910
2808- public function testAddColumnWithAlgorithmAndLock ()
2911+ public function testAddColumnWithAlgorithmAndLock (): void
28092912 {
28102913 $ table = new Table ('products ' , [], $ this ->adapter );
28112914 $ table ->addColumn ('name ' , 'string ' )
@@ -2823,7 +2926,7 @@ public function testAddColumnWithAlgorithmAndLock()
28232926 $ this ->assertTrue ($ this ->adapter ->hasColumn ('products ' , 'price ' ));
28242927 }
28252928
2826- public function testChangeColumnWithAlgorithm ()
2929+ public function testChangeColumnWithAlgorithm (): void
28272930 {
28282931 $ table = new Table ('items ' , [], $ this ->adapter );
28292932 $ table ->addColumn ('description ' , 'string ' , ['limit ' => 100 ])
@@ -2843,7 +2946,7 @@ public function testChangeColumnWithAlgorithm()
28432946 }
28442947 }
28452948
2846- public function testBatchedOperationsWithSameAlgorithm ()
2949+ public function testBatchedOperationsWithSameAlgorithm (): void
28472950 {
28482951 $ table = new Table ('batch_test ' , [], $ this ->adapter );
28492952 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2863,7 +2966,7 @@ public function testBatchedOperationsWithSameAlgorithm()
28632966 $ this ->assertTrue ($ this ->adapter ->hasColumn ('batch_test ' , 'col3 ' ));
28642967 }
28652968
2866- public function testBatchedOperationsWithConflictingAlgorithmsThrowsException ()
2969+ public function testBatchedOperationsWithConflictingAlgorithmsThrowsException (): void
28672970 {
28682971 $ table = new Table ('conflict_test ' , [], $ this ->adapter );
28692972 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2883,7 +2986,7 @@ public function testBatchedOperationsWithConflictingAlgorithmsThrowsException()
28832986 ->update ();
28842987 }
28852988
2886- public function testBatchedOperationsWithConflictingLocksThrowsException ()
2989+ public function testBatchedOperationsWithConflictingLocksThrowsException (): void
28872990 {
28882991 $ table = new Table ('lock_conflict_test ' , [], $ this ->adapter );
28892992 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2905,7 +3008,7 @@ public function testBatchedOperationsWithConflictingLocksThrowsException()
29053008 ->update ();
29063009 }
29073010
2908- public function testInvalidAlgorithmThrowsException ()
3011+ public function testInvalidAlgorithmThrowsException (): void
29093012 {
29103013 $ table = new Table ('invalid_algo ' , [], $ this ->adapter );
29113014 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2919,7 +3022,7 @@ public function testInvalidAlgorithmThrowsException()
29193022 ])->update ();
29203023 }
29213024
2922- public function testInvalidLockThrowsException ()
3025+ public function testInvalidLockThrowsException (): void
29233026 {
29243027 $ table = new Table ('invalid_lock ' , [], $ this ->adapter );
29253028 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2933,7 +3036,7 @@ public function testInvalidLockThrowsException()
29333036 ])->update ();
29343037 }
29353038
2936- public function testAlgorithmInstantWithExplicitLockThrowsException ()
3039+ public function testAlgorithmInstantWithExplicitLockThrowsException (): void
29373040 {
29383041 $ table = new Table ('instant_lock_test ' , [], $ this ->adapter );
29393042 $ table ->addColumn ('col1 ' , 'string ' )
@@ -2949,23 +3052,23 @@ public function testAlgorithmInstantWithExplicitLockThrowsException()
29493052 ])->update ();
29503053 }
29513054
2952- public function testAlgorithmConstantsAreDefined ()
3055+ public function testAlgorithmConstantsAreDefined (): void
29533056 {
29543057 $ this ->assertEquals ('DEFAULT ' , MysqlAdapter::ALGORITHM_DEFAULT );
29553058 $ this ->assertEquals ('INSTANT ' , MysqlAdapter::ALGORITHM_INSTANT );
29563059 $ this ->assertEquals ('INPLACE ' , MysqlAdapter::ALGORITHM_INPLACE );
29573060 $ this ->assertEquals ('COPY ' , MysqlAdapter::ALGORITHM_COPY );
29583061 }
29593062
2960- public function testLockConstantsAreDefined ()
3063+ public function testLockConstantsAreDefined (): void
29613064 {
29623065 $ this ->assertEquals ('DEFAULT ' , MysqlAdapter::LOCK_DEFAULT );
29633066 $ this ->assertEquals ('NONE ' , MysqlAdapter::LOCK_NONE );
29643067 $ this ->assertEquals ('SHARED ' , MysqlAdapter::LOCK_SHARED );
29653068 $ this ->assertEquals ('EXCLUSIVE ' , MysqlAdapter::LOCK_EXCLUSIVE );
29663069 }
29673070
2968- public function testAlgorithmWithMixedCase ()
3071+ public function testAlgorithmWithMixedCase (): void
29693072 {
29703073 $ table = new Table ('mixed_case ' , [], $ this ->adapter );
29713074 $ table ->addColumn ('col1 ' , 'string ' )
@@ -3143,108 +3246,4 @@ public function testCreateTableWithExpressionPartitioning()
31433246
31443247 $ this ->assertTrue ($ this ->adapter ->hasTable ('partitioned_events ' ));
31453248 }
3146-
3147- public function testCreateView (): void
3148- {
3149- // Create a base table
3150- $ table = new Table ('users ' , [], $ this ->adapter );
3151- $ table ->addColumn ('name ' , 'string ' )
3152- ->addColumn ('email ' , 'string ' )
3153- ->create ();
3154-
3155- // Insert some data
3156- $ table ->insert ([
3157- ['name ' => 'Alice ' , 'email ' => 'alice@example.com ' ],
3158- ['name ' => 'Bob ' , 'email ' => 'bob@example.com ' ],
3159- ])->save ();
3160-
3161- // Create a view
3162- $ viewTable = new Table ('user_emails ' , [], $ this ->adapter );
3163- $ viewTable ->createView ('user_emails ' , 'SELECT name, email FROM users ' )
3164- ->save ();
3165-
3166- // Query the view
3167- $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_emails ' );
3168- $ this ->assertCount (2 , $ rows );
3169- $ this ->assertEquals ('Alice ' , $ rows [0 ]['name ' ]);
3170- $ this ->assertEquals ('alice@example.com ' , $ rows [0 ]['email ' ]);
3171- }
3172-
3173- public function testDropView (): void
3174- {
3175- // Create a base table
3176- $ table = new Table ('users ' , [], $ this ->adapter );
3177- $ table ->addColumn ('name ' , 'string ' )->create ();
3178-
3179- // Create a view
3180- $ viewTable = new Table ('user_names ' , [], $ this ->adapter );
3181- $ viewTable ->createView ('user_names ' , 'SELECT name FROM users ' )->save ();
3182-
3183- // Verify view exists
3184- $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_names ' );
3185- $ this ->assertIsArray ($ rows );
3186-
3187- // Drop the view
3188- $ viewTable ->dropView ('user_names ' )->save ();
3189-
3190- // Verify view is dropped
3191- $ this ->expectException (PDOException::class);
3192- $ this ->adapter ->fetchAll ('SELECT * FROM user_names ' );
3193- }
3194-
3195- public function testCreateTrigger (): void
3196- {
3197- // Create tables
3198- $ table = new Table ('users ' , [], $ this ->adapter );
3199- $ table ->addColumn ('name ' , 'string ' )
3200- ->addColumn ('created_count ' , 'integer ' , ['default ' => 0 ])
3201- ->create ();
3202-
3203- $ logTable = new Table ('user_log ' , [], $ this ->adapter );
3204- $ logTable ->addColumn ('action ' , 'string ' )->create ();
3205-
3206- // Create a trigger
3207- $ table ->createTrigger (
3208- 'log_user_insert ' ,
3209- 'INSERT ' ,
3210- "INSERT INTO user_log (action) VALUES ('user_created') " ,
3211- ['timing ' => 'AFTER ' ],
3212- )->save ();
3213-
3214- // Insert data to trigger the trigger
3215- $ table ->insert (['name ' => 'Alice ' , 'created_count ' => 0 ])->save ();
3216-
3217- // Verify trigger fired
3218- $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_log ' );
3219- $ this ->assertCount (1 , $ rows );
3220- $ this ->assertEquals ('user_created ' , $ rows [0 ]['action ' ]);
3221- }
3222-
3223- public function testDropTrigger (): void
3224- {
3225- // Create table
3226- $ table = new Table ('users ' , [], $ this ->adapter );
3227- $ table ->addColumn ('name ' , 'string ' )->create ();
3228-
3229- $ logTable = new Table ('user_log ' , [], $ this ->adapter );
3230- $ logTable ->addColumn ('action ' , 'string ' )->create ();
3231-
3232- // Create a trigger
3233- $ table ->createTrigger (
3234- 'log_user_insert ' ,
3235- 'INSERT ' ,
3236- "INSERT INTO user_log (action) VALUES ('user_created') " ,
3237- ['timing ' => 'AFTER ' ],
3238- )->save ();
3239-
3240- // Drop the trigger
3241- $ table ->dropTrigger ('log_user_insert ' )->save ();
3242-
3243- // Insert data - trigger should not fire
3244- $ table ->insert (['name ' => 'Bob ' ])->save ();
3245-
3246- // Verify trigger did not fire
3247- $ rows = $ this ->adapter ->fetchAll ('SELECT * FROM user_log ' );
3248- $ this ->assertCount (0 , $ rows );
3249- }
32503249}
0 commit comments