18 #ifndef QUERY_GRAPH_ANALYZER_SOURCE
19 #define QUERY_GRAPH_ANALYZER_SOURCE
45 int computationLabel = 0;
46 std::vector<std::string> tcapStrings;
47 for (
int i = 0; i < this->
queryGraph.size(); i++) {
49 std::vector<InputTupleSetSpecifier> inputTupleSets;
51 inputTupleSets.push_back(inputTupleSet);
53 std::string outputTupleSetName =
"";
54 std::vector<std::string> outputColumnNames;
55 std::string addedOutputColumnName =
"";
56 traverse(tcapStrings, curSink, inputTupleSets, computationLabel,
57 outputTupleSetName, outputColumnNames, addedOutputColumnName);
60 std::string tcapStringToReturn =
"";
61 for (
int i = 0; i < tcapStrings.size(); i++) {
62 tcapStringToReturn += tcapStrings[i];
64 std::cout << tcapStringToReturn << std::endl;
65 return tcapStringToReturn;
70 std::vector<InputTupleSetSpecifier> inputTupleSets,
int &computationLabel,
71 std::string &outputTupleSetName,
72 std::vector<std::string> &outputColumnNames,
73 std::string &addedOutputColumnName) {
75 int numInputs = sink->getNumInputs();
76 std::string computationName = sink->getComputationType();
78 std::vector<InputTupleSetSpecifier> inputTupleSetsForMe;
79 for (
int i = 0; i < numInputs; i++) {
81 if (curSink->isTraversed() ==
false) {
82 traverse(tcapStrings, curSink, inputTupleSets, computationLabel,
83 outputTupleSetName, outputColumnNames, addedOutputColumnName);
84 curSink->setTraversed(
true);
87 outputTupleSetName = curSink->getOutputTupleSetName();
88 addedOutputColumnName = curSink->getOutputColumnToApply();
90 outputColumnNames.clear();
91 for (; j < outputColumnNames.size(); j++) {
92 if (addedOutputColumnName == outputColumnNames[j]) {
96 if (j == outputColumnNames.size()) {
97 outputColumnNames.push_back(addedOutputColumnName);
100 std::vector<std::string> addedOutputColumns;
101 addedOutputColumns.push_back(addedOutputColumnName);
104 inputTupleSetsForMe.push_back(curOutput);
106 outputColumnNames.clear();
107 addedOutputColumnName =
"";
108 std::string curTcapString = sink->toTCAPString(
109 inputTupleSetsForMe, computationLabel, outputTupleSetName,
110 outputColumnNames, addedOutputColumnName);
111 tcapStrings.push_back(curTcapString);
114 if (sink->isTraversed() ==
false) {
115 outputColumnNames.clear();
116 addedOutputColumnName =
"";
117 std::string curTcapString = sink->toTCAPString(
118 inputTupleSets, computationLabel, outputTupleSetName,
119 outputColumnNames, addedOutputColumnName);
120 tcapStrings.push_back(curTcapString);
123 outputTupleSetName = sink->getOutputTupleSetName();
124 addedOutputColumnName = sink->getOutputColumnToApply();
125 outputColumnNames.clear();
126 outputColumnNames.push_back(addedOutputColumnName);
133 sink->setTraversed(
false);
134 int numInputs = sink->getNumInputs();
135 for (
int i = 0; i < numInputs; i++) {
143 for (
int i = 0; i < this->
queryGraph.size(); i++) {
152 int numInputs = sink->getNumInputs();
153 for (
int i = 0; i < numInputs; i++) {
157 if (sink->isTraversed() ==
false) {
158 computations.push_back(sink);
159 sink->setTraversed(
true);
166 for (
int i = 0; i < this->
queryGraph.size(); i++) {
std::vector< Handle< Computation > > queryGraph
QueryGraphAnalyzer(std::vector< Handle< Computation >> &queryGraph)
void parseComputations(std::vector< Handle< Computation >> &computations, Handle< Computation > sink)
std::string parseTCAPString()
void traverse(std::vector< std::string > &tcapStrings, Handle< Computation > sink, std::vector< InputTupleSetSpecifier > inputTupleSets, int &computationLabel, std::string &outputTupleSetName, std::vector< std::string > &outputColumnNames, std::string &addedOutputColumnName)