Zum Inhalt springen

SQL Formatierer für hauseigenes Webtool


Albi

Empfohlene Beiträge

Hey Leute,

jetzt frag ich doch mal bei euch nach, da ich einfach nix anständiges finde...

Und zwar folgende Situation, wir haben ein Webtool für den Kunden mit dem er auf seine DB2 & Oracle Datenbanken zugreifen kann, SQL Statements etc. absetzen kann usw. Das ganze ist mit JavaEE gemacht.

Nun dachten wir uns wäre es mal angebracht beim nächsten Update des Tools, auch einen SQL Format Button anbieten zu können, also wie die unzähligen Formater die es halt online gibt:

unformatiertes SQL rein ins Textfeld, button drücken, voila schönes formatiertes SQL

leider finde ich einfach nichts das mich auf die richtige Spur bringt wie ich sowas umsetzten könnte, das der SQL Code anständig formatiert wird.

Bei der Google Suche lande ich ständig nur bei den Webtools oder entsprechenden APIs zu eben solchen, das nützt mir aber nichts. Die SQL Querys des Kunden können sensible Daten enthalten und entsprechend können wir diese nicht an irgendeine Externe APIs weiterschicken, wo wir nicht wissen ob die SQL Statments irgendwo gespeichert werden könnten.

Aufgrund von technischen Einschränkungen durch die Sysadmins und Kundenrichtlinien kann ich auch nicht so einfach irgendwelche command line Packages die eine fertige Funktion oder ähnliches beinhalten in den Server pumpen, daher heißt es selbst bauen. 

Ich bin ich in dem Bereich noch am lernen und bräuchte wenigstens mal ein paar Codebeispiele, woraus ich dann selbst was bauen kann. Bei Stackoverflow und github bin ich leider nicht weit gekommen, da hier auch immer das API Lied gespielt wurde...

Wäre wirklich dankbar für Codebeispiele und/oder links :D

Bearbeitet von Albi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 11 Minuten schrieb MartinSt:

wo und wie entsteht denn das unformatierte unschöne SQL?

unterschiedlich mal aus dem Datenmodellierungstool, mal von einem Kunden der das selbst zusammenbastelt, also nix fancy mit Schnittstelle oder so die da was reinlädt. Einfach ein Textfenster wenn man so will wo du dein SQL schreiben oder reinkopieren kannst und dann auf ausführen drückst und entsprechend eine Ergebnisanzeige bekommst aus der Datenbank und da wäre halt ein Button zur Formatierung nach bestimmten Regeln schön. 

Da wir durch den Mainframe Bedingt auch zum größten Teil mit einer 3270 Emulation arbeiten, die auf 80 Zeichen pro Zeile beschränkt ist, im Editor in der Emulation sinds sogar nur 72 Zeichen pro Zeile, heißt es wäre gut da mit nem Formatter, wenn man das SQL getestet hat im Webtool, bevor man es z.b. in eine SelectView einbindet, richtig zu formatieren statt:

create table test ( ahsodfhoe, hoehfoejf, hoefhoekjf, hoeifkjeoirje, hofjheirmel, hfieorjhoeie) in abcdefg

eben:

CREATE TABLE test 
(
  ahsodfhoe
, hoehfoejf
, hoefhoekjf
, hoeifkjeoirje
, hofjheirmel
, hfieorjhoeie ) 
IN abcdefg

wird. Leider gibt es einige Tools die das SQL eben nur als gefühlt eine lange Zeile ausgeben und dann wäre es gut sie in ein leserliches Format bringen zu können, das wie gesagt die Zeichenbegrenzung da oben nicht überschreitet damit man sie dann ohne Probleme in den 3270 Editor kopieren kann um die neue View oder was auch immer im DB2 erstellen zu können.

Und um diese Frage auch gleich zu beantworten, nein frameworks gibts in dem Tool eigentlich keine weil das Tool schon relativ alt ist und erst vor kurzem nur eine Frontend Schönheitskur bekommen hat, das Backend is noch ganz ekliger alter JAVA code wo die ursprünglichen Entwickler in unserer Firma damals halt alles selbst gebastelst haben, weils von JAVA dafür noch keine Standard Klassen etc. gab, nur sind ich und mein Kollege der mit mir angefangen hat, noch lange net so weit da wirklich große Modernisierungen am Backend zu machen ohne da wahrscheinlich alles zu zerschießen, das weiß unser Chef auch, das mit dem Formatter wäre halt eine schöne Komfort Funktion, die wir gerne mal so als erste Neuerung einführen würden.

