Parser gesucht

Hallo allerseits,
ich soll ein Web-Formular zur Abfrage einer MySQL-Datenbank erstellen. Mehrere Popup-Menus, in denen man den jeweiligen Spaltenname auswählen kann und jeweils daneben Texteingabefelder um die Abfrage zu formulieren. So weit, so Routine. Das Problem (zumindest für mich) ist nun, dass man in die Eingabefelder nicht einfach nur einen Begriff schreiben kann, sondern auch logische Ausdrücke, hier einige Beispiele:

(Banane ODER Apfelsine) UND Kokosnuss

Apfel UND NICHT \*nuss

(*nuss ist dann eben Haselnuss, Kokosnuss usw.)

\> 3 kg

1 kg ... 3 kg

Mir ist klar, dass ich das ganze erst mal parsen muss, um zu sehen ob die Abfrage auch syntaktisch richtig ist. Da ich mir aber sicher bin, dass diese Aufgabenstellung schon sehr oft gelöst wurde, habe ich mir überlegt, dass es dazu bestimmt schon ein passendes Softwaretool gibt, das mir die Arbeit abnimmt, bzw. erleichert. Leider kenne ich keins, und wenn ich nach „MySql Parser“ google, lande ich meistens beim internen MySQL-Parser, was mir ja nicht so richtig weiterhilft. Deshalb meine Anfrage:
Kennt jemand so ein Tool zum Parsen von derartigen Anfragen, am besten noch im Zusammenhang mit MySQL. Ach ja, kostenlos wäre natürlich nicht schlecht, aber zur Not darf es auch etwas kosten.

Vielen Dank schon mal
Klaus Bernstein

Hallo,

Mir ist klar, dass ich das ganze erst mal parsen muss, um zu
sehen ob die Abfrage auch syntaktisch richtig ist.

Wieso gibst du den Code nicht an die DB-Engine weiter, und lieferst bei Fehlern die Fehlermeldung zurück? Wenn du den Aufwand des parsens duplizierst, erzeugst du zusätzliche Fehlerquellen und verlangsamst die Anwendung.

Kennt jemand so ein Tool zum Parsen von derartigen Anfragen,
am besten noch im Zusammenhang mit MySQL. Ach ja, kostenlos
wäre natürlich nicht schlecht, aber zur Not darf es auch etwas
kosten.

Wenn du nichts gegen Perl hast:

SQL::YASP - SQL parser and evaluater
http://search.cpan.org/~miko/SQL-YASP-0.11/YASP.pm

SQL::stuck_out_tongue:arser – validate and parse SQL strings
http://search.cpan.org/~jzucker/SQL-Statement-1.15/l…

DBIx::MyParse - Perl API for MySQL’s SQL Parser (Interface zum Parser von mysql):
http://search.cpan.org/~philips/DBIx-MyParse-0.82/li…

Alles kostenlos und open source :wink:

Grüße,
Moritz

Hallo,

wenn es nur die paar Optionen sind geht das in einen regulaeren Ausdruck.

http://de.wikipedia.org/wiki/Regulärer_Ausdruck

Ciao! Bjoern

Hallo Bjoern,

wenn es nur die paar Optionen sind geht das in einen
regulaeren Ausdruck.

Vielen Dank, aber wie das mit regulären Ausdrücke gehen soll erschliesst sich mir noch nicht so richtig. Wäre nett, wenn Du das etwas näher erläutern könntest…
Ansonsten, ich kenne reguläre Ausdrücke schon ein wenig, von sed, gawk, Perl und Ruby und auch von der bash.

Mit freundlichen Grüssen
Klaus Bernstein

Hallo moritz,

Mir ist klar, dass ich das ganze erst mal parsen muss, um zu
sehen ob die Abfrage auch syntaktisch richtig ist.

Wieso gibst du den Code nicht an die DB-Engine weiter, und
lieferst bei Fehlern die Fehlermeldung zurück? Wenn du den
Aufwand des parsens duplizierst, erzeugst du zusätzliche
Fehlerquellen und verlangsamst die Anwendung.

Das mit den Fehlermeldungen habe ich mir auch schon überlegt, habe mir aber gedacht, dass dies schon einen Schritt weiter ist, weil ich ja da schon die korrekte SQL-Abfrage konstruiert haben muss. Ich kann ja MySQL nicht

...WHERE apfel OR birne

hinsetzen, sondern muss

...WHERE obst=apfel OR obst=birne

draus machen. Und dann möchten die Herren auch gerne, dass nicht bloss dasteht „Klammerung falsch“, sondern z.B. zwei Zeilen, etwa so:

(apfel OR birne)) AND banane

schliessende Klammer hinter birne zuviel

Und das bringen mir die Fehlermeldungen wohl nicht, oder?

Kennt jemand so ein Tool zum Parsen von derartigen Anfragen,
am besten noch im Zusammenhang mit MySQL.

Wenn du nichts gegen Perl hast:

Nein, habe ich nichts dagegen.

SQL::YASP - SQL parser and evaluater
http://search.cpan.org/~miko/SQL-YASP-0.11/YASP.pm
SQL::stuck_out_tongue:arser – validate and parse SQL strings
http://search.cpan.org/~jzucker/SQL-Statement-1.15/l…
DBIx::MyParse - Perl API for MySQL’s SQL Parser (Interface zum
Parser von mysql):
http://search.cpan.org/~philips/DBIx-MyParse-0.82/li…

Das klingt doch alles sehr interessant und vielversprechend, werde mich mal durch die Materie wühlen…

Vielen Dank
Klaus Bernstein