1
1
Fork 0
mirror of https://code.mensbeam.com/MensBeam/Arsse.git synced 2024-12-23 09:02:41 +00:00
Arsse/tests/cases/Db/MySQL/TestDriver.php
J. King 5d61ab0a57 Fixes for MySQL native interface
Three test failures remain, but these are minor and will be resolved
soon. Handling of binary data is also broken, but given that this works
fine with the PDO driver, there is presumably some correct method.
2019-01-13 23:17:19 -05:00

50 lines
1.5 KiB
PHP

<?php
/** @license MIT
* Copyright 2017 J. King, Dustin Wilson et al.
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace JKingWeb\Arsse\TestCase\Db\MySQL;
/**
* @group slow
* @covers \JKingWeb\Arsse\Db\MySQL\Driver<extended> */
class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
use \JKingWeb\Arsse\TestCase\DatabaseDrivers\MySQL;
protected $create = "CREATE TABLE arsse_test(id bigint auto_increment primary key)";
protected $lock = ["SET lock_wait_timeout = 1", "LOCK TABLES arsse_meta WRITE"];
protected $setVersion = "UPDATE arsse_meta set value = '#' where `key` = 'schema_version'";
protected static $insertDefaultValues = "INSERT INTO arsse_test(id) values(default)";
protected function exec($q): bool {
if (is_array($q)) {
$q = implode("; ", $q);
}
static::$interface->multi_query($q);
$e = null;
do {
if (!$e && static::$interface->sqlstate !== "00000") {
$e = new \Exception(static::$interface->error);
}
} while (static::$interface->more_results() && static::$interface->next_result());
if ($e) {
throw $e;
}
return true;
}
protected function query(string $q) {
$r = static::$interface->query($q);
if ($r) {
$row = $r->fetch_row();
$r->free();
if ($row) {
return $row[0];
} else {
return null;
}
}
return null;
}
}