[solved] SQL Parser (Oracle) Library?



  • Hallo,

    ich suche nach einer Library, mit deren Hilfe ich SQL-Statements parsen kann. Im Idealfall kann sie auch Oracle-spezifische Dialekte.

    Konkret suche ich was, das mir ein Statement in Tokens zerlegen kann, und dann die verschiedenen Tokentypen bereitstellt, also zum Beispiel

    SQLParser p;
    p.parse("SELECT * from scott.emp;")
    Tokens t = p.tokens();
    cout << "Schema: " << t.schema() << endl;
    cout << "Table: " << t.tables()[0] << endl;
    

    oder so ähnlich. Ein Parser der mir quasi das Statement so zerlegt, das ich einfach abfragen kann, wie der Tabellenname in dem Statement lautet (oder die Tabellennamen), wie der Befehl lautet (SELECT, INSERT) usw.

    Gibt es so einen fertigen Parser schon, oder müsste ich mir irgendwas selber basteln mit Flex/Bison oder dergleichen?



  • Vielleicht kannst du den SQLite Parser nehmen. Die nutzen zwar kein Flex/Bison sondern Lemon. Aber dann hast du immerhin die Grammatik schon und kannst vielleicht damit was anfangen.

    http://www.sqlite.org/arch.html

    Ansonsten gibt es iirc einen SQL Parser als Spirit Beispielprojekt. Vielleicht reicht dir das. Google mal danach.



  • An SQLite hatte ich auch schon einmal gedacht, werde ich mir jetzt mal genauer ansehen. Danke für den Tipp.



  • Ich denke ich versuche mal SQLite Amalgamation, darin gibt es dann Funktionen, womit ich den Parser aufrufen könnte (und wohl auch den Tokenizer).
    Sollte für den Anfang reichen. Mal schauen ob ich damit die Infos so extrahieren kann, wie ich mir das vorgestellt hatte...



  • Wollte nur nochmal schnell erwähnen, dass ich mich jetzt für ANTLR entschieden habe...


Anmelden zum Antworten