Re: simple sql query parser

labsquare <[email protected]>
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <CABeqv=XD3hU1YiN4w-h9AvRR_gFJszL0rWOJhD8xcn8tShDzYQ@mail.gmail.com>
I don't know how, I don't know why... But It works !!!
Thank you very much !!

2017-12-31 2:31 GMT+01:00 Mike Gresens <[email protected]>:

> Try this:
>
>     // any character except "INSIDE"
>     auto condition =  x3::rule<class condition, string>()
>                    =  x3::lexeme[*(x3::char_ - "INSIDE")];
>
> Mike...
>
> Am 31.12.2017 um 01:49 schrieb labsquare:
>
> 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 [email protected]://lists.sourceforge.net/lists/listinfo/spirit-general
>
>
>


-- 
-- 
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.