1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-06 06:07:39 +02:00

added Dibi\Expression [Closes #264]

This commit is contained in:
David Grudl
2017-09-21 14:51:31 +02:00
parent 832313bc73
commit 499e3aea40
3 changed files with 54 additions and 1 deletions

34
src/Dibi/Expression.php Normal file
View File

@@ -0,0 +1,34 @@
<?php
/**
* This file is part of the "dibi" - smart database abstraction layer.
* Copyright (c) 2005 David Grudl (https://davidgrudl.com)
*/
declare(strict_types=1);
namespace Dibi;
/**
* SQL expression.
*/
class Expression
{
use Strict;
/** @var array */
private $values;
public function __construct(...$values)
{
$this->values = $values;
}
public function getValues(): array
{
return $this->values;
}
}

View File

@@ -450,6 +450,9 @@ final class Translator
} elseif ($value instanceof Literal) {
return (string) $value;
} elseif ($value instanceof Expression) {
return $this->connection->translate(...$value->getValues());
} else {
$type = is_object($value) ? get_class($value) : gettype($value);
return $this->errors[] = "**Unexpected $type**";

View File

@@ -478,7 +478,7 @@ Assert::same(
'title' => ['SHA1(%s)', 'Test product'],
], [
'product_id' => 1,
'title' => ['SHA1(%s)', 'Test product'],
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
])
);
@@ -490,6 +490,22 @@ Assert::same(
])
);
Assert::same(
reformat('UPDATE [products] [product_id]=1, [title]=SHA1(\'Test product\')'),
$conn->translate('UPDATE [products]', [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
])
);
Assert::same(
reformat('SELECT * FROM [products] WHERE [product_id]=1, [title]=SHA1(\'Test product\')'),
$conn->translate('SELECT * FROM [products] WHERE', [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
])
);
$e = Assert::exception(function () use ($conn) {
$array6 = [