Nuevo adaptador para Firebird

@bluyell

Christian, Pull Requests son bienvenidas :) Creo que después de dos años de tantos cambios del adaptador para Firebird ya es hora de ponerlo a funcionar 100% y lanzar una versión 1.0 lista para producción.

perfecto ricardo, me gustaria participar, como nos organizamos, por donde empezamos.

voy a necesitar un tiempo para:

previo:

1-leer tu trabajo y entenderlo.

2-entender a fondo el mecanismo de yii para absorber una conexión, mysql, firebird etc.

posterior:

3-entender como incluir el nuevo adaptador en el sistema de yii

4-como manejar el tema de las versiones

5-empezar por algo simple pero util:

5.1-conectarse al sistema de datos fierbird.

5.2-abrir una transaccion.

5.3-parametrizar una consulta. (sino el server consumira ram hasta explotar, no se si esto fue reparado por firebird en sus nuevas versiones, las cuales desconozco)

5.4-ejecutar una consulta de no retorno de resultados.

5.6-ejecutar una consulta con retorno de resultados.

6-documentacion del trabajo. (formato de codigo, archivos MD, reglas de codificacion)

por ahi van los tiros

Ok, ya me toca hacer pruebas de esto…

He seguido las instrucciones para actualizar los archivos de Yii pero no he podido conectarme a la base de datos.

Vi la propuesta de la cadena de conexión pero no se si la estoy aplicando bien.

en protected/config/main.php


'db'=>array(

  'connectionString' => 'firebird:dbname=localhost:C:/xampp/htdocs/firebird/protected/data/ISIMA.FDB',

  'emulatePrepare'=>true,

  'username'=>'SYSDBA', 

  'password'=> 'masterkey',

  'attributes' => array(

    PDO::ATTR_CASE => PDO::CASE_LOWER,

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

    PDO::ATTR_FETCH_TABLE_NAMES => FALSE,

  ),

),

quiero tener la base de datos dentro de protected/data como esta la que va con Yii de SQLite, intente también con:


'connectionString' => 'firebird:dbname=localhost:'.dirname(__FILE__).'/../data/ISIMA.FDB', ...

O, dónde sería el mejor lugar para la base de datos?

