SVN Alba r5735 - in prosistem/alba/trunk/alba: data/sql web/instalar
Author: josx Date: 2008-07-11 00:30:09 -0300 (Fri, 11 Jul 2008) New Revision: 5735 Added: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql Modified: prosistem/alba/trunk/alba/web/instalar/funciones.php prosistem/alba/trunk/alba/web/instalar/paso3.php prosistem/alba/trunk/alba/web/instalar/paso6.php Log: Migrando instalador a PDO (a partir de esta version se necesita php 5.1 como minimo). Se arregla el soporte para postgresql pudiendose usar los sequence. Added: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql =================================================================== --- prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql (rev 0) +++ prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql 2008-07-11 03:30:09 UTC (rev 5735) @@ -0,0 +1,16 @@ +ALTER SEQUENCE tipodocumento_seq RESTART WITH 8; +ALTER SEQUENCE tipoiva_seq RESTART WITH 5; +ALTER SEQUENCE niveltipo_seq RESTART WITH 8; +ALTER SEQUENCE pais_seq RESTART WITH 2; +ALTER SEQUENCE provincia_seq RESTART WITH 28; +ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27; +ALTER SEQUENCE distritoescolar_seq RESTART WITH 2; +ALTER SEQUENCE organizacion_seq RESTART WITH 2; +ALTER SEQUENCE establecimiento_seq RESTART WITH 2; +ALTER SEQUENCE usuario_seq RESTART WITH 2; +ALTER SEQUENCE modulo_seq RESTART WITH 51; +ALTER SEQUENCE permiso_seq RESTART WITH 63; +ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 57; +ALTER SEQUENCE tipoinforme_seq RESTART WITH 3; +ALTER SEQUENCE adjunto_seq RESTART WITH 11; +ALTER SEQUENCE informe_seq RESTART WITH 11; Property changes on: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql ___________________________________________________________________ Name: svn:executable + * Added: prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql =================================================================== --- prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql (rev 0) +++ prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql 2008-07-11 03:30:09 UTC (rev 5735) @@ -0,0 +1,61 @@ +ALTER SEQUENCE conceptobaja_seq RESTART WITH 5; +ALTER SEQUENCE tipodocumento_seq RESTART WITH 4; +ALTER SEQUENCE tipoiva_seq RESTART WITH 5; +ALTER SEQUENCE niveltipo_seq RESTART WITH 8; +ALTER SEQUENCE pais_seq RESTART WITH 10; +ALTER SEQUENCE tipoespacio_seq RESTART WITH 5; +ALTER SEQUENCE tipolocacion_seq RESTART WITH 3; +ALTER SEQUENCE locacion_seq RESTART WITH 3; +ALTER SEQUENCE provincia_seq RESTART WITH 28; +ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27; +ALTER SEQUENCE distritoescolar_seq RESTART WITH 14; +ALTER SEQUENCE organizacion_seq RESTART WITH 2; +ALTER SEQUENCE establecimiento_seq RESTART WITH 2; +ALTER SEQUENCE usuario_seq RESTART WITH 5; +ALTER SEQUENCE modulo_seq RESTART WITH 51; +ALTER SEQUENCE permiso_seq RESTART WITH 63; +ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 57; +ALTER SEQUENCE tipoinforme_seq RESTART WITH 3; +ALTER SEQUENCE adjunto_seq RESTART WITH 11; +ALTER SEQUENCE informe_seq RESTART WITH 11; +ALTER SEQUENCE espacio_seq RESTART WITH 12; +ALTER SEQUENCE preferencia_seq RESTART WITH 2; +ALTER SEQUENCE rol_seq RESTART WITH 3; +ALTER SEQUENCE rel_establecimiento_locacion_seq RESTART WITH 3; +ALTER SEQUENCE rel_rol_permiso_seq RESTART WITH 50; +ALTER SEQUENCE rel_usuario_permiso_seq RESTART WITH 218; +ALTER SEQUENCE cuenta_seq RESTART WITH 42; +ALTER SEQUENCE alumno_seq RESTART WITH 64; +ALTER SEQUENCE rol_responsable_seq RESTART WITH 4; +ALTER SEQUENCE responsable_seq RESTART WITH 38; +ALTER SEQUENCE ciclolectivo_seq RESTART WITH 2; +ALTER SEQUENCE turno_seq RESTART WITH 7; +ALTER SEQUENCE periodo_seq RESTART WITH 6; +ALTER SEQUENCE tipodocente_seq RESTART WITH 5; +ALTER SEQUENCE cargobaja_seq RESTART WITH 5; +ALTER SEQUENCE calendariovacunacion_seq RESTART WITH 27; +ALTER SEQUENCE rel_calendariovacunacion_a_seq_1 RESTART WITH 5; +ALTER SEQUENCE legajocategoria_seq RESTART WITH 4; +ALTER SEQUENCE legajopedagogico_seq RESTART WITH 3; +ALTER SEQUENCE adjunto_seq RESTART WITH 11; +ALTER SEQUENCE tipoasistencia_seq RESTART WITH 6; +ALTER SEQUENCE asistencia_seq RESTART WITH 2220; +ALTER SEQUENCE concepto_seq RESTART WITH 7; +ALTER SEQUENCE escalanota_seq RESTART WITH 43; +ALTER SEQUENCE boletin_conceptual_seq RESTART WITH 1141; +ALTER SEQUENCE actividad_seq RESTART WITH 17; +ALTER SEQUENCE boletin_actividades_seq RESTART WITH 428; +ALTER SEQUENCE anio_seq RESTART WITH 8; +ALTER SEQUENCE division_seq RESTART WITH 22; +ALTER SEQUENCE repeticion_seq RESTART WITH 5; +ALTER SEQUENCE rel_anio_actividad_seq RESTART WITH 22; +ALTER SEQUENCE rel_alumno_division_seq RESTART WITH 80; +ALTER SEQUENCE docente_seq RESTART WITH 21; +ALTER SEQUENCE horarioescolartipo_seq RESTART WITH 4; +ALTER SEQUENCE evento_seq RESTART WITH 33; +ALTER SEQUENCE rel_division_actividad_doc_seq_2 RESTART WITH 9; +ALTER SEQUENCE rel_docente_establecimiento_seq RESTART WITH 21; +ALTER SEQUENCE feriado_seq RESTART WITH 13; +ALTER SEQUENCE horarioescolar_seq RESTART WITH 19; +ALTER SEQUENCE tipoinforme_seq RESTART WITH 3; +ALTER SEQUENCE informe_seq RESTART WITH 11; Property changes on: prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql ___________________________________________________________________ Name: svn:executable + * Modified: prosistem/alba/trunk/alba/web/instalar/funciones.php =================================================================== --- prosistem/alba/trunk/alba/web/instalar/funciones.php 2008-07-11 02:44:34 UTC (rev 5734) +++ prosistem/alba/trunk/alba/web/instalar/funciones.php 2008-07-11 03:30:09 UTC (rev 5735) @@ -78,78 +78,56 @@ $aSql = dump2Array($file); $error = false; if(count($aSql) > 0 && file_exists($file)) { + if($protocol == 'mysql' OR $protocol == 'pgsql') { + $dsn = "$protocol:host=$host;dbname=$db"; // necesito saber como hacer conexion utf8 - // otro pedazo de codigo para cambiarlo por PDO - - - if($protocol == 'mysql') { - if (mysql_connect($host,$user,$pass)) { - mysql_set_charset('utf8'); - if(mysql_select_db($db)) { - DebugLog("executeDump(): ejecutando BEGIN" ); - mysql_query("BEGIN"); - foreach($aSql as $sql_line) { - $res = mysql_query(trim($sql_line)); - if(!$res) { - DebugLog("executeDump(): Fallo SQL: $sql_line"); - DebugLog("executeDump(): error:". mysql_error()); - $error = true; - } - } - if($error == true) { - DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo"); - mysql_query("ROLLBACK"); - return false; - } else { - DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo"); - mysql_query("COMMIT"); - return true; - } - } - else { - DebugLog("executeDump(): Error al seleccionar la base: $db"); - return false; - } + try { + $dbh = new PDO($dsn, $user, $pass); + $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } - else { - DebugLog("excuteDump(): No se puede conectar ala base de datos. " . mysql_error()); + catch (PDOException $e) { + DebugLog("excuteDump(): No se puede conectar ala base de datos. " . $e->getMessage()); + return false; } - } - - if($protocol == 'pgsql') { - $conn = @pg_connect("host=$host user=$user password=$pass dbname=$db"); - if ($conn) { + try { DebugLog("executeDump(): ejecutando BEGIN" ); - pg_query("BEGIN"); - DebugLog("executeDump(): ejecutando SET CONSTRAINTS ALL DEFERRED" ); - pg_query("SET CONSTRAINTS ALL DEFERRED"); + $dbh->beginTransaction(); + + if($protocol == 'pgsql') { + DebugLog("executeDump(): ejecutando SET CONSTRAINTS ALL DEFERRED" ); + $dbh->exec("SET CONSTRAINTS ALL DEFERRED"); + } + foreach($aSql as $sql_line) { - $res = pg_query(trim($sql_line)); - if(!$res) { - DebugLog("executeDump(): Fallo SQL: $sql_line"); - DebugLog("executeDump(): error:". pg_last_error($conn)); - $error = true; + // esto es lamentable: saco los drop que genera el propel +// if($protocol == 'pgsql' AND ( strstr($sql_line,'DROP') !== false)) { + // continue; + if($protocol == 'pgsql') { + $sql_line = str_replace('DROP TABLE', 'DROP TABLE IF EXISTS', $sql_line); + $sql_line = str_replace('DROP SEQUENCE', 'DROP SEQUENCE IF EXISTS', $sql_line); } + $dbh->exec(trim($sql_line)); } - if($error == true) { - DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo"); - pg_query("ROLLBACK"); - return false; - } else { - DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo"); - pg_query("COMMIT"); - return true; - } + + DebugLog("executeDump(): Sin errores ejecutando COMMIT y saliendo"); + $dbh->commit(); } - else { - DebugLog("excuteDump(): No se puede conectar ala base de datos. " . mysql_error()); + catch (PDOException $e) { + DebugLog("executeDump(): Error en". $e->getMessage()); + DebugLog("executeDump(): Se encontraron errores ejecutando ROLLBACK y saliendo"); + $dbh->rollBack(); + return false; } - } + return true; + } else { + DebugLog("executeDump(): El protocolo no es ni mysql ni pgsql"); + return false; + } } else { - DebugLog("executeDump(): No hay instrucciones SQL en el archivo"); + DebugLog("executeDump(): No hay instrucciones SQL en el archivo"); return false; } @@ -300,7 +278,7 @@ return extension_loaded('mysql'); } function check_memorylimit() { - DebugLog("Comprobando limite de moeria de php"); + DebugLog("Comprobando limite de memoria de php"); $limite = ini_get('memory_limit'); return ($limite >= 32); } @@ -400,4 +378,4 @@ -?> \ No newline at end of file +?> Modified: prosistem/alba/trunk/alba/web/instalar/paso3.php =================================================================== --- prosistem/alba/trunk/alba/web/instalar/paso3.php 2008-07-11 02:44:34 UTC (rev 5734) +++ prosistem/alba/trunk/alba/web/instalar/paso3.php 2008-07-11 03:30:09 UTC (rev 5735) @@ -50,100 +50,59 @@ $host = $_POST['host']; $user = $_POST['user']; $pass = $_POST['pass']; - $db = $_POST['db']; + $db = $_POST['db']; $creardb = (isset($_POST['creardb']) && $_POST['creardb'] == 1); //probado conexion DebugLog('Probando conexión'); - //Todo este codigo podria ser mejorado integrando PDO (a partir de PHP 5.1) - //ya que no habria que repetir codigo - - //comprueba si completo opcion de motor de base de datos - if($tipo_motor_base != 'mysql' AND $tipo_motor_base != 'pgsql') { + // Compruebo si estan los datos minimos completos + if($host == '' OR $user == '' OR $db == '' OR ($tipo_motor_base != 'mysql' AND $tipo_motor_base != 'pgsql')) { $error_flag = true; $cnx_error_flag = true; - $cnx_error_msg = "No se sabe cual es el motor de bases de datos <br>"; + $cnx_error_msg = "Debe completar al menos los campos Motor de bases de datos, Servidor, usuario y base de datos <br>"; DebugLog('Error al conectar con la base de datos','E'); } else { - if($tipo_motor_base == 'mysql') { - $conn = @mysql_connect($host,$user,$pass); - if (!$conn) { - $error_flag = true; - $cnx_error_flag = true; - $cnx_error_msg = "No se puede conectar a la base de datos: <br>" . mysql_error(); - DebugLog('Error al conectar con la base de datos','E'); - } else { - //crear base si es necesario - if ($creardb) { - DebugLog('Probando crear base de datos...'); - $ret = @mysql_query('CREATE DATABASE ' . $db , $conn); - if (!$ret) { - $error_flag = true; - $cnx_error_flag = true; - $cnx_error_msg = "No se puede crear la base de datos: <br>" . mysql_error(); - DebugLog('No se puede crear la base de datos: ' . mysql_error() ,'E'); - } else { - DebugLog("Base de datos $db creada correctamente"); - } - } else { - DebugLog("No se creara una base de datos"); - } - - //conectado a la base - $ret = @mysql_select_db($db); - if (!$ret) { - $error_flag = true; - $cnx_error_flag = true; - $cnx_error_msg = "No es posible utilizar la base $db: " . mysql_error(); - DebugLog("No es posible conectar a la base de datos $db: " . mysql_error(), 'E'); - } - mysql_close($conn); - } - + $dsn = ":host=$host"; + switch($tipo_motor_base) { + case 'mysql': $dsn = 'mysql'.$dsn; break; + case 'pgsql': $dsn = 'pgsql'.$dsn.";port=5432;user=$user;password=$pass"; break; + default: $dsn = null; } + if(!$creardb) { + $dsn .= ";dbname=$db"; + } + try { + $dbh = new PDO($dsn, $user, $pass); + } + catch (PDOException $e) { + $dbh = null; + $error_flag = true; + $cnx_error_flag = true; + $cnx_error_msg = "No se puede conectar a la base de datos: <br>" . $e->getMessage(); + DebugLog('Error al conectar con la base de datos','E'); + } - // Si es Postgresql - if($tipo_motor_base == 'pgsql') { - $conn = @pg_connect("host=$host user=$user password=$pass port=5432"); - if (!$conn) { + //crear base si es necesario + if ($creardb AND $dbh != null) { + DebugLog('Probando crear base de datos...'); + try { + @$dbh->exec('CREATE DATABASE ' . $db); + DebugLog("Base de datos $db creada correctamente"); + } + catch(PDOException $e) { $error_flag = true; $cnx_error_flag = true; - $cnx_error_msg = "No se puede conectar a la base de datos: <br>"; - DebugLog('Error al conectar con la base de datos','E'); - } else { - //crear base si es necesario - if ($creardb) { - DebugLog('Probando crear base de datos...'); - $ret = @pg_query($conn, 'CREATE DATABASE ' . $db); - if (!$ret) { - $error_flag = true; - $cnx_error_flag = true; - $cnx_error_msg = "No se puede crear la base de datos: <br>" . pg_last_error($conn); - DebugLog('No se puede crear la base de datos: ' . pg_last_error($conn) ,'E'); - } else { - DebugLog("Base de datos $db creada correctamente"); - } - } else { - DebugLog("No se creara una base de datos"); - } - - pg_close($conn); - - $conn = pg_connect("host=$host user=$user password=$pass port=5432 dbname=$db"); - //conectado a la base - if (!$conn) { - $error_flag = true; - $cnx_error_flag = true; - $cnx_error_msg = "No es posible utilizar la base $db: "; - DebugLog("No es posible conectar a la base de datos $db", 'E'); - } - pg_close($conn); - + $cnx_error_msg = "No se puede crear la base de datos: <br>" . $e->getMessage(); + DebugLog('No se puede crear la base de datos: ' . $e->getMessage() ,'E'); } - } + } else { + DebugLog("No se creara una base de datos"); + } + $dbh = null; + $_SESSION['albainstall']['tipo_motor_base'] = $tipo_motor_base; $_SESSION['albainstall']['host'] = $host; $_SESSION['albainstall']['user'] = $user; @@ -155,6 +114,17 @@ else $error_flag = true; ?> + +<script type="text/javascript"> + function cambioTipo(bt) { + if(bt.value=="pgsql") { + document.forms[0].creardb.disabled = true; + } else { + document.forms[0].creardb.disabled = false; + } + } +</script> + <div id="detalle"> <p>Detalle de conexión con la base de datos:</p> </div> @@ -170,8 +140,8 @@ <tr> <td>Motor de bases de datos: </td> - <td>Mysql<input type="radio" name="tipo_motor_base" value="mysql" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'mysql' ? 'checked' : ''?> > - Postgresql<input type="radio" name="tipo_motor_base" value="pgsql" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'pgsql' ? 'checked' : ''?> ></td> + <td>Mysql<input type="radio" name="tipo_motor_base" value="mysql" onChange="cambioTipo(this)" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'mysql' ? 'checked' : ''?> > + Postgresql<input type="radio" name="tipo_motor_base" value="pgsql" onChange="cambioTipo(this)" <?php echo isset($tipo_motor_base) && $tipo_motor_base == 'pgsql' ? 'checked' : ''?> ></td> </tr> <tr> <td>Servidor:</td> @@ -190,9 +160,9 @@ <td><input type="text" name="db" value="<?php echo $db?>" class="texto"></td> </tr> <tr> - <td>Crear base de datos:<br/><span style="font-size:9px">(debe tener los permisos para poder hacerlo)</style></td> + <td>Crear base de datos:<br/><span style="font-size:9px">(Debe tener los permisos para poder hacerlo)</style></td> <td><input type="checkbox" name="creardb" value="1" <?php echo $creardb ? "checked" : ""?> class="check"></td> - </tr> + </tr> </table> <br/> <input type="submit" name="btTextConn" value="Comprobar conexión a la Base de Datos" class="boton"> @@ -210,4 +180,4 @@ // ir al siguiente paso $paso = 4; -?> \ No newline at end of file +?> Modified: prosistem/alba/trunk/alba/web/instalar/paso6.php =================================================================== --- prosistem/alba/trunk/alba/web/instalar/paso6.php 2008-07-11 02:44:34 UTC (rev 5734) +++ prosistem/alba/trunk/alba/web/instalar/paso6.php 2008-07-11 03:30:09 UTC (rev 5735) @@ -124,6 +124,17 @@ $error_flag = true; DebugLog("Error al cargar modelo de base de datos: $archivo","E"); } + + //Esto se agrego para hacer update a las secuencias de postgresql + if($tipo_motor_base == 'pgsql') { + $archivo = substr($archivo,0,-4)."_update_seq.sql"; + $ret = crear_base_modelo($archivo, $tipo_motor_base, $host, $user, $pass, $db); + echo $ret ? IMG_OK : IMG_ERROR; + if (!$ret) { + $error_flag = true; + DebugLog("Error al cargar modelo de base de datos: $archivo","E"); + } + } ?> </td> </tr> @@ -148,4 +159,4 @@ // finaliznado los pasos DebugLog ("============================ FIN INSTALACION ALBA - " .date('d-m-Y H:i:s'). "======================="); $completo = true; -?> \ No newline at end of file +?>
El Vie 11 Jul 2008, [email protected] escribió:
Author: josx Date: 2008-07-11 00:30:09 -0300 (Fri, 11 Jul 2008) New Revision: 5735
Added: prosistem/alba/trunk/alba/data/sql/datos_desde_cero_update_seq.sql prosistem/alba/trunk/alba/data/sql/datos_ejemplo_update_seq.sql Modified: prosistem/alba/trunk/alba/web/instalar/funciones.php prosistem/alba/trunk/alba/web/instalar/paso3.php prosistem/alba/trunk/alba/web/instalar/paso6.php Log: Migrando instalador a PDO (a partir de esta version se necesita php 5.1 como minimo). Se arregla el soporte para postgresql pudiendose usar los sequence.
Buenisimo esto! -- Dock Sud BBS http://www.docksud.com.ar telnet://bbs.docksud.com.ar
El Friday 11 July 2008 03:52:36 Fernando Toledo escribió:
Log: Migrando instalador a PDO (a partir de esta version se necesita php 5.1 como minimo). Se arregla el soporte para postgresql pudiendose usar los sequence.
Buenisimo esto!
Lo del sequence se esta haciendo a mano, sería interesante en un futuro cercano usar los fixtures para evitar hacer esto. Pero recuerdo que cuando probamos los fixtures no funcionaban con tantos datos como los que tenias en el ejemplo, ademas de demorar mucho. -- Di Biase José Luis Blog --> [http://www.joseluisdibiase.com.ar] "viaja hasta tu ideal, sembra tu flor, labra tu libertad, rega tu voz cerra tus ojos que sobra lugar en idilia para los dos"
participants (3)
-
commits@pressenter.com.ar -
Fernando Toledo -
josx