War halt leider lange kein Priorität, da das Tool halt auch ohne Probleme lief, daher traut man sich auch nicht so recht viel von diesem Code anzufassen oder Sachen zu überstürzen, da beim Kunden ca. 5000 Leute damit arbeiten und die Hölle los ist wenn gar nix mehr geht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

General SQL Parser

Das ist so das erste, was ich unter Google gefunden habe, was auch wohl als Open Source zur Verfügung steht. Alle anderen Frameworks, die ich gefunden habe, waren kostenpflichtig.

Wofür dient denn das Tool? Als Datenanalyse? ETL?
Vielleicht wäre es auch angebracht, mal das Tool zu überdenken und zu schauen, ob es überhaupt noch Sinn macht, das Tool weiterhin zu pflegen oder ob man nicht ein Tool einkauft, was genau die Aufgabe macht, die ihr braucht.

Edit:
Ok, ist wohl doch nicht so ganz kostenpflichtig, wie ich dachte. :/

Bearbeitet von Whiz-zarD
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Whiz-zarD:

Wofür dient denn das Tool? Als Datenanalyse? ETL?
Vielleicht wäre es auch angebracht, mal das Tool zu überdenken und zu schauen, ob es überhaupt noch Sinn macht, das Tool weiterhin zu pflegen oder ob man nicht ein Tool einkauft, was genau die Aufgabe macht, die ihr braucht.

Das Tool dient zur Datenanalyse, man kann die Ergebnisse der SQLs in Excel Datein exportieren etc. bzw. neue Tabellen aus Excel Dateien anlegen, Tabellen im System über die Grafische Oberfläche mit Daten befüllen bzw. die Struktur der Tabellen ändern usw.

Nein das Tool ersetzen ist definitiv keine Option, das Tool läuft beim Kunden seit gut 10 Jahren, der will nichts anderes weil es seinen Job tut, das Tool wurde extra für den Kunden so entwickelt und ist daher perfekt auf dessen Bedürfnisse und die Anforderungen an den IBM Mainframe und die Verbindung mit DB2 abgestimmt, daher ist das keine Option und deshalb wird auch am Backend nur sehr vorsichtig irgendwas geändert. Leider wurde seit einer weile hier nichts mehr geändert weil die Ursprünglichen Entwickler entweder mittlerweile in Rente sind oder in anderen Projekten sitzen und keine Zeit haben am Backend Änderungen vorzunehmen und es zu modernisieren, daher bleibt das an mir und meinem Kollegen hängen aber da wir beide keine erfahrenen JAVA Entwickler sind, arbeiten wir uns da vorsichtig und schritt für schritt ein bevor wir da was im Backend anfassen, solange es seinen Job so tut wie es soll und der Kunde glücklich ist, werden wir da sicher nichts "neues" suchen, das dann am Ende nicht so funktioniert wie es soll bzw. den Anforderungen des Kunden entspricht.

Der SQL Formatter ist kein muss, es ist halt eine Sache die wir gerne als Komfort Option mit einbauen wollen, daher bin ich auf der Suche nach Ideen in Form von Code Beispielen wie ich das ganze in unserem Tool umsetzen kann. Frameworks, Online Tools und APIs helfen mir in diesem Fall nicht wirklich, da mir hier zuviele Faktoren sind die entweder nicht den Sicherheits- und Datenschutzrichtlinien des Kunden entsprechen oder bei denen ich nicht sicher sein kann das sie mit dem Tool funktionieren und es nicht kaputt hauen, daher möchten wir die Funktion gerne selbst bauen, dann wissen wir was drin ist, nur wie gesagt brauche ich dafür einfach etwas Hilfe in Form von Code wie sowas aussehen könnte und da ich einfach nichts hilfreiches gefunden habe, wollte ich mich halt an mein Forum des Vertrauens wenden, da ich weiß das hier viele Leute sind die sich extrem gut auskennen und vielleicht Ideen haben wie man das selbst baut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Albi!

Zum einen eine Leseempfehlung meinerseits: Working Effectively with Legacy Code 

Zum Inhalt ein paar Daten und Fragen, die ich beisteuern kann.

Hier scheint es zumindest schon mal ein Projekt mit Sourcecode zu geben um dir nen groben Anhaltspunkt zu geben

