package com.tesora.dve.queryplan; /* * #%L * Tesora Inc. * Database Virtualization Engine * %% * Copyright (C) 2011 - 2014 Tesora Inc. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ import java.util.ArrayList; import java.util.List; import com.tesora.dve.db.DBResultConsumer; import com.tesora.dve.exceptions.PEException; import com.tesora.dve.resultset.ColumnSet; import com.tesora.dve.server.connectionmanager.SSConnection; import com.tesora.dve.worker.MysqlTextResultCollector; import com.tesora.dve.worker.WorkerGroup; public class QueryStepFilterOperation extends QueryStepOperation { QueryStepOperation source; OperationFilter filter; public QueryStepFilterOperation(QueryStepOperation src, OperationFilter filter) throws PEException { super(src.sg); this.source = src; this.filter = filter; } @Override public void executeSelf(ExecutionState execState, WorkerGroup wg, DBResultConsumer resultConsumer) throws Throwable { MysqlTextResultCollector tempRc = new MysqlTextResultCollector(true); source.executeSelf(execState, wg, tempRc); filter.filter(execState.getConnection(), tempRc.getColumnSet(), tempRc.getRowData(), tempRc); } @Override public boolean requiresTransactionSelf() { return source.requiresTransactionSelf(); } @Override public boolean requiresWorkers() { return source.requiresWorkers(); } @Override public boolean requiresImplicitCommit() { return source.requiresImplicitCommit(); } public interface OperationFilter { /** * @param ssCon - input - reference to relevant SSConnection * @param columnSet - input - column metadata * @param rowData - input - list of row data packets * @param results - output - this will be filled in by the filter method * @throws Throwable */ public void filter(SSConnection ssCon, ColumnSet columnSet, List<ArrayList<String>> rowData, DBResultConsumer results) throws Throwable; // for testing public String describe(); } }