diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index 97d0376..8652dbf 100644 --- a/src/Builder/LikeConditionBuilder.php +++ b/src/Builder/LikeConditionBuilder.php @@ -43,7 +43,7 @@ public function build(LikeConditionInterface $expression, array &$params = []): * Different pdo_oci8 versions may or may not implement `PDO::quote()`, so {@see Quoter::quoteValue()} may or * may not quote `\`. */ - $this->escapingReplacements['\\'] = substr((string) $this->queryBuilder->quoter()->quoteValue('\\'), 1, -1); + $this->escapingReplacements['\\'] = substr($this->queryBuilder->quoter()->quoteValue('\\'), 1, -1); } return parent::build($expression, $params); diff --git a/src/Command.php b/src/Command.php index 820d197..c167667 100644 --- a/src/Command.php +++ b/src/Command.php @@ -5,6 +5,7 @@ namespace Yiisoft\Db\Oracle; use PDO; +use Yiisoft\Db\Command\DataType; use Yiisoft\Db\Constant\PhpType; use Yiisoft\Db\Driver\Pdo\AbstractPdoCommand; use Yiisoft\Db\QueryBuilder\AbstractQueryBuilder; @@ -64,7 +65,7 @@ public function insertWithReturningPks(string $table, array $columns): bool|arra $this->setSql($sql)->bindValues($params); $this->prepare(false); - /** @psalm-var array $returnParams */ + /** @psalm-var array $returnParams */ foreach ($returnParams as $name => &$value) { $this->bindParam($name, $value['value'], $value['dataType'], $value['size']); } diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 8965a36..72b579f 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 Oracle Server specific query builder. */ @@ -54,4 +56,9 @@ public function __construct(QuoterInterface $quoter, SchemaInterface $schema) parent::__construct($quoter, $schema, $ddlBuilder, $dmlBuilder, $dqlBuilder, $columnDefinitionBuilder); } + + protected function prepareBinary(string $binary): string + { + return "HEXTORAW('" . bin2hex($binary) . "')"; + } } diff --git a/tests/Provider/QueryBuilderProvider.php b/tests/Provider/QueryBuilderProvider.php index 95da6dc..c41c1b2 100644 --- a/tests/Provider/QueryBuilderProvider.php +++ b/tests/Provider/QueryBuilderProvider.php @@ -317,7 +317,6 @@ public static function buildColumnDefinition(): array $values["defaultValue('')"][0] = "varchar2(255) DEFAULT ''"; $values['defaultValue(null)'][0] = 'varchar2(255) DEFAULT NULL'; $values['defaultValue($expression)'][0] = 'number(10) DEFAULT (1 + 2)'; - $values['notNull()->defaultValue(null)'][0] = 'varchar2(255) NOT NULL'; $values['notNull()'][0] = 'varchar2(255) NOT NULL'; $values['null()'][0] = 'varchar2(255) NULL'; $values['integer()->primaryKey()'][0] = 'number(10) PRIMARY KEY'; @@ -337,4 +336,23 @@ public static function buildColumnDefinition(): array ['number(10) REFERENCES "ref_table" ("id") ON DELETE SET NULL', ColumnBuilder::integer()->reference($referenceSetNull)], ]; } + + public static function prepareParam(): array + { + $values = parent::prepareParam(); + + $values['binary'][0] = "HEXTORAW('737472696e67')"; + + return $values; + } + + public static function prepareValue(): array + { + $values = parent::prepareValue(); + + $values['binary'][0] = "HEXTORAW('737472696e67')"; + $values['paramBinary'][0] = "HEXTORAW('737472696e67')"; + + return $values; + } } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index e8c23a3..75ce0b6 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -4,6 +4,7 @@ namespace Yiisoft\Db\Oracle\Tests; +use PHPUnit\Framework\Attributes\DataProviderExternal; use Throwable; use Yiisoft\Db\Constant\ColumnType; use Yiisoft\Db\Exception\Exception; @@ -11,6 +12,7 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\ExpressionInterface; +use Yiisoft\Db\Oracle\Tests\Provider\QueryBuilderProvider; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; @@ -672,9 +674,21 @@ public function testSelectScalar(array|bool|float|int|string $columns, string $e parent::testSelectScalar($columns, $expected); } - /** @dataProvider \Yiisoft\Db\Oracle\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); + } }