66
77use  Casbin \Persist \AdapterHelper ;
88use  Casbin \Model \Model ;
9- use  Casbin \Persist \BatchAdapter ;
10- use  Casbin \Persist \FilteredAdapter ;
11- use  Casbin \Persist \UpdatableAdapter ;
9+ use  Casbin \Persist \{BatchAdapter , FilteredAdapter , UpdatableAdapter };
1210use  Closure ;
1311use  Doctrine \DBAL \Configuration ;
14- use  Doctrine \DBAL \DBALException ;
15- use  Doctrine \DBAL \Driver \ResultStatement ;
12+ use  Doctrine \DBAL \{DBALException , Exception };
1613use  Doctrine \DBAL \DriverManager ;
1714use  Doctrine \DBAL \Connection ;
18- use  Doctrine \DBAL \Exception ;
1915use  Doctrine \DBAL \Query \Expression \CompositeExpression ;
2016use  Doctrine \DBAL \Schema \Schema ;
2117use  Throwable ;
2218
2319/** 
2420 * DBAL Adapter. 
2521 * 
26-  * @author techlee@qq .com 
22+  * @author leeqvip@gmail .com 
2723 */ 
2824class  Adapter implements  FilteredAdapter, BatchAdapter, UpdatableAdapter
2925{
@@ -34,32 +30,32 @@ class Adapter implements FilteredAdapter, BatchAdapter, UpdatableAdapter
3430     * 
3531     * @var Connection 
3632     */ 
37-     protected  $ connection ;
33+     protected  Connection   $ connection ;
3834
3935    /** 
4036     * Casbin policies table name. 
4137     * 
4238     * @var string 
4339     */ 
44-     public  $ policyTableName  = 'casbin_rule ' ;
40+     public  string   $ policyTableName  = 'casbin_rule ' ;
4541
4642    /** 
4743     * @var bool 
4844     */ 
49-     private  $ filtered  = false ;
45+     private  bool   $ filtered  = false ;
5046
5147    /** 
5248     * @var string[] 
5349     */ 
54-     protected  $ columns  = ['p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' ];
50+     protected  array   $ columns  = ['p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' ];
5551
5652    /** 
5753     * Adapter constructor. 
5854     * 
5955     * @param Connection|array $connection 
6056     * @throws Exception 
6157     */ 
62-     public  function  __construct ($ connection )
58+     public  function  __construct (Connection | array   $ connection )
6359    {
6460        if  ($ connection  instanceof  Connection) {
6561            $ this  ->connection  = $ connection ;
@@ -85,7 +81,7 @@ public function __construct($connection)
8581     * @return Adapter 
8682     * @throws Exception 
8783     */ 
88-     public  static  function  newAdapter ($ connection ): Adapter 
84+     public  static  function  newAdapter (Connection | array   $ connection ): Adapter 
8985    {
9086        return  new  static ($ connection );
9187    }
@@ -95,9 +91,9 @@ public static function newAdapter($connection): Adapter
9591     * 
9692     * @return void 
9793     */ 
98-     public  function  initTable ()
94+     public  function  initTable ():  void 
9995    {
100-         $ sm  = method_exists ( $ this  ->connection ,  " createSchemaManager " ) ?  $ sm  =  $ this -> connection -> createSchemaManager () :  $ sm  =  $ this -> connection -> getSchemaManager ();
96+         $ sm  = $ this  ->connection -> createSchemaManager ();
10197        if  (!$ sm ->tablesExist ([$ this  ->policyTableName ])) {
10298            $ schema  = new  Schema ();
10399            $ table  = $ schema ->createTable ($ this  ->policyTableName );
@@ -118,10 +114,10 @@ public function initTable()
118114     * @param $pType 
119115     * @param array $rule 
120116     * 
121-      * @return ResultStatement| int 
117+      * @return int|string  
122118     * @throws Exception 
123119     */ 
124-     public  function  savePolicyLine ($ pType , array  $ rule )
120+     public  function  savePolicyLine (string   $ pType , array  $ rule ):  int | string 
125121    {
126122        $ queryBuilder  = $ this  ->connection ->createQueryBuilder ();
127123        $ queryBuilder
@@ -135,7 +131,7 @@ public function savePolicyLine($pType, array $rule)
135131            $ queryBuilder ->setValue ('v '  . strval ($ key ), '? ' )->setParameter ($ key  + 1 , $ value );
136132        }
137133
138-         return  $ this -> executeQuery ( $ queryBuilder  );
134+         return  $ queryBuilder -> executeStatement ( );
139135    }
140136
141137    /** 
@@ -147,9 +143,9 @@ public function savePolicyLine($pType, array $rule)
147143    public  function  loadPolicy (Model   $ model ): void 
148144    {
149145        $ queryBuilder  = $ this  ->connection ->createQueryBuilder ();
150-         $ stmt  = $ this -> executeQuery ( $ queryBuilder ->select ('p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' )->from ($ this  ->policyTableName ));
146+         $ stmt  = $ queryBuilder ->select ('p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' )->from ($ this  ->policyTableName )-> executeQuery ( );
151147
152-         while  ($ row  = $ this -> fetch ( $ stmt  )) {
148+         while  ($ row  = $ stmt -> fetchAssociative ( )) {
153149            $ this  ->loadPolicyArray ($ this  ->filterRule ($ row ), $ model );
154150        }
155151    }
@@ -179,11 +175,9 @@ public function loadFilteredPolicy(Model $model, $filter): void
179175            throw  new  \Exception ('invalid filter type ' );
180176        }
181177
182-         $ stmt  = $ this  ->executeQuery ($ queryBuilder ->from ($ this  ->policyTableName ));
183-         while  ($ row  = $ this  ->fetch ($ stmt )) {
184-             $ line  = implode (',  ' , array_filter ($ row , function  ($ val ) {
185-                 return  ''  != $ val  && !is_null ($ val );
186-             }));
178+         $ stmt  = $ queryBuilder ->from ($ this  ->policyTableName )->executeQuery ();
179+         while  ($ row  = $ stmt ->fetchAssociative ()) {
180+             $ line  = implode (',  ' , array_filter ($ row , static  fn  ($ val ): bool  => ''  != $ val  && !is_null ($ val )));
187181            $ this  ->loadPolicyLine (trim ($ line ), $ model );
188182        }
189183
@@ -247,9 +241,7 @@ public function addPolicies(string $sec, string $ptype, array $rules): void
247241            $ sets [] = array_pad ([], $ columnsCount , '? ' );
248242        }
249243
250-         $ valuesStr  = implode (',  ' , array_map (function  ($ set ) {
251-             return  '( '  . implode (',  ' , $ set ) . ') ' ;
252-         }, $ sets ));
244+         $ valuesStr  = implode (',  ' , array_map (static  fn  ($ set ): string  => '( '  . implode (',  ' , $ set ) . ') ' , $ sets ));
253245
254246        $ sql  = 'INSERT INTO  '  . $ table  . ' ( '  . implode (',  ' , $ columns ) . ') '  .
255247            ' VALUES '  . $ valuesStr ;
@@ -274,7 +266,7 @@ private function _removePolicy(Connection $conn, string $sec, string $ptype, arr
274266            $ queryBuilder ->andWhere ('v '  . strval ($ key ) . ' = ? ' )->setParameter ($ key  + 1 , $ value );
275267        }
276268
277-         $ this -> executeQuery ( $ queryBuilder ->delete ($ this  ->policyTableName ));
269+         $ queryBuilder ->delete ($ this  ->policyTableName )-> executeStatement ( );
278270    }
279271
280272    /** 
@@ -331,13 +323,13 @@ public function _removeFilteredPolicy(string $sec, string $ptype, int $fieldInde
331323                $ fieldIndex ++;
332324            }
333325
334-             $ stmt  = $ this -> executeQuery ( $ queryBuilder ->select (...$ this  ->columns )->from ($ this  ->policyTableName ));
326+             $ stmt  = $ queryBuilder ->select (...$ this  ->columns )->from ($ this  ->policyTableName )-> executeQuery ( );
335327
336-             while  ($ row  = $ this -> fetch ( $ stmt  )) {
328+             while  ($ row  = $ stmt -> fetchAssociative ( )) {
337329                $ removedRules [] = $ this  ->filterRule ($ row );
338330            }
339331
340-             $ this -> executeQuery ( $ queryBuilder ->delete ($ this  ->policyTableName ));
332+             $ queryBuilder ->delete ($ this  ->policyTableName )-> executeStatement ( );
341333        });
342334
343335        return  $ removedRules ;
@@ -381,9 +373,7 @@ public function updatePolicy(string $sec, string $ptype, array $oldRule, array $
381373            $ queryBuilder ->set ('v '  . strval ($ key ), ': '  . $ placeholder )->setParameter ($ placeholder , $ value );
382374        }
383375
384-         $ queryBuilder ->update ($ this  ->policyTableName );
385- 
386-         $ this  ->executeQuery ($ queryBuilder );
376+         $ queryBuilder ->update ($ this  ->policyTableName )->executeStatement ();
387377    }
388378
389379    /** 
@@ -484,33 +474,4 @@ public function getColumns(): array
484474    {
485475        return  $ this  ->columns ;
486476    }
487- 
488-     /** 
489-      * @param \Doctrine\DBAL\Result|\Doctrine\DBAL\Driver\PDOStatement $stmt 
490-      * 
491-      * @return mixed 
492-      * @throws Exception 
493-      */ 
494-     private  function  fetch ($ stmt )
495-     {
496-         if  (method_exists ($ stmt , 'fetchAssociative ' )) {
497-             return  $ stmt ->fetchAssociative ();
498-         }
499- 
500-         return  $ stmt ->fetch ();
501-     }
502- 
503-     /** 
504-      * Calls correct query execution method depending on Doctrine version and 
505-      * returns the result. 
506-      * 
507-      * @param \Doctrine\DBAL\Query\QueryBuilder $query 
508-      * 
509-      * @return mixed 
510-      */ 
511-     private  function  executeQuery ($ query )
512-     {
513-         return  method_exists ($ query , "executeQuery " ) ? $ query ->executeQuery () : $ query ->execute ();
514-     }
515- 
516477}
0 commit comments