formcreator icon indicating copy to clipboard operation
formcreator copied to clipboard

Correction base de donnée "le schéma diffère"

Open IiscsiI opened this issue 3 years ago • 2 comments

Bonjour,

Je suis passé il y a quelques semaines à la version 2.13.0 et j'ai appliqué pas mal de corrections aux tables. Lors du passage à la 2.13.1 avec vérification forcée à l'installation de l'intégrité j'ai des différences sur certaines entrées de type "not null" manquantes.

image

Sauf que lorsque j'effectue un "show create table", hormis l'encodage de caractères, je ne vois pas la différence.

Exemple ci-dessous avec la table "glpi_plugin_formcreator_forms_languages"

image

Ai-je loupé un truc ou est-ce une mauvaise remontée de différences ?

Merci d'avance Cordialement

Edit : lié à https://github.com/pluginsGLPI/formcreator/issues/2879 ?

IiscsiI avatar Sep 23 '22 12:09 IiscsiI

Bonjour

Je viens de regarder la olonne fieldname de la table questionregexes. Elle n'a pas changé entre la version 2.13.0 et 2.13.1, c'est un VARCHAR(255) NOT NULL.

Je ne vois pas non plus de changement sur la "sensibilité" de la vérification. Il faudrait comparer le schéma de quelques tables mentionnées dans le log en différents points dans le temps

  • avant l'upgrade vers 2.13.0
  • une fois upgradé vers 2.13.0, et avant vos modifications
  • après vos modifications
  • avant l'upgrade vers 2.13.1

A première vue j'imaginerais que vous avez modifié vos colonnes en oubliant quelques précisions sur les types. A chaque fois il manque le NOT NULL.

Si vous avez un snapshot à toutes les étapes ci dessus, on peut rechercher; sinon il va être très compliqué de reconstituer ce qu'il s'et passé.

#2879 est sans rapport avec votre problème. Cette issue concerne le respect d'une convention de nommage des colonnes qui représentent une clé étrangère, ainsi qu'un souci de double signification de leurs valeurs en fonction d'un contexte.

Au plus simple, corrigez les types de colonne en vous assurant de respecter strictement le schéma disponible dans install/mysql/plugin_formcreator_2.13.1_empty.sql . Si vous ne pouvez pas modifier des types car la colonne contient des valeurs NULL vous devrez corriger les lignes impactées par la valeur par défaut appropriée. Pour les chaines de caractères ce sera uen chaine vide. Pour les nombres ce sera à vérifier au cas par cas, il se peut qu'une valeur différente de 0 soit à privilégier.

btry avatar Sep 23 '22 13:09 btry

Correction : NOT NULL n'est pas manquant, mais en trop.

extrait de la base pour la version 2.13.1

CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questionregexes` (
  `id`                                int unsigned  NOT NULL AUTO_INCREMENT,
  `plugin_formcreator_questions_id`   int unsigned  NOT NULL DEFAULT '0',
  `regex`                             mediumtext    DEFAULT NULL,
  `fieldname`                         varchar(255)  DEFAULT NULL,
  `uuid`                              varchar(255)  DEFAULT NULL,
  PRIMARY KEY (`id`),
  INDEX `plugin_formcreator_questions_id` (`plugin_formcreator_questions_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questionranges` (
  `id`                                int unsigned  NOT NULL AUTO_INCREMENT,
  `plugin_formcreator_questions_id`   int unsigned  NOT NULL DEFAULT '0',
  `range_min`                         varchar(255)  DEFAULT NULL,
  `range_max`                         varchar(255)  DEFAULT NULL,
  `fieldname`                         varchar(255)  DEFAULT NULL,
  `uuid`                              varchar(255)  DEFAULT NULL,
  PRIMARY KEY (`id`),
  INDEX `plugin_formcreator_questions_id` (`plugin_formcreator_questions_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_languages` (
  `id`                                int unsigned  NOT NULL AUTO_INCREMENT,
  `plugin_formcreator_forms_id`       int unsigned  NOT NULL DEFAULT '0',
  `name`                              varchar(255)  DEFAULT NULL,
  `comment`                           text,
  `uuid`                              varchar(255)  DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;

du coup pas de risque de problème avec des valeurs null.

btry avatar Sep 23 '22 13:09 btry

Bonjour,

Merci pour la réponse, désolé du retard pour la mienne. Je viens de vérifier tout ça et effectivement le not null est en plus.

Tout est OK maintenant.

Très bonne journée

IiscsiI avatar Oct 07 '22 07:10 IiscsiI

Bonjour

Merci pour le retour; le souci étant résolu, je clos.

btry avatar Oct 07 '22 07:10 btry