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

NAME

Quiq::Database::ResultSet - Liste von Datensätzen (abstrakt)

BASE CLASS

Quiq::Hash

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);
    
    $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.

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.

Accessors

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.

Tests

isRaw() - Prüfe, ob Raw-Tabelle

Synopsis

    $bool = $this->isRaw;

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.

align() - Liefere die Ausrichtung der Kolumnen

Synopsis

    @aligns | $alignA = $tab->align;

Description

Aktuell werden die Angaben 'left' und 'right' für die Ausrichtung von HTML-Tabellenzellen geliefert.

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);

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

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

-info => $n (Default: 3)

Umfang an Information, die über die Daten hinaus ausgegeben wird:

0

Nur Daten.

1

Numerierung der Kolumnen, Anzahl Zeilen, Ausführungszeit.

2

Inforationsumfang 1 plus Liste der Kolumnennamen.

3

Inforationsumfang 2 plus SQL-Statement.

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

VERSION

1.134

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

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