2018-11-23 04:18:20 +00:00
|
|
|
<?php
|
|
|
|
/** @license MIT
|
|
|
|
* Copyright 2017 J. King, Dustin Wilson et al.
|
|
|
|
* See LICENSE and AUTHORS files for details */
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
2018-12-12 17:42:40 +00:00
|
|
|
namespace JKingWeb\Arsse\TestCase\Db\PostgreSQLPDO;
|
2018-11-23 04:18:20 +00:00
|
|
|
|
|
|
|
/**
|
2018-12-10 17:39:09 +00:00
|
|
|
* @group slow
|
2018-11-29 18:56:15 +00:00
|
|
|
* @covers \JKingWeb\Arsse\Db\PostgreSQL\PDOStatement<extended>
|
2019-01-15 13:58:11 +00:00
|
|
|
* @covers \JKingWeb\Arsse\Db\PDOError
|
|
|
|
* @covers \JKingWeb\Arsse\Db\SQLState */
|
2018-11-23 04:18:20 +00:00
|
|
|
class TestStatement extends \JKingWeb\Arsse\TestCase\Db\BaseStatement {
|
2019-08-25 17:19:11 +00:00
|
|
|
use \JKingWeb\Arsse\Test\DatabaseDrivers\PostgreSQLPDO;
|
2018-11-23 04:18:20 +00:00
|
|
|
|
|
|
|
protected function makeStatement(string $q, array $types = []): array {
|
2018-11-29 18:45:37 +00:00
|
|
|
return [static::$interface, $q, $types];
|
2018-11-23 04:18:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function decorateTypeSyntax(string $value, string $type): string {
|
|
|
|
switch ($type) {
|
|
|
|
case "float":
|
2019-01-11 15:38:06 +00:00
|
|
|
return (substr($value, -2) === ".0") ? "'".substr($value, 0, strlen($value) - 2)."'" : "'$value'";
|
2018-11-23 04:18:20 +00:00
|
|
|
case "string":
|
|
|
|
if (preg_match("<^char\((\d+)\)$>", $value, $match)) {
|
|
|
|
return "U&'\\+".str_pad(dechex((int) $match[1]), 6, "0", \STR_PAD_LEFT)."'";
|
|
|
|
}
|
2018-12-05 22:28:11 +00:00
|
|
|
return $value;
|
2020-11-02 20:21:04 +00:00
|
|
|
case "binary":
|
|
|
|
if ($value[0] === "x") {
|
|
|
|
return "'\\x".substr($value, 2)."::bytea";
|
|
|
|
}
|
|
|
|
// no break;
|
2018-11-23 04:18:20 +00:00
|
|
|
default:
|
|
|
|
return $value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|