| 1 | #include <sstream> | 
|---|---|
| 2 | #include <string> | 
| 3 | |
| 4 | #include "dump.hh" | 
| 5 | #include "util.hh" | 
| 6 | |
| 7 | using namespace std; | 
| 8 | |
| 9 | std::string graphml_dumper::id(struct prod *p) { | 
| 10 | ostringstream os; | 
| 11 | os << pretty_type(p) << "_"<< p; | 
| 12 | return os.str(); | 
| 13 | } | 
| 14 | |
| 15 | graphml_dumper::graphml_dumper(ostream &out) : o(out) { | 
| 16 | o << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"<< endl | 
| 17 | << "<graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" " | 
| 18 | << "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " | 
| 19 | << "xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns " | 
| 20 | << "http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\">"<< endl; | 
| 21 | |
| 22 | o << "<key id=\"retries\" for=\"node\" " | 
| 23 | "attr.name=\"retries\" attr.type=\"double\" />" | 
| 24 | << endl; | 
| 25 | o << "<key id=\"label\" for=\"node\" " | 
| 26 | "attr.name=\"label\" attr.type=\"string\" />" | 
| 27 | << endl; | 
| 28 | o << "<key id=\"scope\" for=\"node\" " | 
| 29 | "attr.name=\"scope\" attr.type=\"string\" />" | 
| 30 | << endl; | 
| 31 | |
| 32 | o << "<graph id=\"ast\" edgedefault=\"directed\">"<< endl; | 
| 33 | } | 
| 34 | |
| 35 | void graphml_dumper::visit(struct prod *p) { | 
| 36 | o << "<node id=\""<< id(p) << "\">"; | 
| 37 | o << "<data key=\"retries\">"<< p->retries << "</data>"; | 
| 38 | o << "<data key=\"label\">"<< pretty_type(p) << "</data>"; | 
| 39 | o << "<data key=\"scope\">"<< p->scope << "</data>"; | 
| 40 | o << "</node>"<< endl; | 
| 41 | if (p->pprod) { | 
| 42 | o << "<edge source=\""<< id(p) << "\" target=\""<< id(p->pprod) << "\"/>"; | 
| 43 | } | 
| 44 | o << endl; | 
| 45 | } | 
| 46 | |
| 47 | graphml_dumper::~graphml_dumper() { | 
| 48 | o << "</graph></graphml>"<< endl; | 
| 49 | } | 
| 50 | |
| 51 | void ast_logger::generated(prod &query) { | 
| 52 | string filename( ""); | 
| 53 | filename += "sqlsmith-"; | 
| 54 | filename += to_string(queries); | 
| 55 | filename += ".xml"; | 
| 56 | ofstream os(filename); | 
| 57 | graphml_dumper visitor(os); | 
| 58 | query.accept(&visitor); | 
| 59 | queries++; | 
| 60 | } | 
| 61 | 
