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:
34
src/Dibi/Expression.php
Normal file
34
src/Dibi/Expression.php
Normal 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;
|
||||
}
|
||||
}
|
@@ -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**";
|
||||
|
@@ -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 = [
|
||||
|
Reference in New Issue
Block a user