Skip to content

Commit d21b0fa

Browse files
committed
Fixed the issue
1 parent feb435d commit d21b0fa

File tree

3 files changed

+34
-33
lines changed

3 files changed

+34
-33
lines changed

src/SQLParser/Node/NodeFactory.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,19 +452,45 @@ private static function buildFromSubtree($subTree)
452452
if (!empty($subTree) && !isset($subTree[0])) {
453453
$subTree = StatementFactory::toObject($subTree);
454454
} else {
455-
$subTree = array_map(function ($item) {
455+
$subTree = self::mapArrayToNodeObjectList($subTree); /*array_map(function ($item) {
456456
if (is_array($item)) {
457457
return self::toObject($item);
458458
} else {
459459
return $item;
460460
}
461-
}, $subTree);
461+
}, $subTree);*/
462462
}
463463
}
464464

465465
return $subTree;
466466
}
467467

468+
/**
469+
* @param array $items An array of objects represented as SQLParser arrays.
470+
*/
471+
public static function mapArrayToNodeObjectList(array $items)
472+
{
473+
$list = [];
474+
475+
$nextAndPartOfBetween = false;
476+
477+
// Special case, let's replace the AND of a between with a ANDBETWEEN object.
478+
foreach ($items as $item) {
479+
$obj = NodeFactory::toObject($item);
480+
if ($obj instanceof Operator) {
481+
if ($obj->getValue() == 'BETWEEN') {
482+
$nextAndPartOfBetween = true;
483+
} elseif ($nextAndPartOfBetween && $obj->getValue() == 'AND') {
484+
$nextAndPartOfBetween = false;
485+
$obj->setValue('AND_FROM_BETWEEN');
486+
}
487+
}
488+
$list[] = $obj;
489+
}
490+
491+
return $list;
492+
}
493+
468494
private static $PRECEDENCE = array(
469495
array('INTERVAL'),
470496
array('BINARY', 'COLLATE'),

src/SQLParser/Query/StatementFactory.php

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,30 @@ public static function toObject(array $desc)
3939
$select->setColumns($columns);
4040

4141
if (isset($desc['FROM'])) {
42-
$from = self::mapArrayToNodeObjectList($desc['FROM']);
42+
$from = NodeFactory::mapArrayToNodeObjectList($desc['FROM']);
4343
$select->setFrom($from);
4444
}
4545

4646
if (isset($desc['WHERE'])) {
47-
$where = self::mapArrayToNodeObjectList($desc['WHERE']);
47+
$where = NodeFactory::mapArrayToNodeObjectList($desc['WHERE']);
4848
$where = NodeFactory::simplify($where);
4949
$select->setWhere($where);
5050
}
5151

5252
if (isset($desc['GROUP'])) {
53-
$group = self::mapArrayToNodeObjectList($desc['GROUP']);
53+
$group = NodeFactory::mapArrayToNodeObjectList($desc['GROUP']);
5454
$group = NodeFactory::simplify($group);
5555
$select->setGroup($group);
5656
}
5757

5858
if (isset($desc['HAVING'])) {
59-
$having = self::mapArrayToNodeObjectList($desc['HAVING']);
59+
$having = NodeFactory::mapArrayToNodeObjectList($desc['HAVING']);
6060
$having = NodeFactory::simplify($having);
6161
$select->setHaving($having);
6262
}
6363

6464
if (isset($desc['ORDER'])) {
65-
$order = self::mapArrayToNodeObjectList($desc['ORDER']);
65+
$order = NodeFactory::mapArrayToNodeObjectList($desc['ORDER']);
6666
$order = NodeFactory::simplify($order);
6767
$select->setOrder($order);
6868
}
@@ -112,29 +112,4 @@ public static function toObject(array $desc)
112112
return ['offset' => $descLimit['offset'], 'limit' => $descLimit['rowcount']];
113113
}*/
114114

115-
/**
116-
* @param array $items An array of objects represented as SQLParser arrays.
117-
*/
118-
private static function mapArrayToNodeObjectList(array $items)
119-
{
120-
$list = [];
121-
122-
$nextAndPartOfBetween = false;
123-
124-
// Special case, let's replace the AND of a between with a ANDBETWEEN object.
125-
foreach ($items as $item) {
126-
$obj = NodeFactory::toObject($item);
127-
if ($obj instanceof Operator) {
128-
if ($obj->getValue() == 'BETWEEN') {
129-
$nextAndPartOfBetween = true;
130-
} elseif ($nextAndPartOfBetween && $obj->getValue() == 'AND') {
131-
$nextAndPartOfBetween = false;
132-
$obj->setValue('AND_FROM_BETWEEN');
133-
}
134-
}
135-
$list[] = $obj;
136-
}
137-
138-
return $list;
139-
}
140115
}

tests/Mouf/Database/MagicQueryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function testStandardSelect()
7979
$this->assertEquals('SELECT * FROM myTable', self::simplifySql($magicQuery->build($sql, [])));
8080

8181
$sql = 'SELECT * FROM myTable where (someField BETWEEN :value1 AND :value2) AND otherField = :value3';
82-
$this->assertEquals("SELECT * FROM myTable WHERE (someField BETWEEN '2' AND '4') AND otherField = 8", self::simplifySql($magicQuery->build($sql, ['value1' => 2, 'value2' => 4, 'value3' => 8])));
82+
$this->assertEquals("SELECT * FROM myTable WHERE ((someField BETWEEN '2' AND '4')) AND (otherField = '8')", self::simplifySql($magicQuery->build($sql, ['value1' => 2, 'value2' => 4, 'value3' => 8])));
8383

8484

8585
// Triggers an "expression"

0 commit comments

Comments
 (0)