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
2 changes: 2 additions & 0 deletions src/SQLParser/Node/NodeFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@ public static function toObject(array $desc)
throw new \InvalidArgumentException('Unexpected operator with subtree: '.var_export($desc['sub_tree'], true));
}
unset($desc['sub_tree']);
unset($desc['delim']);
if (!empty($desc)) {
throw new \InvalidArgumentException('Unexpected parameters in exception: '.var_export($desc, true));
}
Expand All @@ -322,6 +323,7 @@ public static function toObject(array $desc)
unset($desc['sub_tree']);
unset($desc['alias']);
unset($desc['direction']);
unset($desc['delim']);
if (!empty($desc)) {
throw new \InvalidArgumentException('Unexpected parameters in exception: '.var_export($desc, true));
}
Expand Down
23 changes: 13 additions & 10 deletions src/SQLParser/Query/StatementFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use SQLParser\Node\NodeFactory;
use SQLParser\Node\Operator;
use SQLParser\Node\Reserved;

/**
* This class has the ability to create instances implementing NodeInterface based on a descriptive array.
Expand All @@ -21,19 +22,21 @@ public static function toObject(array $desc)
return NodeFactory::toObject($item);
}, $desc['SELECT']);
$columns = NodeFactory::simplify($columns);
$select->setColumns($columns);

if (isset($desc['OPTIONS'])) {
$options = $desc['OPTIONS'];
$key = array_search('DISTINCT', $options);
if ($key !== false) {
$select->setDistinct(true);
unset($options[$key]);
} else {
$select->setDistinct(false);
$options = [];
foreach ($columns as $key => $column) {
if ($column instanceof Reserved) {
if (strtoupper($column->getBaseExpression()) === 'DISTINCT') {
$select->setDistinct(true);
} else {
$options[] = $column->getBaseExpression();
}
unset($columns[$key]);
}
$select->setOptions($options);
}
$select->setOptions($options);

$select->setColumns($columns);

if (isset($desc['FROM'])) {
$from = self::mapArrayToNodeObjectList($desc['FROM']);
Expand Down
3 changes: 3 additions & 0 deletions tests/Mouf/Database/MagicQueryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ public function testStandardSelect()

$sql = 'SELECT * FROM users WHERE (login LIKE :login)';
$this->assertEquals('SELECT * FROM users', self::simplifySql($magicQuery->build($sql)));

$sql = 'SELECT DISTINCT login FROM users';
$this->assertEquals('SELECT DISTINCT login FROM users', self::simplifySql($magicQuery->build($sql)));
}

/**
Expand Down