# Erweiterte SQL Autocomplete - SELECT & FROM ## Übersicht Die Autocomplete-Funktionalität wurde erweitert und unterstützt jetzt sowohl Spalten-Vorschläge nach `SELECT` als auch Tabellen-Vorschläge nach `FROM`. ## Neue Funktionen ### 1. Spalten-Autocomplete nach SELECT **Aktivierung:** - Automatisch nach `SELECT ` (mit Leerzeichen) - Bei Komma-getrennten Spalten: `SELECT col1, ` - Bei partieller Eingabe: `SELECT USE` (zeigt Spalten mit "USE") **Intelligente Erkennung:** - Erkennt Tabelle aus FROM-Klausel automatisch - Lädt entsprechende Spalten-Schema dynamisch - Fallback zu allgemeinen Spalten wenn keine Tabelle erkannt ### 2. Kontext-bewusste Vorschläge **Mit erkannter Tabelle:** ```sql SELECT | FROM USERS ↑ Zeigt Spalten von USERS-Tabelle ``` **Ohne Tabelle (allgemeine Optionen):** ```sql SELECT | ↑ Zeigt: *, COUNT(*), COUNT(1), ROWNUM, SYSDATE ``` ## Funktionsweise ### Muster-Erkennung 1. **Nach SELECT**: `SELECT ` → Spalten-Autocomplete 2. **Spalten-Liste**: `SELECT name, ` → Weitere Spalten 3. **Partielle Eingabe**: `SELECT us` → Gefilterte Spalten 4. **Nach FROM**: `FROM ` → Tabellen-Autocomplete ### Schema-Integration - **Dynamisches Laden**: Schema wird bei Bedarf vom Server abgerufen - **Typ-Anzeige**: Spalten zeigen Datentyp an (z.B. `NAME (VARCHAR2)`) - **Icons**: Unterschiedliche Icons für `*`, Spalten und Tabellen ### Keyboard-Navigation - **↓/↑**: Navigation durch Vorschläge - **Enter/Tab**: Auswahl übernehmen - **Escape**: Dropdown schließen - **Komma**: Automatische Trennung bei Mehrfach-Auswahl ## Beispiele ### Einfache Spalten-Auswahl ```sql 1. Tippe: SELECT 2. Wähle: * oder spezifische Spalte 3. Ergebnis: SELECT column_name ``` ### Mehrere Spalten ```sql 1. Tippe: SELECT name, 2. Wähle: weitere Spalte aus Liste 3. Ergebnis: SELECT name, email ``` ### Mit FROM-Kontext ```sql 1. Tippe: SELECT FROM USERS 2. Autocomplete lädt USERS-Spalten automatisch 3. Wähle aus USERS-spezifischen Spalten ``` ### Gefilterte Suche ```sql 1. Tippe: SELECT user 2. Zeigt nur Spalten die "USER" enthalten 3. z.B.: USER_ID, USER_NAME, USERNAME ``` ## Technische Details ### Neue JavaScript-Funktionen ```javascript shouldShowColumnAutocomplete() // Erkennt SELECT-Kontext showColumnAutocomplete() // Zeigt Spalten-Dropdown extractTableNameFromQuery() // Findet Tabelle in FROM loadTableSchemaForAutocomplete() // Lädt Schema dynamisch selectColumnFromAutocomplete() // Fügt Spalte ein ``` ### State-Management ```javascript autocompleteState = { isVisible: boolean, selectedIndex: number, items: array, triggerPosition: number, type: 'table' | 'column' // NEU: Unterscheidet Typ } ``` ### CSS-Verbesserungen - **Icons**: `fa-columns` für Spalten, `fa-asterisk` für * - **Typ-Info**: Grauer Text für Datentypen - **Header**: Kontextuelle Überschriften ("Spalten von USERS") ## Intelligente Features ### 1. Kontext-Analyse - Erkennt FROM-Klausel automatisch - Lädt passende Spalten für die Tabelle - Fallback bei fehlender/unklarer Tabelle ### 2. Smart-Insertion - Erkennt Position in SELECT-Liste - Ersetzt partielle Eingaben korrekt - Respektiert Komma-Trennung ### 3. Performance-Optimierung - **Caching**: Schema wird nicht doppelt geladen - **Limitierung**: Max. 15 Spalten, 10 Tabellen - **Lazy Loading**: Nur bei Bedarf laden ## Workflow-Integration ### Typischer Workflow 1. **Start**: `SELECT ` → Allgemeine Spalten oder * 2. **Tabelle**: `FROM tablename` → Spezifische Spalten verfügbar 3. **Erweitern**: Zurück zu SELECT → Tabellen-spezifische Vorschläge 4. **Verfeinern**: Komma + weitere Spalten auswählen ### Drag & Drop Integration - Funktioniert weiterhin parallel zu Autocomplete - Autocomplete für Tipper, Drag & Drop für Maus-User - Beide Methoden ergänzen sich perfekt ## Erweiterbarkeit Die Architektur unterstützt zukünftige Erweiterungen: - **WHERE-Autocomplete**: Spalten + Operatoren - **JOIN-Unterstützung**: Multi-Tabellen-Queries - **Funktions-Vorschläge**: SQL-Funktionen - **Alias-Erkennung**: Tabellen-Aliases berücksichtigen