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 -> fetchAllAssociative ( )) {
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