java order_Java OrderCol类代码示例

import org.opencloudb.mpp.OrderCol; //导入依赖的package包/类

@Test

public void testSQL() throws SQLSyntaxErrorException, StandardException {

SelectParseInf parsInf = new SelectParseInf();

parsInf.ctx = new ShardingParseInfo();

String sql = null;

QueryTreeNode ast = null;

// test order by parse

sql = "select o.* from Orders o group by o.name order by o.id asc ,o.age desc limit 5,10";

parsInf.clear();

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

SelectSQLAnalyser.analyse(parsInf, ast);

RouteResultset rrs = new RouteResultset(sql,0);

String sql2 = SelectSQLAnalyser.analyseMergeInf(rrs, ast, true,-1);

Assert.assertEquals(

"SELECT o.* FROM orders AS o GROUP BY o.name ORDER BY o.id, o.age DESC LIMIT 15 OFFSET 0",

sql2);

Assert.assertEquals("name", rrs.getGroupByCols()[0]);

Assert.assertEquals(Integer.valueOf(OrderCol.COL_ORDER_TYPE_ASC), rrs.getOrderByCols().get("id"));

Assert.assertEquals(5, rrs.getLimitStart());

Assert.assertEquals(10, rrs.getLimitSize());

sql = "select o.name,count(o.id) as total, max(o.mx) as maxOders,sum(MOD2(29,9)),min(o.price) from Orders o group by name";

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

rrs = new RouteResultset(sql,0);

SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

Assert.assertEquals(true, rrs.isHasAggrColumn());

Assert.assertEquals(2, rrs.getMergeCols().size());

sql2 = SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

// aggregate column should has alias in order to used in oder by clause

sql = "select count(*) from orders order by count(*) desc";

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

rrs = new RouteResultset(sql,0);

SQLSyntaxErrorException e=null;

try

{

SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

}catch(SQLSyntaxErrorException e1)

{

e=e1;

}

Assert.assertNotNull(e);

Assert.assertEquals(true, rrs.isHasAggrColumn());

// aggregate column should has alias in order to used in oder by clause

sql = "select count(*) as total from orders order by total desc";

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

rrs = new RouteResultset(sql,0);

SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

Assert.assertEquals(true, rrs.isHasAggrColumn());

Assert.assertEquals(Integer.valueOf(OrderCol.COL_ORDER_TYPE_DESC), rrs.getOrderByCols().get("total"));

// order by column has alias and should be 'modified' to alias

sql = "select id as myid from person order by id";

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

rrs = new RouteResultset(sql,0);

SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

Assert.assertEquals(Integer.valueOf(OrderCol.COL_ORDER_TYPE_ASC), rrs.getOrderByCols().get("myid"));

// aggregate column has alias

sql = "select counT(*) as TOTaL from person order by toTal";

ast = SQLParserDelegate.parse(sql, SQLParserDelegate.DEFAULT_CHARSET);

rrs = new RouteResultset(sql,0);

SelectSQLAnalyser.analyseMergeInf(rrs, ast, false,-1);

Map mergeCols=rrs.getMergeCols();

Assert.assertEquals(1,mergeCols.size());

Assert.assertEquals(Integer.valueOf(MergeCol.MERGE_COUNT),mergeCols.get("total"));

Assert.assertEquals(1,rrs.getOrderByCols().size());

Assert.assertEquals(Integer.valueOf(OrderCol.COL_ORDER_TYPE_ASC),rrs.getOrderByCols().get("total"));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值