Ist zwar für PHP, aber die Intention wird damit denke ich klar.

Ein paar Fragen noch.

  • Geht es da auch um ebenenabhängige Einrückung zur Lesbarkeit? Also mehrstufige JOINs entsprechend mit Tabs versehen? 
  • Oder ist "nur" Syntax-Highlighting gewünscht?
  • Müssen oder sollen die Statements auch gleich validiert werden? ("Läuft" die Abfrage, wenn man sie auf dem DBMS ausführt)
  • Gibt es bei dem Kunden eine "offizielle SQL Formatting Guideline", die ihr euch zu Hilfe nehmen könnt?

Meine Erfahrung in einer Firma mit 200 Kollegen, von denen gefühlt 150 regelmäßig SQL-Code schreiben ist nämlich, dass das jeder ein bisschen anders macht. Bevor da ihr als "nette Idee" ein (im besten Fall noch immer eingeschaltetes) Feature einbaut, solltet ihr euch bewusst sein, dass man damit im Zweifel Leuten, die seit Jahren ihren SQL-Code so schreiben, wie sie es für richtig halten, auf die Füße tritt.

Grundsätzlich ist das ja ein Fall von "Ich gebe erstmal Plaintext rein und erhalte ein fettes, formatiertes, (ggfs.)buntes HTML zurück, das ich dann weiterverarbeiten kann.

Da würde ich entsprechende Klassen bauen, die nach vorgegebenen Keywords im Input suchen und entsprechend eines hinterlegten Regelwerks dann Aktionen vornehmen. Z.b. "Wenn ich einen JOIN habe, füge einen Tab hinzu".

Ich hoffe, das hilft ein bisschen.

Gruß, Goulasz :goulasz: 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 56 Minuten schrieb Goulasz:

Hallo @Albi!

Zum einen eine Leseempfehlung meinerseits: Working Effectively with Legacy Code 

Danke schau ich mir mal an :D

vor 56 Minuten schrieb Goulasz:

Zum Inhalt ein paar Daten und Fragen, die ich beisteuern kann.

Hier scheint es zumindest schon mal ein Projekt mit Sourcecode zu geben um dir nen groben Anhaltspunkt zu geben

Ist zwar für PHP, aber die Intention wird damit denke ich klar.

Das könnte vielleicht was sein, mal sehen :D

vor 56 Minuten schrieb Goulasz:

Ein paar Fragen noch.

  • Geht es da auch um ebenenabhängige Einrückung zur Lesbarkeit? Also mehrstufige JOINs entsprechend mit Tabs versehen? 

Ja auch eine Einrückung soll es nach Möglichkeit geben, das möchte ich halt abhängig von Keywords aus SQL machen.

vor 56 Minuten schrieb Goulasz:
  • Oder ist "nur" Syntax-Highlighting gewünscht?

ist schon vorhanden.

vor 56 Minuten schrieb Goulasz:
  • Müssen oder sollen die Statements auch gleich validiert werden? ("Läuft" die Abfrage, wenn man sie auf dem DBMS ausführt)

ebenfalls schon drin :)

vor 56 Minuten schrieb Goulasz:
  • Gibt es bei dem Kunden eine "offizielle SQL Formatting Guideline", die ihr euch zu Hilfe nehmen könnt?

Nein den gibt es leider nicht, das ist ja entsprechend das Problem, das einfach teils SQLs unlesbar sind weil keinerlei Einrückung oder Formatierung verwendet wird.

vor 56 Minuten schrieb Goulasz:

Meine Erfahrung in einer Firma mit 200 Kollegen, von denen gefühlt 150 regelmäßig SQL-Code schreiben ist nämlich, dass das jeder ein bisschen anders macht. Bevor da ihr als "nette Idee" ein (im besten Fall noch immer eingeschaltetes) Feature einbaut, solltet ihr euch bewusst sein, dass man damit im Zweifel Leuten, die seit Jahren ihren SQL-Code so schreiben, wie sie es für richtig halten, auf die Füße tritt.

