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