SODA Sorting

SODA query API gives you a possibility to sort any field in ascending or descending order and combine sorting of different fields. For example, let's retrieve the objects of the Pilot class saved beforenew, sorting "points" field in descending order and "name" field in ascending.

SortingExample.cs: GetObjectsSODA
01public static void GetObjectsSODA() 02 { 03 IObjectContainer db = Db4oFactory.OpenFile(YapFileName); 04 try 05 { 06 IQuery query = db.Query(); 07 query.Constrain(typeof(Pilot)); 08 query.Descend("_name").OrderAscending(); 09 query.Descend("_points").OrderDescending(); 10 DateTime dt1 = DateTime.UtcNow; 11 IObjectSet result = query.Execute(); 12 DateTime dt2 = DateTime.UtcNow; 13 TimeSpan diff = dt2 - dt1; 14 Console.WriteLine("Time to query and sort with SODA: " + diff.Milliseconds + " ms."); 15 ListResult(result); 16 } 17 finally 18 { 19 db.Close(); 20 } 21 }

SortingExample.vb: GetObjectsSODA
01Public Shared Sub GetObjectsSODA() 02 Dim db As IObjectContainer = Db4oFactory.OpenFile(YapFileName) 03 Try 04 Dim query As IQuery = db.Query 05 query.Constrain(GetType(Pilot)) 06 query.Descend("_name").OrderAscending() 07 query.Descend("_points").OrderDescending() 08 Dim dt1 As DateTime = DateTime.UtcNow 09 Dim result As IObjectSet = query.Execute 10 Dim dt2 As DateTime = DateTime.UtcNow 11 Dim diff As TimeSpan = dt2 - dt1 12 Console.WriteLine("Time to query and sort with SODA: " + diff.Milliseconds.ToString() + " ms.") 13 ListResult(result) 14 Finally 15 db.Close() 16 End Try 17 End Sub


Obvious disadvantages of this method:

  • limitations of SODA queries (not type-safe and not compile-time checked);
  • limitations if sorting mechanism (only alphabetical for strings, numerical for numbers and object id for objects)

The valuable advantage of this method is its high performance.