Project

General

Profile

Support #8279

ERROR: Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it

Added by Jose Garcia about 3 years ago. Updated almost 3 years ago.

Status:
Bug resolved
Priority:
Normal
Assignee:
Category:
Installation / Migration
Target version:
Start date:
06/06/2016
Due date:
% Done:

100%

Estimated time:
Complexity:
Normal
SCRUM pts - complexity:
?

Description

Nos ha ocurrido de nuevo al migrar una instalación Chamilo 1.9 a 1.10.6 al finalizar con

ERROR: Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.

Entorno: PHP 7.0.7 y MySQL 5.7.12

El usuario de MySQL tiene todos los permisos sobre la base de datos Chamilo 1.9.

La instalación Chamilo se ha ido migrando conforme se liberaba cada versión 1.8 y 1.9.

Relacionada con https://support.chamilo.org/issues/8200 donde existe un commit pendiente de validar/aprobar https://github.com/chamilo/chamilo-lms/pull/1198/commits/dceb5164e1adf284b0cb075c71ed1baa5497f10f

Los tipos enum se cambian a varchar en https://github.com/chamilo/chamilo-lms/blob/1.10.x/main/install/index.php#L719

¿Se tendría que definir el tipo enum en Doctrine para esta versión de MySQL?

Buscando he localizado esta info a través del artículo http://wildlyinaccurate.com/doctrine-2-resolving-unknown-database-type-enum-requested/

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/mysql-enums.html
http://symfony.com/doc/2.0/cookbook/doctrine/dbal.html#registering-custom-mapping-types-in-the-schematool

Por si fuera útil.

Saludos.


Files

Version110.zip (5.56 KB) Version110.zip Jose Garcia, 03/08/2016 10:24

Associated revisions

Revision 48626533 (diff)
Added by Angel Fernando Quiroz Campos almost 3 years ago

Allow remove old crs tables from 1.8.x versions - refs #8279

Revision d5f019e0 (diff)
Added by Angel Fernando Quiroz Campos almost 3 years ago

Minor - Update language files - refs #8279

Revision 8d6a0e7a (diff)
Added by Angel Fernando Quiroz Campos almost 3 years ago

Avoid check for crs tables in new installation - refs #8279

History

#1

Updated by Jose Garcia about 3 years ago

Hola.

Resuelta la migración de 1.9 a 1.10.6

En la base de datos de Chamilo 1.9 existían tablas antiguas de versiones anteriores (crs_) en cuánto se han eliminado ha finalizado correctamente.

¿Se podría insertar un check adicional en el proceso de migración para detectar tablas de versiones antiguas (1.8, 1.9) en la base de datos antes de realizarla o mostrar un mensaje indicando que se ha detectado tablas antiguas no compatibles antes de continuar?

¿O en la documentación como sugerencia para ser revisado con antelación?

Gracias.

Saludos.

#2

Updated by Yannick Warnier about 3 years ago

  • Category set to Installation / Migration
  • Status changed from New to Assigned
  • Assignee set to Yannick Warnier
  • % Done changed from 0 to 10
#3

Updated by Yannick Warnier about 3 years ago

  • Status changed from Assigned to Bug resolved
  • % Done changed from 10 to 100

No estoy seguro de como agregar el check sobre tablas que no sabemos cuales son. Por lo tanto, he añadido esta indicación al manual de instalación en/es/fr.

https://github.com/chamilo/chamilo-lms/commit/f316e71b089c6383ab7372fda6f50167318771b4

#4

Updated by Jose Garcia about 3 years ago

Gracias, Yannick.

Serían las tablas que tienen como prefijo crs_

Con un SHOW TABLES LIKE 'crs\_%' se muestran todas las que tiene la base de datos. Luego habría que realizar un drop table para que continúe el proceso de migración. A nosotros nos ha ocurrido un par de veces de 1.9 a 1.10 y en cuánto se ha eliminado, volcado de nuevo la base de datos continua el proceso.

Son tablas que tienen todas el nombre del tipo crs_COURSECODE_toolname, como por ejemplo:

crs_CURSODEMO_blog
crs_CURSODEMO_announcement
crs_CURSODEMO_forum_post

y que se crearon en versiones antiguas de Chamilo, por cada curso.

Vamos a intentarlo, si lo conseguimos os enviamos un commit para que lo reviséis.

Un saludo.

#5

Updated by Yannick Warnier about 3 years ago

Jose Garcia (Nosolored) wrote:

Gracias, Yannick.

Serían las tablas que tienen como prefijo crs_

Con un SHOW TABLES LIKE 'crs\_%' se muestran todas las que tiene la base de datos. Luego habría que realizar un drop table para que continúe el proceso de migración. A nosotros nos ha ocurrido un par de veces de 1.9 a 1.10 y en cuánto se ha eliminado, volcado de nuevo la base de datos continua el proceso.

