simple sql query parser

labsquare <[email protected]>
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <CABeqv=UjJ8t1XKEb4S9=OwwHX6UwQQZ5qY9aQZCrQxxthQoOgA@mail.gmail.com>
I'm trying to parse a simple pseudo-SQL like query using boost spirit x3.
But I didn't succes to extract the condition alone. It takes all the string
to the end ( with the INSIDE part).
Here is my attempt . Any suggestion  ?
https://stackoverflow.com/questions/48033462/parse-sql-like-query-with-boost-spirit-x3

// SELECT chr, pos FROM table// Select chr, pos FROM table WHERE a=5
and b = 6// SELECT chr, pos FROM table WHERE a =5 and b=6 INSIDE
region
// I would like to extract :// vector<string> fields = {chr, pos}//
string tablename = "table"// string where  = "a=5 and b=6"// string
region = "region"

string source ="SELECT chr,pos FROM table WHERE a=5 AND b=6 INSIDE region";
// varname = chr, pos, table, region
auto varname =  x3::rule<class varname, string>()
             =  x3::lexeme[(x3::alpha >> *(x3::alnum|'_'|'.'))];
// any character except "INSIDE"
auto condition =  x3::rule<class condition, string>()
               =  x3::lexeme[*x3::char_]-"INSIDE";
// fields selection
auto selectRule = x3::rule<class fields, vector<string>> ()
                = "SELECT" >> varname % ",";

 //   table name
auto fromRule   = x3::rule<class fromRule, string>()
                = "FROM" >> varname;
// where clause
auto whereRule  = x3::rule<class whereRule, vector<string>>()
                = "WHERE" >> condition ;
// inside clause
auto insideRule = x3::rule<class insideRule, string>()
                = "INSIDE" >> varname;

auto begin = source.begin();
auto end   = source.end();

vector<string> results;

x3::phrase_parse(begin,end,
                 selectRule >> fromRule >> -(whereRule >>-insideRule),
                 x3::space, results);
if (begin != end)
    cout<<"COULD NOT PARSE"<<endl;else
    cout<<"parse succes"<<endl;
for (auto i : results)
    cout<<i<<endl;

It returns:

chr
postable
a=5 AND b=6 INSIDE region





-- 
-- 
Dr Sacha Schutz
médecine / génétique moléculaire
Bioinformaticien
+33651571606
dridk.me
www.labsquare.org
Fork me on github <https://github.com/>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

_______________________________________________
Spirit-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spirit-general
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.