Die Funktion ist nicht dauerhaft aktiv, es wird einen extra Button in der Oberfläche geben mit dem die Leute ihren Code wenn sie es möchten Formatieren können bzw. wenn sie eine SQL von einem Kollegen bekommen und der einer dieser "Hauptsache ich kanns lesen" Leute ist, dann haben sie hier einen einfachen weg den Code allgemein Lesbar zu machen mit dem Knopf, es gibt von IBM ein Datastudio das auf Eclipse basiert, das so eine Funktion hat, das haben wir schon gesehen, nur ist das Datastudio wuchtig und wir von kaum jemanden genutzt. Wir haben es auch nur mal zum Test installiert, leider kommt man an diese Klassen nicht ran, sonst wäre das ganze natürlich einfacher.

vor 56 Minuten schrieb Goulasz:

Grundsätzlich ist das ja ein Fall von "Ich gebe erstmal Plaintext rein und erhalte ein fettes, formatiertes, (ggfs.)buntes HTML zurück, das ich dann weiterverarbeiten kann.

so in der Art ja.

vor 56 Minuten schrieb Goulasz:

Da würde ich entsprechende Klassen bauen, die nach vorgegebenen Keywords im Input suchen und entsprechend eines hinterlegten Regelwerks dann Aktionen vornehmen. Z.b. "Wenn ich einen JOIN habe, füge einen Tab hinzu".

Genau sowas in der Art haben wir uns vorgestellt, nur gesteh ich halt ein das ich einfahc keine Idee hab wie ich das anständig mache, daher die Frage nach den Codebeispielen, ich will keinen fertigen Code aller gebt mir was fertiges das ich nur einbauen muss, mir geht es schon darum selbst daraus zu lernen und es selbst zu bauen, ich brauch einfach nur ein wenig Starthilfe und ein bisschen Inspiration :D 

vor 56 Minuten schrieb Goulasz:

Ich hoffe, das hilft ein bisschen.

Gruß, Goulasz :goulasz: 

Hat es schon etwas :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist ein Trugschluss, wenn man denkt, dass es besser ist, wenn man alles selber entwickelt. Das Problem sehe ich auch in der Firma, wo ich arbeite. Die Software ist jetzt 10 Jahre alt und damals war man auch der Meinung, dass es besser wäre alles selbst zu entwickeln, weil man Angst hatte, wenn man Bibliotheken von Drittanbietern ins Boot holt, dass die Firmen irgendwann pleite gehen und dann mit einer veralteten Bibliothek stehen bleibt. Man hat dann angefangen, etliche Frameworks selbstzuentwickeln. Die Entwicklung hat dann Jahre gedauert und nun hat man veraltete, gigantische nicht testbare Frameworks im Einsatz, die man nicht mal gegen modernere Frameworks austauschen kann. Das Fazit der ganzen Geschichte ist: Die sog. Test-Pyramide steht auf dem Kopf. Alles wird manuell getestet. Die Tester bremsen die Entwicklung aus, weil sie nicht hinterherkommen. Die Kunden beschweren sich zunehmend über die Performance und die Anzahl der Bugs erhöht sich auch immer weiter. Wir sind jetzt dabei, die komplette Anwendung neuzuschreiben, weil es nicht mehr anders geht. Wir haben nur das Glück, dass wir eine Nischensoftware für Banken entwickeln und in dieser Nische Marktführer sind. Ansonsten wären wir auch schon lange weg vom Fenster.

Daher finde ich, dass eine Firma sich mehr auf ihre Kernkompetenzen konzentrieren soll und weniger um das Drumherum. Wenn ihr ein SQL-Formatter einbauen wollt, dann müsst ihr auch eins im Klaren sein: Nur weil ihr es entwickelt, ist es nicht kostenlos und auch nicht besser! Die Entwickler kosten auch ihr Geld und besitzen auch evtl. das nötige Know-How so ein Feature entwicklen zu können und da sollte man sich schon überlegen, ob es dann nicht eher Sinn macht, einmal Geld in die Hand zu nehmen und eine Bibliothek kaufen, was das gewünschte Feature kann, anstatt es selbstzuentwickeln und sehr viele Ressourcen dafür zu verschwenden. Es ist ja nicht nur die initiale Entwicklung. Es betrifft ja auch die Wartung und das Bugfixing.

Dass das Know-How bei euch nicht vorhanden sieht man schon, dass ihr nicht wisst, wie ihr da vorgehen müsst, denn im Grunde müsst ihr ein Parser schreiben und dafür eignet sich ein endlicher Automat.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wie ich das lese, ist das doch eigentlich nichts anderes wie eine Schleife in einer Schleife durchlaufen und Ersetzungen machen.

