QueryBuilder/SELECT_FROM_AUTOCOMPLETE.md
2025-10-14 21:27:41 +02:00

4.0 KiB

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:

SELECT | FROM USERS
    Zeigt Spalten von USERS-Tabelle

Ohne Tabelle (allgemeine Optionen):

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

1. Tippe: SELECT 
2. Wähle: * oder spezifische Spalte
3. Ergebnis: SELECT column_name 

Mehrere Spalten

1. Tippe: SELECT name, 
2. Wähle: weitere Spalte aus Liste
3. Ergebnis: SELECT name, email 

Mit FROM-Kontext

1. Tippe: SELECT  FROM USERS
2. Autocomplete lädt USERS-Spalten automatisch
3. Wähle aus USERS-spezifischen Spalten

Gefilterte Suche

1. Tippe: SELECT user
2. Zeigt nur Spalten die "USER" enthalten
3. z.B.: USER_ID, USER_NAME, USERNAME

Technische Details

Neue JavaScript-Funktionen

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

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