/** * Test if callback query log callback is working properly. */ public function testQueryLogCallback() { $log = []; $this->connection->onLogQuery(function ($sql, $execution_time) use(&$log) { $log[] = ['sql' => $sql, 'exec_time' => $execution_time]; }); $this->connection->execute('SHOW TABLES LIKE ?', 'my_awesome_table_prefix_%'); $this->assertCount(1, $log); $this->assertNotEmpty($log[0]['exec_time']); $this->assertEquals("SHOW TABLES LIKE 'my_awesome_table_prefix_%'", $log[0]['sql']); }
/** * Set up test environment. */ public function setUp() { parent::setUp(); $this->connection = new Connection\MysqliConnection($this->link); if ($this->connection->tableExists('writers')) { $this->connection->dropTable('writers'); } $create_table = $this->connection->execute("CREATE TABLE `writers` (\n `id` int(11) NOT NULL AUTO_INCREMENT,\n `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',\n `birthday` date NOT NULL,\n PRIMARY KEY (`id`)\n ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"); $this->assertTrue($create_table); $this->connection->execute('INSERT INTO `writers` (`name`, `birthday`) VALUES (?, ?), (?, ?), (?, ?)', 'Leo Tolstoy', new DateTime('1828-09-09'), 'Alexander Pushkin', new DateTime('1799-06-06'), 'Fyodor Dostoyevsky', new DateTime('1821-11-11')); $this->container = new Container(['dependency' => 'it works!']); }
/** * Test if objects are properly created by value stored in a field. */ public function testExecuteLoadObjectFromField() { // --------------------------------------------------- // Add type field // --------------------------------------------------- $this->connection->execute('ALTER TABLE `writers` ADD `type` VARCHAR(255) NULL DEFAULT ? AFTER `id`;', '\\ActiveCollab\\DatabaseConnection\\Test\\Fixture\\Writer'); $this->assertEquals(['id' => 1, 'type' => '\\ActiveCollab\\DatabaseConnection\\Test\\Fixture\\Writer', 'name' => 'Leo Tolstoy', 'birthday' => '1828-09-09'], $this->connection->executeFirstRow('SELECT * FROM `writers` WHERE `id` = ?', 1)); // --------------------------------------------------- // Use type field to know which objects to create // --------------------------------------------------- $result = $this->connection->advancedExecute('SELECT * FROM `writers` ORDER BY `id`', null, ConnectionInterface::LOAD_ALL_ROWS, ConnectionInterface::RETURN_OBJECT_BY_FIELD, 'type'); $this->assertInstanceOf('\\ActiveCollab\\DatabaseConnection\\Result\\Result', $result); $this->assertCount(3, $result); /** @var \ActiveCollab\DatabaseConnection\Test\Fixture\Writer[] $writers */ $writers = []; foreach ($result as $row) { $writers[] = $row; } $this->assertCount(3, $writers); $this->assertInstanceOf('ActiveCollab\\DatabaseConnection\\Test\\Fixture\\Writer', $writers[0]); $this->assertEquals(1, $writers[0]->getId()); $this->assertEquals('Leo Tolstoy', $writers[0]->getName()); $this->assertEquals('1828-09-09', $writers[0]->getBirthday()->format('Y-m-d')); $this->assertInstanceOf('ActiveCollab\\DatabaseConnection\\Test\\Fixture\\Writer', $writers[1]); $this->assertEquals(2, $writers[1]->getId()); $this->assertEquals('Alexander Pushkin', $writers[1]->getName()); $this->assertEquals('1799-06-06', $writers[1]->getBirthday()->format('Y-m-d')); $this->assertInstanceOf('ActiveCollab\\DatabaseConnection\\Test\\Fixture\\Writer', $writers[2]); $this->assertEquals(3, $writers[2]->getId()); $this->assertEquals('Fyodor Dostoyevsky', $writers[2]->getName()); $this->assertEquals('1821-11-11', $writers[2]->getBirthday()->format('Y-m-d')); }
/** * Test error in transcation callback. */ public function testErrorInTransactionCallback() { $this->assertEquals(3, $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `writers`')); /** @var Exception $exception_caught */ $exception_caught = false; $this->connection->transact(function () { $this->connection->execute('INSERT INTO `writers` (`name`, `birthday`) VALUES (?, ?)', 'Anton Chekhov', new DateTime('1860-01-29')); throw new RuntimeException('Throwing an exception here'); }, null, function (Exception $e) use(&$exception_caught) { $exception_caught = $e; }); $this->assertInstanceOf('\\RuntimeException', $exception_caught); $this->assertEquals('Throwing an exception here', $exception_caught->getMessage()); $this->assertEquals(3, $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `writers`')); }
/** * Test execute. */ public function testExecuteWithCustomCaster() { $result = $this->connection->execute('SELECT * FROM `writers` ORDER BY `id`'); $this->assertInstanceOf('\\ActiveCollab\\DatabaseConnection\\Result\\Result', $result); $this->assertCount(3, $result); $caster = new ValueCaster(['id' => ValueCaster::CAST_STRING, 'birthday' => ValueCaster::CAST_DATE]); $this->assertEquals(ValueCaster::CAST_STRING, $caster->getTypeByFieldName('id')); $this->assertEquals(ValueCaster::CAST_DATE, $caster->getTypeByFieldName('birthday')); $result->setValueCaster($caster); $writers = []; foreach ($result as $row) { $writers[] = $row; } $this->assertCount(3, $writers); $this->assertSame('1', $writers[0]['id']); $this->assertSame('Leo Tolstoy', $writers[0]['name']); $this->assertSame('1828-09-09', $writers[0]['birthday']->format('Y-m-d')); $this->assertSame('2', $writers[1]['id']); $this->assertSame('Alexander Pushkin', $writers[1]['name']); $this->assertSame('1799-06-06', $writers[1]['birthday']->format('Y-m-d')); $this->assertSame('3', $writers[2]['id']); $this->assertSame('Fyodor Dostoyevsky', $writers[2]['name']); $this->assertSame('1821-11-11', $writers[2]['birthday']->format('Y-m-d')); }
/** * Test batch replace. */ public function testBatchReplace() { $this->connection->execute('ALTER TABLE `writers` ADD UNIQUE INDEX `name` (`name`);'); $batch_insert = $this->connection->batchInsert('writers', ['name', 'birthday'], 3); $batch_insert->insert('Leo Tolstoy', new DateTime('1828-09-09')); $batch_insert->insert('Alexander Pushkin', new DateTime('1799-06-06')); $batch_insert->insert('Fyodor Dostoyevsky', new DateTime('1821-11-11')); $batch_insert->done(); $this->assertEquals(3, $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `writers`')); $this->assertEquals(1, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Leo Tolstoy')); $this->assertEquals(2, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Alexander Pushkin')); $this->assertEquals(3, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Fyodor Dostoyevsky')); $batch_replace = $this->connection->batchInsert('writers', ['name', 'birthday'], 3, ConnectionInterface::REPLACE); $batch_replace->insert('Leo Tolstoy', new DateTime('1828-09-09')); $batch_replace->insert('Alexander Pushkin', new DateTime('1799-06-06')); $batch_replace->insert('Fyodor Dostoyevsky', new DateTime('1821-11-11')); $batch_replace->done(); $this->assertEquals(3, $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `writers`')); $this->assertEquals(4, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Leo Tolstoy')); $this->assertEquals(5, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Alexander Pushkin')); $this->assertEquals(6, $this->connection->executeFirstCell('SELECT `id` FROM `writers` WHERE `name` = ?', 'Fyodor Dostoyevsky')); }
/** * Test if last insert ID returns correct value. */ public function testInsertId() { $this->connection->execute('INSERT INTO `writers` (`name`, `birthday`) VALUES (?, ?)', 'Anton Chekhov', new DateTime('1860-01-29')); $this->assertEquals(4, $this->connection->lastInsertId()); }
/** * Tear down the test environment. */ public function tearDown() { $this->connection->execute('DROP TABLE IF EXISTS `writers`'); parent::tearDown(); }