func orderTable(rows []tableRow, order *parser.NodeOrder) []tableRow { if order == nil { return rows } // We will use parser.NodeGreater.Assertion(A, B) to know if // A > B and then switch their positions. // Unfortunaly, we will use bubble sort, that is O(n²) // @todo change to quick or other better sort. var orderer parser.NodeExpr if order.Asc { orderer = new(parser.NodeGreater) } else { orderer = new(parser.NodeSmaller) } field := order.Field key := "" for key, _ = range builder.tables { break } table := key err := builder.UseFieldFromTable(field, table) if err != nil { panic(err) } for i, row := range rows { for j, rowWalk := range rows { if orderer.Assertion(fmt.Sprintf("%v", rowWalk[field]), fmt.Sprintf("%v", row[field])) { aux := rows[j] rows[j] = rows[i] rows[i] = aux } } } return rows }