ppazos / yupp

Automatically exported from code.google.com/p/yupp
0 stars 0 forks source link

Problema con consulta de superclase de estructura de herencia #108

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
En el modelo de información se tiene una superclase Module, con HTMLModule y 
MenuModule como subclases y al hacer esta consulta, se obtiene el SQL de más 
abajo:

 $tableName = YuppConventions::tableName( 'Module' );
 $cond = Condition::_OR()
         ->add( Condition::EQ($tableName, 'deleted', true) )
         ->add( Condition::EQ($tableName, 'deleted', false) );

 $modules = Module::findBy( $cond, $this->params );

SELECT * 
FROM cms_module
WHERE (
  (cms_module.class='HTMLModule' OR 
   cms_module.class='MenuModule' OR
   cms_module.class='HTMLModule' OR
   cms_module.class='MenuModule' OR
   cms_module.class='Module')
  AND (cms_module.deleted=1 OR cms_module.deleted=0)) 
ORDER BY id asc LIMIT 50 OFFSET 0

Notar que en la cláusula WHERE, para el atributo ´class´ están duplicadas 
las subclase de Module. Debe ser un error en ModelUtils o en YuppLoader.

Igualmente, esto no causa que la consulta falle, solo agrega más información 
que la necesaria.

Original issue reported on code.google.com by pablo.swp@gmail.com on 23 May 2011 at 3:41

GoogleCodeExporter commented 8 years ago
Pasa lo mismo con Module::listAll(..)

SELECT *
FROM cms_module
WHERE (
  (cms_module.class='HTMLModule' OR
   cms_module.class='MenuModule' OR
   cms_module.class='HTMLModule' OR
   cms_module.class='MenuModule' OR
   cms_module.class='Module')
  AND cms_module.deleted=0)
ORDER BY id asc LIMIT 50 OFFSET 0

Original comment by pablo.swp@gmail.com on 23 May 2011 at 3:50

GoogleCodeExporter commented 8 years ago
Que aparezcan clases repetidas solo pasa a veces, por ejemplo me pasó que 
ingresé directamente al listado de módulos y no habían repetidos, luego 
creé un módulo de HTML y lo edité, luego volví a el listado de módulos, y 
estaba repedita la clase HTMLModule en la consulta.

El problema es que cuando hago "YuppLoader::getLoadedClasses" hay entradas 
repetidas:

...
[apps/cms2/model/htmlModule/cms2.model.htmlModule.HTMLModule.class.php] => Array
(
  [package] => cms2.model.htmlModule
  [class] => HTMLModule
  [filename] => cms2.model.htmlModule.HTMLModule.class.php
)
...
[apps/cms2/model/htmlmodule/cms2.model.htmlmodule.HTMLModule.class.php] => Array
(
  [package] => cms2.model.htmlmodule
  [class] => HTMLModule
  [filename] => cms2.model.htmlmodule.HTMLModule.class.php
)

El problema es que en una path el paquete htmlModule está con M y en otro 
está como htmlmodule.

1. Hay que tener cuidado con las mayúsculas y minúsculas en Windows, porque 
en Linux ya daría error al tratar de incluir una ruta que es case-sensitive.

Original comment by pablo.swp@gmail.com on 25 May 2011 at 2:25

GoogleCodeExporter commented 8 years ago
La verificacion de si una clase está cargada o no, debería ser case 
insensitive, porque en windows es la misma ruta con mayúsculas o minúsculas.
Igualmente, la ruta de inclusión debería ser exáctamente igual a la ruta 
física, por lo que lo del case insensitive sería solo para chequear y avisar 
al usuario de que está usando una ruta que existe pero que no está 
correctamente definida en cuanto a su "case".

Original comment by pablo.swp@gmail.com on 7 Jun 2011 at 2:56