Quiq::Database::Row::Object - Datensatz als Objekt
Quiq::Database::Row
Ein Objekt der Klasse repräsentiert einen Datensatz.
$row = $class->new($db,@keyVal); # [1] $row = $class->new(\@titles,\@values,@keyVal); # [2] $row = $class->new(\@titles,@keyVal); # [3] $row = $class->new(@keyVal); # [4]
Instantiiere ein Datensatz-Objekt mit den Kolumnen @titles und den Kolumnenwerten @values und liefere eine Referenz auf dieses Objekt zurück.
$bool = $row->exists($key);
Liefere "wahr", wenn Datensatz-Attribut $key existiert, anderfalls "falsch".
$val = $row->get($key); @vals = $row->get(@keys);
Liefere die Datensatz-Attributwerte zu den angegebenen Schlüsseln. In skalarem Kontext liefere keine Liste, sondern den Wert des ersten Schlüssels.
Ein Datensatz-Wert kann der Wert einer Kolumne oder das Ergebnis einer Berechnung sein.
$val = $row->try($key);
Liefere den Wert des Attributs $key, falls es existiert, sonst undef.
undef
$row->set(@keyVal);
Setze die angegebenen Datensatz-Attribute. Es wird eine Exception ausgelöst, wenn ein Attribut zu setzen versucht wird, das nicht existiert. Die Methode liefert keinen Wert zurück.
$row->init($obj);
Setze die Datensatz-Komunen in $row auf die Werte der Attribute in $obj. Eine Kolumne wird nur gesetzt, wenn $obj für sie einen Wert hat, d.h. das Attribut muss existieren und es muss einen von '' und undef verschiedenen Wert haben.
Die Methode liefert keinen Wert zurück.
$row->initFromCgi($cgi);
Wie init(), nur dass ein CGI-Objekt per Methode param() befragt wird.
$row->addAttribute(@keys);
Füge die Attribute @keys zum Datensatz hinzu, sofern noch nicht existent. Die Methode liefert keinen Wert zurück.
$row->removeColumn(@keys);
Entferne die Kolumnen @keys aus dem Datensatz. Die Methode liefert keinen Wert zurück.
$row->add(@keyVal);
setValue()
Forciere das Setzen der Datensatz-Attribute @keyVal, d.h. erzeuge ein Datensatz-Attribut, falls es nicht existiert. Die Methode liefert keinen Wert zurück.
$val = $row->memoize($key,$sub);
Existiert das Datensatz-Attribut $key, liefere seinen Wert. Andernfalls berechne dessen Wert mittels der anonymen Subroutine $sub und speichere ihn auf dem Attribut.
$val = $row->getSet($key); $val = $row->getSet($key,$val);
Implementierung einer einfachen Attributmethode
Dies setzt voraus, dass das Attribut vorhanden ist. Falls dies nicht der Fall ist, kann es mit $row->add(xxx=>$val) eingeführt werden. Diese Form der Attributmethode wird von selbst per AUTOLOAD erzeugt, braucht also nicht implementiert werden
sub xxx { return shift->getSet(xxx=>@_); }
Eine Attributmethode, die eine Liste oder eine Arrayreferenz liefert
sub xxx { my $self = shift; # @_: $arr my $arr = $self->getSet(xxx=>@_); return wantarray? @$arr: $arr; }
$rowStatus = $row->rowStatus; $rowStatus = $row->rowStatus($rowStatus);
Liefere/Setze den Status des Datensatzes. Der Status beschreibt den Änderungsstand des Datensatzes hinsichtlich seiner Kolumnenwerte.
Folgende Status sind definiert:
Der Datensatz wurde von der Datenbank selektiert und nicht modifiziert.
Der Datensatz wurde von der Datenbank selektiert und durch eine der Attributmethoden modifiziert.
Der Datensatz wurde durch new() erzeugt. Er existiert auf der Datenbank nicht.
Der Datensatz wurde zum Löschen markiert. Dies geschah durch Aufruf von $row->rowStatus('D'). Mit dem nächsen Aufruf von $row->save($db); wird die Löschoperation auf der Datenbank ausgeführt.
$titleA|@titles = $row->titles; # [1] $titleA|@titles = $class->titles($db); # [2]
Liefere die Liste der Kolumentitel des Datensatzes, entweder als Referenz (Skalarkontext) oder als Array (Listkontext).
Liefere die Liste der Kolumnentitel der Datensatz-Klasse.
$bool = $row->isModified($title);
Liefere 1, wenn die Kolumnen $title modifiziert wurde, andernfalls 0.
@keys|$keyA = $row->modifiedColumns; @pairs|$pairA = $row->modifiedColumns(-withValue=>1);
Einschränkung auf die angegebenen Kolumnen. Ist als Kolumnenname eine Arrayreferenz
[$key=>$retKey]
angegeben, wird Kolumne $key geprüft, aber $retKey als Kolumnenname geliefert. Dies ist bei View-Datensätzen nützlich, wenn $row ein View-Datensatz ist, aber ein Tabellen-Datensatz manipuliert werden soll und die Kolumnennamen differieren.
Liefere nicht nur die Kolumnennamen, sondern auch deren Wert. Die Methode liefert in dem Fall die Datensatz-Änderungen als Schlüssel/Wert-Paare.
Generiere eine SET-Klausel für ein UPDATE-Statement aus einem View-Datensatz, dessen Kolumnen teilweise anders beannt sind, als die der zu aktualierenden Tabelle:
@setClause = $row->modifiedColumns( -columns=>[ lieferantid, [lieferantenartikelnr=>'liefernr'], [ekpreis=>'preis_ek'], ], -widthValues=>1, );
@clauses|$clauseA = $row->setClauseFromModifiedRow(@columns);
modifiedColumns()
Auf einen View-Datensatz wurden Werte geschrieben. Wir wissen nicht, welche Information sich geändert hat. Die Methode setClauseFromModifiedRow() liefert uns die SET-Klausel für ein UPDATE:
@setClause = $row->setClauseFromModifiedRow( [lieferantenid=>'lieferantid'], [lieferantenartikelnr=>'liefernr'], [ekpreis=>'preis_ek'], [lieferantenid1=>'lieferantid_1'], [lieferantenartikelnr1=>'liefernr_1'], [ekpreis1=>'preis_ek_1'], [lieferantenid2=>'lieferantid_2'], [lieferantenartikelnr2=>'liefernr_2'], [ekpreis2=>'preis_ek_2'], ); $db->update('shopartikellieferanteninfo', @setClause, -where,artikelid=>$artId, );
Wurde keine der Kolumnen geändert, liefert setClauseFromModifiedRow() eine leere Liste und $db->update() ist eine Nulloperation.
$row->absorbModifications;
Setze den Datensatz-Status auf 0 (unverändert) und lösche den Änderungs-Hash. Nach Aufruf der Methode sind alle vorangegangenen Änderungen am Datensatz nicht mehr feststellbar.
Die Methode kann benutzt werden, um Datenkorrekturen, z.B. durch normalizeNumber(), verschwinden zu lassen.
$tab->absorbModifications()
$str = $row->modificationInfo;
$row = $row->parentExists($type);
Prüfe, ob ein Eltern-Datensätze vom Typ $type existiert. Falls ja, liefere wahr, andernfalls falsch.
$row->addParent($type,$parentRow);
Füge Datensatz $parentRow als Eltern-Datensatz vom Typ $type hinzu. Die Referenz wird als schwache Referenz gekennzeichnet.
$parentRow = $row->getParent($type);
Liefere den Eltern-Datensatz vom Typ $type. Existiert keine Elterndatensatz vom Typ $type, liefere undef.
$bool = $row->childTypeExists($type);
Prüfe, ob Kind-Datensätze des Typs $type zum Datensatz hinzugefügt werden können. Falls ja, liefere wahr, andernfalls falsch.
$tab = $row->addChildType($type,$rowClass,\@titles);
Bevor Kind-Datensätze einem Datenstatz zugeordnet werden können, muss ein entsprechendes ResultSet-Objekt hinzugefügt werden. Dieses wird per $type angesprochen. Z.B. liefert
$tab = $row->getChilds($type);
die Menge der zugeordenten Kind-Objekte vom Typ $type.
$row->addChild($type,$childRow);
Füge Datensatz $childRow als Kinddatensatz vom Typ $type hinzu.
@rows|$rowT = $row->getChilds($type);
Liefere die Kind-Datensätze vom Typ $type.
Die folgenden Methoden implementieren die abstrakten Methoden der Basisklasse Quiq::Database::Row. Die Methoden hat die Klasse mit der Klasse Quiq::Database::Row::Array gemeinsam.
$arr|@arr = $row->asArray;
Liefere den Datensatz als Array, entweder in Form einer Referenz (Skalarkontext) oder als Array von Werten (Listkontext).
$str = $row->asString; $str = $row->asString($colSep);
Liefere den Datensatz als Zeichenkette. Per Default werden die Kolumnen per TAB getrennt. Der Trenner kann mittels $colSep explizit angegeben werden.
$newRow = $row->copy;
Erstelle eine Kopie des Datensatzes $row und liefere eine Referenz auf die Kopie zurück.
Die Kopie ist identisch zum Original, bis darauf, dass der Daten-Hash und der Änderungs-Hash kopiert werden:
Daten-Hash.........................: kopiert Referenz auf Titel-Liste...........: identisch Datensatz-Status...................: identisch Änderungs-Hash.....................: kopiert Referenz auf Kind-Datensätze-Hash..: identisch Referenz auf Eltern-Datensätze-Hash: identisch
$bool = $row->isRaw;
$str = $row->asRecord; $str = $row->asRecord($null); $str = $row->asRecord($null,$indent);
Liefere den Datensatz in mehrzeiliger Record-Darstellung. Die Darstellung hat den Aufbau:
<key1>: <val1> <key2>: <val2> ...
Der optionale Parameter $null gibt an, welcher Wert für einen Nullwert ausgegeben wird. Per Default wird NULL ausgegeben. Ist $null undef, wird das Attribut nicht ausgegeben (weder Name noch Wert). Ist $null '' (Leerstring), wird nur der Wert nicht ausgegeben.
Der optionale Parameter $indent gibt an, wie tief die Werte eingerückt werden. Per Default werden die Werte um 4 Leerzeichen eingerückt.
$row->copyData($row0,@opt);
Übergehe die Attribute @keys, d.h. kopiere die Werte dieser Attribute nicht.
Kopiere keine Nullwerte, d.h. im Falle eines Nullwerts in Datensatz $row0 bleibt der Attributwert in $row erhalten. Mögliche Erweiterung: Liste von Kolumnennamen.
Setze die Datensatz-Attribute in $row auf deren Werte in $row0. Attribute, die in $row0 nicht vorkommen, werden nicht gesetzt. Die Methode liefert keinen Wert zurück.
Die Methode ist nützlich, wenn ein Datensatz auf der Datenbank aktualisiert werden soll und dessen neue Werte auf einem anderen Datensatz stehen.
$cur = $row->save($db);
Aktualisiert den Datensatz $row gemäß seines Status auf der Datenbank $db und liefere das Resultat der Statement-Ausführung zurück.
Welche Datenbankoperation konkret ausgeführt wird, ergibt sich aus dem Status des Datensatzes.
Statuswerte
Es wird keine Datenbankoperation ausgeführt.
Es wird eine Update-Operation auf der Datenbank ausgeführt, d.h. es wird die Methode $row->update() gerufen.
Es wird eine Insert-Operation auf der Datenbank ausgeführt, d.h. es wird die Methode $row->insert() gerufen.
['D' (zu löschen)]
Es wird eine Delete-Operation auf der Datenbank ausgeführt, d.h. es wird die Methode $row->delete() gerufen.
$ref = $row->weaken($key); $ref = $row->weaken($key=>$ref);
Mache die Referenz von Schlüssel $key zu einer schwachen Referenz und liefere sie zurück. Ist eine Referenz $ref als Parameter angegeben, setze die Referenz zuvor.
$tab|@rows|$cur = $class->select($db,@select,@opt);
Liefere Cursor statt Liste der Datensätze.
Name der Klasse, die die Ergebnismenge speichert.
$row|@vals = $class->lookup($db,@select,@opt);
Wirf keine Exception, wenn der Datensatz nicht existiert, sondern undef (Skalarkontext) bzw. eine leere Liste (Listkontext).
$val = $class->value($db,@select,@opt);
Siehe $db->value().
$sbitRow = $row->toSbit($sbitClass);
Datensatz-Klasse der Sbit-Klassenbibliothek
Referenz auf Sbit-Datensatz
Generiere aus Datensatz $row einen Sbit-Datensatz der Klasse $sbitClass und liefere diesen zurück.
Die Methode ist nützlich, wenn über die Klassenbibliothek selektiert, aber die weitere Verarbeitung über Klassen auf Basis der Sbit-Klassenbibliothek erfolgt.
$val = $row->AUTOLOAD; $val = $row->AUTOLOAD($val);
Generiere Attributmethode, rufe diese auf und liefere den Attributwert.
1.137
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.