private void findGroupBy(MySqlSelectQueryBlock query, Select select) throws SqlParseException { SQLSelectGroupByClause groupBy = query.getGroupBy(); SQLTableSource sqlTableSource = query.getFrom(); if (groupBy == null) {
SQLSelectGroupByClause groupBy = x.getGroupBy(); if (groupBy != null) { println();
if (x.getGroupBy() != null) { println(); x.getGroupBy().accept(this);
if (x.getGroupBy() != null) { println(); x.getGroupBy().accept(this);
private void parseGroupCommon(RouteResultset rrs, MySqlSelectQueryBlock mysqlSelectQuery, TableConfig tc) { if (mysqlSelectQuery.getGroupBy() != null) { SQLSelectGroupByClause groupBy = mysqlSelectQuery.getGroupBy(); boolean hasPartitionColumn = false; for (SQLExpr groupByItem : groupBy.getItems()) { if (isNeedOptimizer(groupByItem)) { rrs.setNeedOptimizer(true); return; } else if (groupByItem instanceof SQLIdentifierExpr) { SQLIdentifierExpr item = (SQLIdentifierExpr) groupByItem; if (item.getSimpleName().equalsIgnoreCase(tc.getPartitionColumn())) { hasPartitionColumn = true; } } else if (groupByItem instanceof SQLPropertyExpr) { SQLPropertyExpr item = (SQLPropertyExpr) groupByItem; if (item.getSimpleName().equalsIgnoreCase(tc.getPartitionColumn())) { hasPartitionColumn = true; } } } if (groupBy.getItems().size() > 0 && !hasPartitionColumn) { rrs.setNeedOptimizer(true); return; } if (groupBy.getItems().size() == 0 && groupBy.getHaving() != null) { // only having filter need optimizer rrs.setNeedOptimizer(true); } } }
if(mysqlSelectQuery.getGroupBy() == null) { return; List<SQLExpr> groupByItems = mysqlSelectQuery.getGroupBy().getItems(); if (groupByItems == null || groupByItems.size() == 0){ return;
SQLSelectGroupByClause groupBy = x.getGroupBy(); if (groupBy != null) { println();
private void findGroupBy(MySqlSelectQueryBlock query, Select select) throws SqlParseException { SQLSelectGroupByClause groupBy = query.getGroupBy(); SQLTableSource sqlTableSource = query.getFrom(); if (groupBy == null) {
private void parseAggGroupCommon(SchemaConfig schema, SQLStatement stmt, RouteResultset rrs, MySqlSelectQueryBlock mysqlSelectQuery, TableConfig tc) throws SQLException { Map<String, String> aliaColumns = new HashMap<>(); boolean isDistinct = (mysqlSelectQuery.getDistionOption() == SQLSetQuantifier.DISTINCT) || (mysqlSelectQuery.getDistionOption() == SQLSetQuantifier.DISTINCTROW); parseAggExprCommon(schema, rrs, mysqlSelectQuery, aliaColumns, tc, isDistinct); if (rrs.isNeedOptimizer()) { tryAddLimit(schema, tc, mysqlSelectQuery); rrs.setSqlStatement(stmt); return; } // distinct change to group by if (isDistinct) { mysqlSelectQuery.setDistionOption(0); SQLSelectGroupByClause groupBy = new SQLSelectGroupByClause(); for (String fieldName : aliaColumns.keySet()) { groupBy.addItem(new SQLIdentifierExpr(fieldName)); } mysqlSelectQuery.setGroupBy(groupBy); } // setGroupByCols if (mysqlSelectQuery.getGroupBy() != null) { List<SQLExpr> groupByItems = mysqlSelectQuery.getGroupBy().getItems(); String[] groupByCols = buildGroupByCols(groupByItems, aliaColumns); rrs.setGroupByCols(groupByCols); } if (isDistinct) { rrs.changeNodeSqlAfterAddLimit(statementToString(stmt), 0, -1); } }
@Test public void testGroupbyHaving() { MySqlSelectQueryBlock query = getQuery("select col1 from table1 group by col1 having count(*)>1 "); SQLSelectGroupByClause groupBy = query.getGroupBy(); SQLExpr q = groupBy.getHaving(); MySQLItemVisitor v = new MySQLItemVisitor(this.currentDb, utf8Charset, null); q.accept(v); Item item = v.getItem(); Assert.assertEquals(true, "COUNT(*) > 1".equals(item.getItemName())); }
@Test public void testGroupby() { MySqlSelectQueryBlock query = getQuery("select col1,col2 from table1 group by col1,col2"); SQLSelectGroupByClause groupBy = query.getGroupBy(); int i = 0; for (SQLExpr p : groupBy.getItems()) { i++; String groupCol = "col" + i; MySQLItemVisitor v = new MySQLItemVisitor(this.currentDb, utf8Charset, null); p.accept(v); Item item = v.getItem(); Assert.assertEquals(true, groupCol.equals(item.getItemName())); } }
@Test public void testGroupbyOrder() { MySqlSelectQueryBlock query = getQuery("select col1,col2 from table1 group by col1 desc,col2 asc "); SQLSelectGroupByClause groupBy = query.getGroupBy(); int i = 0; for (SQLExpr p : groupBy.getItems()) { i++; String groupCol = "col" + i; MySqlOrderingExpr groupitem = (MySqlOrderingExpr) p; SQLExpr q = groupitem.getExpr(); MySQLItemVisitor v = new MySQLItemVisitor(this.currentDb, utf8Charset, null); q.accept(v); Item item = v.getItem(); Assert.assertEquals(true, groupCol.equals(item.getItemName())); } }
if (selectQueryBlock.getGroupBy() != null) { SQLSelectGroupByClause groupBy = selectQueryBlock.getGroupBy(); for (SQLExpr groupByItem : groupBy.getItems()) { System.out.println("groupByItem:");
SQLSelectGroupByClause groupBy = sqlSelectQuery.getGroupBy(); if (groupBy != null) { handleGroupBy(groupBy);
if (x.getGroupBy() != null) { println(); x.getGroupBy().accept(this);
if (x.getGroupBy() != null) { println(); x.getGroupBy().accept(this);