Vor jedem Komma ein Zeilelumbruch => Komma suchen und Zeilelumbruch vorm Komma einfügen.
Vor jeder Klammer ein Zeilenumbruch => Klammer suchen und durch Zeilenumbruch vor Klammer ersetzen
Tabs nach bestimmten "Befehlen" => Befehle suchen und Tab danach einfügen.

Ich sehe da ehrlich gesagt keine große Komplexität drin.

Man erstellt sich ein Programm, was nach bestimmten Sachen sucht und dann die entsprechende Aktion ausführt. Entweder fest kodiert, oder aber in einer Tabelle hinterlegt für die Problemlose Erweiterbarkeit (z.B. neue SQL-Funktionen hinzufügen, damit die entsprechende Aktion durchgeführt wird).

Wie das ganze jetzt unter Java funktioniert, weiß ich nicht, da ich mich mit Java nicht auskenne - sollte aber eigentlich recht simpel sein.
Das einzige Problem in meinen Augen sind Namen von Tabellen / Datenbanken / Befehlen und Teilstrings, nach denen gesucht wird o.ä., dass diese unterschiedlich sein müssen wie die Worte, nach denen man zum ersetzen sucht. (z.B. dass die Buchstaben "IN" auch in "inner join" vorkommen, oder eine Tabelle oder ein Feld der Tabelle die Buchstaben im namen haben könnte). Da ist dann halt auch die Frage, welche Schreibweisen erlaubt sein sollen - ob auf Großschreibung bestanden wird für bestimmte Sachen, oder ob nicht, usw.

Irgendwelche Regeln wird man festlegen müssen, wenn es nicht direkt bei der Syntaxüberprüfung gemacht wird, die die Befehle usw. kennt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 29 Minuten schrieb Whiz-zarD:

Es ist ein Trugschluss, wenn man denkt, dass es besser ist, wenn man alles selber entwickelt. Das Problem sehe ich auch in der Firma, wo ich arbeite. Die Software ist jetzt 10 Jahre alt und damals war man auch der Meinung, dass es besser wäre alles selbst zu entwickeln, weil man Angst hatte, wenn man Bibliotheken von Drittanbietern ins Boot holt, dass die Firmen irgendwann pleite gehen und dann mit einer veralteten Bibliothek stehen bleibt. Man hat dann angefangen, etliche Frameworks selbstzuentwickeln. Die Entwicklung hat dann Jahre gedauert und nun hat man veraltete, gigantische nicht testbare Frameworks im Einsatz, die man nicht mal gegen modernere Frameworks austauschen kann. Das Fazit der ganzen Geschichte ist: Die sog. Test-Pyramide steht auf dem Kopf. Alles wird manuell getestet. Die Tester bremsen die Entwicklung aus, weil sie nicht hinterherkommen. Die Kunden beschweren sich zunehmend über die Performance und die Anzahl der Bugs erhöht sich auch immer weiter. Wir sind jetzt dabei, die komplette Anwendung neuzuschreiben, weil es nicht mehr anders geht. Wir haben nur das Glück, dass wir eine Nischensoftware für Banken entwickeln und in dieser Nische Marktführer sind. Ansonsten wären wir auch schon lange weg vom Fenster.

Daher finde ich, dass eine Firma sich mehr auf ihre Kernkompetenzen konzentrieren soll und weniger um das Drumherum. Wenn ihr ein SQL-Formatter einbauen wollt, dann müsst ihr auch eins im Klaren sein: Nur weil ihr es entwickelt, ist es nicht kostenlos und auch nicht besser! Die Entwickler kosten auch ihr Geld und besitzen auch evtl. das nötige Know-How so ein Feature entwicklen zu können und da sollte man sich schon überlegen, ob es dann nicht eher Sinn macht, einmal Geld in die Hand zu nehmen und eine Bibliothek kaufen, was das gewünschte Feature kann, anstatt es selbstzuentwickeln und sehr viele Ressourcen dafür zu verschwenden. Es ist ja nicht nur die initiale Entwicklung. Es betrifft ja auch die Wartung und das Bugfixing.

Whiz-zarD nachdem meine Lange und Breite Erklärung bei dir oben wohl zum einen Ohr rein und beim anderen wieder raus ist, deine Beiträge helfen mir nicht, es liegt nicht in meiner Hand, der Kunde will nichts anderes, wir haben nicht die möglichkeit Dinge einzukaufen und wollen es auch nicht aus oben genannten Gründen. 

