diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f4752ec..7860c5aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Enh #365: Refactor `Dsn` class (@Tigrov) - Enh #366: Use constructor to create columns and initialize properties (@Tigrov) - Enh #370: Refactor `Schema::normalizeDefaultValue()` method and move it to `ColumnFactory` class (@Tigrov) +- New #373: Override `QueryBuilder::prepareBinary()` method (@Tigrov) ## 1.3.0 March 21, 2024 diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index e667c952..b46c021f 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -11,6 +11,8 @@ use Yiisoft\Db\Schema\QuoterInterface; use Yiisoft\Db\Schema\SchemaInterface; +use function bin2hex; + /** * Implements the PostgreSQL Server specific query builder. */ @@ -57,4 +59,9 @@ public function __construct(QuoterInterface $quoter, SchemaInterface $schema) parent::__construct($quoter, $schema, $ddlBuilder, $dmlBuilder, $dqlBuilder, $columnDefinitionBuilder); } + + protected function prepareBinary(string $binary): string + { + return "'\x" . bin2hex($binary) . "'::bytea"; + } } diff --git a/tests/Provider/QueryBuilderProvider.php b/tests/Provider/QueryBuilderProvider.php index 7da99d38..c8d2a4d3 100644 --- a/tests/Provider/QueryBuilderProvider.php +++ b/tests/Provider/QueryBuilderProvider.php @@ -593,4 +593,23 @@ public static function buildColumnDefinition(): array return $values; } + + public static function prepareParam(): array + { + $values = parent::prepareParam(); + + $values['binary'][0] = "'\\x737472696e67'::bytea"; + + return $values; + } + + public static function prepareValue(): array + { + $values = parent::prepareValue(); + + $values['binary'][0] = "'\\x737472696e67'::bytea"; + $values['paramBinary'][0] = "'\\x737472696e67'::bytea"; + + return $values; + } } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 4566c206..a1c8e485 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -4,6 +4,7 @@ namespace Yiisoft\Db\Pgsql\Tests; +use PHPUnit\Framework\Attributes\DataProviderExternal; use Throwable; use Yiisoft\Db\Constant\ColumnType; use Yiisoft\Db\Driver\Pdo\PdoConnectionInterface; @@ -14,6 +15,7 @@ use Yiisoft\Db\Expression\Expression; use Yiisoft\Db\Expression\ExpressionInterface; use Yiisoft\Db\Pgsql\Column; +use Yiisoft\Db\Pgsql\Tests\Provider\QueryBuilderProvider; use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; @@ -787,9 +789,21 @@ public function testOverlapsConditionOperator(iterable|ExpressionInterface $valu $db->close(); } - /** @dataProvider \Yiisoft\Db\Pgsql\Tests\Provider\QueryBuilderProvider::buildColumnDefinition() */ + #[DataProviderExternal(QueryBuilderProvider::class, 'buildColumnDefinition')] public function testBuildColumnDefinition(string $expected, ColumnSchemaInterface|string $column): void { parent::testBuildColumnDefinition($expected, $column); } + + #[DataProviderExternal(QueryBuilderProvider::class, 'prepareParam')] + public function testPrepareParam(string $expected, mixed $value, int $type): void + { + parent::testPrepareParam($expected, $value, $type); + } + + #[DataProviderExternal(QueryBuilderProvider::class, 'prepareValue')] + public function testPrepareValue(string $expected, mixed $value): void + { + parent::testPrepareValue($expected, $value); + } }