Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/FilterHandler/BetweenFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\Between;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\Between as DbBetweenCondition;

Expand All @@ -20,6 +22,17 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var Between $filter */

return new DbBetweenCondition($filter->field, $filter->minValue, $filter->maxValue);
return new DbBetweenCondition(
$filter->field,
$this->prepareValue($filter->minValue),
$this->prepareValue($filter->maxValue),
);
}

private function prepareValue(bool|DateTimeInterface|float|int|string $value): mixed
{
return $value instanceof DateTimeInterface
? new DateTimeValue($value)
: $value;
}
}
8 changes: 7 additions & 1 deletion src/FilterHandler/EqualsFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\Equals;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\Equals as DbEqualsCondition;

Expand All @@ -20,6 +22,10 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var Equals $filter */

return new DbEqualsCondition($filter->field, $filter->value);
$value = $filter->value instanceof DateTimeInterface
? new DateTimeValue($filter->value)
: $filter->value;

return new DbEqualsCondition($filter->field, $value);
}
}
8 changes: 7 additions & 1 deletion src/FilterHandler/GreaterThanFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\GreaterThan;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\GreaterThan as DbGreaterThan;

Expand All @@ -20,6 +22,10 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var GreaterThan $filter */

return new DbGreaterThan($filter->field, $filter->value);
$value = $filter->value instanceof DateTimeInterface
? new DateTimeValue($filter->value)
: $filter->value;

return new DbGreaterThan($filter->field, $value);
}
}
8 changes: 7 additions & 1 deletion src/FilterHandler/GreaterThanOrEqualFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\GreaterThanOrEqual;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\GreaterThanOrEqual as DbGreaterThanOrEqual;

Expand All @@ -20,6 +22,10 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var GreaterThanOrEqual $filter */

return new DbGreaterThanOrEqual($filter->field, $filter->value);
$value = $filter->value instanceof DateTimeInterface
? new DateTimeValue($filter->value)
: $filter->value;

return new DbGreaterThanOrEqual($filter->field, $value);
}
}
8 changes: 7 additions & 1 deletion src/FilterHandler/LessThanFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\LessThan;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\LessThan as DbLessThan;

Expand All @@ -20,6 +22,10 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var LessThan $filter */

return new DbLessThan($filter->field, $filter->value);
$value = $filter->value instanceof DateTimeInterface
? new DateTimeValue($filter->value)
: $filter->value;

return new DbLessThan($filter->field, $value);
}
}
8 changes: 7 additions & 1 deletion src/FilterHandler/LessThanOrEqualFilterHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

namespace Yiisoft\Data\Db\FilterHandler;

use DateTimeInterface;
use Yiisoft\Data\Reader\Filter\LessThanOrEqual;
use Yiisoft\Data\Reader\FilterInterface;
use Yiisoft\Db\Expression\Value\DateTimeValue;
use Yiisoft\Db\QueryBuilder\Condition\ConditionInterface;
use Yiisoft\Db\QueryBuilder\Condition\LessThanOrEqual as DbLessThanOrEqual;

Expand All @@ -20,6 +22,10 @@ public function getCondition(FilterInterface $filter, Context $context): Conditi
{
/** @var LessThanOrEqual $filter */

return new DbLessThanOrEqual($filter->field, $filter->value);
$value = $filter->value instanceof DateTimeInterface
? new DateTimeValue($filter->value)
: $filter->value;

return new DbLessThanOrEqual($filter->field, $value);
}
}
27 changes: 12 additions & 15 deletions tests/Base/DataTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

namespace Yiisoft\Data\Db\Tests\Base;

use DateTimeImmutable;
use Yiisoft\Data\Db\QueryDataReader;
use Yiisoft\Data\Reader\DataReaderInterface;
use Yiisoft\Data\Tests\Common\FixtureTrait;
use Yiisoft\Db\Connection\ConnectionInterface;
use Yiisoft\Db\Driver\Pdo\PdoConnectionInterface;
use Yiisoft\Db\Expression\Expression;
use Yiisoft\Db\Query\Query;

use function is_object;
Expand Down Expand Up @@ -60,6 +60,9 @@ protected function assertFixtures(array $expectedFixtureIndexes, array $actualFi
unset($fixture['id']);
$fixture['number'] = (int) $fixture['number'];
$fixture['balance'] = (float) $fixture['balance'];
$fixture['born_at'] = $fixture['born_at'] === null
? null
: new DateTimeImmutable($fixture['born_at']);

$processedActualFixtures[$fixture['number'] - 1] = $fixture;
}
Expand All @@ -75,29 +78,23 @@ protected function populateDatabase(): void
return;
}

$columnBuilder = $db->getColumnBuilderClass();
$db
->createCommand()
->createTable(
'{{%user}}',
[
'id' => 'pk',
'number' => 'integer NOT NULL',
'email' => 'string(255) NOT NULL',
'balance' => 'float DEFAULT 0.0 NOT NULL',
'born_at' => 'date',
'id' => $columnBuilder::primaryKey(),
'number' => $columnBuilder::integer()->notNull(),
'email' => $columnBuilder::string()->notNull(),
'balance' => $columnBuilder::float()->defaultValue(0.0)->notNull(),
'born_at' => $columnBuilder::datetimeWithTimezone(),
],
)
->execute();

$db->transaction(static function (ConnectionInterface $database): void {
foreach (self::$fixtures as $fixture) {
if ($fixture['born_at'] !== null && $database->getDriverName() === 'oci') {
$fixture['born_at'] = new Expression(
"TO_DATE(:born_at, 'yyyy-mm-dd')",
[':born_at' => $fixture['born_at']],
);
}

$db->transaction(function (ConnectionInterface $database): void {
foreach ($this->getFixtures() as $fixture) {
$database->createCommand()->insert('{{%user}}', $fixture)->execute();
}
});
Expand Down
Loading