package com.taobao.tddl.repo.mysql.utils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.sql.DataSource; import com.taobao.tddl.executor.common.ExecutionContext; import com.taobao.tddl.executor.spi.IDataSourceGetter; import com.taobao.tddl.executor.spi.ITransaction; import com.taobao.tddl.executor.utils.ExecUtils; import com.taobao.tddl.optimizer.config.table.IndexMeta; import com.taobao.tddl.optimizer.core.ASTNodeFactory; import com.taobao.tddl.optimizer.core.expression.IColumn; import com.taobao.tddl.optimizer.core.expression.IOrderBy; import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor; import com.taobao.tddl.optimizer.core.plan.IQueryTree; import com.taobao.tddl.optimizer.core.plan.query.IQuery; import com.taobao.tddl.repo.mysql.spi.My_JdbcHandler; import com.taobao.tddl.repo.mysql.spi.My_Transaction; /** * @author mengshi.sunmengshi 2013-12-5 下午6:08:32 * @since 5.0.0 */ public class MysqlRepoUtils { public static List<IOrderBy> buildOrderBy(IDataNodeExecutor executor, IndexMeta indexMeta) { IQueryTree query = ((IQueryTree) executor); List<IOrderBy> orderBy = null; orderBy = query.getOrderBys(); if (orderBy == null || orderBy.isEmpty()) { List<IOrderBy> groupBys = query.getGroupBys(); orderBy = groupBys; } if (orderBy == null || orderBy.isEmpty()) { orderBy = ExecUtils.getOrderBy(indexMeta); } return ExecUtils.copyOrderBys(orderBy); } public static List<IOrderBy> buildOrderBy(IDataNodeExecutor executor, IndexMeta indexMeta, String tableName) { IQuery query = ((IQuery) executor); List<IOrderBy> orderBy = null; orderBy = query.getOrderBys(); if (orderBy == null || orderBy.isEmpty()) { List<IOrderBy> groupBys = query.getGroupBys(); orderBy = groupBys; } if (orderBy == null || orderBy.isEmpty()) { orderBy = ExecUtils.getOrderBy(indexMeta); } List<IOrderBy> orderbys = ExecUtils.copyOrderBys(orderBy); return orderbys; } public static My_JdbcHandler getJdbcHandler(IDataSourceGetter dsGetter, IDataNodeExecutor executor, ExecutionContext executionContext) { DataSource ds; My_JdbcHandler jdbcHandler = new My_JdbcHandler(executionContext); ds = dsGetter.getDataSource(executor.getDataNode()); My_Transaction my_transaction = null; ITransaction txn = executionContext.getTransaction(); if (txn != null) { if (txn instanceof My_Transaction) { my_transaction = (My_Transaction) txn; } } else { my_transaction = new My_Transaction(executionContext.isAutoCommit()); executionContext.setTransaction(my_transaction); } jdbcHandler.setDs(ds); jdbcHandler.setGroupName(executor.getDataNode()); jdbcHandler.setMyTransaction(my_transaction); jdbcHandler.setPlan(executor); return jdbcHandler; } protected static final List<IOrderBy> getOrderBy(List columns) { if (columns == null) { columns = Collections.EMPTY_LIST; } List<IOrderBy> orderBys = new ArrayList<IOrderBy>(columns.size()); for (Object cobj : columns) { IColumn c = ExecUtils.getColumn(cobj); orderBys.add(ASTNodeFactory.getInstance().createOrderBy().setColumn(c).setDirection(true)); } return orderBys; } }