Hi Community,
Ich habe ein Frage bezüglich Java. Wie man vielleicht aus der Überschrift auslesen kann, suche ich eine Möglichkeit um Postgres-Skripte in Java zu parsen und möglichst gleich zu zerlegen.
Mein Ziel ist es hauptsächlich, eine bestehnde DB-Logik durch Auslesen und Umwandeln in Java auszulagern. Dazu habe ich bereits 2 Bibliotheken getestet:
-
ANTLRv4 mit folgender Postgres-Grammatik
[ul]
[li]zerlegt Statements anhand der Grammatikregeln in Tokens, die dann traversiert werden können
[/li][li]einzelne Wörter und Phrasen müssen gegebenenfalls manuell per String-Analyse entnommen werden
[/li][/ul] -
JSqlparser (Source)
[ul]
[li]zerlegt SQL-Statements in JSon-ähnliche Objektstrukturen
[/li][li]einzelne Wörter und Attribute des Statements kann man dann ganz normal über die Map abgreifen
[/li][li]leider nicht direkt für PostgreSql ausgelegt
[/li][li]Funktionsweise ähnlich GS (General SQL Parser)
[/li][/ul]
Soweit so gut mein Stand. Leider aber haben beide Bibliotheken das gleiche Problem:
Sie verarbeiten keine Prozeduren/Funktionen in SQL. Das ist natürlich großer Mist für mich, da dort der Löwenanteil aller Logik enthalten ist.
ANTLR erkennt zwar die Funktionen an sich, aber nimmt sie als kompletten String, den er dann als eben Riesenobjekt auch so weitergibt.
JSqlparser erkennt die Funktion (je nach Komplexität und Aufbau) auch, stopft diese dann aber genauso in ein einziges Objekt.
Immerhin kann man aber bei beiden zumindest noch Rückgabewert und Übergabeparameter auslesen :rolleyes:
Ich habe nach sehr ausgiebiger Recherche als einzige vermeintliche Alternative GSP gefunden gefunden. Leider kostet dieses Programm eine Stange Geld und das habe ich/lohnt sich nicht.
Deswegen bin ich aktuell auf der Suche nach einer kostenlosen/günstigen Alternative, die ich einsetzen könnte? Also wäre echt klasse, wen mir da jemand vielleicht einen Tipp geben könnte.
Da ich mal davon ausgehe, dass 80% der Entwickler hier mehr Erfahrung als ich im Bereich Java haben, bin ich (noch) guter Dinge
Grüße und schon einmal vorab vielen Dank!