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

143 lines
4.0 KiB
Markdown

# 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