In diesem Fall müssen wir uns eben selbst in das Programm arbeiten und das ganze selbst machen. Punkt aus Ende der Diskussion, daher bitte ich dich jetzt einfach wenn du nicht auf meine Bitte mit wirklicher Hilfe wie ich sie gerne hätte antworten kannst, es sein zu lassen, in diesem Fall helfen mir deine Beiträge nicht.

Bearbeitet von Albi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Minuten schrieb Crash2001:

Vor jedem Komma ein Zeilelumbruch => Komma suchen und Zeilelumbruch vorm Komma einfügen.
Vor jeder Klammer ein Zeilenumbruch => Klammer suchen und durch Zeilenumbruch vor Klammer ersetzen
Tabs nach bestimmten "Befehlen" => Befehle suchen und Tab danach einfügen.

So einfach ist das nicht. 

SELECT DATE('2016-01-01') FROM DUAL

Wird ja in 

SELECT
	DATE
	(
		'2016-01-01'
	)
FROM
	DUAL

formatiert, was nicht schön aussieht.

 

vor 6 Minuten schrieb Albi:

Whiz-zarD nachdem meine Lange und Breite Erklärung bei dir oben wohl zum einen Ohr rein und beim anderen wieder raus ist, deine Beiträge helfen mir nicht, es liegt nicht in meiner Hand, der Kunde will nichts anderes, wir haben nicht die möglichkeit Dinge einzukaufen und wollen es auch nicht aus oben genannten Gründen. 

Vielleicht solltest du dann meinen Beitrag noch mal durchlesen.
Ich rede nicht von der gesamten Anwendung, sondern von einer Bibliothek, was dir das SQL formatiert ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Minuten schrieb Crash2001:

So wie ich das lese, ist das doch eigentlich nichts anderes wie eine Schleife in einer Schleife durchlaufen und Ersetzungen machen.

Vor jedem Komma ein Zeilelumbruch => Komma suchen und Zeilelumbruch vorm Komma einfügen.
Vor jeder Klammer ein Zeilenumbruch => Klammer suchen und durch Zeilenumbruch vor Klammer ersetzen
Tabs nach bestimmten "Befehlen" => Befehle suchen und Tab danach einfügen.

Ich sehe da ehrlich gesagt keine große Komplexität drin.

Hmm ja so in der Art wäre wahrscheinlich die beste und einfachste Möglichkeit.

vor 6 Minuten schrieb Crash2001:

Man erstellt sich ein Programm, was nach bestimmten Sachen sucht und dann die entsprechende Aktion ausführt. Entweder fest kodiert, oder aber in einer Tabelle hinterlegt für die Problemlose Erweiterbarkeit (z.B. neue SQL-Funktionen hinzufügen, damit die entsprechende Aktion durchgeführt wird).

Wie das ganze jetzt unter Java funktioniert, weiß ich nicht, da ich mich mit Java nicht auskenne - sollte aber eigentlich recht simpel sein.

Das mit der Tabelle is garkeine schlechte Idee, erstmal würde ich das ganze zwar fest codiert machen und wenn das läuft dann im nächsten Schritt das ganze mit einer Tabelle im Hintergrund die die entsprechenden Keywords enthält umsetzen.

vor 6 Minuten schrieb Crash2001:

Das einzige Problem in meinen Augen sind Namen von Tabellen / Datenbanken / Befehlen und Teilstrings, nach denen gesucht wird o.ä., dass diese unterschiedlich sein müssen wie die Worte, nach denen man zum ersetzen sucht. (z.B. dass die Buchstaben "IN" auch in "inner join" vorkommen, oder eine Tabelle oder ein Feld der Tabelle die Buchstaben im namen haben könnte). Da ist dann halt auch die Frage, welche Schreibweisen erlaubt sein sollen - ob auf Großschreibung bestanden wird für bestimmte Sachen, oder ob nicht, usw.

Irgendwelche Regeln wird man festlegen müssen, wenn es nicht direkt bei der Syntaxüberprüfung gemacht wird, die die Befehle usw. kennt.

Ja das mit der Unterscheidung der Keywords damit nicht irgenwas anderes gefunden wird, da müsste man sich was überlegen, das gute ist das die Tabellen Namen beim Kunden eine Feste Namenskonvention haben an die sich all zu halten haben. Die Spaltennamen könnten da her das Problem werden.

