Seite 1 von 2
anmerkungen: class.genericdb.php
Verfasst: Mi 17. Aug 2005, 12:22
von emergence
ich sehe mir gerade da den code ein wenig an
(class.genericdb.php,v 1.29 2005/05/19 14:51:46)
und hab da ein kleines verständnis problem...
zu beginn des files wird ja folgender code ausgeführt um einen driver zu laden...
Code: Alles auswählen
/* Try to load GenericDB database driver */
$driver_filename = $cfg["path"]["contenido"].$cfg["path"]["classes"]."drivers/".$cfg['sql']['gdb_driver']."/class.gdb.".$cfg['sql']['gdb_driver'].".php";
if (file_exists($driver_filename))
{
include_once($driver_filename);
}
nun gut in einer der config dateien wird ja
gesetzt...
nun die frage
in class ItemCollection -> function ItemCollection
wird am ende der funktion
Code: Alles auswählen
/* Try to load driver */
$this->_driver = new gdbMySQL();
aufgerufen...
hab ich da jetzt was versäumt ?
das mit dem driver ergibt somit wenig sinn wenn immer nur new gdbMySQL(); aufgerufen wird...
oder kommt da noch was ?
Verfasst: Mi 17. Aug 2005, 12:42
von timo
das war ein Umbau falls es mal andere Treiber geben sollte, aber derzeit wird immer nur noch MySQL verwendet. Ungeklärt ist noch, wie der entsprechende Treiber instanziiert wird.
Verfasst: Mi 17. Aug 2005, 13:00
von emergence
okay,
so nebenbei gerade was gesehen...
function flexSelect
findet sich
Code: Alles auswählen
$sql = "SELECT " . $distinct . get_class($this) . "." . $this->primaryKey ." AS " . $this->primaryKey .
" FROM " . $this->table . " AS " . get_class($this) .
$from . $where . $group_by . $order_by . $limit;
ähm möchte zwar nicht motzen, aber das bringt mir beim snapshot einen sql fehler bei den empfängern...
Code: Alles auswählen
$classname = strtolower(get_class($this));
$sql = "SELECT " . $distinct . $classname . "." . $this->primaryKey ." AS " . $this->primaryKey .
" FROM " . $this->table . " AS " . $classname .
$from . $where . $group_by . $order_by . $limit;
hingegen funkt...
Verfasst: Mi 17. Aug 2005, 14:15
von timo
da muß HerrB mal was zu sagen
ich verwende diese funktion nicht
Verfasst: Do 18. Aug 2005, 08:21
von emergence
ja da muss HerrB noch was dazu sagen...
noch was anderes zu function select und function flexselect
die beiden funktionen sind eigentlich so ähnlich das man sie fast zusammenlegen könnte...
ich sehe diesbezüglich eigentlich kein problem wenn man bei function select noch die beiden parameter $from="" und $distinct="" am ende mit einfügt...
auf der anderen seite könnte das flexselect auch komplett in die RecipientCollection(class.newsletter.recipients.php) verschoben werden...
Verfasst: Do 18. Aug 2005, 10:50
von timo
ein $from finde ich nach wie vor absolut schwachsinnig, denn die GenericDB ist KEIN Freiform-select. Sie ist dafür ausgelegt, daß sie nicht direkt verwendet wird, sondern immer von entsprechenden Childklassen geerbt wird.
Verfasst: Do 18. Aug 2005, 11:00
von emergence
na gut dann verschieb es doch einfach in die class.newsletter.recipients.php...
das teil läuft dort auch ohne probleme... verwendet wirds ja eh nur bei den newsletter empfängern.... und es gehört an sich auch nur dort hin...
ne andere frage
findet sich irgendwo im quellcode ein beispiel wie buildJoinQuery zu verwenden ist ? wenn man sich das ganze so ansieht wäre ein real world example doch etwas hilfreicher um das ganze leichter zu verstehen/bzw zu verwenden...
Verfasst: Do 18. Aug 2005, 11:20
von timo
buildJoinQuery wird vom Endentwickler niemals verwendet...
Verfasst: Do 18. Aug 2005, 13:54
von emergence
nein, anders...
die grundsätzliche funktionsweise ist mit soweit schon klar...
gibts ein beispiel im contenido code wo mittel $blabla->link('XXX'); verknüpft wurde ?
ich möcht was mit den generierten queries testen...
Verfasst: Do 18. Aug 2005, 14:25
von timo
ja, bei den Frontendbenutzern sowie bei der Artikelliste im Uploadbereich (wenn über den tiny ein Link eingefügt werden soll)
include.frontend.user_menu.php:155
include.upl_artlist.php:45
Verfasst: Do 18. Aug 2005, 15:31
von emergence
thx, ich hab nur die klassen durchsucht und dort nicht gefunden...
hmm...
ich bin immer davon ausgegangen das auf die einzelnen funktionen der genericdb nur innerhalb von child klassen zugegriffen werden sollte...
dem ist anscheinend also nicht so...
für ne vereinfachung halte ich das leider nicht...
na wie auch immer ne kleinigkeit ist mir da aufgefallen die vermutlich nicht beabsichtigt ist...(ist mir beim testen passiert...)
Code: Alles auswählen
<?php
$properties = new PropertyCollection();
$properties->link("PropertyCollection");
$properties->setWhereGroup("default", "idclient", $client);
$result = $properties->query();
print_r($properties);
?>
die zeile
führt zu einer endlosschleife sobald das query ausgeführt wird und anschließend zum absturz des apache servers...
Verfasst: Do 18. Aug 2005, 15:44
von timo
emergence hat geschrieben:thx, ich hab nur die klassen durchsucht und dort nicht gefunden...
hmm...
ich bin immer davon ausgegangen das auf die einzelnen funktionen der genericdb nur innerhalb von child klassen zugegriffen werden sollte...
dem ist anscheinend also nicht so...
für ne vereinfachung halte ich das leider nicht...
Verstehe ich nicht wirklich, was du meinst.
Code: Alles auswählen
<?php
$properties = new PropertyCollection();
$properties->link("PropertyCollection");
$properties->setWhereGroup("default", "idclient", $client);
$result = $properties->query();
print_r($properties);
?>
die zeile
führt zu einer endlosschleife sobald das query ausgeführt wird und anschließend zum absturz des apache servers...
Naja das ist auch nicht sinnvoll. Die GenericDB ist eigentlich zur Abbildung von Objekten und Objektstrukturen gedacht, also im Sinne von klassischer Objektorientierung. Ich habe immer noch den Eindruck, die GenericDB wird von euch als Datenbankabfrageinterface gesehen, was aber falsch ist. So wie ich dein Beispiel interpretiere, willst du alle Properties, die eine andere Property enthalten, abfragen, was natürlich nicht geht (und auch nicht gehen soll). Stelle mal deinen Code in einem ERM-Diagramm dar, das wird nicht gehen

Verfasst: Do 18. Aug 2005, 15:58
von emergence
nein, es nur ein beispiel für eine endlosschleife
-> most simplest testcase
ob ihr das abfangen wollt oder nicht bleibt euch überlassen...
mein bugfix für die genericDb würde jedenfalls so aussehen
Code: Alles auswählen
/**
* sets the query to use foreign tables in the resultset
*
*/
function link ($foreignClass)
{
if (strtolower(get_class($this)) != strtolower($foreignClass)) {
if (class_exists($foreignClass))
{
$this->_links[$foreignClass] = new $foreignClass;
} else {
cWarning(__FILE__, __LINE__, "Could not find class [$foreignClass] for use with link in class ".get_class($this));
}
}
}
Verfasst: Do 18. Aug 2005, 16:01
von timo
ja, ok, das macht natürlich sinn
evtl noch mit fehlermeldung, daß man keine verknüpfungen bauen kann die so etwas erzeugen.
Verfasst: Do 18. Aug 2005, 16:13
von emergence
ach ja
emergence hat geschrieben:ich bin immer davon ausgegangen das auf die einzelnen funktionen der genericdb nur innerhalb von child klassen zugegriffen werden sollte...
dem ist anscheinend also nicht so...
timo hat geschrieben:Verstehe ich nicht wirklich, was du meinst.
ähm ich zitiere dich mal
timo hat geschrieben:... denn die GenericDB ist KEIN Freiform-select. Sie ist dafür ausgelegt, daß sie nicht direkt verwendet wird, sondern immer von entsprechenden Childklassen geerbt wird.
ergo -> hab ich somit nach beispielen nur innerhalb der child klassen gesucht...