00001
00002
00003
00004
00005
00006 #include "SQLtoSQLQueryTranslator.h"
00007
00008 using namespace LcgInfo;
00009 using namespace std;
00010
00011
00012
00013 SQLtoSQLQueryTranslator::SQLtoSQLQueryTranslator()
00014 : SQLQueryTranslator(){
00015 }
00016
00017 SQLtoSQLQueryTranslator::SQLtoSQLQueryTranslator(string const & pMapFile)
00018 : SQLQueryTranslator(pMapFile){
00019 }
00020
00021 SQLtoSQLQueryTranslator::SQLtoSQLQueryTranslator(LcgConfigBuffer::ConfigBuffer & pMap)
00022 : SQLQueryTranslator(pMap){
00023 }
00024
00025 SQLtoSQLQueryTranslator::~SQLtoSQLQueryTranslator(){
00026 }
00027
00028 vector<string> SQLtoSQLQueryTranslator::translateQuery(string const & pQueryCanonical){
00029
00030
00031 SQLPredicateTree * pred=new SQLtoSQLPredicateTree();
00032 vector<string> rows;
00033 set<string> tables;
00034 string translated;
00035 vector<string> result;
00036
00037
00038 translateSemantic(pQueryCanonical, *pred, rows, tables);
00039
00040
00041 translated="SELECT";
00042 for(vector<string>::iterator i=rows.begin(); i!=rows.end(); i++)
00043 translated += (" " + (*i));
00044 translated += " FROM";
00045 for(set<string>::iterator i=tables.begin(); i!=tables.end(); i++)
00046 translated += (" " + (*i));
00047 if(!pred->empty())
00048 translated += " WHERE " + pred->evaluate(result);
00049
00050 delete pred;
00051
00052 result.push_back(translated);
00053 return result;
00054
00055 }
00056