diff --git a/lib/src/postgrest_transform_builder.dart b/lib/src/postgrest_transform_builder.dart index a55f74d..88766ce 100644 --- a/lib/src/postgrest_transform_builder.dart +++ b/lib/src/postgrest_transform_builder.dart @@ -45,7 +45,8 @@ class PostgrestTransformBuilder extends PostgrestBuilder { PostgrestTransformBuilder order(String column, {bool ascending = false, bool nullsFirst = false, String? foreignTable}) { final key = foreignTable == null ? 'order' : '"$foreignTable".order'; - final value = + final existingOrder = url.queryParameters[key]; + final value = '${existingOrder == null ? '' : '$existingOrder,'}' '"$column".${ascending ? 'asc' : 'desc'}.${nullsFirst ? 'nullsfirst' : 'nullslast'}'; appendSearchParams(key, value); diff --git a/test/resource_embedding_test.dart b/test/resource_embedding_test.dart index d624eb1..1def2d3 100644 --- a/test/resource_embedding_test.dart +++ b/test/resource_embedding_test.dart @@ -35,8 +35,21 @@ void main() { .execute(); expect(res.data[0]['messages'].length, 2); expect(res.data[1]['messages'].length, 0); - expect(res.data[2]['messages'].length, 0); - expect(res.data[3]['messages'].length, 0); + expect(res.data[0]['messages'][0]['id'], 2); + }); + + test('embedded order on multiple columns', () async { + final res = await postgrest + .from('users') + .select('username, messages(*)') + .order('username', ascending: true) + .order('channel_id', foreignTable: 'messages') + .execute(); + expect(res.data[0]['username'], 'awailas'); + expect(res.data[3]['username'], 'supabot'); + expect(res.data[0]['messages'].length, 0); + expect(res.data[3]['messages'].length, 2); + expect(res.data[3]['messages'][0]['id'], 2); }); test('embedded limit', () async { diff --git a/test/transforms_test.dart b/test/transforms_test.dart index 666394e..d84a87c 100644 --- a/test/transforms_test.dart +++ b/test/transforms_test.dart @@ -15,6 +15,13 @@ void main() { expect(res.data[3]['username'], 'awailas'); }); + test('order on multiple columns', () async { + final res = await postgrest.from('users').select().order('catchphrase', ascending: true).order('username').execute(); + expect(res.data[0]['username'], 'kiwicopple'); + expect(res.data[2]['username'], 'supabot'); + expect(res.data[3]['username'], 'dragarcia'); + }); + test('limit', () async { final res = await postgrest.from('users').select().limit(1).execute(); expect(res.data.length, 1);