Nuevo adaptador para Firebird

[size=“2”][color="#1c2837"]Hola a todos,[/color][/size][color=#1C2837][size=2]He actualizado el adaptador paraconexiones a Yiiinicialmente creado por idle_sign y luego modificado zoggo.[/size][/color]<br style="color: rgb(28, 40, 55); font-size: 13px; line-height: 19px; background-color: rgb(250, 251, 252); ">[color=#1C2837][size=2]Corregí algunos errores (al menos los que encontré :P ) relacionados con el generador de código y los campos incrementales (ahora el adaptador detecta si la llave primaria es autoincremental).[/size][/color]<br style="color: rgb(28, 40, 55); font-size: 13px; line-height: 19px; background-color: rgb(250, 251, 252); ">[color=#1C2837][size=2]Además el adaptador es compatible con la versión Yii 1.1.10 (y superiores).[/size][/color]

[color=#1C2837][size=2]

[/size][/color]

[color=#1C2837][size=2]Para descargar: [/size][/color][size="2"][color="#1c2837"]http://www.yiiframework.com/forum/index.php?app=core&module=attach&section=attach&attach_id=2576[/color][/size]

[size="2"][color="#1c2837"]

[/color][/size]

[size="2"][color="#1c2837"]Espero que sea de ayuda.[/color][/size]

[size="2"][color="#1c2837"]Saludos y éxitos.[/color][/size]

Por si tienen problemas para descargar el archivo desde el link, acá está el post original en inglés: http://www.yiiframework.com/forum/index.php/topic/29033-improved-firebird-adapter/

Esta versión es bastante estable, la estoy usando en un proyecto y ha funcionado bastante bien, de todas formas agradezco a quienes puedan ayudar a notificar posibles errores y así posiblemente incluirla en el núcleo de Yii :)

Hola Ricardo,

Me puedes pasar las referencias a las instrucciones de uso por favor.

Saludos.

Con gusto Arturo,

Se descomprime en framework/db/schema/firebird

En YiiBase.php


Se agrega lo siguiente:




		'CFirebirdColumnSchema' => '/db/schema/firebird/CFirebirdColumnSchema.php',

		'CFirebirdCommandBuilder' => '/db/schema/firebird/CFirebirdCommandBuilder.php',

		'CFirebirdPdoAdapter' => '/db/schema/firebird/CFirebirdPdoAdapter.php',

		'CFirebirdSchema' => '/db/schema/firebird/CFirebirdSchema.php',

		'CFirebirdTableSchema' => '/db/schema/firebird/CFirebirdTableSchema.php',



después de la línea (695 en yii-1.1.10.r3566) :




		'CDbTableSchema' => '/db/schema/CDbTableSchema.php',



En framework/db/CDbConnection.php


createPdoInstance() debería lucir así:




	protected function createPdoInstance()

	{

		$pdoClass='PDO';

		if(($pos=strpos($this->connectionString,':'))!==false)

		{

			$driver=strtolower(substr($this->connectionString,0,$pos));

			if($driver==='mssql' || $driver==='dblib')

				$pdoClass='CMssqlPdoAdapter';

			if($driver==='firebird')

				$pdoClass='CFirebirdPdoAdapter';

		}

		return new $pdoClass($this->connectionString,$this->username,

									$this->password,$this->_attributes);

	}



La variable $driverMap debería lucir así (línea 236 en yii-1.1.10.r3566):




	public $driverMap=array(

		'pgsql'=>'CPgsqlSchema',    // PostgreSQL

		'mysqli'=>'CMysqlSchema',   // MySQL

		'mysql'=>'CMysqlSchema',    // MySQL

		'sqlite'=>'CSqliteSchema',  // sqlite 3

		'sqlite2'=>'CSqliteSchema', // sqlite 2

		'mssql'=>'CMssqlSchema',    // Mssql driver on windows hosts

		'dblib'=>'CMssqlSchema',    // dblib drivers on linux (and maybe others os) hosts

		'sqlsrv'=>'CMssqlSchema',   // Mssql

		'oci'=>'COciSchema',        // Oracle driver

		'firebird'=>'CFirebirdSchema',//Firebird driver

	)



Espero que sirva.

Saludos y éxitos.

Por cierto, he publicado la versión 0.8 que es compatible con la última versión de Yii y que aprovecha los bugs corregidos en PDO-Firebird de la version 5.3.10.

El link de descarga está en la página http://www.yiiframework.com/forum/index.php/topic/29033-improved-firebird-adapter/

Hola, gracias, me gusta FB y quiero emplearlo en proyectos yii que apenas empiezo a conocer, baje tu adaptador pero tengo una seria duda, emkpleo un servidor apache que baje con el appserver para windows, trae php5 5.2.6 en tu documento pides php 5.3.4, pero la pagina de php solo veo PHP 5.3 (5.3.10) que estoy bajando ahora, esto implica que solo funcionaria bajo linux?

Hola agarcilazo,

La verdad no lo he probado en Windows, y recomiendo la versión 5.3.10 porque trae varias mejoras y correcciones de bugs en el controlador PDO de Firebird (y el adaptador que publiqué asume que esos errores están corregidos).

Le recomiendo el uso de Wamp server: http://www.wampserver.com/en/

Wamp es uno de los paquetes de servidores más completos y actualizados que he encontrado para Windows.

Saludos y éxitos.

Gracias !!, conforme avance te comentare mi experiencia

Hola,

aunque hace algunas semanas de este post, intentaré lanzar aquí mi duda. Soy nuevo en yii y quiero hacer algunas pruebas con firebird, pero creo que estoy teniendo problemas con la “connectionString” que no sé como formatearla para una conexion a un servidor remoto, ¿sería algo así como ‘connectionString’=>‘firebird:nombrebd=servidor:c:\firebird\nombrebd.gdb’?. El caso es que al intentar ir al crud generator me lanza este error: “CDbConnection failed to open the DB connection: SQLSTATE[HY000] [335544323] file is not a valid database”. La base de datos no está corrupta, está funcionando con delphi perfectamente.

(He seguido todos los pasos de configuración que hay aquí expuestos y tengo el pdo_firebird funcionando en php 5.3.10 en windows)

Gracias y un saludo,

Me respondo a mi mismo:

El problema estaba efectivamente en la connectionString que debe ser de esta forma: ‘firebird:dbname=localhost:c:/firebird/BASEDATOS.gdb’,‘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) Fijate que las barras son las del 7 …

firebird fue mi motor de datos usado en c++ por un monton de años, fabrique con el sistemas muy sobrecargados y corriendo bajo condiciones extremas 24x24x365 sin apagarse, a mi juicio, ni mysql en esa epoca era capaz de aguantar "el palo de agua".

hoy mysql es tan o mas robusto que firebird, pero no deja de ser una gran opción.

deberias publicar este avance en un wiki ! con sus instrucciones detalladas.

saludos y gracias por ayudar a este gran framework.

@BotonInicio

Gracias por el aporte, creo que podríamos adicionar esos atributos al adaptador para que no haya que escribirlos sino que sea automático :)

@bluyell

Christian, no es mala idea, aunque antes de hacer un wiki sería bueno terminar de probar y pulir el adaptador, pues he encontrado uno que otro bug en ciertas condiciones de ejecución, así que cuantos más desarrolladores y aportes tengamos, mejor aún.

Qué opinan tenerlo en github o bitbucket (generalmente me inclino más por este segundo)? Que generalmente significaría lo mismo que GIT o Mercurial/GIT…

Propuestas?

He decidido crear un repositorio en github para este fin:

https://github.com/robregonm/YiiFirebird

Pronto cargaré la última versión del adaptador en el repositorio.

Aportes y pull requests son bienvenidos.

perfecto, yo voto por el github…es bien moderno y asi sera mas facil despues mover el asunto al git de yii…

por mi parte puedo aportar porque conozco firebird desde sus entrañas profundas…:!! cuando habia q usar el api de c++ para conectarse…y no como ahora con codigo q ya lo hace todo !! aquellos tiempos…

@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.