143 lines
4.0 KiB
Markdown
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 |