NAME
Quiq::Database::ResultSet - Liste von Datensätzen (abstrakt)
BASE CLASS
DESCRIPTION
Ein Objekt der Klasse repräsentiert eine Liste von gleichartigen Datensätzen.
METHODS
Konstruktor
new() - Instantiiere Tabellen-Objekt
Synopsis
$tab = $class->new($rowClass,\@titles);
$tab = $class->new($rowClass,\@titles,\@rows,@keyVal);
$tab = $class->new(\@titles);
$tab = $class->new(\@titles,\@rows,@keyVal);
$newTab = $tab->new;
$newTab = $tab->new(\@rows);
Description
Instantiiere ein Tabellen-Objekt und liefere eine Referenz auf dieses Objekt zurück.
Die Arrays @titles und @rows werden von der Methode nicht kopiert.
Ist $rowClass nicht angegeben, wird $class->defaultRowClass() als Row-Klasse angenommen.
Als Objektmethode gerufen, wird ein neues Tabellen-Objekt mit $rowClass und $titles aus dem existierenden Tabellenobjekt initialisiert. Diese Methode ist nützlich, wenn ein Tabellen-Objekt mit einer Teilmenge des ursprünglichen Tabellen-Objektes gebildet werden soll.
Akzessoren
rowClass() - Liefere Namen der Datensatz-Klasse
Synopsis
$rowClass = $tab->rowClass;
rows() - Liefere/Setze die Liste der Datensätze
Synopsis
$rowA|@rows = $tab->rows;
$rowA|@rows = $tab->rows(\@rows);
Description
Liefere die Liste der Datensätze der Tabelle. Im Skalarkontext liefere eine Referenz auf die Liste.
Ist Parameter \@rows angegeben, wird die Datensatz-Liste auf diese Liste gesetzt.
stmt() - Liefere Statement
Synopsis
$stmt = $tab->stmt;
Description
Liefere das SQL-Statement, mit welchem die Datensätze der Tabelle selektiert wurden.
stmtBody() - Liefere Rumpf für ein Subselect
Synopsis
$stmt = $tab->stmtBody(@opt);
Description
Liefere den Rumpf des (Select-)Statement. Der Rumpf ist das ürsprüngliche Statement ohne Select- und Order-By-Klausel.
Example
Ursprüngliches Select:
SELECT
per_vorname
, per_nachname
FROM
person
WHERE
per_nachname = 'Schulz'
ORDER BY
per_vorname
Resultierendes Select:
FROM
person
WHERE
per_nachname = 'Schulz'
titles() - Liefere Liste der Kolumnentitel
Synopsis
$titleA|@titles = $tab->titles;
Description
Liefere die Liste der Kolumnentitel der Tabelle. Im Skalarkontext liefere eine Referenz auf die Liste.
values() - Liefere Kolumnenwerte als Liste oder Hash
Synopsis
@vals|$valA = $tab->values($key,@opt);
%vals|$valH = $tab->values($key,@opt,-hash=>1);
Options
- -distinct => $bool (Default: 0)
-
Liefere in der Resultatliste nur verschiedene Kolumenwerte. Wird ein Hash geliefert, ist dies zwangsläufig der Fall. Der Wert findet sich in der Resultatliste an der Stelle seines ersten Auftretens.
- -hash => $bool (Default: 0)
-
Liefere einen Hash bzw. eine Hashreferenz (Quiq::Hash) mit den Kolumnenwerten als Schlüssel und 1 als Wert.
- -notNull => $bool (Default: 0)
-
Ignoriere Nullwerte, d.h. nimm sie nicht ins Resultat auf.
Tests
isRaw() - Prüfe, ob Raw-Tabelle
Synopsis
$bool = $this->isRaw;
Search
lookup() - Suche Datensatz
Synopsis
$row = $tab->lookup(@opt,$key=>$val);
Options
- -sloppy => $bool (Default: 0)
-
Wenn der gesuchte Datensatz nicht existiert, löse keine Exception aus, sondern liefere undef.
Description
Durchsuche die Tabelle nach dem ersten Datensatz, dessen Attribut $key den Wert $val besitzt und liefere diesen zurück. Erfüllt kein Datensatz das Kriterium, wird eine Exception ausgelöst.
select() - Suche Datensätze
Synopsis
@rows|$tab = $tab->select($testSub);
Description
Durchsuche die Tabelle nach den Datensätzen, die Test-Methode $testSub erfüllen und liefere die Liste dieser Datensätze zurück. Im Skalarkontext liefere ein neues Tabellen-Objekt.
Example
Schränke Produkt-Tabelle auf Produkte mit einem Preis > 100 ein:
my $sub = sub {
my $row = shift;
return $row->preis > 100? 1: 0;
};
$tab = $tab->select($sub);
File I/O
loadFromFile() - Lade Tabelle aus Datei
Synopsis
$tab = $class->loadFromFile($file,@opt);
Options
- -colSep => $char (Default: '|')
-
Kolumnen-Trennzeichen.
- -rowClass => $rowClass (Default: 'Quiq::Database::Row::Object')
-
Name der Datensatzklasse, auf die die Datensätze geblesst werden. Die Datensatzklasse entscheidet auch über die Tabellenklasse.
- -rowStatus => '0'|'U'|'I'|'D' (Default: 'I')
-
Setze den initialen Datensatz-Status.
Description
Lade Datensätze aus Datei $file in eine Datensatz-Tabelle und liefere eine Referenz auf dieses Objekt zurück.
Dateiformat
Die erste Zeile enthält die Kolumentitel, alle weiteren Zeilen die Datensätze. Die Kolumen werden per | getrennt.
Example
per_id|per_vorname|per_nachname
1|Rudi|Ratlos
2|Kai|Nelust
3|Elli|Pirelli
4|Susi|Sorglos
saveToFile() - Sichere Tabelle in Datei
Synopsis
$tab->saveToFile($file);
Description
Sichere die Datensätze der Tabelle in Datei $file. Die Methode liefert keinen Wert zurück.
Miscellaneous
elapsed() - Dauer seit Beginn der SQL_Ausführung
Synopsis
$duration = $tab->elapsed;
formats() - Liefere Kolumnenformate
Synopsis
$fmtA | @fmts = $tab->formats;
$fmtA | @fmts = $tab->formats($force);
Description
Analysiere den Tabelleninhalt und liefere eine Liste von Kolumnenformat-Objekten zurück. Diese können zur tabellarischen Formatierung der Kolumnenwerte herangezogen werden.
Die Analyse wird nur einmal durchgeführt und die resultierende Liste im Tabellenobjekt gespeichert. Ist der Parameter $force angegeben und "wahr", wird eine Neuberechnung forciert.
width() - Liefere die Breite der Tabelle
Synopsis
$n = $tab->width;
count() - Liefere Anzahl der Datensätze
Synopsis
$n = $tab->count;
pop() - Entferne Datensatz am Ende
Synopsis
$tab->pop;
push() - Füge Datensatz am Ende hinzu
Synopsis
$tab->push($row);
unshift() - Füge Datensatz am Anfang hinzu
Synopsis
$tab->unshift($row);
defaultRowClass() - Liefere Namen der Default-Rowklasse
Synopsis
$rowClass = $class->defaultRowClass;
Description
Liefere den Namen der Default-Rowklasse: 'Quiq::Database::Row::Object'
Auf die Default-Rowklasse werden Datensätze instantiiert, für die bei der Instantiierung einer Table-Klasse keine Row-Klasse explizit angegeben wurde.
Details
Als Default-Rowklasse wird für die Quiq::Database::ResultSet- Klassenhierarchie 'Quiq::Database::Row::Object' definiert.
Die Methode wird in der Subklasse Quiq::Database::ResultSet::Array überschrieben. Für diesen Zweig ist die Default-Rowklasse 'Quiq::Database::Row::Array'.
asExcel() - Tabellen-Repräsentation in Excel-Format
Synopsis
$tab->asExcel($file);
Arguments
Description
Schreibe die Tabelle im Excel-Format auf Datei $file.
asString() - String-Repräsentation der Tabelle
Synopsis
$str = $tab->asString;
$str = $tab->asString($colSep);
$str = $tab->asString($colSep,$rowSep);
Description
Liefere eine String-Repräsentation der Tabelle mit $colSep als Datensatz-Trenner (Default: "\t") und $rowSep als Kolumnentrenner (Default: "\n").
asTable() - Tabellen-Repräsentation der Tabellendaten
Synopsis
$str = $tab->asTable(@opt);
Options
- -color => $bool
-
Erzeuge eine farbige Ausgabe mit ANSI Colors.
- -info => $n (Default: 3)
-
Umfang an Information, die über die Daten hinaus ausgegeben wird:
- -msg => $msg
-
Füge $msg zur Statistik-Zeile hinzu.
Description
Liefere eine einfache Tabellen-Repräsentation der Tabellendaten.
Example
Beispiel-Ausgabe:
SELECT
*
FROM
did.mandant
WHERE
ROWNUM <= 10+1
ORDER BY
1
1 id
2 id_person
3 bezeichnung
4 id_verknuepfungsgruppe
1 2 3 4
| 0 | 14485923 | unbekannter Mandant | 0 |
| 1 | 14485924 | Otto | 0 |
| 2 | 7834646 | Otto - TZ (HB) | 0 |
| 3 | 14485928 | Schwab Versand GmbH | 0 |
| 4 | 5423454 | Schwab - TZ (HB) | 0 |
| 5 | 14913536 | Hanseatic Bank | 0 |
| 6 | 14485937 | 3-Pagen Versand | 0 |
| 7 | 8371420 | Fegro Markt G. M. B. H. | 0 |
| 8 | 14485941 | Heinrich Heine Versand | 0 |
| 9 | 14485942 | Hermes T. Kundendienst | 0 |
0.093s, 10 rows - *MORE ROWS EXIST*
diffReport() - Report über Differenzen
Synopsis
$str = $tab->diffReport;
reverse() - Kehre Datensatz-Reihenfolge um
Synopsis
$tab = $tab->reverse;
Returns
Tabellen-Objekt (für Method-Chaining)
Description
Kehre die Reihenfolge der Datensätze innerhalb des Tabellenobjekts um und liefere eine Referenz auf das Tabellenobjekt zurück.
Diese Methode ist nützlich, wenn die ersten N Datensätze einer geordneten Selektion in umgekehrter Reihenfolge ausgegeben werden sollen.
VERSION
1.222
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2024 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.