Um die Dynamisierung der Testdaten möglichst einfach zu gestalten, bringt checkerberry db von Haus aus eine Reihe von Funktionen mit. Diese werden hier kurz vorgestellt und erklärt:
->cat(param1,param2,…)
Konkateniert
die übergebenen Parameter. Wird intern verwendet um Ergebnisse von
Funktionsaufrufen in andere Inhalte einzufügen.
„->cat(a,${name},b)
“ ist also äquivalent zu
„a${name}b
“. Ist eines der Argumente
null
, so wird es als Leerstring interpretiert.
„a->null()b
“ wird daher zu
„ab
“ ausgewertet.
->param(name)
Ermittelt
aus dem ParameterContext
den Wert des Parameters
name
und gibt diesen zurück.
->save(value,name1, …,
nameN)
Speichert den Wert
value
in den Parametern
name1
bis nameN
und gibt
ihn zurück.
->null(...)
Ignoriert
sämtliche übergebene Parameter und gibt den Wert
null
zurück.
->set(value,name1, …,
nameN)
Speichert den Wert
value
in den Parametern
name1
bis nameN
und gibt
null zurück. Kurzform für ->null(->save(value,name1,
…, nameN))
.
->unset(name)
Löscht
den Parameter name
aus dem
ParameterContext
.
->now(param1,param2,…)
Ermittelt
den derzeitigen Zeitpunkt, modifiziert ihn entsprechend der Angaben
der einzelnen Argumente und liefert das Ergebnis als JDBC Timestamp
formatiert zurück. Beispiele:
Tabelle 2.1. now()-Funktion
Ausdruck | Ergebnis |
---|---|
->now() | 2010-11-25 15:53:29.915 |
->now(-2 years) | 2008-11-25 15:53:29.915 |
->now(-2 years,+3
days) | 2008-11-28 15:53:29.915 |
->now(+21 seconds) | 2010-11-25 15:53:50.915 |
Als Zeitangaben können folgende Bezeichnungen verwendet werden:
year(s)
, month(s)
,
week(s)
, day(s)
,
hour(s)
, minute(s)
,
second(s)
und
millisecond(s)
.
Anmerkung: Die 4 Ausdrücke
müssen nicht innerhalb derselben Millisekunde ausgewertet werden um
dieses Ergebnis zu erzielen. Die Funktion now
verwendet den Parameter now
um den derzeitigen
Zeitpunkt zwischenzuspeichern. Beim ersten Aufruf der
now
-Funktion wird (da der Parameter noch nicht
gesetzt wurde) der aktuelle Zeitpunkt bestimmt und in den Parameter
geschrieben. Alle weiteren Aufrufe verwenden einfach den gespeicherten
Wert. Auf diese Weise sind die Testdaten unabhängig von der
Auswertungsgeschwindigkeit der Testdaten und die Auswertung zum
Einspielen der initialen Testdaten am Anfang liefert das gleiche
Ergebnis wie die zum Vergleichen am Ende des Testes. Auf diese Weise
ist es ebenfalls möglich durch manuelles Setzen des Parameters die
Version der Testdaten zu dem jeweiligen Zeitpunkt zu erhalten.
Darüberhinaus verfügt die Funktion now
(de.conceptpeople.checkerberry.db.core.functions.NowFunction
)
über einen Setter, mit dem man einen eigenen
TimeService
definieren kann. Per Default liefert
der TimeService
immer die aktuelle Systemzeit
zurück. Es kann jedoch auch sinnvoll sein, eine andere Zeit zu
verwenden z.B. Transaktionszeitpunkte oder die aktuelle Zeit in der
Datenbank. Durch die Implementierung eines eigenen
TimeService
kann man somit kontrollieren, welche
Zeit in der Funktion now
und
today
verwendet wird. Das folgende Code-Beispiel
enthält das Interface des TimeService
.
Beispiel 2.29. Interface des TimeService
package de.conceptpeople.checkerberry.db.core.functions.callback; import java.util.Calendar; /** * Ein TimeService wird beispielsweise von der {@link NowFunction} * oder der {@link TodayFunction} benutzt um den aktuellen Zeitpunkt * zu bestimmen. Über die Methode setTimeService() ist es möglich, * diese Funktionen zum Verwenden einer eigenen Implementation zu * bewegen. */ public interface DbTimeService { /** * Liefert den aktuellen Zeitpunkt zurück. * * @return den Zeitpunkt. */ Calendar getCurrentTime(); }
->today(param1,param2,…)
Ermittelt
das derzeitige Datum, modifiziert es entsprechend der Angaben der
einzelnen Argumente und liefert das Ergebnis als JDBC Date formatiert
zurück. Beispiele:
Tabelle 2.2. today()-Funktion
Ausdruck | Ergebnis |
---|---|
->today() | 2010-11-25 |
->today(-2 years) | 2008-11-25 |
->today(-2 years,+3
days) | 2008-11-28 |
Die Anmerkung zur now
-Funktion trifft auf
die today
-Funktion ebenfalls zu. Auch sie
verwendet den Parameter now
, um den aktuellen
Zeitpunkt zu bestimmen bzw. zu speichern.