Esta consulta es de hace 9 años. No tome esta información como actualizada. Si tiene problemas con FacturaScripts, consulte la sección ayuda o la sección contacto
nathoo_f13254

Estaba recibiendo un extraño mensaje de error derivado...

nathoo_f13254   España   08-10-2015 19:08:10   09-10-2015 00:30:30   204   [NeoRazorX]
Estaba recibiendo un extraño mensaje de error derivado de una tabla de un plugin que facturascripts intentaba cambiar constantemente al cargar el modelo.

El tema estaba en el fichero fs_mysql.php , se intentaba hacer un alter table derivado de que el permitir NULL variaba constantemente y luego se intentaba poner a default NULL.

Al final era porque había puesto en el XML en la parte de <NULO> "SI" y hay que poner "YES".

Lo que propongo son dos cosas:

1) Por un lado que se compare con "YES" y con "SI", ya que no es una cosa extraña y puede ocurrir más a menudo de lo que parece
2) Creo que la comparación no se está haciendo bien del todo, puesto que es "if column['is_nullable'] == YES" then... else...
y creo que se debería, o bien poner primero el if column['is_nullable'] == NO o bien en vez de un else un "else if column['is_nullable'] == NO" para que, en caso de que se ponga un valor erróneo que no se meta por esa línea forzando un alter que puede dar problemas. Si el usuario ha puesto <NULO>kk</NULO>, se metería por el NO.
He hecho un parche con las modificaciones propuestas, lo adjunto:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
--- fs_mysql.php 2015-10-08 18:59:02.984063037 +0200
+++ fs_mysql.php.orig 2015-10-08 18:56:03.352070592 +0200
@@ -501,14 +501,12 @@
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col2['column_name'].'` '.$col2['data_type'];

- if($col2['is_nullable'] == 'YES' || $col2['is_nullable'] == 'SI')
+ if($col2['is_nullable'] == 'YES')
{
$consulta .= ' NULL AUTO_INCREMENT;';
}
- else if($col2['is_nullable'] == 'NO')
- {
+ else
$consulta .= ' NOT NULL AUTO_INCREMENT;';
- }
}
}
else
@@ -518,11 +516,11 @@

if($col2['is_nullable'] != $col['nulo'])
{
- if($col['nulo'] == 'YES' || $col['nulo'] == 'SI')
+ if($col['nulo'] == 'YES')
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NULL;';
}
- else if($col['nulo'] == 'NO')
+ else
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NOT NULL;';
}

@@ -554,11 +552,11 @@
{
$consulta .= " DEFAULT ".$col['defecto'].";";
}
- else if($col['nulo'] == 'YES' || $col['nulo'] == 'SI'))
+ else if($col['nulo'] == 'YES')
{
$consulta .= " DEFAULT NULL;";
}
- else if($col['nulo'] == 'NO')
+ else
$consulta .= ';';
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Un saludo
He puesto el parche al revés. Ahí va el bueno:

--- fs_mysql.php.orig 2015-10-08 18:56:03.352070592 +0200
+++ fs_mysql.php 2015-10-08 18:59:02.984063037 +0200
@@ -501,12 +501,14 @@
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col2['column_name'].'` '.$col2['data_type'];

- if($col2['is_nullable'] == 'YES')
+ if($col2['is_nullable'] == 'YES' || $col2['is_nullable'] == 'SI')
{
$consulta .= ' NULL AUTO_INCREMENT;';
}
- else
+ else if($col2['is_nullable'] == 'NO')
+ {
$consulta .= ' NOT NULL AUTO_INCREMENT;';
+ }
}
}
else
@@ -516,11 +518,11 @@

if($col2['is_nullable'] != $col['nulo'])
{
- if($col['nulo'] == 'YES')
+ if($col['nulo'] == 'YES' || $col['nulo'] == 'SI')
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NULL;';
}
- else
+ else if($col['nulo'] == 'NO')
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NOT NULL;';
}

@@ -552,11 +554,11 @@
{
$consulta .= " DEFAULT ".$col['defecto'].";";
}
- else if($col['nulo'] == 'YES')
+ else if($col['nulo'] == 'YES' || $col['nulo'] == 'SI'))
{
$consulta .= " DEFAULT NULL;";
}
- else
+ else if($col['nulo'] == 'NO')
$consulta .= ';';
}
}
SORRY de nuevo. Está mal el parche, que tiene un paréntesis de más y no carga nada. Va el bueno (espero que ahora sí)

--- fs_mysql.php.orig 2015-10-08 18:56:03.352070592 +0200
+++ fs_mysql.php 2015-10-08 19:13:24.524026806 +0200
@@ -501,12 +501,14 @@
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col2['column_name'].'` '.$col2['data_type'];

- if($col2['is_nullable'] == 'YES')
+ if($col2['is_nullable'] == 'YES' || $col2['is_nullable'] == 'SI')
{
$consulta .= ' NULL AUTO_INCREMENT;';
}
- else
+ else if($col2['is_nullable'] == 'NO')
+ {
$consulta .= ' NOT NULL AUTO_INCREMENT;';
+ }
}
}
else
@@ -516,11 +518,11 @@

if($col2['is_nullable'] != $col['nulo'])
{
- if($col['nulo'] == 'YES')
+ if($col['nulo'] == 'YES' || $col['nulo'] == 'SI')
{
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NULL;';
}
- else
+ else if($col['nulo'] == 'NO')
$consulta .= 'ALTER TABLE '.$table_name.' MODIFY `'.$col['nombre'].'` '.$col['tipo'].' NOT NULL;';
}

@@ -552,11 +554,11 @@
{
$consulta .= " DEFAULT ".$col['defecto'].";";
}
- else if($col['nulo'] == 'YES')
+ else if($col['nulo'] == 'YES' || $col['nulo'] == 'SI')
{
$consulta .= " DEFAULT NULL;";
}
- else
+ else if($col['nulo'] == 'NO')
$consulta .= ';';
}
}
Puedes hacer un fork del proyecto, en tu fork subir los cambios, y hacer un pull request al proyecto principal.

Viene a hacer lo mismo que has hecho pegándolo aquí, pero el código es usable directamente sin el trabajo adicional que te has llevado;)
ok
¿Problemas con FacturaScripts?
Si tiene problemas con FacturaScripts consulte la sección ayuda o la sección contacto



Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2024 FacturaScripts
0.11037s

Soporte