@@ -53,6 +53,142 @@ public function testBuilderAlias()
53
53
);
54
54
}
55
55
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
+
56
192
public function testBuilderEndOptions ()
57
193
{
58
194
/* Assertion 1 */
0 commit comments