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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
entity | String | Ja | Name des Tabelle die abgefragt werden soll |
type | String | Nein | Definiert die Aktion die auf der Datenbank ausgeführt werden soll |
user | Objekt | Nein | User in dessen Kontext die Abfrage läuft |
options | Objekt | Nein | Weitere 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
descendants | Boolean | Ja | Steuert 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
options | Objekt | Nein | Beinhaltet 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
options | Objekt | Nein | Beinhaltet 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
count | Number | Nein | Kann angegeben werden um zu prüfen ob die Abfrage genau die Anzahl an Ergebnisse zurückliefern würde, wie in count angegeben |
options | Objekt | Nein | Beinhaltet 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
options | Objekt | Nein | Beinhaltet 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
columnName | String | Ja | Name der Spalte auf die gefiltert werden soll |
operator | String | Ja | Vergleichsoperator für Filterungen |
rightHandValue1 | Any | Nein | Wert der zum Vergleich verwendet werden soll |
useOr | Boolean | Nein | Steuert ob diese Bedingungen mit den vorherigen mit einem logischen Oder verknüpft werden soll |
rightHandValue2 | Any | Nein | ??? |
criteriaFunction | String | Nein | ??? |
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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
name | String | Ja | Name des Felds das zurückgegeben werden soll |
fn | String | Nein | ??? |
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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
name | String | Ja | Name 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
size | Number | Ja | Anzahl 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
offset | Number | Ja | Anzahl 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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
offset | Number | Ja | Anzahl der Datensätze die übersprungen werden sollen |
addOrder
Sortiert die Datensätze nach dem angegebenen Feld und der angegebenen Richtung.
Parameter
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
columnName | String | Ja | Name der Spalte nach der sortiert werden soll |
orderDir | String | Nein | Richtung in die sortiert werden soll |
fn | String | Nein | ??? |
options | Any | Nein | ??? |
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
Name | Typ | Pflichtangabe | Beschreibung |
---|---|---|---|
userOr | Boolean | Nein | Gruppe 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.
Steht nur Serverseitig zur Verfügung
fromJson
includeShared
indexHint
merge
search
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