PQL – Publixx Query Language
SQL-ähnliche Query-Sprache für Datenfilterung
| Eigenschaft | Wert |
|---|---|
| Version | 1.0.0 |
| Modul | pql-engine.js |
| Kategorie | Datenverarbeitung |
| Stand | Januar 2026 |
Übersicht
PQL (Publixx Query Language) ist eine SQL-ähnliche Abfragesprache, die speziell für die Filterung und Selektion von Datensätzen in Publixx entwickelt wurde. Sie ermöglicht es, aus großen Datenmengen gezielt die relevanten Datensätze herauszufiltern – ohne Programmierkenntnisse.
Einsatzzweck
PQL kommt in verschiedenen Bereichen von Publixx zum Einsatz:
| Bereich | Anwendung |
|---|---|
| DataPicker | Interaktive Filterung von Datensätzen im Dialog |
| Makros | Automatisierte Datenfilterung in Workflows |
| Template Router | Bedingte Zuordnung von Templates basierend auf Datenkriterien |
| API-Steuerung | Vorfilterung beim Laden von Daten über URL-Parameter |
| publixxCONFIG | Initiale Datenselektion per pqlFilter-Parameter |
Grundsyntax
SELECT [felder] FROM [quelle] WHERE [bedingungen]
Komponenten
| Komponente | Beschreibung | Optional |
|---|---|---|
| SELECT | Zu selektierende Felder (* für alle) |
Nein |
| FROM | Datenquelle (Standard: data) |
Ja |
| WHERE | Filterbedingungen | Ja |
Minimalform
SELECT *
Ohne WHERE-Klausel werden alle Datensätze zurückgegeben.
Operatoren
Vergleichsoperatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
= |
Gleich | category = 'Electronics' |
!= oder <> |
Ungleich | status != 'deleted' |
> |
Größer als | price > 100 |
< |
Kleiner als | stock < 10 |
>= |
Größer oder gleich | rating >= 4 |
<= |
Kleiner oder gleich | price <= 500 |
Textoperatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
LIKE |
Textmuster (mit % als Wildcard) |
name LIKE 'iPhone%' |
NOT LIKE |
Nicht dem Muster entsprechend | name NOT LIKE '%test%' |
CONTAINS |
Enthält Text | description CONTAINS 'Pro' |
Mengenoperatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
IN |
Wert in Liste enthalten | status IN ('active', 'pending') |
NOT IN |
Wert nicht in Liste | category NOT IN ('test', 'draft') |
BETWEEN |
Wert im Bereich | price BETWEEN 100 AND 500 |
Existenzoperatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
EXISTS |
Feld hat einen Wert | image EXISTS |
NOT EXISTS |
Feld ist leer/nicht vorhanden | description NOT EXISTS |
Logische Operatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
AND |
Beide Bedingungen müssen wahr sein | price > 100 AND stock > 0 |
OR |
Eine der Bedingungen muss wahr sein | category = 'A' OR category = 'B' |
NOT |
Negiert eine Bedingung | NOT status = 'inactive' |
Beispiele
Einfache Filterung
-- Alle Produkte einer Kategorie
SELECT * WHERE category = 'Electronics'
-- Produkte über einem Preis
SELECT * WHERE price > 100
-- Aktive Produkte
SELECT * WHERE status = 'active'
Mehrfache Bedingungen
-- Kategorie UND Preis
SELECT * WHERE category = 'Electronics' AND price > 100
-- Kategorie UND Verfügbarkeit
SELECT * WHERE category = 'SUV' AND stock > 0
-- Preisspanne
SELECT * WHERE price >= 40000 AND price <= 60000
Textsuche mit LIKE
-- Name beginnt mit "iPhone"
SELECT * WHERE name LIKE 'iPhone%'
-- Name enthält "Pro"
SELECT * WHERE name LIKE '%Pro%'
-- Name endet mit "Ultra"
SELECT * WHERE name LIKE '%Ultra'
Listen und Bereiche
-- Status in einer Liste
SELECT * WHERE status IN ('active', 'pending', 'review')
-- Kategorien ausschließen
SELECT * WHERE category NOT IN ('test', 'draft', 'deleted')
-- Preisbereich
SELECT * WHERE price BETWEEN 40000 AND 60000
Existenz-Prüfungen
-- Nur Datensätze mit Bild
SELECT * WHERE image EXISTS
-- Nur Datensätze mit Bild UND Preis
SELECT id, name WHERE image EXISTS AND price > 0
-- Datensätze ohne Beschreibung finden
SELECT * WHERE description NOT EXISTS
Komplexe Abfragen
-- Premium-Produkte mit Verfügbarkeit
SELECT * WHERE category = 'Premium' AND price > 1000 AND stock > 0
-- Suchkombination für Fahrzeuge
SELECT * WHERE (category = 'SUV' OR category = 'Limousine') AND price <= 50000
-- Aktive Produkte mit vollständigen Daten
SELECT * WHERE status = 'active' AND image EXISTS AND description EXISTS
Integration in Publixx
DataPicker
Im DataPicker können PQL-Queries interaktiv erstellt werden:
- Spaltenfilter setzen (werden zu LIKE-Bedingungen)
- Spezialfilter verwenden:
*= Wert vorhanden (EXISTS)#= Wert leer (NOT EXISTS)
- Button "PQL erzeugen" generiert die Query
- Query kann kopiert oder direkt ausgeführt werden
Makros
In der Makro-Engine kann PQL für automatisierte Datenfilterung verwendet werden:
{
"action": "data-filter",
"params": {
"query": "SELECT * WHERE category = 'Electronics' AND price > 100"
}
}
publixxCONFIG
Initiale Filterung beim Laden:
{
"pqlFilter": "price > 50000 AND category = 'Premium'"
}
API-Referenz
PqlEngine.parseQuery(query)
Parst eine PQL-Query und gibt die Struktur zurück.
const parsed = PqlEngine.parseQuery("SELECT * WHERE price > 100");
// → { fields: ['*'], where: 'price > 100', source: 'data' }
PqlEngine.executeQuery(query)
Führt eine PQL-Query auf den aktuellen Daten aus.
const results = await PqlEngine.executeQuery("SELECT * WHERE status = 'active'");
console.log(`${results.length} Datensätze gefunden`);
Best Practices
Feldnamen
- Feldnamen mit Leerzeichen oder Sonderzeichen in Anführungszeichen setzen:
"Produkt Name" - Case-sensitive:
Status≠status - Punktnotation für verschachtelte Objekte:
specs.color
Performance
- Spezifische Felder mit SELECT auswählen statt
* - EXISTS/NOT EXISTS für Pflichtfeld-Prüfungen verwenden
- Indizierte Felder (id, category) für schnelle Filterung nutzen
Fehlerbehandlung
| Fehler | Ursache | Lösung |
|---|---|---|
| Leeres Ergebnis | Kein Datensatz erfüllt Bedingungen | Bedingungen prüfen/lockern |
| Syntax-Fehler | Ungültige Query-Struktur | Klammern und Anführungszeichen prüfen |
| Feldname nicht gefunden | Tippfehler oder fehlendes Feld | Feldnamen aus Datenstruktur übernehmen |
Vergleich mit SQL
| Feature | PQL | SQL |
|---|---|---|
| SELECT | ✓ | ✓ |
| FROM | ✓ (optional) | ✓ |
| WHERE | ✓ | ✓ |
| ORDER BY | ✗ | ✓ |
| GROUP BY | ✗ | ✓ |
| JOIN | ✗ | ✓ |
| Subqueries | ✗ | ✓ |
PQL ist bewusst auf Filterung beschränkt – für Sortierung und Gruppierung werden andere Publixx-Funktionen verwendet.
© incoxx GmbH – Publixx Documentation