Skip to main content
Version: Dingo

ks.criteria

ks.criteria wird verwendet, um Operation auf der Datenbank auszuführen. Dazu zählt hauptsächlich das Laden von Daten anhand verschiedener Kriterien aus der angegebenen Datenbanktabelle.

get

Definiert die Datenbanktabelle die abgefragt werden soll und ist der Einstiegspunkt für jede Criteria Query. Weiterhin kann der type angegeben werden, dieser definiert die Aktion die ausgeführt werden soll.

Parameter

NameTypPflichtangabeBeschreibung
entityStringJaName des Tabelle die abgefragt werden soll
typeStringNeinDefiniert die Aktion die auf der Datenbank ausgeführt werden soll
userObjektNeinUser in dessen Kontext die Abfrage läuft
optionsObjektNeinWeitere Optionen für die Datenbankabfrage

Beispiel

Dieses Beispiel lädt alle PlatformUser Datensätze aus der PlatformUser Datenbanktabelle und schreibt sie in die allPlatformUser Variable.

const allPlatformUser = await ks.criteria.get('PlatformUser').getResults();

descendants

Mit dem descendants Flag werden alle abgeleiteten Entities mit berücksichtigt.

Parameter

NameTypPflichtangabeBeschreibung
descendantsBooleanJaSteuert ob Descendants mit berücksichtigt werden sollen. Standardwert ist false

getResults

Damit eine Abfrage ausgeführt wird, kann getResults() verwendet werden. Dies lädt bis zu 10000 Datensätze anhand der davor stehenden Query.

Parameter

NameTypPflichtangabeBeschreibung
optionsObjektNeinBeinhaltet nur trigger. Dies steuert ob SEARCH Trigger berücksichtigt werden sollen oder nicht. Standardwert ist true

getResult

Falls man nur genau einen Datensatz laden möchte, kann getResult() verwendet werden.

Parameter

NameTypPflichtangabeBeschreibung
optionsObjektNeinBeinhaltet nur trigger. Dies steuert ob SEARCH Trigger berücksichtigt werden sollen oder nicht. Standardwert ist true

hasResults

Um zu prüfen, ob es anhand der Einschränkungen überhaupt Datensätze gibt, die den Kriterien entsprechen, ohne diese zu laden, kann hasResults() verwendet werden.

Parameter

NameTypPflichtangabeBeschreibung
countNumberNeinKann angegeben werden um zu prüfen ob die Abfrage genau die Anzahl an Ergebnisse zurückliefern würde, wie in count angegeben
optionsObjektNeinBeinhaltet nur trigger. Dies steuert ob SEARCH Trigger berücksichtigt werden sollen oder nicht. Standardwert ist true

Beispiel

Folgendes Beispiel prüft, ob es genau 5 PlatformUser gibt, dessen Vorname Max ist.

const userWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.hasResults(5);

getRowCount

Gibt die Anzahl an Einträgen in angegebener Tabelle zurück.

Parameter

NameTypPflichtangabeBeschreibung
optionsObjektNeinBeinhaltet nur trigger. Dies steuert ob SEARCH Trigger berücksichtigt werden sollen oder nicht. Standardwert ist true

addCondition (alias: and/or)

addCondition() bildet das Grundgerüst, um eine Abfrage auf der angegebenen Tabelle einzuschränken.

Parameter

NameTypPflichtangabeBeschreibung
columnNameStringJaName der Spalte auf die gefiltert werden soll
operatorStringJaVergleichsoperator für Filterungen
rightHandValue1AnyNeinWert der zum Vergleich verwendet werden soll
useOrBooleanNeinSteuert ob diese Bedingungen mit den vorherigen mit einem logischen Oder verknüpft werden soll
rightHandValue2AnyNein???
criteriaFunctionStringNein???

Beispiel

Folgendes Beispiel sucht alle PlatformUser, dessen Vorname Max ist.

const userWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.getResults();

and

Fügt eine Bedingung mit logischem UND hinzu. Die restliche Funktion ist analog zu addCondition.

or

Fügt eine Bedingung mit logischem ODER hinzu. Die restliche Funktion ist analog zu addCondition.

addSelectField

Falls nur wenige bestimmte Felder benötigt werden, kann die Last auf der Datenbank und der Netzwerkverkehr mit selectFields eingeschränkt werden. Nur die Felder, die hierdurch selektiert wurden, werden von der Datenbank zurückgegeben (Felder wie id und weitere Systemfelder, sind immer automatisch in der Abfrage inkludiert).

Parameter

NameTypPflichtangabeBeschreibung
nameStringJaName des Felds das zurückgegeben werden soll
fnStringNein???

Beispiel

Folgendes Beispiel sucht alle PlatformUser, dessen Vorname Max ist. Es werden aber nur der Vor- und Nachname zurückgegeben.

const userWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.addSelectField('firstName')
.addSelectField('lastName')
.getResults();

addDeselectField

Falls ein Großteil der Felder benötigt werden, es aber Felder gibt, die definitiv nicht gebraucht werden, können diese mit der folgenden Funktion deselektiert werden. Darunter könnten beispielsweise große JSON Attribute sein, die in der weiteren Verarbeitung nicht vonnöten sind.

Parameter

NameTypPflichtangabeBeschreibung
nameStringJaName des Felds das deselektiert werden soll

limit

Um die Anzahl an geladenen Datensätzen zu begrenzen, kann limit verwendet werden. Dadurch wird die maximale Anzahl an Datensätzen definiert.

Parameter

NameTypPflichtangabeBeschreibung
sizeNumberJaAnzahl der maximal zu ladenden Datensätze

Beispiel

Lade maximal 5 PlatformUser dessen Vorname Max ist.

const userWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.addSelectField('firstName')
.addSelectField('lastName')
.limit(5)
.getResults();

