Bug: [MariaDB] `phpunit` test errors
维护者通常 1 天内回复
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
调研方向
首先使用报告中的 MariaDB 配置运行 vendor/bin/phpunit,并检查所指出失败处的测试 tests/system/Database/Live/ForgeTest.php、GetVersionTest.php、MetadataTest.php、UpsertTest.php、MySQLi/NumberNativeTest.php 和 UpdateTest.php。比较 MariaDB 和 MySQL 上的失败情况,包括已配置的 DBPrefix;完成的标准是受影响的实时数据库测试通过,且没有硬编码或特定于版本的预期。
由索引模型根据 Issue 内容生成。
描述
PHP Version
8.2
CodeIgniter4 Version
4.4.1
CodeIgniter4 Installation Method
Git
Which operating systems have you tested for this bug?
Linux
Which server did you use?
cli-server (PHP built-in webserver)
Database
10.11.4-MariaDB-1
What happened?
:~/www/codeigniter$ vendor/bin/phpunit
There were 2 failures:
Error №1 (DB is configured in .env )
1) CodeIgniter\Database\Live\ForgeTest::testAddFields
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
0 => Array &1 (
'name' => 'id'
'type' => 'int'
- 'max_length' => null
+ 'max_length' => 11
'nullable' => false
'default' => null
'primary_key' => 1
@@ @@
3 => Array &4 (
'name' => 'active'
'type' => 'int'
- 'max_length' => null
+ 'max_length' => 11
'nullable' => false
'default' => '0'
'primary_key' => 0
)
)
/www/codeigniter/tests/system/Database/Live/ForgeTest.php:1087
Now mysql (8.1.0) and mariadb (10.11.4-MariaDB-1 ) are compatible databases, but they have different versions.
Connection return version as 10.11.4-MariaDB-1:
https://github.com/codeigniter4/CodeIgniter4/blob/f35f956d083eb3872b52af0f578a1a14ba6a471f/tests/system/Database/Live/ForgeTest.php#L944-L950
Maybe you need to rewrite to $this->mysqli->server_version (101104)? This is BC.
Or rewrite the test for different versions of mysql and mariadb.
I commented out the condition and the test is successful.
Error №2 (DB is configured in .env )
2) CodeIgniter\Database\Live\GetVersionTest::testGetVersion
Failed asserting that '10.11.4-MariaDB-1' matches PCRE pattern "/\A\d+(\.\d+)*\z/".
/www/codeigniter/tests/system/Database/Live/GetVersionTest.php:32
The problem is in the versions for mariadb. Related to the first error.
Error №3 (DB is not configured in .env)
The third failure relates to the prefix: Some tests are built on the db_ prefix, others correctly add $prefix. $tableName
Tests are performed only when ENV: database.tests.DBPrefix = db_
It is necessary to replace the hard-coded table names.
phpunit log
There were 3 errors:
1) CodeIgniter\Database\Live\MySQLi\NumberNativeTest::testQueryDataAfterEnableNumberNative
CodeIgniter\Database\Exceptions\DatabaseException: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/BaseConnection.php:647
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:78
Caused by
CodeIgniter\Database\Exceptions\DatabaseException: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/MySQLi/Connection.php:311
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:78
Caused by
mysqli_sql_exception: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/MySQLi/Connection.php:306
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:78
2) CodeIgniter\Database\Live\MySQLi\NumberNativeTest::testQueryDataAfterDisableNumberNative
CodeIgniter\Database\Exceptions\DatabaseException: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/BaseConnection.php:647
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:96
Caused by
CodeIgniter\Database\Exceptions\DatabaseException: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/MySQLi/Connection.php:311
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:96
Caused by
mysqli_sql_exception: Table 'ci4_test.db_type_test' doesn't exist
/www/codeigniter/system/Database/MySQLi/Connection.php:306
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1615
/www/codeigniter/tests/system/Database/Live/MySQLi/NumberNativeTest.php:96
3) CodeIgniter\Database\Live\UpdateTest::testUpdateBatchUpdateFieldsAndAlias
CodeIgniter\Database\Exceptions\DatabaseException: Unknown column 'db_user.country' in 'on clause'
/www/codeigniter/system/Database/BaseConnection.php:647
/www/codeigniter/system/Database/BaseBuilder.php:1800
/www/codeigniter/system/Database/BaseBuilder.php:2561
/www/codeigniter/tests/system/Database/Live/UpdateTest.php:405
Caused by
CodeIgniter\Database\Exceptions\DatabaseException: Unknown column 'db_user.country' in 'on clause'
/www/codeigniter/system/Database/MySQLi/Connection.php:311
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1800
/www/codeigniter/system/Database/BaseBuilder.php:2561
/www/codeigniter/tests/system/Database/Live/UpdateTest.php:405
Caused by
mysqli_sql_exception: Unknown column 'db_user.country' in 'on clause'
/www/codeigniter/system/Database/MySQLi/Connection.php:306
/www/codeigniter/system/Database/BaseConnection.php:693
/www/codeigniter/system/Database/BaseConnection.php:607
/www/codeigniter/system/Database/BaseBuilder.php:1800
/www/codeigniter/system/Database/BaseBuilder.php:2561
/www/codeigniter/tests/system/Database/Live/UpdateTest.php:405
--
There were 7 failures:
1) CodeIgniter\Database\Live\ForgeTest::testCreateTableWithExists
Failed asserting that false is true.
/www/codeigniter/tests/system/Database/Live/ForgeTest.php:176
2) CodeIgniter\Database\Live\ForgeTest::testAddFields
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
0 => Array &1 (
'name' => 'id'
'type' => 'int'
- 'max_length' => null
+ 'max_length' => 11
'nullable' => false
'default' => null
'primary_key' => 1
@@ @@
3 => Array &4 (
'name' => 'active'
'type' => 'int'
- 'max_length' => null
+ 'max_length' => 11
'nullable' => false
'default' => '0'
'primary_key' => 0
)
)
/www/codeigniter/tests/system/Database/Live/ForgeTest.php:1087
3) CodeIgniter\Database\Live\GetVersionTest::testGetVersion
Failed asserting that '10.11.4-MariaDB-1' matches PCRE pattern "/\A\d+(\.\d+)*\z/".
/www/codeigniter/tests/system/Database/Live/GetVersionTest.php:32
4) CodeIgniter\Database\Live\MetadataTest::testListTablesUnconstrainedByPrefixReturnsAllTables
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
5 => 'misc'
6 => 'secondary'
7 => 'stringifypkey'
- 8 => 'type_test'
- 9 => 'user'
- 10 => 'without_auto_increment'
- 11 => 'tmp_widgets'
+ 8 => 'test_exists'
+ 9 => 'tmp_widgets'
+ 10 => 'type_test'
+ 11 => 'user'
+ 12 => 'without_auto_increment'
)
/www/codeigniter/tests/system/Database/Live/MetadataTest.php:102
5) CodeIgniter\Database\Live\MetadataTest::testListTablesConstrainedByPrefixReturnsOnlyTablesWithMatchingPrefix
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
5 => 'misc'
6 => 'secondary'
7 => 'stringifypkey'
- 8 => 'type_test'
- 9 => 'user'
- 10 => 'without_auto_increment'
+ 8 => 'test_exists'
+ 9 => 'tmp_widgets'
+ 10 => 'type_test'
+ 11 => 'user'
+ 12 => 'without_auto_increment'
)
/www/codeigniter/tests/system/Database/Live/MetadataTest.php:118
6) CodeIgniter\Database\Live\UpsertTest::testGetCompiledUpsert
Failed asserting that two strings are identical.
--- Expected
+++ Actual
@@ @@
-'INSERT INTO `db_user` (`country`, `email`, `name`)
+'INSERT INTO `user` (`country`, `email`, `name`)
VALUES ('Iran','[email protected]','Ahmadinejad')
ON DUPLICATE KEY UPDATE
-`db_user`.`country` = VALUES(`country`),
-`db_user`.`email` = VALUES(`email`),
-`db_user`.`name` = VALUES(`name`)'
+`user`.`country` = VALUES(`country`),
+`user`.`email` = VALUES(`email`),
+`user`.`name` = VALUES(`name`)'
/www/codeigniter/tests/system/Database/Live/UpsertTest.php:244
7) CodeIgniter\Database\Live\UpsertTest::testGetCompiledUpsertBatch
Failed asserting that 'INSERT INTO `user` (`country`, `email`, `name`)\n
VALUES ('Iran','[email protected]','Ahmadinejad'), ('El Salvador','[email protected]','Pedro')\n
ON DUPLICATE KEY UPDATE\n
`user`.`country` = VALUES(`country`),\n
`user`.`email` = VALUES(`email`),\n
`user`.`name` = VALUES(`name`)' contains "INSERT INTO `db_user` (`country`, `email`, `name`)".
/www/codeigniter/tests/system/Database/Live/UpsertTest.php:282
- 主要语言
- PHP
- 星标
- 6k
- 派生
- 2k
- 平均合并
- 1 天 22 小时
- 30 天内合并 PR
- 59
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
codeigniter4/CodeIgniter4 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
codeigniter4/CodeIgniter4#10616 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 35/100
codeigniter4/CodeIgniter4#10618 ·
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 62/100
codeigniter4/CodeIgniter4#10617 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 25/100
codeigniter4/CodeIgniter4#10615 · 1 条评论 ·
维护者通常 1 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 48/100
codeigniter4/CodeIgniter4#10589 · 3 条评论 ·
维护者通常 1 天内回复
查看 codeigniter4/CodeIgniter4 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 1 天内回复
-
sync-en
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
sync-en
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 4 天内回复
-
Перевод устарел
难度 2/5 1-3 小时 新手友好度 66/100
-
Adapter: Algolia Performance
难度 2/5 1-3 小时 新手友好度 62/100