File tree Expand file tree Collapse file tree 3 files changed +18
-10
lines changed Expand file tree Collapse file tree 3 files changed +18
-10
lines changed Original file line number Diff line number Diff line change @@ -303,6 +303,7 @@ public static function toObject(array $desc)
303303 throw new \InvalidArgumentException ('Unexpected operator with subtree: ' .var_export ($ desc ['sub_tree ' ], true ));
304304 }
305305 unset($ desc ['sub_tree ' ]);
306+ unset($ desc ['delim ' ]);
306307 if (!empty ($ desc )) {
307308 throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
308309 }
@@ -322,6 +323,7 @@ public static function toObject(array $desc)
322323 unset($ desc ['sub_tree ' ]);
323324 unset($ desc ['alias ' ]);
324325 unset($ desc ['direction ' ]);
326+ unset($ desc ['delim ' ]);
325327 if (!empty ($ desc )) {
326328 throw new \InvalidArgumentException ('Unexpected parameters in exception: ' .var_export ($ desc , true ));
327329 }
Original file line number Diff line number Diff line change 44
55use SQLParser \Node \NodeFactory ;
66use SQLParser \Node \Operator ;
7+ use SQLParser \Node \Reserved ;
78
89/**
910 * This class has the ability to create instances implementing NodeInterface based on a descriptive array.
@@ -21,19 +22,21 @@ public static function toObject(array $desc)
2122 return NodeFactory::toObject ($ item );
2223 }, $ desc ['SELECT ' ]);
2324 $ columns = NodeFactory::simplify ($ columns );
24- $ select ->setColumns ($ columns );
2525
26- if (isset ($ desc ['OPTIONS ' ])) {
27- $ options = $ desc ['OPTIONS ' ];
28- $ key = array_search ('DISTINCT ' , $ options );
29- if ($ key !== false ) {
30- $ select ->setDistinct (true );
31- unset($ options [$ key ]);
32- } else {
33- $ select ->setDistinct (false );
26+ $ options = [];
27+ foreach ($ columns as $ key => $ column ) {
28+ if ($ column instanceof Reserved) {
29+ if (strtoupper ($ column ->getBaseExpression ()) === 'DISTINCT ' ) {
30+ $ select ->setDistinct (true );
31+ } else {
32+ $ options [] = $ column ->getBaseExpression ();
33+ }
34+ unset($ columns [$ key ]);
3435 }
35- $ select ->setOptions ($ options );
3636 }
37+ $ select ->setOptions ($ options );
38+
39+ $ select ->setColumns ($ columns );
3740
3841 if (isset ($ desc ['FROM ' ])) {
3942 $ from = self ::mapArrayToNodeObjectList ($ desc ['FROM ' ]);
Original file line number Diff line number Diff line change @@ -126,6 +126,9 @@ public function testStandardSelect()
126126
127127 $ sql = 'SELECT * FROM users WHERE (login LIKE :login) ' ;
128128 $ this ->assertEquals ('SELECT * FROM users ' , self ::simplifySql ($ magicQuery ->build ($ sql )));
129+
130+ $ sql = 'SELECT DISTINCT login FROM users ' ;
131+ $ this ->assertEquals ('SELECT DISTINCT login FROM users ' , self ::simplifySql ($ magicQuery ->build ($ sql )));
129132 }
130133
131134 /**
You can’t perform that action at this time.
0 commit comments