offset

Da getResults nur 10000 Datensätze zurückliefert, benötigt man gelegentlich Pagination. Sprich man teilt die Datenmenge in kleinere Teile auf und verarbeitet sie nacheinander. Dafür wird offset und limit verwendet.

Wichtig ist, das es immer eine Sortierung gibt. Damit wird sichergestellt, das jede weitere Abfrage immer die gleiche Reihenfolge der Datensätze hat. Andernfalls kann es dazu kommen, das mehrmals die gleichen Datensätze aus der Datenbank geladen werden und es somit zu potentiellen Fehlern in der weiteren Verarbeitung kommen kann.

.offset() setzt den Versatz der zu holenden Datensätze immer absolut und überschreibt alle vorher gesetzten offsets.

Parameter

NameTypPflichtangabeBeschreibung
offsetNumberJaAnzahl der Datensätze die übersprungen werden sollen

Beispiel

Lade maximal 5 PlatformUser dessen Vorname Max ist, verarbeite diese und lade dann die nächsten 5 PlatformUser.

const userWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.addOrder('id')
.limit(5)
.offset(0)
.getResults();

await this.doSomeThingWithTheUsers(userWithFirstNameMax);

const next5UserWithFirstNameMax = await ks.criteria.get('PlatformUser')
.addCondition('firstName', 'EQUAL', 'Max')
.addOrder('id')
.limit(5)
.offset(5)
.getResults();

await this.doSomeThingWithTheUsers(next5UserWithFirstNameMax);

addOffset

addOffset setzt analog zu offset den Versatz der zu holenden Datensätze. Unterschiedlich zu .offset() wird der Versatz nicht absolut gesetzt, sondern die angegeben Zahl wird auf den aktuellen Versatz der Query addiert.

Parameter

NameTypPflichtangabeBeschreibung
offsetNumberJaAnzahl der Datensätze die übersprungen werden sollen

addOrder

Sortiert die Datensätze nach dem angegebenen Feld und der angegebenen Richtung.

Parameter

NameTypPflichtangabeBeschreibung
columnNameStringJaName der Spalte nach der sortiert werden soll
orderDirStringNeinRichtung in die sortiert werden soll
fnStringNein???
optionsAnyNein???

addGroup

Um verschiedene Bedingungen in logische Gruppen zu verpacken, kann addGroup verwendet werden. addGroup erstellt eine neue Gruppe, an der dann neue Bedingungen geknüpft werden können, die entweder per logischem UND oder logischem ODER mit der Hauptabfrage verknüpft werden können.

Parameter

NameTypPflichtangabeBeschreibung
userOrBooleanNeinGruppe mit UND oder ODER verknüpfen Standardwert ist false

Beispiel

Lade alle PlatformUser dessen Vorname Max oder Erika ist und das Alter größer gleich 18 ist. Zur Veranschaulichung wurde die Gruppe explizit getrennt, es ist aber auch möglich direkt auf der Hauptabfrage zu arbeiten (siehe unteres Beispiel).

const query = ks.criteria.get('PlatformUser')
.addCondition('age', 'GREATER_OR_EQUAL', 18);

const andGroup = query.addGroup();
andGroup.addCondition('firstName', 'EQUAL', 'Max');
andGroup.addCondition('firstName', 'EQUAL', 'Erika', true);

const users = await query.getResults();

// obere query komprimiert:
const users = await ks.criteria.get('PlatformUser')
.addCondition('age', 'GREATER_OR_EQUAL', 18)
.addGroup()
.addCondition('firstName', 'EQUAL', 'Max')
.addCondition('firstName', 'EQUAL', 'Erika', true)
.getResults();

andGroup

Fügt eine mit logischem UND getrennte Gruppe hinzu. Die restliche Funktion ist analog zu addGroup.

orGroup

Fügt eine mit logischem ODER getrennte Gruppe hinzu. Die restliche Funktion ist analog zu addGroup.

addGroupBy

addJson

addPercentBasedCondition

addSearchCondition

addTransform

clone

execute

explain

Führt eine Datenbankabfrage durch und gibt den Ausführungsplan der Datenbank zurück. Kann zum Debuggen einer Query oder zur Performance Optimierung verwendet werden.

info

Steht nur Serverseitig zur Verfügung

fromJson

includeShared

indexHint

merge

tenancyFilter

view

Aktionen

SELECT

Ist der Standardwert für eine Criteria Query und gibt die resultierenden Werte der Datenabfrage wieder zurück.

DELETE

Löscht alle Datensätze die durch die Criteria Query gefunden werden.

UPDATE

???

Optionen

actor

???

secured

???

descendants

???

Vergleichsoperatoren

EQUAL NOT_EQUAL IN NOT_IN BEGINS_WITH NOT_BEGINS_WITH CONTAINS NOT_CONTAINS ENDS_WITH NOT_ENDS_WITH IS_EMPTY IS_NOT_EMPTY IS_NULL IS_NOT_NULL LESS LESS_OR_EQUAL GREATER GREATER_OR_EQUAL BETWEEN NOT_BETWEEN IS IS_NOT DATE_RANGE MEMBER_OF NOT_MEMBER_OF ALL_IN

Sortierrichtung

ASC

Aufsteigend

DESC

Absteigend

DESC_NULLS_FIRST

Absteigend. Datensätze mit null als Wert für das zu sortierende Feld zuerst

DESC_NULLS_LAST

Absteigend. Datensätze mit null als Wert für das zu sortierende Feld als letztes

ASC_NULLS_FIRST

Aufsteigend. Datensätze mit null als Wert für das zu sortierende Feld zuerst

ASC_NULLS_LAST

Aufsteigend. Datensätze mit null als Wert für das zu sortierende Feld als letztes