anmerkungen: class.genericdb.php

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

anmerkungen: class.genericdb.php

Beitrag 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

Code: Alles auswählen

$cfg['sql']['gdb_driver']  = "mysql"; 
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 ?
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag 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.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

da muß HerrB mal was zu sagen

ich verwende diese funktion nicht
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag 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.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

buildJoinQuery wird vom Endentwickler niemals verwendet...
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag 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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

$properties->link("PropertyCollection");
führt zu einer endlosschleife sobald das query ausgeführt wird und anschließend zum absturz des apache servers...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

$properties->link("PropertyCollection");
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 ;)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

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

		}
	}
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

ja, ok, das macht natürlich sinn

evtl noch mit fehlermeldung, daß man keine verknüpfungen bauen kann die so etwas erzeugen.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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...
*** make your own tools (wishlist :: thx)
Antworten