@@ -148,6 +148,83 @@ void main() {
148148 final query = SelectQuery ("test" );
149149 expect (() => query.build ().asString (), throwsA (isA <QueryBuilderException >()));
150150 });
151+ test ("Select with ORDER BY random() and LIMIT/OFFSET" , () {
152+ final query = SelectQuery ("test" )
153+ ..select ("*" )
154+ ..andWhere ("a = 1" )
155+ ..orderBy ("random()" )
156+ ..limit (5 )
157+ ..offset (10 );
158+
159+ expect (query.build ().asString (), "SELECT * FROM test WHERE a = 1 ORDER BY random() LIMIT 5 OFFSET 10;" );
160+ });
161+
162+ test ("Select with multiple ORDER BY clauses" , () {
163+ final query = SelectQuery ("t" )
164+ ..select ("*" )
165+ ..orderBy ("a ASC" )
166+ ..orderBy ("b DESC" );
167+
168+ expect (query.build ().asString (), "SELECT * FROM t ORDER BY a ASC,b DESC;" );
169+ });
170+
171+ test ("Select with LIMIT only" , () {
172+ final query = SelectQuery ("t" )
173+ ..select ("*" )
174+ ..limit (3 );
175+
176+ expect (query.build ().asString (), "SELECT * FROM t LIMIT 3;" );
177+ });
178+
179+ test ("Select with OFFSET only" , () {
180+ final query = SelectQuery ("t" )
181+ ..select ("*" )
182+ ..offset (7 );
183+
184+ expect (query.build ().asString (), "SELECT * FROM t OFFSET 7;" );
185+ });
186+
187+ test ("Select with JOIN + WHERE + ORDER BY + LIMIT" , () {
188+ final query = SelectQuery ("tag_usage" , alias: "tu" )
189+ ..select ("tu.*" )
190+ ..addJoin ("tags" , "t" , ["t.id = tu.command_id" ])
191+ ..andWhere ("t.enabled = TRUE" )
192+ ..orderBy ("t.id DESC" )
193+ ..limit (1 );
194+
195+ expect (
196+ query.build ().asString (),
197+ "SELECT tu.* FROM tag_usage tu JOIN tags t ON t.id = tu.command_id WHERE t.enabled = TRUE ORDER BY t.id DESC LIMIT 1;" ,
198+ );
199+ });
200+ test ("Select alias selectAll with ORDER BY + LIMIT + OFFSET" , () {
201+ final query = SelectQuery .selectAll ("test" , alias: "t" )
202+ ..orderBy ("t.a DESC" )
203+ ..limit (2 )
204+ ..offset (1 );
205+
206+ expect (query.build ().asString (), "SELECT t.* FROM test t ORDER BY t.a DESC LIMIT 2 OFFSET 1;" );
207+ });
208+
209+ test ("Select LIMIT/OFFSET render order is LIMIT then OFFSET regardless of call order" , () {
210+ final query = SelectQuery ("t" )
211+ ..select ("*" )
212+ ..offset (100 )
213+ ..limit (10 );
214+
215+ expect (query.build ().asString (), "SELECT * FROM t LIMIT 10 OFFSET 100;" );
216+ });
217+
218+ test ("Select with mixed AND/OR WHEREs and ORDER BY" , () {
219+ final query = SelectQuery ("t" )
220+ ..select ("*" )
221+ ..andWhere ("a = 1" )
222+ ..andWhere ("b = 2" )
223+ ..orWhere ("c = 3" )
224+ ..orderBy ("id" );
225+
226+ expect (query.build ().asString (), "SELECT * FROM t WHERE a = 1 AND b = 2 OR c = 3 ORDER BY id;" );
227+ });
151228 });
152229
153230 group ("Update tests" , () {
0 commit comments