Skip to content

Commit aae66da

Browse files
authored
拆分数据库和模型组件,支持连接中心 (#668)
* 新增 database 组件 * 独立 database 组件 * 新增 model 组件 * 独立 model 组件 * 修复 * 修复测试 * pgsql 支持新的连接中心 * 调整命名、修复测试、更新文档 * 跳过 Swoole\Coroutine\PostgreSQL 测试,并增加警告日志
1 parent ec964fc commit aae66da

File tree

395 files changed

+3592
-4754
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

395 files changed

+3592
-4754
lines changed

Diff for: .github/print-logs.php

+14-8
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,19 @@
186186
}
187187
}
188188

189-
echo '[connection-center]', \PHP_EOL;
190-
$fileName = \dirname(__DIR__) . '/src/Components/connection-center/tests/.runtime/logs/log-' . date('Y-m-d') . '.log';
191-
if (is_file($fileName))
192-
{
193-
echo file_get_contents($fileName), \PHP_EOL;
194-
}
195-
else
189+
foreach ([
190+
'connection-center',
191+
'model',
192+
] as $component)
196193
{
197-
echo 'Not found!', \PHP_EOL;
194+
echo '[',$component,']', \PHP_EOL;
195+
$fileName = \dirname(__DIR__) . '/src/Components/' . $component . '/tests/.runtime/logs/log-' . date('Y-m-d') . '.log';
196+
if (is_file($fileName))
197+
{
198+
echo file_get_contents($fileName), \PHP_EOL;
199+
}
200+
else
201+
{
202+
echo 'Not found!', \PHP_EOL;
203+
}
198204
}

Diff for: .github/workflows/ci.yml

+31-1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ jobs:
107107
- name: Test connection-center
108108
if: ${{ env.test_prepared && always() }}
109109
run: docker exec ${ENV_SERVICE} composer test-connection-center
110+
- name: Test database
111+
if: ${{ env.test_prepared && always() }}
112+
run: docker exec ${ENV_SERVICE} composer test-database
113+
- name: Test model
114+
if: ${{ env.test_prepared && always() }}
115+
run: docker exec ${ENV_SERVICE} composer test-model
110116
- name: Print logs
111117
if: failure()
112118
run: docker exec ${ENV_SERVICE} php .github/print-logs.php
@@ -195,6 +201,12 @@ jobs:
195201
- name: Test connection-center
196202
if: ${{ env.test_prepared && always() }}
197203
run: docker exec ${ENV_SERVICE} composer test-connection-center
204+
- name: Test database
205+
if: ${{ env.test_prepared && always() }}
206+
run: docker exec ${ENV_SERVICE} composer test-database
207+
- name: Test model
208+
if: ${{ env.test_prepared && always() }}
209+
run: docker exec ${ENV_SERVICE} composer test-model
198210
- name: Print logs
199211
if: failure()
200212
run: docker exec ${ENV_SERVICE} php .github/print-logs.php
@@ -300,6 +312,12 @@ jobs:
300312
- name: Test connection-center
301313
if: ${{ env.test_prepared && always() }}
302314
run: composer test-connection-center
315+
- name: Test database
316+
if: ${{ env.test_prepared && always() }}
317+
run: composer test-database
318+
- name: Test model
319+
if: ${{ env.test_prepared && always() }}
320+
run: composer test-model
303321
- name: Print logs
304322
if: failure()
305323
run: php .github/print-logs.php
@@ -433,6 +451,12 @@ jobs:
433451
- name: Test connection-center
434452
if: ${{ env.test_prepared && always() }}
435453
run: composer test-connection-center
454+
- name: Test database
455+
if: ${{ env.test_prepared && always() }}
456+
run: composer test-database
457+
- name: Test model
458+
if: ${{ env.test_prepared && always() }}
459+
run: composer test-model
436460
- name: Print logs
437461
if: failure()
438462
run: php .github/print-logs.php
@@ -505,7 +529,7 @@ jobs:
505529
composer update --prefer-dist --no-progress
506530
Write-Output "::endgroup::"
507531
Write-Output "::group::Table Init"
508-
php src\Cli\bin\imi-cli generate/table --app-namespace "Imi\Test\Component"
532+
php src\Cli\bin\imi-cli generate/table --app-namespace "Imi\Model\Test"
509533
Write-Output "::endgroup::"
510534
511535
- name: Install RoadRunner
@@ -541,6 +565,12 @@ jobs:
541565
- name: Test connection-center
542566
if: ${{ env.test_prepared && always() }}
543567
run: composer test-connection-center-common
568+
- name: Test database
569+
if: ${{ env.test_prepared && always() }}
570+
run: composer test-database
571+
- name: Test model
572+
if: ${{ env.test_prepared && always() }}
573+
run: composer test-model
544574
- name: Print logs
545575
if: failure()
546576
run: php .github\print-logs.php

