diff --git a/system/Database/BaseBuilder.php b/system/Database/BaseBuilder.php index f38d52dc9750..0dc305825af8 100644 --- a/system/Database/BaseBuilder.php +++ b/system/Database/BaseBuilder.php @@ -2260,24 +2260,6 @@ protected function _insertBatch(string $table, array $keys, array $values): stri return str_replace('{:_table_:}', $data, $sql); } - /** - * Allows key/value pairs to be set for batch inserts - * - * @param mixed $key - * - * @return $this|null - * - * @deprecated - */ - public function setInsertBatch($key, string $value = '', ?bool $escape = null) - { - if (! is_array($key)) { - $key = [[$key => $value]]; - } - - return $this->setData($key, $escape); - } - /** * Compiles an insert query and returns the sql * @@ -2709,28 +2691,6 @@ protected function _updateBatch(string $table, array $keys, array $values): stri return str_replace('{:_table_:}', $data, $sql); } - /** - * Allows key/value pairs to be set for batch updating - * - * @param array|object $key - * - * @return $this - * - * @throws DatabaseException - * - * @deprecated - */ - public function setUpdateBatch($key, string $index = '', ?bool $escape = null) - { - if ($index !== '') { - $this->onConstraint($index); - } - - $this->setData($key, $escape); - - return $this; - } - /** * Compiles a delete string and runs "DELETE FROM table" * @@ -3550,18 +3510,6 @@ protected function setBind(string $key, $value = null, bool $escape = true): str return $key . '.' . $count; } - /** - * Returns a clone of a Base Builder with reset query builder values. - * - * @return $this - * - * @deprecated - */ - protected function cleanClone() - { - return (clone $this)->from([], true)->resetQuery(); - } - /** * @param mixed $value */ diff --git a/system/Database/BaseConnection.php b/system/Database/BaseConnection.php index ca1acd1d6be7..63ad5530b37c 100644 --- a/system/Database/BaseConnection.php +++ b/system/Database/BaseConnection.php @@ -193,17 +193,6 @@ abstract class BaseConnection implements ConnectionInterface */ protected $compress = false; - /** - * Strict ON flag - * - * Whether we're running in strict SQL mode. - * - * @var bool|null - * - * @deprecated 4.5.0 Will move to MySQLi\Connection. - */ - protected $strictOn; - /** * Settings for a failover connection. * diff --git a/system/Database/Forge.php b/system/Database/Forge.php index f6eb617fd389..f8a5ffa0a67e 100644 --- a/system/Database/Forge.php +++ b/system/Database/Forge.php @@ -108,15 +108,6 @@ class Forge */ protected $createTableStr = "%s %s (%s\n)"; - /** - * CREATE TABLE IF statement - * - * @var bool|string - * - * @deprecated This is no longer used. - */ - protected $createTableIfStr = 'CREATE TABLE IF NOT EXISTS'; - /** * CREATE TABLE keys flag * @@ -565,7 +556,7 @@ public function createTable(string $table, bool $ifNotExists = false, array $att return true; } - $sql = $this->_createTable($table, false, $attributes); + $sql = $this->_createTable($table, $attributes); if (($result = $this->db->query($sql)) !== false) { if (isset($this->db->dataCache['table_names']) && ! in_array($table, $this->db->dataCache['table_names'], true)) { @@ -586,13 +577,11 @@ public function createTable(string $table, bool $ifNotExists = false, array $att } /** - * @param array $attributes Table attributes + * @param array $attributes Table attributes * * @return string SQL string - * - * @deprecated $ifNotExists is no longer used, and will be removed. */ - protected function _createTable(string $table, bool $ifNotExists, array $attributes) + protected function _createTable(string $table, array $attributes) { $processedFields = $this->_processFields(true); diff --git a/system/Database/OCI8/Forge.php b/system/Database/OCI8/Forge.php index 8f71169115ce..8e046aa7d2be 100644 --- a/system/Database/OCI8/Forge.php +++ b/system/Database/OCI8/Forge.php @@ -34,15 +34,6 @@ class Forge extends BaseForge */ protected $createDatabaseStr = false; - /** - * CREATE TABLE IF statement - * - * @var false - * - * @deprecated This is no longer used. - */ - protected $createTableIfStr = false; - /** * DROP TABLE IF EXISTS statement * diff --git a/system/Database/SQLSRV/Connection.php b/system/Database/SQLSRV/Connection.php index 76dd80bdb09f..02f0c970f6bd 100644 --- a/system/Database/SQLSRV/Connection.php +++ b/system/Database/SQLSRV/Connection.php @@ -537,40 +537,6 @@ protected function execute(string $sql) return $stmt; } - /** - * Returns the last error encountered by this connection. - * - * @return array - * - * @deprecated Use `error()` instead. - */ - public function getError() - { - $error = [ - 'code' => '00000', - 'message' => '', - ]; - - $sqlsrvErrors = sqlsrv_errors(SQLSRV_ERR_ERRORS); - - if (! is_array($sqlsrvErrors)) { - return $error; - } - - $sqlsrvError = array_shift($sqlsrvErrors); - if (isset($sqlsrvError['SQLSTATE'])) { - $error['code'] = isset($sqlsrvError['code']) ? $sqlsrvError['SQLSTATE'] . '/' . $sqlsrvError['code'] : $sqlsrvError['SQLSTATE']; - } elseif (isset($sqlsrvError['code'])) { - $error['code'] = $sqlsrvError['code']; - } - - if (isset($sqlsrvError['message'])) { - $error['message'] = $sqlsrvError['message']; - } - - return $error; - } - /** * The name of the platform in use (MySQLi, mssql, etc) */ diff --git a/system/Database/SQLSRV/Forge.php b/system/Database/SQLSRV/Forge.php index b64c25a05100..ba7807931885 100644 --- a/system/Database/SQLSRV/Forge.php +++ b/system/Database/SQLSRV/Forge.php @@ -94,15 +94,6 @@ class Forge extends BaseForge */ protected $fkAllowActions = ['CASCADE', 'SET NULL', 'NO ACTION', 'RESTRICT', 'SET DEFAULT']; - /** - * CREATE TABLE IF statement - * - * @var string - * - * @deprecated This is no longer used. - */ - protected $createTableIfStr; - /** * CREATE TABLE statement * diff --git a/system/Database/Seeder.php b/system/Database/Seeder.php index 632008176031..9448ea53e154 100644 --- a/system/Database/Seeder.php +++ b/system/Database/Seeder.php @@ -16,8 +16,6 @@ use CodeIgniter\CLI\CLI; use CodeIgniter\Exceptions\InvalidArgumentException; use Config\Database; -use Faker\Factory; -use Faker\Generator; /** * Class Seeder @@ -66,13 +64,6 @@ class Seeder */ protected $silent = false; - /** - * Faker Generator instance. - * - * @deprecated - */ - private static ?Generator $faker = null; - /** * Seeder constructor. */ @@ -104,20 +95,6 @@ public function __construct(Database $config, ?BaseConnection $db = null) } } - /** - * Gets the Faker Generator instance. - * - * @deprecated - */ - public static function faker(): ?Generator - { - if (! self::$faker instanceof Generator && class_exists(Factory::class)) { - self::$faker = Factory::create(); - } - - return self::$faker; - } - /** * Loads the specified seeder and runs it. * diff --git a/tests/_support/Database/Seeds/CITestSeeder.php b/tests/_support/Database/Seeds/CITestSeeder.php index 09dba65f155b..4286c3753b90 100644 --- a/tests/_support/Database/Seeds/CITestSeeder.php +++ b/tests/_support/Database/Seeds/CITestSeeder.php @@ -19,7 +19,6 @@ class CITestSeeder extends Seeder { public function run(): void { - // Job Data $data = [ 'user' => [ [ @@ -147,7 +146,8 @@ public function run(): void ], ]; - // set SQL times to more correct format + // Normalize accepted formats and remove unsupported types per database driver + if ($this->db->DBDriver === 'SQLite3') { $data['type_test'][0]['type_date'] = '2020/01/11'; $data['type_test'][0]['type_time'] = '15:22:00'; @@ -157,7 +157,15 @@ public function run(): void if ($this->db->DBDriver === 'Postgre') { $data['type_test'][0]['type_time'] = '15:22:00'; - $data['type_test'][0]['type_boolean'] = true; + $data['type_test'][0]['type_boolean'] = true; // PostgreSQL has native boolean type + + $data['ci_sessions'][] = [ + 'id' => 'ci_session:1f5o06b43phsnnf8if6bo33b635e4p2o', + 'ip_address' => '127.0.0.1', + 'timestamp' => '2021-06-25 21:54:14.991403+02', + 'data' => '\x' . bin2hex('__ci_last_regenerate|i:1624650854;_ci_previous_url|s:40:\"http://localhost/index.php/home/index\";'), + ]; + unset( $data['type_test'][0]['type_enum'], $data['type_test'][0]['type_set'], @@ -185,6 +193,11 @@ public function run(): void } if ($this->db->DBDriver === 'MySQLi') { + $data['type_test'][0]['type_time'] = '15:22:00'; + $data['type_test'][0]['type_date'] = '2020-01-11'; + $data['type_test'][0]['type_datetime'] = '2020-06-18 05:12:24'; + $data['type_test'][0]['type_timestamp'] = '2019-07-18 21:53:21'; + $data['ci_sessions'][] = [ 'id' => 'ci_session:1f5o06b43phsnnf8if6bo33b635e4p2o', 'ip_address' => '127.0.0.1', @@ -193,29 +206,22 @@ public function run(): void ]; } - if ($this->db->DBDriver === 'Postgre') { - $data['ci_sessions'][] = [ - 'id' => 'ci_session:1f5o06b43phsnnf8if6bo33b635e4p2o', - 'ip_address' => '127.0.0.1', - 'timestamp' => '2021-06-25 21:54:14.991403+02', - 'data' => '\x' . bin2hex('__ci_last_regenerate|i:1624650854;_ci_previous_url|s:40:\"http://localhost/index.php/home/index\";'), - ]; - } - if ($this->db->DBDriver === 'OCI8') { $this->db->query('alter session set NLS_DATE_FORMAT=?', ['YYYY-MM-DD HH24:MI:SS']); + $data['type_test'][0]['type_date'] = '2020-01-11 22:11:00'; $data['type_test'][0]['type_time'] = '2020-07-18 15:22:00'; $data['type_test'][0]['type_datetime'] = '2020-06-18 05:12:24'; $data['type_test'][0]['type_timestamp'] = '2020-06-18 21:53:21'; + unset($data['type_test'][0]['type_blob']); } - foreach ($data as $table => $dummyData) { + foreach ($data as $table => $seeds) { $this->db->table($table)->truncate(); - foreach ($dummyData as $singleDummyData) { - $this->db->table($table)->insert($singleDummyData); + foreach ($seeds as $seed) { + $this->db->table($table)->insert($seed); } } } diff --git a/tests/system/Database/BaseConnectionTest.php b/tests/system/Database/BaseConnectionTest.php index ae4963d33885..db58795c326e 100644 --- a/tests/system/Database/BaseConnectionTest.php +++ b/tests/system/Database/BaseConnectionTest.php @@ -84,7 +84,6 @@ public function testSavesConfigOptions(): void $this->assertSame('', $db->swapPre); $this->assertFalse($db->encrypt); $this->assertFalse($db->compress); - $this->assertTrue($db->strictOn); $this->assertSame([], $db->failover); $this->assertSame([ 'date' => 'Y-m-d', diff --git a/tests/system/Database/Builder/UpdateTest.php b/tests/system/Database/Builder/UpdateTest.php index eb1cfc7d9c92..88a92777cec2 100644 --- a/tests/system/Database/Builder/UpdateTest.php +++ b/tests/system/Database/Builder/UpdateTest.php @@ -253,9 +253,7 @@ public function testUpdateBatch(): void public function testSetUpdateBatchWithoutEscape(): void { $builder = new BaseBuilder('jobs', $this->db); - $escape = false; - - $builder->setUpdateBatch([ + $builder->setData([ [ 'id' => 2, 'name' => 'SUBSTRING(name, 1)', @@ -266,7 +264,7 @@ public function testSetUpdateBatchWithoutEscape(): void 'name' => 'SUBSTRING(name, 2)', 'description' => 'SUBSTRING(description, 4)', ], - ], 'id', $escape); + ], false); $this->db->shouldReturn('execute', new class () {}); $builder->updateBatch(null, 'id'); diff --git a/tests/system/Database/ConfigTest.php b/tests/system/Database/ConfigTest.php index 1d2482e0ad87..35fe15b8cd74 100644 --- a/tests/system/Database/ConfigTest.php +++ b/tests/system/Database/ConfigTest.php @@ -143,7 +143,6 @@ public function testConnectionGroupWithDSN(): void $this->assertTrue($this->getPrivateProperty($conn, 'pConnect')); $this->assertSame('latin1', $this->getPrivateProperty($conn, 'charset')); $this->assertSame('latin1_swedish_ci', $this->getPrivateProperty($conn, 'DBCollat')); - $this->assertTrue($this->getPrivateProperty($conn, 'strictOn')); $this->assertSame([], $this->getPrivateProperty($conn, 'failover')); } @@ -163,7 +162,6 @@ public function testConnectionGroupWithDSNPostgre(): void $this->assertFalse($this->getPrivateProperty($conn, 'pConnect')); $this->assertSame('utf8mb4', $this->getPrivateProperty($conn, 'charset')); $this->assertSame('utf8mb4_general_ci', $this->getPrivateProperty($conn, 'DBCollat')); - $this->assertTrue($this->getPrivateProperty($conn, 'strictOn')); $this->assertSame([], $this->getPrivateProperty($conn, 'failover')); $this->assertSame('5', $this->getPrivateProperty($conn, 'connect_timeout')); $this->assertSame('1', $this->getPrivateProperty($conn, 'sslmode')); @@ -191,7 +189,6 @@ public function testConnectionGroupWithDSNPostgreNative(): void $this->assertFalse($this->getPrivateProperty($conn, 'pConnect')); $this->assertSame('utf8mb4', $this->getPrivateProperty($conn, 'charset')); $this->assertSame('utf8mb4_general_ci', $this->getPrivateProperty($conn, 'DBCollat')); - $this->assertTrue($this->getPrivateProperty($conn, 'strictOn')); $this->assertSame([], $this->getPrivateProperty($conn, 'failover')); } diff --git a/tests/system/Database/DatabaseSeederTest.php b/tests/system/Database/DatabaseSeederTest.php index e00599e26507..a34f19eda88d 100644 --- a/tests/system/Database/DatabaseSeederTest.php +++ b/tests/system/Database/DatabaseSeederTest.php @@ -15,7 +15,6 @@ use CodeIgniter\Test\CIUnitTestCase; use Config\Database; -use Faker\Generator; use PHPUnit\Framework\Attributes\Group; use Tests\Support\Database\Seeds\SeederWithDBGroup; use Tests\Support\Database\Seeds\SeederWithoutDBGroup; @@ -52,14 +51,6 @@ public function testInstantiateNotDirSeedPath(): void new Seeder($config); } - /** - * @TODO remove this when Seeder::faker() is removed - */ - public function testFakerGet(): void - { - $this->assertInstanceOf(Generator::class, Seeder::faker()); - } - public function testCallOnEmptySeeder(): void { $this->expectException('InvalidArgumentException'); diff --git a/tests/system/Database/Live/ForgeTest.php b/tests/system/Database/Live/ForgeTest.php index 9faf9d79afb7..62594581dd0d 100644 --- a/tests/system/Database/Live/ForgeTest.php +++ b/tests/system/Database/Live/ForgeTest.php @@ -373,7 +373,7 @@ public function testCreateTableWithNullableFieldsGivesNullDataType(): void $createTable = self::getPrivateMethodInvoker($this->forge, '_createTable'); - $sql = $createTable('forge_nullable_table', false, []); + $sql = $createTable('forge_nullable_table', []); if ($this->db->DBDriver !== 'SQLSRV') { // @see https://regex101.com/r/bIHVNw/1 @@ -1621,6 +1621,10 @@ public function testAddTextColumnWithConstraint(): void $this->forge->addColumn('user', [ 'text_with_constraint' => ['type' => 'nvarchar(max)', 'default' => ''], ]); + } elseif (in_array($this->db->DBDriver, ['MySQLi', 'Postgre', 'SQLite3'], true)) { + $this->forge->addColumn('user', [ + 'text_with_constraint' => ['type' => 'text'], + ]); } else { $this->forge->addColumn('user', [ 'text_with_constraint' => ['type' => 'text', 'constraint' => 255, 'default' => ''], diff --git a/tests/system/Database/Live/MySQLi/RawSqlTest.php b/tests/system/Database/Live/MySQLi/RawSqlTest.php index 03c694d0ab47..9f3f9d3d44a1 100644 --- a/tests/system/Database/Live/MySQLi/RawSqlTest.php +++ b/tests/system/Database/Live/MySQLi/RawSqlTest.php @@ -17,7 +17,6 @@ use CodeIgniter\Test\CIUnitTestCase; use CodeIgniter\Test\DatabaseTestTrait; use PHPUnit\Framework\Attributes\Group; -use stdClass; use Tests\Support\Database\Seeds\CITestSeeder; /** @@ -45,161 +44,113 @@ protected function setUp(): void protected function addSqlFunction(): void { $this->db->query('DROP FUNCTION IF EXISTS setDateTime'); - - $sql = "CREATE FUNCTION setDateTime ( setDate varchar(20) ) - RETURNS DATETIME - READS SQL DATA - DETERMINISTIC - BEGIN - RETURN CONVERT(CONCAT(setDate,' ','01:01:11'), DATETIME); - END;"; - - $this->db->query($sql); + $this->db->query(<<<'SQL_WRAP' + CREATE FUNCTION setDateTime ( setDate varchar(20) ) + RETURNS DATETIME + READS SQL DATA + DETERMINISTIC + BEGIN + RETURN CONVERT(CONCAT(setDate,' ','01:01:11'), DATETIME); + END; + SQL_WRAP); } public function testRawSqlUpdateObject(): void { - $data = []; - - $row = new stdClass(); - $row->email = 'derek@world.com'; - $row->created_at = new RawSql("setDateTime('2022-01-01')"); - $data[] = $row; - - $row = new stdClass(); - $row->email = 'ahmadinejad@world.com'; - $row->created_at = new RawSql("setDateTime('2022-01-01')"); - $data[] = $row; - - $this->db->table('user')->updateBatch($data, 'email'); - - $row->created_at = new RawSql("setDateTime('2022-01-11')"); - - $this->db->table('user')->update($row, "email = 'ahmadinejad@world.com'"); + $this->db->table('user')->updateBatch([ + (object) [ + 'email' => 'derek@world.com', + 'created_at' => new RawSql("setDateTime('2022-01-01')"), + ], + (object) [ + 'email' => 'ahmadinejad@world.com', + 'created_at' => new RawSql("setDateTime('2022-01-01')"), + ], + ], 'email'); + $this->db->table('user')->update( + (object) ['created_at' => new RawSql("setDateTime('2022-01-11')")], + "email = 'ahmadinejad@world.com'", + ); $this->seeInDatabase('user', ['email' => 'derek@world.com', 'created_at' => '2022-01-01 01:01:11']); $this->seeInDatabase('user', ['email' => 'ahmadinejad@world.com', 'created_at' => '2022-01-11 01:01:11']); } - public function testRawSqlSetUpdateObject(): void - { - $data = []; - - $row = new stdClass(); - $row->email = 'derek@world.com'; - $row->created_at = new RawSql("setDateTime('2022-02-01')"); - $data[] = $row; - - $row = new stdClass(); - $row->email = 'ahmadinejad@world.com'; - $row->created_at = new RawSql("setDateTime('2022-02-01')"); - $data[] = $row; - - $this->db->table('user')->setUpdateBatch($data, 'email')->updateBatch(null, 'email'); - - $row->created_at = new RawSql("setDateTime('2022-02-11')"); - - $this->db->table('user')->set($row)->update(null, "email = 'ahmadinejad@world.com'"); - - $this->seeInDatabase('user', ['email' => 'derek@world.com', 'created_at' => '2022-02-01 01:01:11']); - $this->seeInDatabase('user', ['email' => 'ahmadinejad@world.com', 'created_at' => '2022-02-11 01:01:11']); - } - public function testRawSqlUpdateArray(): void { - $data = [ - ['email' => 'derek@world.com', 'created_at' => new RawSql("setDateTime('2022-03-01')")], - ['email' => 'ahmadinejad@world.com', 'created_at' => new RawSql("setDateTime('2022-03-01')")], - ]; - - $this->db->table('user')->updateBatch($data, 'email'); - + $this->db->table('user')->updateBatch([ + [ + 'email' => 'derek@world.com', + 'created_at' => new RawSql("setDateTime('2022-03-01')"), + ], + [ + 'email' => 'ahmadinejad@world.com', + 'created_at' => new RawSql("setDateTime('2022-03-01')"), + ], + ], 'email'); $this->seeInDatabase('user', ['email' => 'derek@world.com', 'created_at' => '2022-03-01 01:01:11']); $this->seeInDatabase('user', ['email' => 'ahmadinejad@world.com', 'created_at' => '2022-03-01 01:01:11']); - $data = ['email' => 'ahmadinejad@world.com', 'created_at' => new RawSql("setDateTime('2022-03-11')")]; - - $this->db->table('user')->update($data, "email = 'ahmadinejad@world.com'"); - + $this->db->table('user')->update( + ['email' => 'ahmadinejad@world.com', 'created_at' => new RawSql("setDateTime('2022-03-11')")], + "email = 'ahmadinejad@world.com'", + ); $this->seeInDatabase('user', ['email' => 'ahmadinejad@world.com', 'created_at' => '2022-03-11 01:01:11']); } public function testRawSqlInsertArray(): void { - $data = [ - ['email' => 'pedro@world.com', 'created_at' => new RawSql("setDateTime('2022-04-01')")], - ['email' => 'todd@world.com', 'created_at' => new RawSql("setDateTime('2022-04-01')")], - ]; - - $this->db->table('user')->insertBatch($data); - + $this->db->table('user')->insertBatch([ + [ + 'name' => 'Pedro Pascal', + 'email' => 'pedro@world.com', + 'country' => 'Chile', + 'created_at' => new RawSql("setDateTime('2022-04-01')"), + ], + [ + 'name' => 'Todd Howard', + 'email' => 'todd@world.com', + 'country' => 'USA', + 'created_at' => new RawSql("setDateTime('2022-04-01')"), + ], + ]); $this->seeInDatabase('user', ['email' => 'pedro@world.com', 'created_at' => '2022-04-01 01:01:11']); $this->seeInDatabase('user', ['email' => 'todd@world.com', 'created_at' => '2022-04-01 01:01:11']); - $data = ['email' => 'jason@world.com', 'created_at' => new RawSql("setDateTime('2022-04-11')")]; - - $this->db->table('user')->insert($data); - + $this->db->table('user')->insert([ + 'name' => 'Jason Momoa', + 'email' => 'jason@world.com', + 'country' => 'USA', + 'created_at' => new RawSql("setDateTime('2022-04-11')"), + ]); $this->seeInDatabase('user', ['email' => 'jason@world.com', 'created_at' => '2022-04-11 01:01:11']); } public function testRawSqlInsertObject(): void { - $data = []; - - $row = new stdClass(); - $row->email = 'tony@world.com'; - $row->created_at = new RawSql("setDateTime('2022-05-01')"); - $data[] = $row; - - $row = new stdClass(); - $row->email = 'sara@world.com'; - $row->created_at = new RawSql("setDateTime('2022-05-01')"); - $data[] = $row; - - $this->db->table('user')->insertBatch($data); - - $row->email = 'jessica@world.com'; - $row->created_at = new RawSql("setDateTime('2022-05-11')"); - - $this->db->table('user')->insert($row); + $this->db->table('user')->insertBatch([ + (object) [ + 'name' => 'Tony Stark', + 'email' => 'tony@world.com', + 'country' => 'USA', + 'created_at' => new RawSql("setDateTime('2022-05-01')"), + ], + (object) [ + 'name' => 'Sara Connor', + 'email' => 'sara@world.com', + 'country' => 'USA', + 'created_at' => new RawSql("setDateTime('2022-05-01')"), + ], + ]); + $this->db->table('user')->insert((object) [ + 'name' => 'Jessica Jones', + 'email' => 'jessica@world.com', + 'country' => 'USA', + 'created_at' => new RawSql("setDateTime('2022-05-11')"), + ]); $this->seeInDatabase('user', ['email' => 'tony@world.com', 'created_at' => '2022-05-01 01:01:11']); $this->seeInDatabase('user', ['email' => 'sara@world.com', 'created_at' => '2022-05-01 01:01:11']); $this->seeInDatabase('user', ['email' => 'jessica@world.com', 'created_at' => '2022-05-11 01:01:11']); } - - public function testRawSqlSetInsertObject(): void - { - $data = []; - - $row = new stdClass(); - $row->email = 'laura@world.com'; - $row->created_at = new RawSql("setDateTime('2022-06-01')"); - $data[] = $row; - - $row = new stdClass(); - $row->email = 'travis@world.com'; - $row->created_at = new RawSql("setDateTime('2022-06-01')"); - $data[] = $row; - - $this->db->table('user')->setInsertBatch($data)->insertBatch(); - - $this->seeInDatabase('user', ['email' => 'laura@world.com', 'created_at' => '2022-06-01 01:01:11']); - $this->seeInDatabase('user', ['email' => 'travis@world.com', 'created_at' => '2022-06-01 01:01:11']); - - $row->email = 'steve@world.com'; - $row->created_at = new RawSql("setDateTime('2022-06-11')"); - - $this->db->table('user')->set($row)->insert(); - - $this->seeInDatabase('user', ['email' => 'steve@world.com', 'created_at' => '2022-06-11 01:01:11']); - - $this->db->table('user') - ->set('email', 'dan@world.com') - ->set('created_at', new RawSql("setDateTime('2022-06-13')")) - ->insert(); - - $this->seeInDatabase('user', ['email' => 'dan@world.com', 'created_at' => '2022-06-13 01:01:11']); - } } diff --git a/user_guide_src/source/changelogs/v4.8.0.rst b/user_guide_src/source/changelogs/v4.8.0.rst index fb4a4df1a5c3..d4b854cd42d4 100644 --- a/user_guide_src/source/changelogs/v4.8.0.rst +++ b/user_guide_src/source/changelogs/v4.8.0.rst @@ -46,6 +46,8 @@ Method Signature Changes - ``CodeIgniter\CodeIgniter::gatherOutput()`` no longer accepts the deprecated ``$cacheConfig`` parameter. As this is the first parameter, custom uses of this method will need to be updated to remove the parameter. - **Config:** ``CodeIgniter\Config\Services::request()`` no longer accepts any parameter. +- **Database:** The following methods have had their signatures updated to remove deprecated parameters: + - ``CodeIgniter\Database\Forge::_createTable()`` no longer accepts the deprecated ``$ifNotExists`` parameter. The method signature is now ``_createTable(string $table, array $attributes)``. Removed Deprecated Items ======================== @@ -82,6 +84,17 @@ Removed Deprecated Items - ``CodeIgniter\Test\MockCodeIgniter::callExit()`` - **Config:** Removed the following property deprecated: - ``CodeIgniter\Config\BaseService::$services`` (deprecated since v4.5.0) +- **Database:** Removed the following properties and methods deprecated: + - ``CodeIgniter\Database\BaseBuilder::setInsertBatch()`` + - ``CodeIgniter\Database\BaseBuilder::setUpdateBatch()`` + - ``CodeIgniter\Database\BaseBuilder::cleanClone()`` + - ``CodeIgniter\Database\BaseConnection::$strictOn`` + - ``CodeIgniter\Database\Forge::$createTableIfStr`` + - ``CodeIgniter\Database\Seeder::$faker`` + - ``CodeIgniter\Database\Seeder::faker()`` + - ``CodeIgniter\Database\OCI8\Forge::$createTableIfStr`` + - ``CodeIgniter\Database\OCI8\Forge::getError()`` + - ``CodeIgniter\Database\SQLSRV\Forge::$createTableIfStr`` - **Debug:** Removed the following properties and methods deprecated since v4.4.0: - ``CodeIgniter\Debug\Exceptions::$ob_level`` - ``CodeIgniter\Debug\Exceptions::$viewPath`` diff --git a/utils/phpstan-baseline/loader.neon b/utils/phpstan-baseline/loader.neon index 9aafab3d4e1f..fa6b7bec119e 100644 --- a/utils/phpstan-baseline/loader.neon +++ b/utils/phpstan-baseline/loader.neon @@ -1,4 +1,4 @@ -# total 2115 errors +# total 2111 errors includes: - argument.type.neon diff --git a/utils/phpstan-baseline/missingType.iterableValue.neon b/utils/phpstan-baseline/missingType.iterableValue.neon index a584450fc456..fe5e1e78d99f 100644 --- a/utils/phpstan-baseline/missingType.iterableValue.neon +++ b/utils/phpstan-baseline/missingType.iterableValue.neon @@ -1,4 +1,4 @@ -# total 1258 errors +# total 1256 errors parameters: ignoreErrors: @@ -627,11 +627,6 @@ parameters: count: 1 path: ../../system/Database/BaseBuilder.php - - - message: '#^Method CodeIgniter\\Database\\BaseBuilder\:\:setUpdateBatch\(\) has parameter \$key with no value type specified in iterable type array\.$#' - count: 1 - path: ../../system/Database/BaseBuilder.php - - message: '#^Method CodeIgniter\\Database\\BaseBuilder\:\:set\(\) has parameter \$key with no value type specified in iterable type array\.$#' count: 1 @@ -1132,11 +1127,6 @@ parameters: count: 1 path: ../../system/Database/Forge.php - - - message: '#^Method CodeIgniter\\Database\\Forge\:\:_createTable\(\) has parameter \$attributes with no value type specified in iterable type array\.$#' - count: 1 - path: ../../system/Database/Forge.php - - message: '#^Method CodeIgniter\\Database\\Forge\:\:_processColumn\(\) has parameter \$processedField with no value type specified in iterable type array\.$#' count: 1 diff --git a/utils/phpstan-baseline/property.phpDocType.neon b/utils/phpstan-baseline/property.phpDocType.neon index 0ba558aded06..999bb47ea489 100644 --- a/utils/phpstan-baseline/property.phpDocType.neon +++ b/utils/phpstan-baseline/property.phpDocType.neon @@ -1,4 +1,4 @@ -# total 44 errors +# total 42 errors parameters: ignoreErrors: @@ -37,11 +37,6 @@ parameters: count: 1 path: ../../system/Database/OCI8/Forge.php - - - message: '#^PHPDoc type false of property CodeIgniter\\Database\\OCI8\\Forge\:\:\$createTableIfStr is not the same as PHPDoc type bool\|string of overridden property CodeIgniter\\Database\\Forge\:\:\$createTableIfStr\.$#' - count: 1 - path: ../../system/Database/OCI8/Forge.php - - message: '#^PHPDoc type false of property CodeIgniter\\Database\\OCI8\\Forge\:\:\$dropDatabaseStr is not the same as PHPDoc type string\|false of overridden property CodeIgniter\\Database\\Forge\:\:\$dropDatabaseStr\.$#' count: 1 @@ -102,11 +97,6 @@ parameters: count: 1 path: ../../system/Database/SQLSRV/Forge.php - - - message: '#^PHPDoc type string of property CodeIgniter\\Database\\SQLSRV\\Forge\:\:\$createTableIfStr is not the same as PHPDoc type bool\|string of overridden property CodeIgniter\\Database\\Forge\:\:\$createTableIfStr\.$#' - count: 1 - path: ../../system/Database/SQLSRV/Forge.php - - message: '#^PHPDoc type string of property CodeIgniter\\Database\\SQLSRV\\Forge\:\:\$renameTableStr is not the same as PHPDoc type string\|false of overridden property CodeIgniter\\Database\\Forge\:\:\$renameTableStr\.$#' count: 1