The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Database::Patch - Definiere Patches für eine Datenbank und wende sie an (Basisklasse)

BASE CLASS

Quiq::Hash

SYNOPSIS

Abgeleitete Patch-Klasse mit Patch-Methoden patch1() ... patchN() definieren:

  package MyPatchClass;
  use base qw/Quiq::Database::Patch/;
  
  sub patch1 {
      my ($self,$db) = @_;
  
      # Code Patch 1
  
      return;
  }
  
  sub patch2 {
      my ($self,$db) = @_;
  
      # Code Patch 2
  
      return;
  }
  
  # ...

Ein oder mehrere Patches auf eine Datenbank anwenden:

  $db = Quiq::Database::Connection->new($udl);
  $pat = MyPatchClass->new($db);
  $pat->apply($n);

DESCRIPTION

Wir entwickeln eine Datenbank, indem wir fortgesetzt Patches auf sie anwenden. Die Patches können Schema- oder Datenänderungen betreffen. Die Patches werden fortschreitend in einer einzigen Klasse definiert. Die Patchklasse ist von der Klasse Quiq::Database::Patch abgeleitet. Jeder Patch wird durch eine Methode mit dem Namen patchN realisiert. Hierbei ist N der Patchlevel. Wir heben die Datenbank auf Patchlevel $n, indem wir die Methode $pat->apply($n) aufrufen. Alle Patches vom aktuellen Patchlevel+1 bis $n werden dabei nacheinander auf die Datenbank angewandt. Ist der aktuelle Patchlevel gleich oder größer dem angeforderten Patchlevel $n, wird kein Patch angewandt. Auf einen früheren Patchlevel als den aktuellen Patchlevel kann nicht zurückgegangen werden. Soll ein Patch zurückgenommen werden, ist ein weiterer Patch zu schreiben, der diesen rückgängig macht. Jeder Patch wird einzeln committet. Der aktuelle Patchlevel ist in der Tabelle PATCHLEVEL festgehalten. Diese wird beim ersten Aufruf der Methode $class->new($db) automatisch angelegt.

METHODS

Konstruktor

new() - Instantiiere Objekt

Synopsis

  $pat = $class->new($db);

Arguments

$db

(Object) Datenbankverbindung

Returns

Patch-Object

Description

Instantiiere eine Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück.

Klassenmethoden

maxLevel() - Liefere den höchsten möglichen Patchlevel

Synopsis

  $level = this->maxLevel;

Returns

(Integer) Patchlevel

Description

Ermittele den höchsten möglichen Patchlevel und liefere diesen zurück.

Objektmethoden

apply() - Wende Patch(es) an

Synopsis

  $pat->apply($level);

Arguments

$level

(Integer) Patchlevel

Description

Wende alle Patches an, bis Patchlevel $level erreicht ist.

currentLevel() - Liefere aktuellen Patchlevel

Synopsis

  $level = $pat->currentLevel;

Returns

(Integer) Patchlevel

Description

Ermittele den aktuellen Patchlevel und liefere diesen zurück.

VERSION

1.204

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2022 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.