Diff for: .github/workflows/daily-test.yml

+6
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ jobs:
9898
- name: Test connection-center
9999
if: ${{ env.test_prepared && always() }}
100100
run: docker exec ${ENV_SERVICE} composer test-connection-center
101+
- name: Test database
102+
if: ${{ env.test_prepared && always() }}
103+
run: docker exec ${ENV_SERVICE} composer test-database
104+
- name: Test model
105+
if: ${{ env.test_prepared && always() }}
106+
run: docker exec ${ENV_SERVICE} composer test-model
101107
- name: Print logs
102108
if: failure()
103109
run: docker exec ${ENV_SERVICE} php .github/print-logs.php

Diff for: .github/workflows/phpstan.yml

+10
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,16 @@ jobs:
186186
run: |
187187
docker exec ${ENV_SERVICE} ./dev/phpstan.sh connection-center
188188
189+
- name: Analyse database
190+
if: ${{ env.test_prepared && always() }}
191+
run: |
192+
docker exec ${ENV_SERVICE} ./dev/phpstan.sh database
193+
194+
- name: Analyse model
195+
if: ${{ env.test_prepared && always() }}
196+
run: |
197+
docker exec ${ENV_SERVICE} ./dev/phpstan.sh model
198+
189199
- name: Save All composer.lock And autoloader-suffix
190200
if: ${{ env.test_prepared && always() }}
191201
run: |

Diff for: .github/workflows/rector.yml

+10
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,13 @@ jobs:
172172
if: ${{ env.test_prepared && always() }}
173173
run: |
174174
docker exec -w /imi/src/Components/connection-center ${ENV_SERVICE} /imi/vendor/bin/rector process --dry-run
175+
176+
- name: Analyse database
177+
if: ${{ env.test_prepared && always() }}
178+
run: |
179+
docker exec -w /imi/src/Components/database ${ENV_SERVICE} /imi/vendor/bin/rector process --dry-run
180+
181+
- name: Analyse model
182+
if: ${{ env.test_prepared && always() }}
183+
run: |
184+
docker exec -w /imi/src/Components/model ${ENV_SERVICE} /imi/vendor/bin/rector process --dry-run

Diff for: .php-cs-fixer.php

+3-4
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,8 @@
140140
->setFinder(
141141
PhpCsFixer\Finder::create()
142142
->in(__DIR__)
143-
->notPath('src/Components/grpc/example/grpc')
144-
->notPath('tests/unit/Component/Model/Base')
145-
->notPath('tests/unit/Component/Model/Base')
146-
->notPath('src/Components/pgsql/tests/Model/Base')
143+
->exclude('src/Components/grpc/example/grpc')
144+
->exclude('src/Components/model/tests/Model/Base')
145+
->exclude('src/Components/pgsql/tests/Model/Base')
147146
)
148147
;

Diff for: composer.json

