@@ -53,6 +53,142 @@ public function testBuilderAlias()
5353 );
5454 }
5555
56+ public function testBuilderAliasOrder ()
57+ {
58+ $ parser = new Parser (
59+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu '
60+ . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id '
61+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
62+ . 'ORDER BY scb.id LIMIT 0,300 '
63+ );
64+ $ stmt = $ parser ->statements [0 ];
65+
66+ $ this ->assertEquals (
67+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` '
68+ . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id '
69+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
70+ . 'ORDER BY scb.id ASC LIMIT 0, 300 ' ,
71+ $ stmt ->build ()
72+ );
73+ }
74+
75+ public function testBuilderAliasOrderMultiple ()
76+ {
77+ $ parser = new Parser (
78+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu '
79+ . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id '
80+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
81+ . 'ORDER BY scb.id DESC, scb.order LIMIT 0,300 '
82+ );
83+ $ stmt = $ parser ->statements [0 ];
84+
85+ $ this ->assertEquals (
86+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` '
87+ . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id '
88+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
89+ . 'ORDER BY scb.id DESC, scb.order ASC LIMIT 0, 300 ' ,
90+ $ stmt ->build ()
91+ );
92+ }
93+
94+ public function testBuilderAliasOrderMultipleFunctions ()
95+ {
96+ $ parser = new Parser (
97+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu '
98+ . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id '
99+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
100+ . 'ORDER BY scb.id DESC, YEAR(scb.dob) LIMIT 0,300 '
101+ );
102+ $ stmt = $ parser ->statements [0 ];
103+
104+ $ this ->assertEquals (
105+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` '
106+ . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id '
107+ . 'WHERE `has_found_course` = \'1 \' GROUP BY sgu.id '
108+ . 'ORDER BY scb.id DESC, YEAR(scb.dob) ASC LIMIT 0, 300 ' ,
109+ $ stmt ->build ()
110+ );
111+ }
112+
113+ public function testBuilderAliasGroupByMultipleFunctions ()
114+ {
115+ $ parser = new Parser (
116+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu '
117+ . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id '
118+ . 'WHERE `has_found_course` = \'1 \' '
119+ . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0,300 '
120+ );
121+ $ stmt = $ parser ->statements [0 ];
122+
123+ $ this ->assertEquals (
124+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` '
125+ . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id '
126+ . 'WHERE `has_found_course` = \'1 \' '
127+ . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0, 300 ' ,
128+ $ stmt ->build ()
129+ );
130+ }
131+
132+ public function testBuilderAliasGroupByMultipleFunctionsOrderRemoved ()
133+ {
134+ $ parser = new Parser (
135+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` sgu '
136+ . 'RIGHT JOIN `student_course_booking` scb ON sgu.id = scb.user_id '
137+ . 'WHERE `has_found_course` = \'1 \' '
138+ . 'GROUP BY scb.id ASC, YEAR(scb.dob) DESC LIMIT 0,300 '
139+ );
140+ $ stmt = $ parser ->statements [0 ];
141+
142+ // The order is not kept, is this an expected behavior ?
143+ // Ref: 4af06d24b041e499fb0e75ab3a98caf9a91700ef
144+ // Issue: #154
145+ $ this ->assertEquals (
146+ 'SELECT sgu.id, sgu.email_address FROM `sf_guard_user` AS `sgu` '
147+ . 'RIGHT JOIN `student_course_booking` AS `scb` ON sgu.id = scb.user_id '
148+ . 'WHERE `has_found_course` = \'1 \' '
149+ . 'GROUP BY scb.id, YEAR(scb.dob) LIMIT 0, 300 ' ,
150+ $ stmt ->build ()
151+ );
152+ }
153+
154+ public function testBuilderAliasOrderCase ()
155+ {
156+ $ parser = new Parser (
157+ 'SELECT * FROM `world_borders` ORDER BY CASE '
158+ . 'WHEN REGION = 2 THEN 99 '
159+ . 'WHEN REGION > 3 THEN REGION+1 '
160+ . 'ELSE 100 END LIMIT 0,300 '
161+ );
162+ $ stmt = $ parser ->statements [0 ];
163+
164+ $ this ->assertEquals (
165+ 'SELECT * FROM `world_borders` ORDER BY CASE '
166+ . 'WHEN REGION = 2 THEN 99 '
167+ . 'WHEN REGION > 3 THEN REGION+1 '
168+ . 'ELSE 100 END ASC LIMIT 0, 300 ' ,
169+ $ stmt ->build ()
170+ );
171+ }
172+
173+ public function testBuilderAliasGroupByCase ()
174+ {
175+ $ parser = new Parser (
176+ 'SELECT * FROM `world_borders` GROUP BY CASE '
177+ . 'WHEN REGION = 2 THEN 99 '
178+ . 'WHEN REGION > 3 THEN REGION+1 '
179+ . 'ELSE 100 END LIMIT 0,300 '
180+ );
181+ $ stmt = $ parser ->statements [0 ];
182+
183+ $ this ->assertEquals (
184+ 'SELECT * FROM `world_borders` GROUP BY CASE '
185+ . 'WHEN REGION = 2 THEN 99 '
186+ . 'WHEN REGION > 3 THEN REGION+1 '
187+ . 'ELSE 100 END LIMIT 0, 300 ' ,
188+ $ stmt ->build ()
189+ );
190+ }
191+
56192 public function testBuilderEndOptions ()
57193 {
58194 /* Assertion 1 */
0 commit comments