import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.leads.processor.execute.TableInfo;
import eu.leads.processor.plan.ExecutionPlan;
import eu.leads.processor.plan.SelectExtractor;
import eu.leads.processor.query.QueryContext;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import java.io.IOException;
import java.io.StringReader;
/**
* Created with IntelliJ IDEA.
* User: vagvaz
* Date: 11/4/13
* Time: 3:51 AM
* To change this template use File | Settings | File Templates.
*/
public class QueryContextTest {
public static void main(String[] args) {
String create = "create table test(id int not null primary key, url varchar(50), body varchar(100), pagerank double )";
String select = "select url,pagerank from test where id > 1 group by url order by pagerank limit 3";
ObjectMapper mapper = new ObjectMapper();
CCJSqlParserManager manager = new CCJSqlParserManager();
QueryContext context = new QueryContext();
try {
Statement c = manager.parse(new StringReader(create));
Statement s = manager.parse(new StringReader(select));
String cjson = mapper.writeValueAsString(c);
JsonNode root = mapper.readTree(cjson);
CreateTable ct = mapper.readValue(cjson.toString(), CreateTable.class);
// Table t = ct.getTable();
TableInfo ti = new TableInfo(ct.getTable(), null, ct.getColumnDefinitions());
context.addTable(ti);
String sjson = mapper.writeValueAsString(s);
root = mapper.readTree(sjson);
SelectExtractor extractor = new SelectExtractor(root);
ExecutionPlan p = extractor.extractPlan("theoutput", context);
System.out.println("plan " + p.toString());
System.out.println("c " + cjson);
String qjson = mapper.writeValueAsString(context);
QueryContext qc = mapper.readValue(qjson, QueryContext.class);
System.out.println("Before " + context.toString() + "\nAfter " + qc.toString() + "\nequal " + (context.toString().equals(qc.toString())));
} catch (JSQLParserException e) {
e.printStackTrace();
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}