+7-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@
5252
},
5353
"files": [
5454
"dev/bootstrap.php",
55-
"tests/helper.php"
55+
"tests/helper.php",
56+
"src/Components/model/vendor/autoload.php"
5657
]
5758
},
5859
"suggest": {
@@ -117,6 +118,8 @@
117118
"@composer test-connection-center-common",
118119
"@composer test-connection-center-swoole"
119120
],
121+
"test-database": "@php vendor/bin/phpunit -c src/Components/database/tests/phpunit.xml",
122+
"test-model": "@php vendor/bin/phpunit -c src/Components/model/tests/phpunit.xml",
120123
"test-components": [
121124
"@composer test-swoole",
122125
"@composer test-workerman",
@@ -132,7 +135,9 @@
132135
"@composer test-smarty",
133136
"@composer test-pgsql",
134137
"@composer test-phar",
135-
"@composer test-connection-center"
138+
"@composer test-connection-center",
139+
"@composer test-database",
140+
"@composer test-model"
136141
]
137142
},
138143
"extra": {

Diff for: dev/phpstan.sh

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ components=(
2626
"workerman"
2727
"workerman-gateway"
2828
"connection-center"
29+
"database"
30+
"model"
2931
)
3032

3133
analyze_component() {

Diff for: dev/rector.sh

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ components=(
2626
"workerman"
2727
"workerman-gateway"
2828
"connection-center"
29+
"database"
30+
"model"
2931
)
3032

3133
analyze_component() {

Diff for: dev/test-coverage-actions.sh

+2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ elif [[ $testType = "components" ]]; then
5858
"fpm"
5959
"jwt"
6060
"snowflake"
61+
"database"
62+
"model"
6163
)
6264

6365
test "workerman-gateway-workerman" "php $paramsXdebug vendor/bin/phpunit -c ./src/Components/workerman-gateway/tests/phpunit.xml --testsuite workerman --coverage-php=./dev/cover/workerman-gateway-coverage.php"

Diff for: dev/test-coverage.sh

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ phpUnitCommands=(
4040
"fpm"
4141
"jwt"
4242
"snowflake"
43+
"database"
44+
"model"
4345
)
4446

4547
swoolePhpUnitCommands=(

Diff for: doc/components/db/config.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ return [
6767
// 'timeout' => '建立连接超时时间',
6868
// 'charset' => '',
6969
// 使用 hook pdo 驱动(缺省默认)
70-
// 'dbClass' => 'PdoMysqlDriver',
70+
// 'dbClass' => 'PDOMysqlDriver',
7171
// 使用 hook mysqli 驱动
7272
// 'dbClass' => 'MysqliDriver',
7373
// 数据库连接后,执行初始化的 SQL
@@ -132,7 +132,7 @@ return [
132132
// 'timeout' => '建立连接超时时间',
133133
// 'charset' => '',
134134
// 使用 hook pdo 驱动(缺省默认)
135-
// 'dbClass' => 'PdoMysqlDriver',
135+
// 'dbClass' => 'PDOMysqlDriver',
136136
// 使用 hook mysqli 驱动
137137
// 'dbClass' => 'MysqliDriver',
138138
// 数据库连接后,执行初始化的 SQL
@@ -176,7 +176,7 @@ return [
176176
// 'timeout' => '建立连接超时时间',
177177
// 'charset' => '',
178178
// 使用 hook pdo 驱动(缺省默认)
179-
// 'dbClass' => 'PdoMysqlDriver',
179+
// 'dbClass' => 'PDOMysqlDriver',
180180
// 使用 hook mysqli 驱动
181181
// 'dbClass' => 'MysqliDriver',
182182
// 数据库连接后,执行初始化的 SQL

Diff for: doc/components/db/index.md

+47
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,53 @@
22

33
[toc]
44

5+
## 配置
6+
7+
使用连接中心进行配置。
8+
9+
`config/config.php`
10+
11+
```php
12+
[
13+
'connectionCenter' => [
14+
// 主数据库,maindb 是连接名称
15+
'maindb' => [
16+
// 连接管理器类名,Swoole 推荐用连接池
17+
'manager' => \Imi\ConnectionCenter\Handler\Pool\PoolConnectionManager::class,
18+
// 连接管理器类名,非 Swoole 推荐用连接上下文单例。更多连接管理器可前往连接中心文档查阅。
19+
// 'manager' => \Imi\ConnectionCenter\Handler\RequestContextSingleton\RequestContextSingletonConnectionManager::class,
20+
// 连接管理器配置
21+
'config' => [
22+
// 连接驱动类名,此处数据库固定写法
23+
'driver' => \Imi\Db\ConnectionCenter\DatabaseDriver::class,
24+
// 数据库驱动类,详见对应数据库的驱动类文档
25+
'dbDriver' => 'PDOMysqlDriver',
26+
// 连接配置
27+
'resources' => [
28+
[
29+
'host' => env('MYSQL_SERVER_HOST', '127.0.0.1'),
30+
'port' => env('MYSQL_SERVER_PORT', 3306),
31+
'username' => env('MYSQL_SERVER_USERNAME', 'root'),
32+
'password' => env('MYSQL_SERVER_PASSWORD', 'root'),
33+
'database' => 'db_imi_test',
34+
],
35+
],
36+
// 是否启用统计,启用后可能会有微量性能损耗
37+
'enableStatistics' => false,
38+
// 当前请求上下文资源检查状态间隔,单位:支持小数的秒。为 null/0 则每次都检查
39+
'requestResourceCheckInterval' => null,
40+
// 是否在获取资源时检查状态
41+
'checkStateWhenGetResource' => false,
42+
],
43+
],
44+
// 从数据库,连接名称+.slave,如不需要区分主从也可不配置
45+
'maindb.slave' => [
46+
// 结构同上
47+
],
48+
]
49+
]
50+
```
51+
552
## Db 驱动对象操作
653

754
用于直接执行 SQL

Diff for: doc/components/db/mysql.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@
44

55
## 驱动类
66

7-
### PdoMysqlDriver
7+
### PDOMysqlDriver
8+
9+
**类名:** `Imi\Db\Mysql\Drivers\PDOMysql\Driver`
810

911
基于 PDO 实现,支持所有环境,支持 Swoole 协程。
1012

1113
### MysqliDriver
1214

15+
**类名:** `Imi\Db\Mysql\Drivers\Mysqli\Driver`
16+
1317
基于 MySQLi 实现,支持所有环境,支持 Swoole 协程。

Diff for: doc/components/db/pgsql.md

+5-9
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,14 @@
66

77
## 驱动类
88

9-
### PdoPgsqlDriver
9+
### PDOPgsqlDriver
1010

11-
基于 PDO 实现,支持所有环境,不支持 Swoole 协程。
12-
13-
### SwooleNewPgsqlDriver
14-
15-
基于 [Swoole 协程 PostgreSQL 客户端](http://wiki.swoole.com/#/coroutine_client/postgresql) 实现
11+
**类名:** `Imi\Pgsql\Db\Drivers\PDOPgsql\Driver`
1612

17-
Swoole >= 5.0 可用
13+
基于 PDO 实现,支持所有环境,不支持 Swoole 协程。
1814

1915
### SwoolePgsqlDriver
2016

21-
基于 [Swoole 协程 PostgreSQL 客户端](https://github.com/swoole/ext-postgresql) 实现
17+
**类名:** `Imi\Pgsql\Db\Drivers\Swoole\Driver`
2218

23-
Swoole < 5.0 可用
19+
基于 [Swoole 协程 PostgreSQL 客户端](http://wiki.swoole.com/#/coroutine_client/postgresql) 实现

Diff for: doc/components/orm/migration.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,5 @@ vendor/bin/imi-swoole migration/命令 --poolName "连接池名"
118118
#### 指定连接参数
119119

120120
```shell
121-
vendor/bin/imi-swoole migration/命令 --driver "PdoMysqlDriver" --options "host=127.0.0.1&port=3306&username=root&password=root"
121+
vendor/bin/imi-swoole migration/命令 --driver "PDOMysqlDriver" --options "host=127.0.0.1&port=3306&username=root&password=root"
122122
```

Diff for: phpstan-components.neon

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ parameters:
3535
-
3636
message: '#^Call to an undefined method Swoole\\Coroutine\\#'
3737
reportUnmatched: false
38+
-
39+
message: '#should return .*static\(.+\).+but returns .+#'
40+
reportUnmatched: false
3841

3942
services:
4043
includes:

Diff for: phpstan.neon

-6
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ parameters:
4545
-
4646
message: '#Unsafe usage of new static\(\).+#'
4747
reportUnmatched: true
48-
-
49-
message: '#unknown class Imi\\Swoole\\Util\\Coroutine#'
50-
reportUnmatched: true
5148
-
5249
message: '#Constant IMI_PATH not found#'
5350
reportUnmatched: true
@@ -56,9 +53,6 @@ parameters:
5653
-
5754
message: '#Creating callable from a non-native method#'
5855
reportUnmatched: true
59-
-
60-
message: '#should return .*static\(.+\).+but returns .+#'
61-
reportUnmatched: true
6256
services:
6357
includes:
6458
- phpstan-baseline/baseline-core.neon

Diff for: split-repository/release.php

+6
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ function getBranch(): string
170170
'src/Components/connection-center' => [
171171
'[email protected]:imiphp/imi-connection-center',
172172
],
173+
'src/Components/database' => [
174+
'[email protected]:imiphp/imi-database',
175+
],
176+
'src/Components/model' => [
177+
'[email protected]:imiphp/imi-model',
178+
],
173179
];
174180

175181
setlocale(\LC_CTYPE, 'en_US.UTF-8');

0 commit comments

Comments
 (0)