6
6
7
7
use Casbin \Persist \AdapterHelper ;
8
8
use 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 };
12
10
use Closure ;
13
11
use Doctrine \DBAL \Configuration ;
14
- use Doctrine \DBAL \DBALException ;
15
- use Doctrine \DBAL \Driver \ResultStatement ;
12
+ use Doctrine \DBAL \{DBALException , Exception };
16
13
use Doctrine \DBAL \DriverManager ;
17
14
use Doctrine \DBAL \Connection ;
18
- use Doctrine \DBAL \Exception ;
19
15
use Doctrine \DBAL \Query \Expression \CompositeExpression ;
20
16
use Doctrine \DBAL \Schema \Schema ;
21
17
use Throwable ;
22
18
23
19
/**
24
20
* DBAL Adapter.
25
21
*
26
- * @author techlee@qq .com
22
+ * @author leeqvip@gmail .com
27
23
*/
28
24
class Adapter implements FilteredAdapter, BatchAdapter, UpdatableAdapter
29
25
{
@@ -34,32 +30,32 @@ class Adapter implements FilteredAdapter, BatchAdapter, UpdatableAdapter
34
30
*
35
31
* @var Connection
36
32
*/
37
- protected $ connection ;
33
+ protected Connection $ connection ;
38
34
39
35
/**
40
36
* Casbin policies table name.
41
37
*
42
38
* @var string
43
39
*/
44
- public $ policyTableName = 'casbin_rule ' ;
40
+ public string $ policyTableName = 'casbin_rule ' ;
45
41
46
42
/**
47
43
* @var bool
48
44
*/
49
- private $ filtered = false ;
45
+ private bool $ filtered = false ;
50
46
51
47
/**
52
48
* @var string[]
53
49
*/
54
- protected $ columns = ['p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' ];
50
+ protected array $ columns = ['p_type ' , 'v0 ' , 'v1 ' , 'v2 ' , 'v3 ' , 'v4 ' , 'v5 ' ];
55
51
56
52
/**
57
53
* Adapter constructor.
58
54
*
59
55
* @param Connection|array $connection
60
56
* @throws Exception
61
57
*/
62
- public function __construct ($ connection )
58
+ public function __construct (Connection | array $ connection )
63
59
{
64
60
if ($ connection instanceof Connection) {
65
61
$ this ->connection = $ connection ;
@@ -85,7 +81,7 @@ public function __construct($connection)
85
81
* @return Adapter
86
82
* @throws Exception
87
83
*/
88
- public static function newAdapter ($ connection ): Adapter
84
+ public static function newAdapter (Connection | array $ connection ): Adapter
89
85
{
90
86
return new static ($ connection );
91
87
}
@@ -95,9 +91,9 @@ public static function newAdapter($connection): Adapter
95
91
*
96
92
* @return void
97
93
*/
98
- public function initTable ()
94
+ public function initTable (): void
99
95
{
100
- $ sm = method_exists ( $ this ->connection , " createSchemaManager " ) ? $ sm = $ this -> connection -> createSchemaManager () : $ sm = $ this -> connection -> getSchemaManager ();
96
+ $ sm = $ this ->connection -> createSchemaManager ();
101
97
if (!$ sm ->tablesExist ([$ this ->policyTableName ])) {
102
98
$ schema = new Schema ();
103
99
$ table = $ schema ->createTable ($ this ->policyTableName );
@@ -118,10 +114,10 @@ public function initTable()
118
114
* @param $pType
119
115
* @param array $rule
120
116
*
121
- * @return ResultStatement| int
117
+ * @return int|string
122
118
* @throws Exception
123
119
*/
124
- public function savePolicyLine ($ pType , array $ rule )
120
+ public function savePolicyLine (string $ pType , array $ rule ): int | string
125
121
{
126
122
$ queryBuilder = $ this ->connection ->createQueryBuilder ();
127
123
$ queryBuilder
@@ -135,7 +131,7 @@ public function savePolicyLine($pType, array $rule)
135
131
$ queryBuilder ->setValue ('v ' . strval ($ key ), '? ' )->setParameter ($ key + 1 , $ value );
136
132
}
137
133
138
- return $ this -> executeQuery ( $ queryBuilder );
134
+ return $ queryBuilder -> executeStatement ( );
139
135
}
140
136
141
137
/**
@@ -147,9 +143,9 @@ public function savePolicyLine($pType, array $rule)
147
143
public function loadPolicy (Model $ model ): void
148
144
{
149
145
$ 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 ( );
151
147
152
- while ($ row = $ this -> fetch ( $ stmt )) {
148
+ while ($ row = $ stmt -> fetchAssociative ( )) {
153
149
$ this ->loadPolicyArray ($ this ->filterRule ($ row ), $ model );
154
150
}
155
151
}
@@ -179,11 +175,9 @@ public function loadFilteredPolicy(Model $model, $filter): void
179
175
throw new \Exception ('invalid filter type ' );
180
176
}
181
177
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 )));
187
181
$ this ->loadPolicyLine (trim ($ line ), $ model );
188
182
}
189
183
@@ -247,9 +241,7 @@ public function addPolicies(string $sec, string $ptype, array $rules): void
247
241
$ sets [] = array_pad ([], $ columnsCount , '? ' );
248
242
}
249
243
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 ));
253
245
254
246
$ sql = 'INSERT INTO ' . $ table . ' ( ' . implode (', ' , $ columns ) . ') ' .
255
247
' VALUES ' . $ valuesStr ;
@@ -274,7 +266,7 @@ private function _removePolicy(Connection $conn, string $sec, string $ptype, arr
274
266
$ queryBuilder ->andWhere ('v ' . strval ($ key ) . ' = ? ' )->setParameter ($ key + 1 , $ value );
275
267
}
276
268
277
- $ this -> executeQuery ( $ queryBuilder ->delete ($ this ->policyTableName ));
269
+ $ queryBuilder ->delete ($ this ->policyTableName )-> executeStatement ( );
278
270
}
279
271
280
272
/**
@@ -331,13 +323,13 @@ public function _removeFilteredPolicy(string $sec, string $ptype, int $fieldInde
331
323
$ fieldIndex ++;
332
324
}
333
325
334
- $ stmt = $ this -> executeQuery ( $ queryBuilder ->select (...$ this ->columns )->from ($ this ->policyTableName ));
326
+ $ stmt = $ queryBuilder ->select (...$ this ->columns )->from ($ this ->policyTableName )-> executeQuery ( );
335
327
336
- while ($ row = $ this -> fetch ( $ stmt )) {
328
+ while ($ row = $ stmt -> fetchAssociative ( )) {
337
329
$ removedRules [] = $ this ->filterRule ($ row );
338
330
}
339
331
340
- $ this -> executeQuery ( $ queryBuilder ->delete ($ this ->policyTableName ));
332
+ $ queryBuilder ->delete ($ this ->policyTableName )-> executeStatement ( );
341
333
});
342
334
343
335
return $ removedRules ;
@@ -381,9 +373,7 @@ public function updatePolicy(string $sec, string $ptype, array $oldRule, array $
381
373
$ queryBuilder ->set ('v ' . strval ($ key ), ': ' . $ placeholder )->setParameter ($ placeholder , $ value );
382
374
}
383
375
384
- $ queryBuilder ->update ($ this ->policyTableName );
385
-
386
- $ this ->executeQuery ($ queryBuilder );
376
+ $ queryBuilder ->update ($ this ->policyTableName )->executeStatement ();
387
377
}
388
378
389
379
/**
@@ -484,33 +474,4 @@ public function getColumns(): array
484
474
{
485
475
return $ this ->columns ;
486
476
}
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
-
516
477
}
0 commit comments