Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
binary values for SQLServer
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfy-j committed Jan 24, 2019
1 parent b73d36e commit 9d3d955
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
44 changes: 40 additions & 4 deletions src/Driver/SQLServer/SQLServerDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
use Spiral\Database\Driver\SQLServer\Schema\SQLServerTable;
use Spiral\Database\Exception\DriverException;
use Spiral\Database\Exception\StatementException;
use Spiral\Database\Injection\ParameterInterface;
use Spiral\Database\Statement;

class SQLServerDriver extends AbstractDriver
{
Expand All @@ -30,7 +32,7 @@ class SQLServerDriver extends AbstractDriver
protected $pdoOptions = [
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_STRINGIFY_FETCHES => false
];

/**
Expand Down Expand Up @@ -96,12 +98,46 @@ public function getHandler(): HandlerInterface
return new SQLServerHandler($this);
}

/**
* Bind parameters into statement. SQLServer need encoding to be specified for binary parameters.
*
* @param Statement $statement
* @param ParameterInterface[] $parameters Named hash of ParameterInterface.
* @return Statement
*/
protected function bindParameters(Statement $statement, array $parameters): Statement
{
foreach ($parameters as $index => $parameter) {
if (is_numeric($index)) {
if ($parameter->getType() == PDO::PARAM_LOB) {
$value = $parameter->getValue();
$statement->bindParam(
$index + 1,
$value,
$parameter->getType(),
0,
PDO::SQLSRV_ENCODING_BINARY
);
continue;
}

//Numeric, @see http://php.net/manual/en/pdostatement.bindparam.php
$statement->bindValue($index + 1, $parameter->getValue(), $parameter->getType());
} else {
//Named
$statement->bindValue($index, $parameter->getValue(), $parameter->getType());
}
}

return $statement;
}

/**
* Create nested transaction save point.
*
* @link http://en.wikipedia.org/wiki/Savepoint
*
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* identifier.
*/
protected function savepointCreate(int $level)
Expand All @@ -115,7 +151,7 @@ protected function savepointCreate(int $level)
*
* @link http://en.wikipedia.org/wiki/Savepoint
*
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* identifier.
*/
protected function savepointRelease(int $level)
Expand All @@ -129,7 +165,7 @@ protected function savepointRelease(int $level)
*
* @link http://en.wikipedia.org/wiki/Savepoint
*
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* @param int $level Savepoint name/id, must not contain spaces and be valid database
* identifier.
*/
protected function savepointRollback(int $level)
Expand Down
4 changes: 2 additions & 2 deletions src/Driver/Traits/PDOTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ protected function getPDO(): PDO
*
* @throws DriverException
*/
private function flattenParameters(array $parameters): array
protected function flattenParameters(array $parameters): array
{
$flatten = [];
foreach ($parameters as $key => $parameter) {
Expand Down Expand Up @@ -263,7 +263,7 @@ private function flattenParameters(array $parameters): array
* @param ParameterInterface[] $parameters Named hash of ParameterInterface.
* @return Statement
*/
private function bindParameters(Statement $statement, array $parameters): Statement
protected function bindParameters(Statement $statement, array $parameters): Statement
{
foreach ($parameters as $index => $parameter) {
if (is_numeric($index)) {
Expand Down

0 comments on commit 9d3d955

Please sign in to comment.