private void generateMergeContext(final MergeContext mergeContext) {
   mergeContext
       .getAggregationColumns()
       .add(
           new AggregationColumn(
               "COUNT(id)", AggregationType.COUNT, Optional.of("c"), Optional.<String>absent()));
   mergeContext.getOrderByColumns().add(new OrderByColumn("id", "a", OrderByType.DESC));
   mergeContext.getGroupByColumns().add(new GroupByColumn("id", "d", OrderByType.ASC));
   mergeContext.setLimit(new Limit(0, 10));
 }
 private StatementExecutor generateExecutor(final String sql) throws SQLException {
   StatementExecutor result =
       new StatementExecutor(shardingConnection.getShardingContext().getExecutorEngine());
   SQLRouteResult sqlRouteResult =
       shardingConnection
           .getShardingContext()
           .getSqlRouteEngine()
           .route(sql, Collections.emptyList());
   mergeContext = sqlRouteResult.getMergeContext();
   mergeContext.setExecutorEngine(shardingConnection.getShardingContext().getExecutorEngine());
   for (SQLExecutionUnit each : sqlRouteResult.getExecutionUnits()) {
     result.addStatement(
         new StatementExecutorWrapper(
             generateStatement(each.getSql(), each.getDataSource()), each));
   }
   return result;
 }