Die Syntax Überprüfung ist nicht on the fly, als schon bei Eingabe, die ist ebenfalls ein extra Button wo man draufklickt und einem dann gesagt wird ob das SQL so ausführbar ist. Vielleicht wäre es eine Möglichkeit das ganze in die Syntax Prüfung zu integrieren, aber da wäre wieder das Problem das den Leute ihren Code lieber im "Muss nur ich Lesen können" Stil halten, dann unsere Formatregeln aufgezwungen bekommen, daher ist es wohl besser den Formatter und die Syntax Prüfung getrennt zu halten, aber ich könnte mal schauen ob ich die Klasse finde die die Syntaxprüfung macht vielleicht ist da ja schon was brauchbares dabei das man für den Formatter ummodeln kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Minuten schrieb Whiz-zarD:

Vielleicht solltest du dann meinen Beitrag noch mal durchlesen.
Ich rede nicht von der gesamten Anwendung, sondern von einer Bibliothek, was dir das SQL formatiert ...

Das Problem ist wie schon gesagt, das wir nicht sicher sein können das diese Bibliothek die wahrscheinlich am ende auch etwas kostet, im Tool ohne weiteres funktioniert. Daher möchten wir es selbst machen, ich sehe es für mich auch als Übung hier Erfahrungen und Know-How zu sammeln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb Albi:

Das Problem ist wie schon gesagt, das wir nicht sicher sein können das diese Bibliothek die wahrscheinlich am ende auch etwas kostet, im Tool ohne weiteres funktioniert. Daher möchten wir es selbst machen, ich sehe es für mich auch als Übung hier Erfahrungen und Know-How zu sammeln.

Darum sollte man auch mehrere Bibliotheken suchen und diese evaluieren ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Whiz-zarD:

So einfach ist das nicht. 


SELECT DATE('2016-01-01') FROM DUAL

Wird ja in 


SELECT
	DATE
	(
		'2016-01-01'
	)
FROM
	DUAL

formatiert, was nicht schön aussieht.[...]

Das war ja auch nur ein simples Beispiel. Man müsste da vermutlich schon mit komplexeren regulären Ausdrücken hantieren, um es sinnvoll wirklich nur da anzuwenden, wo es gewünscht ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Minuten schrieb Crash2001:

Das war ja auch nur ein simples Beispiel. Man müsste da vermutlich schon mit komplexeren regulären Ausdrücken hantieren, um es sinnvoll wirklich nur da anzuwenden, wo es gewünscht ist.

Und da kommt man dann von hundertstel ins tausendstel und verbrät dann zu viel Zeit und Energie. Für eine Software, die sowieso wohl schon veraltet ist. Da sollte man sich schon mal fragen, welchen Sinn es noch macht, etwas eigenes zu entwickeln, wenn es doch schon fertige Bibliotheken gibt? Man muss nicht immer das Rad neuerfinden. 

Man sucht sich zwei oder drei Bibliotheken. Überprüft deren Einsatz und schaut sich die Lizenzbedingungen an. Evtl. kommt man dann zum Entschluss, dass es doch besser wäre, etwas eigenes zu entwickeln, wenn man das Feature wirklich braucht aber die Evaluierung grundsätzlich auszuschließen, weil man vorherein schon Angst hat, nicht etwas passendes zu finden, ist falsch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Albi!

Es wird ja wie auch immer auf ein Modul hinauslaufen, das du in die bestehende Anwendung integrierst. Es soll ja eine neue Funktionalität angeboten werden.

Javamäßig bin ich nicht so fit, aber Optionen, die sich anbieten, wären z.B.:

  • RESTful Webservice: Text rein, JSON raus, Parsen
  • Klassenbibliothek, die direkt in die bestehende Anwendung eingebaut wird(DLL oder sowas?)
  • Code direkt in die Anwendung implementieren(halte ich für die unschönste Option)

@Crash2001 hat ja schon einige Optionen aufgezeigt, die möglich sind. Ich wäre bzgl. der Bedingungen und der Aktionen auch dafür, das ganze möglichst konfigurierbar zu halten. Also eine Tabelle, ein Dictionary oder was auch immer, das als Referenz dient.

Selber machen und "Neue Dinge bauen" ist immer geil. Ich gebe @Whiz-zarD aber in Teilen recht, dass es euch Ärger im Nachhinein ersparen kann, ordentlich zu prüfen, ob und in welchem Ausmaß eine Eigenentwicklung sinnig ist. Meine Idee dazu: Mach ein Projekt aus der Anforderung. Das eignet sich doch perfekt dafür. Wenn am Ende raus kommt, dass es entweder keine Komponenten zum Einsatz gibt oder das nicht praktikabel ist, baut ihr es selbst. Zeit scheint dafür ja vorhanden zu sein.

Und wenn ihr das dann macht, dann so richtig. Mit nem separaten Feature Branch, Pair Programming, Code Reviews, Pull Requests, iterativen Releases und dem ganzen sexy Zeug. :D 

Gruß, Goulasz :goulasz:  

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Hibernate bietet eine Möglichkeit an, SQL Kommandos entsprechend zu formatieren. Z.B.:

import org.hibernate.engine.jdbc.internal.BasicFormatterImpl;
	public class PrettySql {
    
    public static void main(String[] args) {
        
        String sql = "SELECT CustomerName,City FROM Customers;";
        // TODO Auto-generated method stub
        
        String formattedSQL = new BasicFormatterImpl().format(sql);
        
        System.out.println(formattedSQL);
        
    }
	}
	

Das macht aus

SELECT CustomerName,City FROM Customers;

das hier:

 SELECT
        CustomerName,
        City
    FROM
        Customers;

 

Bearbeitet von carstenj
Formatierung....
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb carstenj:

Hi,

Hibernate bietet eine Möglichkeit an, SQL Kommandos entsprechend zu formatieren. Z.B.:


import org.hibernate.engine.jdbc.internal.BasicFormatterImpl;
	public class PrettySql {
    
    public static void main(String[] args) {
        
        String sql = "SELECT CustomerName,City FROM Customers;";
        // TODO Auto-generated method stub
        
        String formattedSQL = new BasicFormatterImpl().format(sql);
        
        System.out.println(formattedSQL);
        
    }
	}
	

 

Danke dafür, das hat mir auch allesweg schon per PN empfohlen und probiert habe ich es durchaus, leider sieht das Ergebnis bei wirklich ellen langen SQLs mit JOIN und IN Klauseln nicht mehr ganz so hübsch aus, zumal er bei den IN Klauseln nach jedem Komma keinen Umbruch macht wie bei den Spalten, was eine lange IN Klausel leider die 72 Zeichen Beschränkung in der Länge sprengt. Und leider kann man bei Hibernate die Source Klasse BasicFormatterImpl nicht anschauen um vielleicht selbst da noch ein wenig fein config zu betreiben :/ bzw. sich daraus dann seine eigene Version zu basteln.

Bearbeitet von Albi
Link zu diesem Kommentar
Auf anderen Seiten teilen

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 19 Stunden schrieb carstenj:

also ich habs soweit hingebogen, dass der nun auch in den IN Klauseln Zeilenumbrüche eingefügt werden. Du kannst ja mal ein anonymisiertes Statement posten, dann prüfen wir mal wie gut das tatsächlich funktioniert.

Das hättest du wirklich nicht machen brauchen, ich danke dir vielmals :D hier mal ein einfaches statment das keinen Sinn ergibt und nur zum Testen gemacht wurde ;)

Select a, b, c, d from test where a = b and c = b or c != a and i NOT IN (abc, def, hsbfakjhsfkbhwklfjbhkweh, fkijafberbjkefebrjkef, nukfnalkjsbfejfbhjks);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

das kommt raus:

  Select
        a,
        b,
        c,
        d
    from
        test
    where
        a = b
        and c = b
        or c != a
        and i NOT IN (
            abc,
            def,
            hsbfakjhsfkbhwklfjbhkweh,
            fkijafberbjkefebrjkef,
            nukfnalkjsbfejfbhjks
        ); 

Ich kann da leider nix für, wenn ich wissen will wie etwas geht muss ich das auch ausprobieren. Selbst Schuld wenn du solche Probleme postest. :D

Aber der Aufwand hielt sich auch in Grenzen.

Bearbeitet von carstenj
Link zu diesem Kommentar
Auf anderen Seiten teilen

Haha :D wenn du es jetzt schon gemacht hast, wie hast du es denn angestellt? 

Da es noch ein paar Sachen gibt die bei dem Formatter noch fehlen, die werd ich mir aber selbst zusammensuchen, mit der Klasse hab ich schon ein wirklich großen Hilfscodeschnippsel :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...