Son tablas que tienen todas el nombre del tipo crs_COURSECODE_toolname, como por ejemplo:

crs_CURSODEMO_blog
crs_CURSODEMO_announcement
crs_CURSODEMO_forum_post

y que se crearon en versiones antiguas de Chamilo, por cada curso.

Ojo que "crs_" en sí, me parece que era una configuración del configuration.php. Algo como el $_configuration['table_prefix'], que veo existe todavía en una versión de dok€os del 1/7/2008.
O sea... cualquier script que trate de borrarlas debería hacer un listado mezclado php y sql:

$prefix = isset($_configuration['table_prefix']) ? $_configuration['table_prefix'] : 'crs_';
$sql = "SHOW TABLES LIKE '$prefix%'";
// no se lo que se pueda recuperar de este comando, pero si es un resultado "normal" daría lo siguiente:
$result = Database::query($sql);
while ($row = Database::fetch_row($result)) {
    $deleteQuery = "DROP TABLE " . $row[0];
    $deleteResult = Database::query($deleteQuery);
}

#6

Updated by Jose Garcia about 3 years ago

Gracias, Yannick por la info y el código ;-)

He revisado 5 instalaciones Chamilo 1.9 y en todas ellas en main/inc/conf/configuration.php el prefijo de tabla está vacío

// Prefix for course tables (IF NOT EMPTY, can be replaced by another prefix, else leave empty)
$_configuration['table_prefix']  = '';

Sí hemos localizado otras dos instalaciones Chamilo con el mismo prefijo. Ambas provienen de las versiones iniciales de Chamilo 1.8.

// Prefix for course tables (IF NOT EMPTY, can be replaced by another prefix, else leave empty)
$_configuration['table_prefix'] = 'crs_';

Por lo que el script de migración debería chequear ese valor del fichero main/inc/conf/configuration.php y comprobar si tiene un valor o no antes de realizar la migración a Chamilo 1.10 ya que es probable que se de algún caso en otros usuarios/instalaciones de Chamilo que hayan insertado un prefijo para las tablas en esa opción.

¿En qué parte de Chamilo 1.10/1.11 se podría insertar un check para que lance un aviso al respecto o elimine las tablas con el prefijo indicado avisando de lo que se va a realizar si localiza un caso similar?

Un saludo y a cuidarse.

#7

Updated by Yannick Warnier about 3 years ago

  • Status changed from Bug resolved to Assigned
  • Assignee changed from Yannick Warnier to Jose García (Nosolored)
  • % Done changed from 100 to 70
#8

Updated by Yannick Warnier about 3 years ago

Jose Garcia (Nosolored) wrote:

He revisado 5 instalaciones Chamilo 1.9 y en todas ellas en main/inc/conf/configuration.php el prefijo de tabla está vacío

Probablemente porque ya no se usa desde hace un tiempo, y probablemente que por defecto era "crs_".

Sí hemos localizado otras dos instalaciones Chamilo con el mismo prefijo. Ambas provienen de las versiones iniciales de Chamilo 1.8.

O de una versión anterior de Dokeos, no? No creo que en Chamilo hayamos usado el prefijo realmente (pero bueno... ya van 6 años, mi memoria tiene límites)

Por lo que el script de migración debería chequear ese valor del fichero main/inc/conf/configuration.php y comprobar si tiene un valor o no antes de realizar la migración a Chamilo 1.10 ya que es probable que se de algún caso en otros usuarios/instalaciones de Chamilo que hayan insertado un prefijo para las tablas en esa opción.

Correcto. Si no tiene valor, se podría de todas maneras suponer que fue "crs_" y borrar las tablas similares que se encuentren, ya que ninguna tabla actual de Chamilo usa este prefijo.

¿En qué parte de Chamilo 1.10/1.11 se podría insertar un check para que lance un aviso al respecto o elimine las tablas con el prefijo indicado avisando de lo que se va a realizar si localiza un caso similar?

En un nuevo archivo de migración dentro de app/Migrations/Schema/V110/V20160713120000.php por ejemplo. Puedes encontrar sintaxis de queries (previos a un limpiado) aquí, por ejemplo: https://github.com/chamilo/chamilo-lms/blob/1.11.x/app/Migrations/Schema/V111/Version20160705192000.php

#9

Updated by Jose Garcia about 3 years ago

Hola.

Confirmado que no hemos migrado de D0ke0s ninguna de las aulas Chamilo que comentaba.

Son instalaciones de Chamilo 1.8 de 2010-2011 y se han ido migrando versión a versión hasta la 1.9.

En las instalaciones por defecto de Chamilo 1.9 no aparece y está en blanco en configuration.php

En una instalación de Chamilo 1.8.7.1 de 2011 también lo hemos detectado. Está bloqueada ya que no tiene uso ahora mismo.

