The extended ORDER BY clause is working with latest Dev branch:
auto statement = storage.prepare(select(columns(&Employee::m_ename, &Employee::m_salary, &Employee::m_commission),
order_by(case_<int>().when(is_null(&Employee::m_commission), then(0)).else_(1).end()).desc()));
auto sql = statement.expanded_sql();
auto rows = storage.execute(statement);
Schema would be:
struct Employee
{
int m_empno;
std::string m_ename;
std::string m_job;
std::optional<int> m_mgr;
std::string m_hiredate;
double m_salary;
std::optional<double> m_commission;
int m_deptno;
};
struct Department
{
int m_deptno;
std::string m_deptname;
std::string m_loc;
};
auto storage = make_storage("SQLCookbook.sqlite",
make_table("Emp",
make_column("empno", &Employee::m_empno, primary_key(), autoincrement()),
make_column("ename", &Employee::m_ename),
make_column("job", &Employee::m_job),
make_column("mgr", &Employee::m_mgr),
make_column("hiredate", &Employee::m_hiredate),
make_column("salary", &Employee::m_salary),
make_column("comm", &Employee::m_commission),
make_column("deptno", &Employee::m_deptno),
foreign_key(&Employee::m_deptno).references(&Department::m_deptno)),
make_table("Dept",
make_column("deptno", &Department::m_deptno, primary_key(), autoincrement()),
make_column("deptname", &Department::m_deptname),
make_column("loc", &Department::m_loc)));
The extended ORDER BY clause is working with latest Dev branch:
Schema would be: