2.4.9.4. Eigene Funktionen erstellen

Selbstverständlich ist es möglich, checkerberry db über die Konfiguration um eigene Funktionen zu erweitern. Die Konfiguration erlaubt nicht nur das Registrieren von eigenen Funktionen, sondern auch das Anpassen der Syntax (siehe unten). Die Definition einer Funktion zum Addieren ihrer Parameter zeigt das Beispiel 2.30, „Definieren einer Funktion zur Addition“.

Beispiel 2.30. Definieren einer Funktion zur Addition

/**
 * Addiert alle Argumente.
 */
public class AddFunction implements TestdataFunction {

  @Override
  public String evaluate(ExecutionContext context,
                           List<String> arguments,
                           String functionName) {
    int result = 0;
    for (String argument : arguments) {
      result += Integer.valueOf(argument);
    }
    return Integer.toString(result);
  }
}


Funktionen implementieren das Interface TestdataFunction. Die Methode evaluate() wird bei Auswertung der Funktion aufgerufen und bestimmt das Ergebnis. Der aktuelle Ausführungskontext (u.a. Kontexte für Parameter, Autoparameter und Validatoren), eine Liste der Argumente in Form von Strings und der Name, unter dem die Funktion aufgerufen wurde (theoretisch ist es möglich eine Funktion unter mehreren Namen zu registrieren), werden übergeben. Es liegt in der Verantwortung der Implementation zu überprüfen, ob die Parameter in korrekter Anzahl und Form vorliegen. Argumente können null sein und es ist für eine Funktion legitim null zurückzugeben (Beispiel: ->null()). Ist ein Parameter ausschließlich durch eine Funktion definiert, so führt ein Rückgabewert von null zum Belegen des Feldes mit null, was beispielsweise gegen evtl. in der Datenbank vorhandene NOT NULL-Bedingungen verstoßen würde.

Anschließend ist das Registrieren der Funktion in der Konfiguration folgendermaßen möglich:

Beispiel 2.31. Registrieren der AddFunction

configuration.registerFunction("add",new AddFunction());


Nach der Registrierung kann die neue Funktion in den Testdaten verwendet werden (->add(1,3) würde zu 4 ausgewertet).