2.4.9.3. Vordefinierte Funktionen

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

AusdruckErgebnis
->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

AusdruckErgebnis
->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.