Search in sources :

Example 1 with DBCursor

use of com.sequoiadb.base.DBCursor in project Mycat-Server by MyCATApache.

the class SequoiaSQLParser method query.

public SequoiaData query() throws SequoiaSQLException {
    if (!(statement instanceof SQLSelectStatement)) {
        //return null;
        throw new IllegalArgumentException("not a query sql statement");
    }
    SequoiaData mongo = new SequoiaData();
    DBCursor c = null;
    SQLSelectStatement selectStmt = (SQLSelectStatement) statement;
    SQLSelectQuery sqlSelectQuery = selectStmt.getSelect().getQuery();
    int icount = 0;
    if (sqlSelectQuery instanceof MySqlSelectQueryBlock) {
        MySqlSelectQueryBlock mysqlSelectQuery = (MySqlSelectQueryBlock) selectStmt.getSelect().getQuery();
        BasicBSONObject fields = new BasicBSONObject();
        //显示的字段
        for (SQLSelectItem item : mysqlSelectQuery.getSelectList()) {
            //System.out.println(item.toString());
            if (!(item.getExpr() instanceof SQLAllColumnExpr)) {
                if (item.getExpr() instanceof SQLAggregateExpr) {
                    SQLAggregateExpr expr = (SQLAggregateExpr) item.getExpr();
                    if (expr.getMethodName().equals("COUNT")) {
                        icount = 1;
                        mongo.setField(getExprFieldName(expr), Types.BIGINT);
                    }
                    fields.put(getExprFieldName(expr), Integer.valueOf(1));
                } else {
                    fields.put(getFieldName(item), Integer.valueOf(1));
                }
            }
        }
        //表名
        SQLTableSource table = mysqlSelectQuery.getFrom();
        DBCollection coll = this._db.getCollection(table.toString());
        mongo.setTable(table.toString());
        SQLExpr expr = mysqlSelectQuery.getWhere();
        BSONObject query = parserWhere(expr);
        //System.out.println(query);
        SQLSelectGroupByClause groupby = mysqlSelectQuery.getGroupBy();
        BasicBSONObject gbkey = new BasicBSONObject();
        if (groupby != null) {
            for (SQLExpr gbexpr : groupby.getItems()) {
                if (gbexpr instanceof SQLIdentifierExpr) {
                    String name = ((SQLIdentifierExpr) gbexpr).getName();
                    gbkey.put(name, Integer.valueOf(1));
                }
            }
            icount = 2;
        }
        int limitoff = 0;
        int limitnum = 0;
        if (mysqlSelectQuery.getLimit() != null) {
            limitoff = getSQLExprToInt(mysqlSelectQuery.getLimit().getOffset());
            limitnum = getSQLExprToInt(mysqlSelectQuery.getLimit().getRowCount());
        }
        SQLOrderBy orderby = mysqlSelectQuery.getOrderBy();
        BasicBSONObject order = new BasicBSONObject();
        if (orderby != null) {
            for (int i = 0; i < orderby.getItems().size(); i++) {
                SQLSelectOrderByItem orderitem = orderby.getItems().get(i);
                order.put(orderitem.getExpr().toString(), Integer.valueOf(getSQLExprToAsc(orderitem.getType())));
            }
        //  c.sort(order); 
        // System.out.println(order);
        }
        if (icount == 1) {
            mongo.setCount(coll.getCount(query));
        } else if (icount == 2) {
            BasicBSONObject initial = new BasicBSONObject();
            initial.put("num", 0);
            String reduce = "function (obj, prev) { " + "  prev.num++}";
        //mongo.setGrouyBy(coll.group(gbkey, query, initial, reduce));			
        } else {
            if ((limitoff > 0) || (limitnum > 0)) {
                //.skip(limitoff).limit(limitnum);
                c = coll.query(query, fields, order, null, limitoff, limitnum);
            } else {
                c = coll.query(query, fields, order, null, 0, -1);
            }
        }
        mongo.setCursor(c);
    }
    return mongo;
}
Also used : BasicBSONObject(org.bson.BasicBSONObject) BSONObject(org.bson.BSONObject) MySqlSelectQueryBlock(com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock) SQLExpr(com.alibaba.druid.sql.ast.SQLExpr) BasicBSONObject(org.bson.BasicBSONObject) DBCollection(com.sequoiadb.base.DBCollection) DBCursor(com.sequoiadb.base.DBCursor)

Aggregations

SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)1 MySqlSelectQueryBlock (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock)1 DBCollection (com.sequoiadb.base.DBCollection)1 DBCursor (com.sequoiadb.base.DBCursor)1 BSONObject (org.bson.BSONObject)1 BasicBSONObject (org.bson.BasicBSONObject)1