zoukankan      html  css  js  c++  java
  • 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!

  • 相关阅读:
    airflow 安装问题
    ACM-单词接龙
    ACM-AK吧!少年
    ACM-Alice and Bob
    ACM-Satellite Photographs
    ACM-Subset sum
    ACM-Special Array
    数据挖掘-回归分析
    数据库原理-数据库系统的结构
    数据库原理-几种数据模型
  • 原文地址:https://www.cnblogs.com/zhouhui231/p/12445721.html
Copyright © 2011-2022 走看看