Al tratar de ejecutar Gii (http://localhost/firebird/index.php?r=gii/model) recibo este error:


CDbConnection failed to open the DB connection: could not find driver

Ya me acostumbre a manejar la carpeta del framework en la misma carpeta del proyecto, esta es la estructura de carpetas de la aplicación:




htdocs

... firebird

... ... assets

... ... css

... ... framework

... ... images

... ... protected

... ... themes

... ... index.php



Que me falta?, dónde estoy mal ?

Gracias, saludos.

Hola Arturo,

Hay varias verificaciones adicionales que sería bueno realizar:

  1. ¿Está cargada la extensión pdo_firefird? Este es el driver que realmente permite la conexión a la base de datos

  2. Está la DLL o SO para clientes de firebird? Por ejemplo, en mi distro es el paquete "libfbclient"

  3. ¿Está usando mínimo PHP 5.3.10? Esta versión incluye varias mejoras y correciones para Firebird que son consideradas (y asumidas) en la extensión de Firebird para Yii.

Espero que le sirva.

Saludos, éxitos y bendiciones.

Gracias, no estaba activado el pdo, ahora me funciona, entonces a probar, cualquier cosa les voy avisando,

Saludos.

Hola, espero este sea el lugar adecuado para esta pregunta, la situación es la siguiente:

Tengo una tabla que empleo en Delphi y en Yii, esta tabla tiene un campo calculado

Create Table Personas(

                    Pers_Nombre1 tsNombre


                                Constraint Pers_Nombre1_NN Not Null, 


                    Pers_Nombre2 tsNombre, 


                    Pers_Nombre3 tsNombre, 


                    Pers_Paterno tsNombre


                                Constraint Pers_Paterno_NN Not Null, 


                    Pers_Materno tsNombre, 


                    [b]pers_Nombre[/b] computed by 


                        (


                          PERS_NOMBRE1 || ' '||


                          coalesce( PERS_NOMBRE2||' ', ' ')||


                          coalesce( PERS_NOMBRE3||' ', ' ')||


                          PERS_PATERNO || ' '||


                          coalesce( PERS_MATERNO||'', ''))                                            


                     );

La base de datos es Firebird, al generar el código, el campo pers_nombre lo emplea el Gii, eliminé toda referencia a este campo, pero me da el siguiente error al hacer cualquier modificación

"CDbCommand falló al preparar la sentencia SQL: SQLSTATE[HY000]:

General error: -151 attempted update of read-only column "

¿Hay manera de indicarle al AR que no envié el campo a la consulta SQL?.

Gracias de antemano

Hola,

Una alternativa que se me ocurre es agregar ese campo en rules() como "unsafe".

Saludos.

Mejoras a esta extensión pueden ser descargas en la página de extensiones.

Versión 1.0 RC lanzada.

Cualquier reporte de error o mejora es bienvenido.

Versión 1.0 RC2 lanzada.

Múltiples errores corregidos y mejoras implementadas.

Buenas nuevas:

Tan pronto como se lance la versión final y definitiva de esta extensión, se unirá al core de Yii.

Así estará disponible en la siguiente versión de Yii.

Saludos.

Gracias por el aporte,

Apunto algunos detalles para complementar si me permites…

  • Sobre PHP recuerdar habilitar PDO de Firebird en php.ini

  • A, verificar la versión de PHP que sea 5.3.10+

  • Para hacer la conexión use:


'db' => array(

  'connectionString' => 'firebird:dbname=localhost:'.dirname(__FILE__).'/../data/NOMBREBASE.FDB',

  'username'=>'USUARIO', 

  'password'=> 'CLAVE',

  'class' => 'ext.YiiFirebird.CFirebirdConnection',

  'enableParamLogging' => true,

),

Sigo haciendo pruebas…

Saludos.

Gracias por las notas, voy a agregarlas al README.

Saludos.

robregonm,

Una duda, pregunta, como debo usar las funciones para recibir los ID de los datos que inserto?

Haciendo pruebas en create tengo el problema que después de


$model->save()

no se recibe el ID al tratar de mandar a la vista con


$this->redirect(array('view','id'=>$model->id));

Como hacer los procesos ‘normales’ de Yii al crear/actualizar datos ?

Gracias, Saludos.

Hola,

He tratado de pasar de este punto por mi cuenta pero no he podido.

No se si estoy mal, no soy experto, pero buscando y tratando de entender todo este asunto, siguiendo el trace de la ejecución de mi aplicación y analizando el código no puedo encontrar los cambios a los comandos de system.db.CDbCommand que entiendo deben estar en FirebirdCommandBuilder, por ejemplo: createInsertCommand o getLastInsertID mi aplicación continua ejecutando estos comandos de la clase base CActiveRecord, por ejemplo, el insert:




05:31:35.573107 	trace 	system.db.CDbCommand

Executing SQL: INSERT INTO usuarios (tipo, activo, cancel_reason, u_crea,

usuario, pswrd, nombre, email, idioma, acceso, d_crea) VALUES (:yp0, :yp1,

:yp2, :yp3, :yp4, :yp5, :yp6, :yp7, :yp8, :yp9, current_timestamp). Bound

with :yp0=1, :yp1=1, :yp2='', :yp3=0, :yp4='Otro', :yp5='otro',

:yp6='Otro', :yp7='otro', :yp8='es', :yp9=2

in C:\xampp\htdocs\BServ\protected\controllers\UsuariosController.php

(73)

in C:\xampp\htdocs\BServ\index.php (13)



Estoy usando el código descargado de: YiiFirebird-1.0RC2.zip

Descomprimí en: protected\extensions\YiiFirebird

Me puedo conectar, generar el CRUD con Gii, tengo acceso a los datos para ver, crear, editar, etc, pero no funciona correctamente pues los comandos que se están ejecutando en la base de datos no son los adecuados para Firebird.

Que pasa o que estoy haciendo mal ?

Gracias por la ayuda y el tiempo.

Saludos.

Hola Arturo,

¿Todavía está experimentando este problema? Para echarle un vistazo… no me gustaría que lanzáramos la versión estable con este bug.

Saludos.

Si Ricardo, gracias por contestar… no he pasado de ahí, en verdad no entiendo que pasa.

Cómo lo podemos revisar?,

Gracias.

La versión RC4 ha sido lanzada, ahora mucho más estable y con varias mejoras y correcciones de errores (gracias a Edgard y Arturo).

Descárguenla y me cuentan cómo les fue.

Saludos.

@Arturo, esta actualización creo que le corrige el error que estaba teniendo, me cuenta si hay algún otro detalle.

Saludos

Hola soy nuevo en yii y me pidieron hacer unas conexiones con firebird y me surgen algunas dudas espero me puedan apoyar se los agradeseria

1.- funciona con el GII

2.- me marca error al seguir los pasos para habilitar el main.php

3.- podrian poner un poco mas detallado los requerimientos de esta extencion

desde ahora muchas gracias

Saludos