wcdb中使用rowid做查询条件

近期有个需求是需要通过rowid的方式降序查询所有的结果,具体的SQL语句是这样的

select * from tbl_mail_recent_list order by rowid desc

rowid作为sqlite里面相对特殊的属性,是可以直接使用的,但是对于wcdb的WINQ语法那就麻烦了,于是在wcdb的GitHub的demo翻个遍没找到相应的用例,只好自己想思路了:

  • wcdb是否提供rowid字段?
  • oder方法如何自定义?

第一个问题简单,wcdb是开源的,自己搜索一下字段发现wcdb是提供相关属性的,

class Column : public Describable {
public:
		...
    static const Column Rowid;
    ...
};

有了这个属性如何使用呢,第二个问题就是要看下Oder是怎么封装到WINQ里面的,查询条件里面携带oderdy的方法里面需要传入一个WCTOrderByList对象,抽丝剥茧看到这个list需要传入什么对象

typedef WCDB::OrderList WCTOrderByList;
typedef std::list<const Order> OrderList;

可以看到传入的对象就是Oder对象了,那就顺势看下Oder对象的定义,发现两个构造函数,第二个构造函数简单,只需要两个参数,第一个就是statement,第二个就是OrderTerm枚举:{ASC和DESC},离成功只差一步了,哈哈~

class Order : public Describable {
public:
    Order(const Expr &expr, const std::string &collation, OrderTerm term = OrderTerm::NotSet);
    Order(const Expr &expr, OrderTerm term = OrderTerm::NotSet);

    operator OrderList() const;
};

最后编写出来的结果是:

WCTOrderBy wctOrder = WCDB::Order(WCTExpr(WCDB::Column::Rowid), WCDB::OrderTerm::DESC);
WCTColumnsXRows  *resultRows = [database getRowsOnResults:{CMailRecentList.name, CMailRecentList.address} fromTable:kTbl_RecentList where:expr orderBy:{wctOrder} limit:limit];

Enjoy!

原文链接: https://www.cnblogs.com/zhouhui231/p/12445721.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    wcdb中使用rowid做查询条件

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194120

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:35
下一篇 2023年2月12日 下午6:36

相关推荐