private void findOrderBy(MySqlSelectQueryBlock query, Select select) throws SqlParseException { SQLOrderBy orderBy = query.getOrderBy(); if (orderBy == null) { return; } List<SQLSelectOrderByItem> items = orderBy.getItems(); addOrderByToSelect(select, items, null); }
@Override public boolean visit(MySqlSelectQueryBlock x) { SQLOrderBy orderBy = x.getOrderBy(); SQLLimit limit = x.getLimit(); if (limit != null && (orderBy == null || orderBy.getItems().size() == 0)) { boolean subQueryHasOrderBy = false; SQLTableSource from = x.getFrom(); if (from instanceof SQLSubqueryTableSource) { SQLSubqueryTableSource subqueryTabSrc = (SQLSubqueryTableSource) from; SQLSelect select = subqueryTabSrc.getSelect(); if (select.getQuery() instanceof SQLSelectQueryBlock) { SQLSelectQueryBlock subquery = (SQLSelectQueryBlock) select.getQuery(); if (subquery.getOrderBy() != null && subquery.getOrderBy().getItems().size() > 0) { subQueryHasOrderBy = true; } } } if (!subQueryHasOrderBy) { unorderedLimitCount++; } } return true; } }
public JoinSelect parseJoinSelect(SQLQueryExpr sqlExpr) throws SqlParseException { MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery(); List<From> joinedFrom = findJoinedFrom(query.getFrom()); if (joinedFrom.size() != 2) throw new RuntimeException("currently supports only 2 tables join"); JoinSelect joinSelect = createBasicJoinSelectAccordingToTableSource((SQLJoinTableSource) query.getFrom()); List<Hint> hints = parseHints(query.getHints()); joinSelect.setHints(hints); String firstTableAlias = joinedFrom.get(0).getAlias(); String secondTableAlias = joinedFrom.get(1).getAlias(); Map<String, Where> aliasToWhere = splitAndFindWhere(query.getWhere(), firstTableAlias, secondTableAlias); Map<String, List<SQLSelectOrderByItem>> aliasToOrderBy = splitAndFindOrder(query.getOrderBy(), firstTableAlias, secondTableAlias); List<Condition> connectedConditions = getConditionsFlatten(joinSelect.getConnectedWhere()); joinSelect.setConnectedConditions(connectedConditions); fillTableSelectedJoin(joinSelect.getFirstTable(), query, joinedFrom.get(0), aliasToWhere.get(firstTableAlias), aliasToOrderBy.get(firstTableAlias), connectedConditions); fillTableSelectedJoin(joinSelect.getSecondTable(), query, joinedFrom.get(1), aliasToWhere.get(secondTableAlias), aliasToOrderBy.get(secondTableAlias), connectedConditions); updateJoinLimit(query.getLimit(), joinSelect); //todo: throw error feature not supported: no group bys on joins ? return joinSelect; }
SQLOrderBy orderBy = x.getOrderBy(); if (orderBy != null) { println();
@Override public boolean visit(MySqlSelectQueryBlock x) { SQLOrderBy orderBy = x.getOrderBy(); SQLLimit limit = x.getLimit(); if (limit != null && (orderBy == null || orderBy.getItems().size() == 0)) { boolean subQueryHasOrderBy = false; SQLTableSource from = x.getFrom(); if (from instanceof SQLSubqueryTableSource) { SQLSubqueryTableSource subqueryTabSrc = (SQLSubqueryTableSource) from; SQLSelect select = subqueryTabSrc.getSelect(); if (select.getQuery() instanceof SQLSelectQueryBlock) { SQLSelectQueryBlock subquery = (SQLSelectQueryBlock) select.getQuery(); if (subquery.getOrderBy() != null && subquery.getOrderBy().getItems().size() > 0) { subQueryHasOrderBy = true; } } } if (!subQueryHasOrderBy) { unorderedLimitCount++; } } return true; } }
public boolean visit(MySqlSelectQueryBlock x) { if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); if (x.getOrderBy() != null) { println(); x.getOrderBy().accept(this);
if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); for (SQLSelectOrderByItem orderbyItem : x.getOrderBy().getItems()) { String orderByName = ((SQLName) orderbyItem.getExpr()).getSimpleName(); if (!itemSet.contains(orderByName)) { if (x.getOrderBy() != null) { println(); x.getOrderBy().accept(this);
private void findOrderBy(MySqlSelectQueryBlock query, Select select) throws SqlParseException { SQLOrderBy orderBy = query.getOrderBy(); if (orderBy == null) { return; } List<SQLSelectOrderByItem> items = orderBy.getItems(); addOrderByToSelect(select, items, null); }
private void parseOrderAggGroupMysql(SchemaConfig schema, SQLStatement stmt, RouteResultset rrs, MySqlSelectQueryBlock mysqlSelectQuery, TableConfig tc) throws SQLException { //simple merge of ORDER BY has bugs,so optimizer here if (mysqlSelectQuery.getOrderBy() != null) { tryAddLimit(schema, tc, mysqlSelectQuery); rrs.setSqlStatement(stmt); rrs.setNeedOptimizer(true); return; } parseAggGroupCommon(schema, stmt, rrs, mysqlSelectQuery, tc); }
public JoinSelect parseJoinSelect(SQLQueryExpr sqlExpr) throws SqlParseException { MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery(); List<From> joinedFrom = findJoinedFrom(query.getFrom()); if (joinedFrom.size() != 2) throw new RuntimeException("currently supports only 2 tables join"); JoinSelect joinSelect = createBasicJoinSelectAccordingToTableSource((SQLJoinTableSource) query.getFrom()); List<Hint> hints = parseHints(query.getHints()); joinSelect.setHints(hints); String firstTableAlias = joinedFrom.get(0).getAlias(); String secondTableAlias = joinedFrom.get(1).getAlias(); Map<String, Where> aliasToWhere = splitAndFindWhere(query.getWhere(), firstTableAlias, secondTableAlias); Map<String, List<SQLSelectOrderByItem>> aliasToOrderBy = splitAndFindOrder(query.getOrderBy(), firstTableAlias, secondTableAlias); List<Condition> connectedConditions = getConditionsFlatten(joinSelect.getConnectedWhere()); joinSelect.setConnectedConditions(connectedConditions); fillTableSelectedJoin(joinSelect.getFirstTable(), query, joinedFrom.get(0), aliasToWhere.get(firstTableAlias), aliasToOrderBy.get(firstTableAlias), connectedConditions); fillTableSelectedJoin(joinSelect.getSecondTable(), query, joinedFrom.get(1), aliasToWhere.get(secondTableAlias), aliasToOrderBy.get(secondTableAlias), connectedConditions); updateJoinLimit(query.getLimit(), joinSelect); //todo: throw error feature not supported: no group bys on joins ? return joinSelect; }
SQLOrderBy orderBy = x.getOrderBy(); if (orderBy != null) { println();
if (mysqlSelectQuery.getOrderBy() == null){ return; List<SQLSelectOrderByItem> orderByItems = mysqlSelectQuery.getOrderBy().getItems(); if (orderByItems == null || orderByItems.size() == 0){ return;
@Test public void testOrderby() { MySqlSelectQueryBlock query = getQuery("select col1,col2 from table1 order by col1 asc, col2 desc "); SQLOrderBy orderBy = query.getOrderBy(); int i = 0; for (SQLSelectOrderByItem p : orderBy.getItems()) { i++; String orderCol = "col" + i; SQLExpr expr = p.getExpr(); MySQLItemVisitor v = new MySQLItemVisitor(this.currentDb, utf8Charset, null); expr.accept(v); Item item = v.getItem(); Assert.assertEquals(true, orderCol.equals(item.getItemName())); } }
if (selectQueryBlock.getOrderBy() != null) { for (SQLSelectOrderByItem orderItem : selectQueryBlock.getOrderBy().getItems()) { System.out.println("OrderBy:"); System.out.println("class :" + orderItem.getExpr().getClass());
@Override public boolean visit(MySqlSelectQueryBlock x) { if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); if (x.getOrderBy() != null) { println(); x.getOrderBy().accept(this);
@Override public boolean visit(MySqlSelectQueryBlock x) { if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); if (x.getOrderBy() != null) { println(); x.getOrderBy().accept(this);
SQLOrderBy orderBy = sqlSelectQuery.getOrderBy(); if (orderBy != null) { handleOrderBy(orderBy);