Ha creado Ángel un Version20160714085000.php para eliminar las tablas crs_

Vamos a realizar unas pruebas de migración con aulas con este prefijo y os enviamos un commit.

Gracias.

Un saludo.

#10

Updated by Jose Garcia about 3 years ago

Hola. ¿o se tendría que realizar previamente la comprobación en Version110.php? ya que se para el proceso de migración si existen estas tablas.

Saludos.

#11

Updated by Yannick Warnier about 3 years ago

Sí José, buen punto. En este caso no dudes en ponerlo al inicio de Version110.php. Esto es algo que se tiene que validar primero. Y en este caso no es necesario poner una migración más.

#12

Updated by Yannick Warnier almost 3 years ago

José, vamos a publicar la versión beta de la 1.11, probablemente este Lunes. Luego de la versión beta, en teoría, no se pueden hacer cambios de estructura o de migración de base de datos antes de la versión estable. Pregunto, entonces, si ya has podido aplicar el cambio o si tendrás tiempo para aplicarlo este Lunes.

#13

Updated by José Angel Ruiz (Nosolored) almost 3 years ago

Hola, Yannick hemos probado el siguiente código en el fichero Version110.php dentro de la función preUp, pero al realizar el proceso de migración seguía dando problemas.
Te dejo el código por si te sirve para solucionar el problema de borrar tablas antiguas obsoletas de primeras instalaciones:

$prefix = NULL !== $this->getConfigurationValue('table_prefix') ? $this->getConfigurationValue('table_prefix') : 'crs_';

$dataList = $this
    ->connection
    ->executeQuery(" 
        SHOW TABLES LIKE '$prefix%'
    ")
    ->fetchAll();
if(!empty($dataList)) {
    foreach($dataList as $data) {
        $this->addSql(
            'DROP TABLE ' . $data[0]
        );
    }
}
#14

Updated by Yannick Warnier almost 3 years ago

  • Assignee changed from Jose García (Nosolored) to Angel Quiroz
#15

Updated by Angel Quiroz almost 3 years ago

  • Assignee changed from Angel Quiroz to Jose Garcia

Revisando 1.8.8.6. Los tablas que me crea son algo como crs_chamilo_COURSECODE, por lo que el script cambiaría a algo así, para asegurarse que borre las tablas de cursos

$db_previx = null !== $this->getConfigurationValue('db_prefix') ? $this->getConfigurationValue('db_prefix') : 'chamilo_';
$db_c_prefix = null !== $this->getConfigurationValue('table_prefix') ? $this->getConfigurationValue('table_prefix') : 'crs_';

$dataList = $this
    ->connection
    ->executeQuery(" 
        SHOW TABLES LIKE '$db_c_prefix$db_prefix%'
    ")
    ->fetchAll();
if(!empty($dataList)) {
    foreach($dataList as $data) {
        $this->addSql(
            'DROP TABLE ' . $data[0]
        );
    }
}

Obtienen algun error con este código? o qué otros problemas tienen durante las migraciones?

#16

Updated by Jose Garcia almost 3 years ago

Gracias Ángel.

Vamos a realizar unas pruebas con una migración de Chamilo 1.9 con tablas crs_ y probaremos este código. Reportaremos.

En nuestro caso las tablas tienen el formato crs_NOMBRECURSO_nombretabla y sólo cuando se eliminan finaliza la migración.

¿El código anterior se insertaría en app/Migrations/Schema/V110/Version110.php en la línea 39 de este fichero?

Muchas gracias.

Un saludo.

#17

Updated by Jose Garcia almost 3 years ago

Hola.

Estamos realizando pruebas pero no conseguimos avanzar y eliminar las tablas crs_

Se para el proceso

Update-db script: memory_limit set to -1, referer: http://www.zzzzzzzz.com/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Update-db script: max_execution_time 0, referer: http://www.zzzzzzzz.com/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Starting migration process from 1.9.10.2 (2016-08-03 09:51:50), referer: http://www.zzzzzzzz.com/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
There was an error during running migrations. Check error.log, referer: http://www.zzzzzzzz.com/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

Os adjunto el fichero app/Migrations/Schema/V110/Version110.php por si le podéis echar un vistazo. Añadido cambios de la línea 39 a 59 respecto del original de Chamilo.

Saludos.

#18

Updated by Yannick Warnier almost 3 years ago

Angel estuvo avanzando sobre esto en una tarea privada. Esperamos nos podais reportar alguna mejora este Lunes...

#19

Updated by Yannick Warnier almost 3 years ago

  • Status changed from Assigned to Bug resolved
  • % Done changed from 70 to 100

Cierro esta tarea porque, por lo menos, el objeto de su título ha sido resuelto.
Otros problemas deben figurar en otras tareas aunque esto genere muchas tareas en general.

Also available in: Atom PDF