import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import eu.leads.processor.execute.LeadsReducer; import eu.leads.processor.execute.TableInfo; import eu.leads.processor.execute.Tuple; import eu.leads.processor.execute.operators.FilterOperator; import eu.leads.processor.execute.operators.FilterOperatorMapper; import eu.leads.processor.execute.operators.OperatorType; import eu.leads.processor.plan.ExecutionPlan; import eu.leads.processor.plan.ExecutionPlanNode; import eu.leads.processor.plan.SelectExtractor; import eu.leads.processor.query.QueryContext; import eu.leads.processor.query.SQLQuery; import eu.leads.processor.sql.PlanNode; import eu.leads.processor.utils.InfinispanUtils; import eu.leads.processor.utils.Utilities; import net.sf.jsqlparser.parser.CCJSqlParserManager; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.create.table.CreateTable; import org.infinispan.Cache; import org.infinispan.distexec.mapreduce.MapReduceTask; import java.io.StringReader; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentMap; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 11/5/13 * Time: 12:46 AM * To change this template use File | Settings | File Templates. */ public class FilterOperatorTest { private static final int numOfTuples = 10; private static final String[] columnNames = {"url", "domain", "pagerank", "body", "sentiment"}; private static final String[] columnType = {"string", "string", "double", "string", "double"}; public static void main(String[] args) { InfinispanUtils.start(); // Map<String, String> tables = InfinispanUtils.getOrCreatePersistentMap("tables"); ConcurrentMap queries = InfinispanUtils.getOrCreatePersistentMap("queries"); ObjectMapper mapper = new ObjectMapper(); try { SQLQuery query = new SQLQuery("user", "location", "select url,domain from webpages where webpages.body like \'th\'", "SELECT"); query.setId("q1"); CCJSqlParserManager manager = new CCJSqlParserManager(); Statement s = manager.parse(new StringReader("create table webpages(url varchar(100) PRIMARY KEY, domain varchar(100), body varchar(100),pagerank double,sentiment double)")); CreateTable tt = (CreateTable) s; List<String> tablestrings = (List<String>) tt.getTableOptionsStrings(); TableInfo info = new TableInfo(tt.getTable(), tablestrings, tt.getColumnDefinitions()); Statement st = manager.parse(new StringReader(query.getQueryText())); JsonNode root = mapper.readTree(mapper.writeValueAsString(st)); SelectExtractor extractor = new SelectExtractor(root); QueryContext context = new QueryContext(query); context.addTable(info); query.setQueryContext(context); ExecutionPlan p = (ExecutionPlan) extractor.extractPlan("anoutput", context); ExecutionPlanNode filter = null; for (PlanNode node : p.getNodes()) { ExecutionPlanNode e = (ExecutionPlanNode) node; if (e.getType().equals(OperatorType.toString(OperatorType.FILTER))) { filter = e; break; } } queries.put(query.getId(), mapper.writeValueAsString(query)); FilterOperator f = (FilterOperator) filter; Cache<String, String> inputMap = (Cache<String, String>) InfinispanUtils.getOrCreatePersistentMap("testData"); for (int i = 0; i < numOfTuples; i++) { Tuple t = Utilities.generateTuple(columnNames, columnType); inputMap.put("test:" + (Integer.toString(i)), t.asString()); } System.out.println("intial"); Utilities.printMap(inputMap); MapReduceTask<String, String, String, String> task = new MapReduceTask<String, String, String, String>(inputMap); Properties conf = new Properties(); conf.setProperty("output", "testOutput"); if(f.getTree() != null) conf.setProperty("tree", mapper.writeValueAsString(f.getTree())); conf.setProperty("queryId", context.getQueryId()); task.mappedWith(new FilterOperatorMapper(conf)).reducedWith(new LeadsReducer<String, String>(conf)); task.execute(); System.out.println("filtered"); Map<String, String> dataMap = InfinispanUtils.getOrCreatePersistentMap("data"); Utilities.printMap(dataMap); System.out.println("goodbye"); } catch (Exception e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }