PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::db::GenericResult Klassenreferenz

Klasse zum Speichern von Ergebnissen aus Datenbank-Selects. Mehr ...

Öffentliche Typen

enum  Type {
  Error =-1, Unknown =0, Integer, Decimal,
  Bit, Timestamp, Date, Time,
  DateTime, String, Binary, Enum
}
 Mögliche Datentypen. Mehr ...
 

Öffentliche Methoden

 GenericResult ()
 
 ~GenericResult ()
 
virtual pplint64 Affected ()
 Betroffene Zeilen. Mehr ...
 
int BuildIndex ()
 
void * Calloc (size_t size)
 
virtual void Clear ()
 Speicher freigeben, Result löschen. Mehr ...
 
int Export (CAssocArray &array)
 Result als assoziatives Array exportieren. Mehr ...
 
virtual CAssocArray FetchArray (pplint64 row=-1)
 Zeile in ein Assoziatives Array kopieren. Mehr ...
 
virtual int FetchArray (CAssocArray &array, pplint64 row=-1)
 Zeile in ein Assoziatives Array kopieren. Mehr ...
 
virtual CArray FetchFields (pplint64 row=-1)
 Zeile in ein Array kopieren. Mehr ...
 
virtual int FetchFields (CArray &array, pplint64 row=-1)
 Zeile in ein Array kopieren. Mehr ...
 
virtual const char * FieldName (int field)
 Name einer bestimmten Spalte herausfinden. Mehr ...
 
virtual int FieldNum (const char *fieldname)
 Spalte eines bestimmten Feldes herausfinden. Mehr ...
 
virtual int Fields ()
 Anzahl Spalten im Ergebnis. Mehr ...
 
virtual Result::Type FieldType (int field)
 Typ eines Feldes auslesen. Mehr ...
 
virtual Result::Type FieldType (const char *fieldname)
 Typ eines Feldes auslesen. Mehr ...
 
void Free (void *ptr)
 
virtual const char * Get (pplint64 row, const char *fieldname)
 Wert eines bestimmten Feldes. Mehr ...
 
virtual const char * Get (pplint64 row, int field)
 Wert eines bestimmten Feldes. Mehr ...
 
ppluint64 GetUsedMem ()
 
int Import (CAssocArray &array)
 
void * Malloc (size_t size)
 
int NewRow ()
 
virtual void PrintResult ()
 Ergebnis auf STDOUT ausgeben. Mehr ...
 
virtual pplint64 Rows ()
 Anzahl Zeilen im Ergebnis. Mehr ...
 
virtual int Seek (pplint64 row)
 Internen Zeiger auf die gewünschte Ergebniszeile setzen. Mehr ...
 
void SetAffectedRows (pplint64 rows)
 
void SetBufferGrowSize (size_t bytes)
 
int SetFieldName (int num, const char *name, Result::Type type)
 
int SetFieldName (int num, const char *name, int namelength, Result::Type type)
 
int SetNumFields (int num)
 
int StoreField (int num, void *data, int size)
 

Private Methoden

int ToString (CString &res, void *field, Result::Type type)
 

Private Attribute

pplint64 affectedrows
 Falls es sich um einen Insert mit einem Autoincrement-Index handelte, steht hier die vergebene ID. Mehr ...
 
void * fieldnames
 
void * firstrow
 
void * index
 
pplint64 lastinsertid
 Anzahl Zeilen im Ergebnis. Mehr ...
 
void * lastrow
 
CMemManmem
 Anzahl Spalten im Ergebnis. Mehr ...
 
int num_fields
 Falls es sich um ein Update/Insert/Replace handelte, steht hier die Anzahl betroffender Datensätze. Mehr ...
 
CAssocArrayres_lastfetch
 
CArrayres_lastfieldfetch
 
pplint64 res_lastrow
 
void * row
 
pplint64 rowpointer
 
pplint64 rows
 

Ausführliche Beschreibung

Include:
#include <ppl6-db.h>
Beschreibung:
Dies ist eine von ppl6::db::Result abgeleitete Klasse zum Speichern von Ergebnissen aus Datenbank-Selects. Sie wird verwendet, wenn die Datenbank selbst keine Möglichkeit bietet, ein Ergebnis beliebig zu durchwandern, oder wenn diese Funktionalität noch nicht implementiert wurde. Ebenfalls kann sie verwendet werden, um eine Kopie eines Results zu erstellen.
Mit Ihren Funktionen können die Ergebniszeilen aus einem Select durchwandert und ausgelesen werden.
Verwendung:
Um ein Result in der Klasse zu speichern, muss zunächst eine Instanz von GenericResultmit new erstellt werden. Mit GenericResult::SetNumFields wird der Klasse dann mitgeteilt, aus wievielen Feldern das Ergebnis besteht. Danach wird für jedes Feld die Funktion GenericResult::SetFieldName aufgerufen, die als Parameter die Nummer des Feldes (beginnend mit 0), den Namen und den Datentyp vom Typ Result::Type bekommt.
Nun kann begonnen werden die einzelnen Zeilen des Ergebnisses zu speichern. Dazu wird zu Beginn jeder neuen Zeile die Funktion GenericResult::NewRow aufgerufen. Danach werden die einzelnen Felder der Zeile mit GenericResult::StoreField gespeichert. Die Daten werden dabei in einen eigenen Speicherbereich der Klasse kopiert.
Sind alle Ergebniszeilen gespeichert, wird zum Schluss noch die Funktion GenericResult::BuildIndex aufgerufen, wodurch ein Index zum schnellen Zugriff auf bestimmte Zeilen erstellt wird. Ausserdem muss noch die Funktion GenericResult::SetAffectedRows aufgerufen werden, um die Anzahl durch den Query veränderter Datensätze zu übergeben.
Falls während des Vorgangs Speicher benötigt wird, der bis zum Löschen des Result-Objects erhalten bleiben muss, können die Funktionen GenericResult::Malloc, GenericResult::Calloc und GenericResult::Free verwendet werden. Diese allokieren internen Speicher der Klasse, der durch Aufruf des Konstruktors wieder freigegeben wird (verwendet GenericResult::mem).
Beispiel:
ppl6::db::Result *DB_GenericResult_Example1(const CString &Query) {
int num_fields; // Nimmt die Anzahl Felder im Result auf
// Datenbank-spezifische Code, der das Query ausführt
// ...
// Result-Objekt erstellen
if (!res) { // Out of Memory anfangen
return NULL;
}
// Anzahl Felder im Result übergeben
res->SetNumFields(num_fields);
for (int i=0;i<num_fields;i++) {
const char *field_name = xxxxx; // Name des Feldes
Result::Type field_type = xxxxx; // Datentyp
// Namen und Feldtypen übergeben
res->SetFieldName(i, field_name, field_type);
}
// Ergebniszeilen übergeben
for (pplint64 r=0;r<num_rows;r++) {
// Neue Zeile
res->NewRow();
// Felder durchgehen
for (int i=0;i<num_fields;i++) {
void *value = xxxx; // Pointer auf den Inhalt des Feldes
int len_value = xxxx; // Anzahl Bytes des Feldes
res->StoreField(i,value,len_value);
}
}
// Betroffene Zeilen übergeben
res->SetAffectedRows(num_rows);
// Index aufbauen
res->BuildIndex();
// fertig
return (ppl6::db::Result *)res;
} // EOF

Dokumentation der Aufzählungstypen

enum ppl6::db::Result::Type
inherited
Aufzählungswerte
Error 

Dieser Wert wird von der Funktion Result::FieldType im Fehlerfall zurückgegeben.

Unknown 

Der Datentyp ist unbekannt

Integer 

Ein Zahlenwert vom Typ Integer

Decimal 

Ein Zahlenwert mit Kommastellen. Häufig ein Float oder Double

Bit 

Ein boolscher Wert

Timestamp 

Ein Zeitstempel, meist UTC

Date 

Ein Datumswert

Time 

Eine Uhrzeit

DateTime 

Kombination aus Datum und Uhrzeit

String 

Ein String

Binary 

Ein großer String oder Binärwert

Enum 

Eine Enumeration

Beschreibung der Konstruktoren und Destruktoren

ppl6::db::GenericResult::GenericResult ( )
ppl6::db::GenericResult::~GenericResult ( )

Dokumentation der Elementfunktionen

pplint64 ppl6::db::GenericResult::Affected ( )
virtual

War der Datenbank-Query ein Select, liefert diese Funktion genau wie Result::Rows die Anzahl Zeilen im Ergebnis zurück. Handelete es sich um ein Update/Insert/Replace, wird die Anzahl betroffener bzw. veränderter Datensätze zurückgegeben. Die Information kann auch über Funktion Database::GetAffectedRows der Datenbank-Klasse ausgelesen werden.

Rückgabe
Anzahl betroffender Datensätze, im Fehlerfall -1

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::BuildIndex ( )
void * ppl6::db::GenericResult::Calloc ( size_t  size)
void ppl6::db::GenericResult::Clear ( )
virtual
Beschreibung:
Durch Aufruf dieser Funktion wird der interne Speicher und Datenbank- oder Result-spezifische Handles freigegeben. Nach Aufruf der Funktion kann daher nicht mehr auf die vormals vorhandenen Ergebnisse des Datenbank-Selects zugegriffen werden. Die Funktion braucht in der Regel nicht aufgerufen zu werden, da dies auch der Destruktor der Klasse macht.

Erneute Implementation von ppl6::db::Result.

int ppl6::db::Result::Export ( CAssocArray array)
inherited
Beschreibung:
Mit diesem Befehl wird das Result-Set dieses Objekts als Strings mit Key-Value-Paaren in ein CAssocArray kopiert. Das Array kann in ein GenericResult-Objekt mittels GenericResult::Import wieder importiert werden. Da alles als String exportiert wird, gehen die Datentyp-Informationen verloren.
Parameter
[out]arrayEin assoziatives Array, in dem das Result-Set gespeichert werden soll
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
CAssocArray ppl6::db::GenericResult::FetchArray ( pplint64  row = -1)
virtual

Mit dieser Funktion wird eine komplette Ergebniszeile in ein Assoziatives Array vom Typ CAssocArray kopiert und der interne Zeiger auf den nächsten Datensatz vorgerückt. Durch wiederholtes Aufrufen der Funktion kann man somit nach und nach alle Ergebniszeilen durchwandern.

Parameter
[in]rowEin Optionaler Parameter, der die gewünschte Ergebniszeile angibt. Wird der Parameter weggelassen, wird der Datensatz zurückgegeben, auf den der interne Zeiger zeigt, und der Zeiger auf den nächsten Datensatz vorgerückt.
Rückgabe
Liefert ein CAssocArray mit Feldern und Werten der aktuellen Ergebniszeile zurück. Im Fehlerfall oder falls keine weiteren Ergebniszeilen vorhanden sind, wird ein leeres CAssocArray zurückgeliefert.
Bemerkungen
Bei Aufruf dieser Funktion werden die Daten der aktuellen Zeile mehrfach kopiert. Die Funktion Result::FetchArray(CAssocArray &array, ppluint64 row) ist daher vorzuziehen.

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::FetchArray ( CAssocArray array,
pplint64  row = -1 
)
virtual

Mit dieser Funktion wird eine komplette Ergebniszeile in das Assoziative Array array kopiert und der interne Zeiger auf den nächsten Datensatz vorgerückt. Durch wiederholtes Aufrufen der Funktion kann man somit nach und nach alle Ergebniszeilen durchwandern.

Parameter
[out]arrayEin Objekt vom Typ CAssocArray, in dem das Ergebnis gespeichert werden soll. Daten, die vor Aufruf in array enthalten sind, werden durch die Funktion gelöscht.
[in]rowEin Optionaler Parameter, der die gewünschte Ergebniszeile angibt. Wird der Parameter weggelassen, wird der Datensatz zurückgegeben, auf den der interne Zeiger zeigt, und der Zeiger auf den nächsten Datensatz vorgerückt.
Rückgabe
Im Erfolgsfall liefert die Funktion 1 zurück, im Fehlerfall oder falls keine weiteren Ergebniszeilen vorhanden sind 0.

Erneute Implementation von ppl6::db::Result.

CArray ppl6::db::GenericResult::FetchFields ( pplint64  row = -1)
virtual

Mit dieser Funktion wird eine komplette Ergebniszeile in ein Array vom Typ CArray kopiert und der interne Zeiger auf den nächsten Datensatz vorgerückt. Durch wiederholtes Aufrufen der Funktion kann man somit nach und nach alle Ergebniszeilen durchwandern.

Parameter
[in]rowEin Optionaler Parameter, der die gewünschte Ergebniszeile angibt. Wird der Parameter weggelassen, wird der Datensatz zurückgegeben, auf den der interne Zeiger zeigt, und der Zeiger auf den nächsten Datensatz vorgerückt.
Rückgabe
Liefert ein CArray mit Feldern und Werten der aktuellen Ergebniszeile zurück. Im Fehlerfall oder falls keine weiteren Ergebniszeilen vorhanden sind, wird ein leeres CArray zurückgeliefert.
Bemerkungen
Bei Aufruf dieser Funktion werden die Daten der aktuellen Zeile mehrfach kopiert. Die Funktion Result::FetchFields(CArray &array, ppluint64 row) ist daher vorzuziehen.

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::FetchFields ( CArray array,
pplint64  row = -1 
)
virtual

Mit dieser Funktion wird eine komplette Ergebniszeile in das Array array kopiert und der interne Zeiger auf den nächsten Datensatz vorgerückt. Durch wiederholtes Aufrufen der Funktion kann man somit nach und nach alle Ergebniszeilen durchwandern.

Parameter
[out]arrayEin Objekt vom Typ CArray, in dem das Ergebnis gespeichert werden soll. Daten, die vor Aufruf in array enthalten sind, werden durch die Funktion gelöscht.
[in]rowEin Optionaler Parameter, der die gewünschte Ergebniszeile angibt. Wird der Parameter weggelassen, wird der Datensatz zurückgegeben, auf den der interne Zeiger zeigt, und der Zeiger auf den nächsten Datensatz vorgerückt.
Rückgabe
Im Erfolgsfall liefert die Funktion 1 zurück, im Fehlerfall oder falls keine weiteren Ergebniszeilen vorhanden sind 0.

Erneute Implementation von ppl6::db::Result.

const char * ppl6::db::GenericResult::FieldName ( int  num)
virtual

Dies ist die Umkehrfunktion zu Result::FieldNum. Sie liefert den Namen eines bestimmten Feldes anhand dessen Spaltennummer num zurück, sofern sie vorhanden ist.

Parameter
[in]numGewünschte Spaltennummer
Rückgabe
Ist die Spalte vorhanden, wird deren Namen als String zurückgegeben, im Fehlerfall NULL.

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::FieldNum ( const char *  fieldname)
virtual

Diese Funktion liefert die Spaltennummer des Feldes mit dem Namen fieldname zurück, sofern dieses vorhanden ist.

Parameter
[in]fieldnameName des gesuchten Feldes
Rückgabe
Ist das Feld vorhanden, wird dessen Spaltennummer zurückgegeben. Die Zählung der Spalten fängt dabei bei 0 an. Im Fehlerfall wird -1 zurückgegeben.

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::Fields ( )
virtual

Diese Funktion liefert die Anzahl Spalten im Ergebnis des vorhergehenden Selects zurück.

Rückgabe
Anzahl Spalten oder -1 im Fehlerfall.

Erneute Implementation von ppl6::db::Result.

Result::Type ppl6::db::GenericResult::FieldType ( int  num)
virtual

Mit dieser Funktion kann man abfragen, was für ein Datentyp das Feld num ist.

Parameter
[in]numDie gewünschte Spalte
Rückgabe
Liefert einen Wert vom Typ Result::Type zurück, im Fehlerfall Result:Error.

Erneute Implementation von ppl6::db::Result.

Result::Type ppl6::db::GenericResult::FieldType ( const char *  fieldname)
virtual

Mit dieser Funktion kann man abfragen, was für ein Datentyp das Feld mit dem Namen fieldname ist.

Parameter
[in]fieldnameDie gewünschte Spalte
Rückgabe
Liefert einen Wert vom Typ Result::Type zurück, im Fehlerfall Result:Error.

Erneute Implementation von ppl6::db::Result.

void ppl6::db::GenericResult::Free ( void *  ptr)
const char * ppl6::db::GenericResult::Get ( pplint64  row,
const char *  fieldname 
)
virtual
Beschreibung:
Mit dieser Funktion wird der Wert des Feldes mit dem Namen fieldname aus der Ergebniszeile row als String zurückgegeben.
Parameter
[in]rowDie gewünschte Ergebniszeile
[in]fieldnameDer Name des auszulesenden Feldes
Rückgabe
Ist das Feld vorhanden, wird ein Pointer auf dessen Inhalt zurückgegeben, im Fehlerfall NULL.

Erneute Implementation von ppl6::db::Result.

const char * ppl6::db::GenericResult::Get ( pplint64  row,
int  field 
)
virtual
Beschreibung:
Mit dieser Funktion wird der Wert des Feldes in Spalte field aus der Ergebniszeile row als String zurückgegeben.
Parameter
[in]rowDie gewünschte Ergebniszeile
[in]fieldDer Nummer der auszulesenden Spalte
Rückgabe
Ist das Feld vorhanden, wird ein Pointer auf dessen Inhalt zurückgegeben, im Fehlerfall NULL.

Erneute Implementation von ppl6::db::Result.

ppluint64 ppl6::db::GenericResult::GetUsedMem ( )
int ppl6::db::GenericResult::Import ( CAssocArray array)
void * ppl6::db::GenericResult::Malloc ( size_t  size)
int ppl6::db::GenericResult::NewRow ( )
void ppl6::db::GenericResult::PrintResult ( )
virtual

Durch AUfruf dieser Funktion wird das Ergebnis des Selects auf STDOUT ausgegeben.

Erneute Implementation von ppl6::db::Result.

pplint64 ppl6::db::GenericResult::Rows ( )
virtual

Diese Funktion liefert die Anzahl Zeilen im Ergebnis des vorhergehenden Selects zurück.

Rückgabe
Anzahl Zeilen (rows). Im Fehlerfall wird -1 zurückgegeben.
Siehe auch
Result::Fields gibt die Anzahl Spalten im Ergebnis zurück

Erneute Implementation von ppl6::db::Result.

int ppl6::db::GenericResult::Seek ( pplint64  row)
virtual

Mit dieser Funktion wird der interne Datenzeiger auf die gewünschte Zeile row gesetzt, so dass diese beim nächsten Aufruf von Result::FetchArray zurückgeliefert wird.

Parameter
[in]rowDie gewünschte Zeile
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.

Erneute Implementation von ppl6::db::Result.

void ppl6::db::GenericResult::SetAffectedRows ( pplint64  rows)
void ppl6::db::GenericResult::SetBufferGrowSize ( size_t  bytes)
int ppl6::db::GenericResult::SetFieldName ( int  num,
const char *  name,
Result::Type  type 
)
int ppl6::db::GenericResult::SetFieldName ( int  num,
const char *  name,
int  namelength,
Result::Type  type 
)
int ppl6::db::GenericResult::SetNumFields ( int  num)
int ppl6::db::GenericResult::StoreField ( int  num,
void *  data,
int  size 
)
int ppl6::db::GenericResult::ToString ( CString res,
void *  field,
Result::Type  type 
)
private

Dokumentation der Datenelemente

pplint64 ppl6::db::GenericResult::affectedrows
private
void* ppl6::db::GenericResult::fieldnames
private
void* ppl6::db::GenericResult::firstrow
private
void* ppl6::db::GenericResult::index
private
pplint64 ppl6::db::GenericResult::lastinsertid
private
void* ppl6::db::GenericResult::lastrow
private
CMemMan* ppl6::db::GenericResult::mem
private
int ppl6::db::GenericResult::num_fields
private
CAssocArray* ppl6::db::GenericResult::res_lastfetch
private
CArray* ppl6::db::GenericResult::res_lastfieldfetch
private
pplint64 ppl6::db::GenericResult::res_lastrow
private
void* ppl6::db::GenericResult::row
private
pplint64 ppl6::db::GenericResult::rowpointer
private
pplint64 ppl6::db::GenericResult::rows
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: