Problemas con PostgreSQL

edited septiembre 2007 in Bugs y Problemas
Otro problema que me ocurrió, a parte del que se explica en un mensaje
anterior "atributo $schema", Es que daba unos errores diciendo
que no se había definido una clave primaria, revisando el código
llegué a que el problema venía por el método "dump_info()" de la clase
"ActiveRecord"; cuando me recupera el esquema de la base de datos
(línea 330, yo uso PostgreSQL), en ese bloque se ejecuta esta
consultar:

"SELECT a.attname AS Field, t.typname AS Type,
CASE WHEN attnotnull=false THEN 'YES' ELSE 'NO' END AS Null,
CASE WHEN (select cc.contype FROM pg_catalog.pg_constraint cc
WHERE
cc.conrelid = c.oid AND cc.conkey[1] = a.attnum)='p' THEN 'PRI'
ELSE ''
END AS Key FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a,
pg_catalog.pg_type t WHERE c.relname = '{$table}' AND c.oid =
a.attrelid
AND a.attnum > 0 AND t.oid = a.atttypid"

Se recuperan los campos con un alias (lo que está después de AS), con
la primera letra en "mayúscula", pero PostgresSQL regresa esos alias
en "minúscula"; y cuando se intenta hacer la carga del modelo (a
partir de la línea 345 del mismo archivo) en la clase, no carga nada
porque intenta recuperar valores con iniciales mayúscula (ej.: $this-
>fields[] = $field;), pero en el arreglo existen con letras

minúsculas, y parece que php hace la distinción entre mayúsculas y
minúsculas, al menos en los índices de arreglos.

Para solucionarlo puse todos los alias en minúsculas y en la carga del
modelo a la clase también;

No sé si será problema con PostgreSQL o alguna configuración especial
en mi sistema: Uso Debian Lenny, PostgreSQL 8.2 y PHP 5.2 y Kumbia 0.4.7

Comentarios

  • Yo utilizo la misma configuracion que tu tienes un Debian ETCH, PostgreSQL y PHP 5.2 pero no me ha dado ese problema y la ultima version de kumbia... <!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->
  • edited 10:48
    me parece raro, pero me pasa cuando en un formulario doy agregar un nuevo registro; lleno los datos y luego aceptar para que se guarden, y ahí es donde aparece el error.

    Luego busqué en el código y llegué a ese método (dump_info) y corrí directo en la base de datos el código que utiliza para obtener la estructura del modelo y ahí me dí cuenta que a pesar que los alias tenían la primera letra mayúscula la consulta devolvía todo en minúscula, y al hacer la comparación php distinguía como cosas diferentes esto: $field; y $field;

    Al final, no podría precisar la causa del problema, ya que a vos te funciona bien.

    Una cosa, probá correr la consulta que está en la línea 331 (archivo active_record.php), directamente sobre la base de datos y me contás si los alias los devuelve con la primera mayúscula o todo en minúsculas. Te agradecería me hicieras ese favor para verificar más o menos por dónde anda el problema.
  • habia probado esa consulta y devuelve los campos en minuscula aunque yo cuando creo las base de datos los atributos los coloco en minuscula....
    SELECT a&#46;attname AS Field, t&#46;typname AS Type,
    			 	CASE WHEN attnotnull=false THEN 'YES' ELSE 'NO' END AS null,
    			 	CASE WHEN &#40;select cc&#46;contype FROM pg_catalog&#46;pg_constraint cc WHERE
    			 	cc&#46;conrelid = c&#46;oid AND cc&#46;conkey&#91;1&#93; = a&#46;attnum&#41;='p' THEN 'PRI' ELSE ''
    			 	END AS Key FROM pg_catalog&#46;pg_class c, pg_catalog&#46;pg_attribute a,
    			 	pg_catalog&#46;pg_type t WHERE c&#46;relname = 'usuarios' AND c&#46;oid = a&#46;attrelid
    			 	AND a&#46;attnum &gt; 0 AND t&#46;oid = a&#46;atttypid
    

    pero lo raro es que me funciona con StandardForm
  • edited 10:48
    Pero no los campos de la tabla, sino los alias: Field, Type y Key; esos son los que me dan problemas; porque en php al consultar $field no lo encuentra así sino que lo reconoce como $field en minúscula.
  • Bueno el primary key me lo devuelve en Mayuscula todos los demas en minuscula (type, name, etc...)....
  • edited 10:48
    Bueno... si te los devuelve en minúscula y aún así te funciona, definitivamente es alguna configuración de mi máquina; ahora voy a averiguar si es PostgreSQL o PHP, por el momento modifiqué el código del método dump_info y me funciona. Gracias por tu ayudar voy a revisar la configuración de mi sistema, talvéz encuentro el problema.
Sign In or Register to comment.