Kommentar -- mit nachfolgendem Tabulator graut nachfolgenden Text seit einigen Versionen nicht mehr aus

The_Relational_Male's profile image The_Relational_Male posted 4 years ago in General Permalink

Hallo zusammen,

ich verwende sehr oft Tabulatoren vor den einzelnen MySQL-/MariaDB-Zeilen, um alles schöner zu formatieren. Bisher konnte ich dann immer, wenn ich (testweise) eine Zeile auskommentieren wollte, an den Zeilenanfang ein -- stellen und der nachfolgende Text war sowohl auskommentiert, als auch optisch ausgegraut.

Seit einigen Versionen (vielleicht seit ca. 2 Monaten?) geht das leider nicht mehr. Die Zeile ist zwar für die Datenbank auskommentiert, aber HeidiSQL lässt den nachfolgenden Text so, wie er ist d.h. ohne diesen auszugrauen. Das ist sehr schade, da dadurch einiges an Komfort verloren geht. Wenn ich nach dem -- noch ein Leerzeichen setze, dann geht das Ausgrauen noch, aber das ist natürlich umständlich.

Kann man das alte Verhalten irgendwie wieder herstellen? Generell sollte der Tabulator ja erlaubt sein:

Vom MySQL 8 Manual (hm - hier war eine verbotene Hyperlinktechnologie): From a -- sequence to the end of the line. In MySQL, the -- (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on).

Dann noch etwas zweites. Ich muss oft mit bestehenden Datenbanken arbeiten, die Tabellen- und Spaltennamen haben, die kompliziert sind. D.h. mit Leerzeichen, Umlauten, Kommas etc. pp.. Ich fasse daher grundsätzlich ALLES in `backticks` ein. Hier wäre es toll, wenn dann die farbliche Markierung bestehend bleiben könnte und immer alles automatisch "gebackticked" würde. HeidiSQL macht das bei Bedarf schon selbst, wenn der Name problematisch ist. Bei nicht problematischen Namen hätte ich das gerne ebenfalls, sodass alles (Datenbank, Tabelle, Spalte, Name von Stored Functions etc. pp.) grundsätzlich immer eingefasst wird.

Hier noch Random Thoughts (kann ignoriert werden):

  • Ein "Column Mode" (technipages.com\notepad-column-mode) fürs Markieren wäre toll.
  • Ganz Hammer wäre noch "Column Editing" (riptutorial.com\notepadplusplus\example\17820\column-editing). Für beides übertrage ich bislang den Text ins Notepad++, ändere dort etwas und übertrage den Text wieder zu HeidiSQL.
  • HeidiSQL über Nacht offen lassen 1: RAM-Speicher läuft voll + CPU-Load auf einem Kern. PC langsam bis Programmneustart
  • HeidiSQL über Nacht offen lassen 2: HeidiSQL hängt => Prozess beenden
  • HeidiSQL über Nacht offen lassen 3: SELECT * FROM Tabelle am Abend: Normale Feldinhalte, stehen lassen bis Morgen: In allen Feldinhalten steht "Node" (ausgegraut bei NULL-Feldern)
  • Mehrere HeidiSQL gleichzeitig: Die Speicherung der Tabs kommt durcheinander (last wins)
  • Dieses "Pflichttab" (erstes Tab ohne Namen) ist sehr verwirrend, da Verhalten von den restlichen abweicht
  • Bei SQL-Fehlern (Syntax) und langen SQL-Queries: Editor springt von aktueller Postition weg ganz nach oben. Extrem nervig.
  • Ein Redo Button. Mit Strg+z geht Undo und Strg+Shift+z geht Redo. Für letzteres einen Button.
  • Code Folding
  • Langlaufende Queries in den "Hintergrund" verfrachten, damit andere Tabs nicht hängen (eigene DB Connection pro Tab?). Workaround: Zwei HeidiSQL starten und in einen den Langläufer packen.
ansgar's profile image ansgar posted 4 years ago Permalink

Ich bin mir nicht sicher wie lange MySQL schon Tabs und andere Whitespaces nach dem Doppel-Minus als Kommentar zulässt. In der MariaDB Doku steht es nämlich noch etwas anders:

https://mariadb.com/kb/en/comment-syntax/

From a '-- ' to the end of a line. The space after the two dashes is required (as in MySQL).

Um auch alte MySQL Versionen zu unterstützen müsste ich eigentlich da noch eine Unterscheidung einbauen, falls dort nur ein Leerzeichen unterstützt wird. Bis zu welcher Version unterstützt MySQL also nur Leerzeichen?

Und es wird noch komplizierter, da HeidiSQL auch mit MSSQL umgehen muss - da ist gar kein Leerzeichen nach dem Doppel-Minus erforderlich. Das sollte aber funktionieren, seit der 11.0, siehe https://github.com/SynEdit/SynEdit/issues/42

Ein paar deiner Hinweise kann ich beantworten:

  • Code folding wird in der nächsten HeidiSQL release vorhanden sein, und kann jetzt schon in den nightly builds ausprobiert werden. Siehe issue #1132
  • Der erste Abfrage-Tab ist dafür da, Einsteigern eine stabile Usability zu geben, und als Schnelleinstieg für viele User die nur wenige Queries ausführen.
  • Tab-Speicherung mit "last wins" ist beabsichtigt so - ist zumindest schwierig anders zu lösen wenn man mehrere Instanzen ausführt
The_Relational_Male's profile image The_Relational_Male posted 3 years ago Permalink

Hallo Ansgar,

das mit dem -- und einem "Whitespace" als Kommentar gibt es meiner Erinnerung nach schon seit Anfang der 2000er. Das war eine vom SQL Standard abweichende Methode. Im Handbuch zu MySQL 4.1 (aus 2001) steht das auch schon so drinnen (download.nust.na\pub6\mysql\doc\refman\4.1\en\comments.html). Bei der ursprünglichen 3.23er Version stand das noch nicht drinnen (nur das mit der Änderung mit dem Space). Es könnte sein, dass das um die 4.0 herum eingeführt wurde.

Das mit dem -- und Tab als Kommentar geht in MariaDB meines Wissens auch schon immer (zumindest seit 5.5 und 10.x). Ich hatte das automatisch immer so gemacht (zuvor schon in Oracle-DBs 10.x)

Und bislang ging das ja immer ganz normal in HeidiSQL (seit vielen Jahren). Das ist erst kürzlich "kaputt" gegangen. Daher war ich etwas verwundert. Das sollte also kein neues Feature sein, sondern den alte status quo wieder zurück. Irgendwas muss da kürzlich verändert worden sein, damit das nicht mehr geht.

Das Code-Folding ist ja toll! Sehe ich das richtig, dass das aktuell noch rein "manuell" ist (mit selbst gesetzten Regionen)? Das ist eine ziemlich gute Idee, weil man dann noch mehr Möglichkeiten hat. Generell ist automatisches Code-Folding wohl eine ziemlich kniffelige Sache, weil ich noch kein einziges Tool gesehen habe, dass das wirklich richtig sauber macht. Z.B. wenn man (wie ich) ziemlich verschachtelte, lange CTEs mit vielen Subquerys hat. Das stimmt bislang bei keinem einzigen Tool - falls diese überhaupt "schon" CTEs kennen.

Wegen Tab-Speicherung und mehreren Fenstern. Man könnte den Instanzen automatische Namen geben und beim Öffnen alle Instanzen und alle in den jeweiligen Instanzen geöffneten Tabs öffnen. Bei Multimonitor bzw. den neuen breiten Monitoren ist es extrem praktisch, mehrere Fenster parallel offen zu haben. Z.B. eines mit einer Stored Function, eines mit einer komplexeren Abfrage, die diese Stored Function benutzt und eines mit dem Tabelleninhalt bzw. der Definition/Indizes. Oder kann man die Tabs irgendwie vom Fenster los lösen oder anderweitig gleichzeitig mehrere Tabs darstellen?

Wenn man (aus o.g. Gründen) mehrere Fenster offen hat, dann man muss extrem aufpassen beim Schließen/bei Updates, dass man zuerst die weniger wichtigen Fenster schließt (und dort alle Test-Schnipsel speichert) und erst am Schluß das Hauptfenster zu macht. Sonst sind die Tabs überbügelt.

ansgar's profile image ansgar posted 3 years ago Permalink

Das ist erst kürzlich "kaputt" gegangen.

Was da geändert wurde ist dass nach den 2 Bindestrichen jetzt ein Leerzeichen folgen muss. Vorher war das auch "kaputt" - ohne Leerzeichen oder Tab wurde das als Kommentar erkannt, obwohl es keiner war. Jetzt wird es nur als Kommentar erkannt wenn ein Leerzeichen folgt, nicht aber wenn ein Tab folgt. Das lässt sich sicher noch beheben, hat aber wohl keine so hohe Prio ehrlichgesagt.

Das mit den Tabs ist schon schwerwiegender, denn viele User bemängeln mittlerweile dass mit mehreren HeidiSQL Fenstern einige Tabs verloren gehen können, zurecht. Werde da mal nachforschen wie ich das optimieren kann, sodass weniger verloren gehen kann.

Code modification/commit 8fee0f4 from Ansgar Becker <anse@heidisql.com>, 3 years ago, revision 6098
Remove auto-stored section of closed tab only if section belongs to the current app instance. See https://www.heidisql.com/forum.php?t=36922
ansgar's profile image ansgar posted 3 years ago Permalink

Mit meiner gerade eingecheckten Änderung sollten Tabs nicht mehr per "last-instance-wins" daherkommen, sondern alle Tabs wiedergeöffnet werden die nicht in einem gerade laufenden Prozess noch geöffnet sind.

Ich hab das zwar selber schon getestet, da wäre es aber hilfreich wenn du auch einmal HeidiSQL auf die neue Build aktualisierst und testest.

The_Relational_Male's profile image The_Relational_Male posted 3 years ago Permalink

Vorher war das auch "kaputt" - ohne Leerzeichen oder Tab wurde das als Kommentar erkannt, obwohl es keiner war.

Zumindest aus MySQL-Sicht war vor der Änderung schon alles so, wie es sein sollte. Die MySQL-/MariaDB erkennt den --TAB als Kommentar (TAB statt Leerzeichen als "control character"), sonst gäbe es ja Syntaxfehler, wenn das nicht als ein valides Kommentar eingestuft würde.

Ich habe mal nachgeschaut: MySQL Workbench erkennt das auch nicht richtig (rein optisch, DB seitig geht es natürlich), bei RazorSQL und DataGrip wird das korrekt interpretiert. Übrigens habe ich gerade noch mal das Code-Folding getestet und bei DataGrip sehen CTEs überraschenderweise mittlerweile richtig gut aus!

Mit meiner gerade eingecheckten Änderung sollten Tabs nicht mehr per "last-instance-wins" daherkommen, sondern alle Tabs wiedergeöffnet werden die nicht in einem gerade laufenden Prozess noch geöffnet sind.

Wie cool! Ich habe das vorhin getestet und das sieht schon mal sehr gut aus! Vielen Dank! Die jeweils geschlossenen Fenster wurden wieder restauriert und wenn man mehrere geschlossen hat und eines wieder geöffnet, dann wurden die Tabs in einem Fenster "gemerged". D.h. es geht nichts mehr verlohren.

Es es irgendwie möglich, die Tabs in ein anderes Fenster zu verschieben? Wenn ich Fenster 1 mit Tabs A,B,C und Fenster 2 mit Tabs D,E,F offen hatte, dann ist nach dem Schließen/Öffnen ein neues Fenster 1 mit A,B,C,D,E,F offen. Jetzt wäre es cool, wenn man ein Fenster 2 öffnen könnte und D,E,F vom Fenster 1 ins Fenster zwei "ziehen" könnte. Dann hätte man wieder den alten Zustand.

Oder die Fenster bekommen einen Namen (Random?) und alle Einstellungen werden für das jeweilige Fenster getrennt gespeichert. Die Größe/Position bliebe so auch erhalten. Momentan ist noch last-wins, d.h. wenn man das letzte Fenster klein macht, auf den 2. Monitor verschiebt und dann schließt, dann sind danach alle neuen Fenster klein und auf dem 2. Monitor.

ansgar's profile image ansgar posted 3 years ago Permalink

Zumindest aus MySQL-Sicht war vor der Änderung schon alles so, wie es sein sollte. Die MySQL-/MariaDB erkennt den --TAB als Kommentar (TAB statt Leerzeichen als "control character"), sonst gäbe es ja Syntaxfehler, wenn das nicht als ein valides Kommentar eingestuft würde.

Ja, aber HeidiSQL hat auch "--" (also ohne Tab oder Leerzeichen) schon als gültigen Kommentar angezeigt - das war für MySQL/MariaDB falsch und ist seitdem korrigiert.

Es es irgendwie möglich, die Tabs in ein anderes Fenster zu verschieben?

Nein, Verschieben von Tabs ist bisher nicht eingebaut. Das kannst du nur manuell machen, per copy+paste.

Ich wäre schon froh wenn erstmal das Wiederherstellen der Tabs aus mehreren Vorgänger-Instanzen funktioniert wie es soll.

Please login to leave a reply, or register at first.