Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Bug: [MariaDB] `phpunit` test errors

オープン
#7,929 コメント 13 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@jalexiscv がすでに取り組んでいます。

2026年5月18日 から。

  • #10208 @jalexiscv による — オープン

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
mariadb, mysql, php
領域
databases, testing

調査の方向性

まず、報告された MariaDB の設定で vendor/bin/phpunit を実行し、指摘された失敗箇所にあるテスト tests/system/Database/Live/ForgeTest.php, GetVersionTest.php, MetadataTest.php, UpsertTest.php, MySQLi/NumberNativeTest.php, UpdateTest.php を調べてください。設定された DBPrefix も含め、MariaDB と MySQL での失敗を比較してください。ハードコードされた期待値やバージョン固有の期待値を使わずに、影響を受けるライブデータベースのテストが通れば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug
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時間
マージ済み PR(30日)
59

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

codeigniter4/CodeIgniter4 のほかの issue

codeigniter4/CodeIgniter4 の issue をすべて見る

似ている issue

PHP の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。