developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

#432 closed bug (fixed)

Le testapp a 2 fails avec jDB

Reported by: turowbye Owned by: laurentj
Priority: low Milestone: Jelix 1.0.1
Component: app:testapp Version: 1.0
Severity: minor Keywords:
Cc: Blocked By:
Blocking: Documentation needed:
Hosting Provider: Php version: 5.2.5

Description (last modified by laurentj)

Le cache de l'application est effacé avant l'exécution du script

Configuration de l'application testapp

  • engine = "simple"
  • enableParser = off
  • multiview = off
  • basePath = "/jelix/testapp/www/"
  • Les autres valeurs sont celles par défaut.

J'ai utilisé la même version de Jelix. En fait je copie le code php dans les 2 environnements Xampp de Windows

Avec le Xampp : xampp-win32-1.6.2

  • php : 5.2.2
  • Jelix : 1.0
  • mysql : 5.0.41-community-nt
  • testapp : OK

Aucun problème

Avec le Xampp : xampp-win32-1.6.5

  • php : 5.2.5
  • Jelix : 1.0
  • mysql : 5.0.51
  • testapp : Il y a 2 fails

Le testapp génère 2 fails. Vont suivre les messages d'erreurs

"jelix_tests" module , jdb: 1 queries

Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.1_queries.html.php -> UTjDb -> testTools -> $value[name]->default: not a string (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.1_queries.html.php -> UTjDb -> testTools -> $value[name] : non identical objects (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] 1/1 test cases complete: 102 passes, 2 fails and 0 exceptions.

"jelix_tests" module , jdb: 2 queries with pdo

Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.2_queries_with_pdo.html.php -> UTjDb -> testTools -> $value[name]->default: not a string (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.2_queries_with_pdo.html.php -> UTjDb -> testTools -> $value[name] : non identical objects (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.2_queries_with_pdo.html.php -> UTjDb_pdo -> testTools -> $value[name]->default: not a string (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] Fail: C:\xampp\htdocs\jelix\testapp/modules/jelix_tests/tests/jdb.2_queries_with_pdo.html.php -> UTjDb_pdo -> testTools -> $value[name] : non identical objects (bad results) at [C:\xampp\htdocs\jelix\testapp\modules\jelix_tests\tests\jdb.1_queries.html.php line 152] 2/2 test cases complete: 205 passes, 4 fails and 0 exceptions.

Change History (12)

comment:1 follow-ups: Changed 12 years ago by laurentj

  • Description modified (diff)
  • Priority changed from normal to low
  • Severity changed from normal to minor

N'arrivant pas à faire fonctionner xampp correctement, merci de donner très précisément les résultats de la requête

SHOW FIELDS FROM products

sur mysql 5.0.51. Soit via phpmyadmin, soit si tu as un peu de temps, de faire ça "à la main" en php. C'est à dire faire dans un simple fichier php, un mysql_query de cette requête, de faire une boucle avec mysql_fetch_object, de faire un var_export de ce que renvoi mysql_fetch_object, et de m'indiquer ce que donnent ces var_export.

comment:2 follow-up: Changed 12 years ago by laurentj

Au passage, le bug se situe certainement dans mysql.dbtools.php, dans le driver mysql de jDb.

comment:3 in reply to: ↑ 2 ; follow-up: Changed 12 years ago by turowbye

Replying to laurentj:

Au passage, le bug se situe certainement dans mysql.dbtools.php, dans le driver mysql de jDb.

Comme tu as pus deviner, j'en suis à mes premères expériences en développement.

Je vais faire tous les efforts possibles pour préciser le "fail".

comment:4 in reply to: ↑ 1 Changed 12 years ago by turowbye

Replying to laurentj:

N'arrivant pas à faire fonctionner xampp correctement, merci de donner très précisément les résultats de la requête

SHOW FIELDS FROM products

sur mysql 5.0.51. Soit via phpmyadmin, soit si tu as un peu de temps, de faire ça "à la main" en php. C'est à dire faire dans un simple fichier php, un mysql_query de cette requête, de faire une boucle avec mysql_fetch_object, de faire un var_export de ce que renvoi mysql_fetch_object, et de m'indiquer ce que donnent ces var_export.

Oui aujourd'hui (samedi) j'ai du temps. Je fais le tout et je t'envoi les résultats.

comment:5 in reply to: ↑ 3 Changed 12 years ago by turowbye

Replying to turowbye:

Replying to laurentj:

Au passage, le bug se situe certainement dans mysql.dbtools.php, dans le driver mysql de jDb.

Comme tu as pus deviner, j'en suis à mes premères expériences en développement.

Je vais faire tous les efforts possibles pour préciser le "fail".

SVP n'apporte aucune importance à la faute d'orthographe..... excuse.

comment:6 in reply to: ↑ 1 Changed 12 years ago by turowbye

Replying to laurentj:

N'arrivant pas à faire fonctionner xampp correctement, merci de donner très précisément les résultats de la requête

SHOW FIELDS FROM products

sur mysql 5.0.51. Soit via phpmyadmin, soit si tu as un peu de temps, de faire ça "à la main" en php. C'est à dire faire dans un simple fichier php, un mysql_query de cette requête, de faire une boucle avec mysql_fetch_object, de faire un var_export de ce que renvoi mysql_fetch_object, et de m'indiquer ce que donnent ces var_export.

Le résultat du code php est :

stdClass::__set_state(array( 'Field' => 'id', 'Type' => 'int(11)', 'Null' => 'NO', 'Key' => 'PRI', 'Default' => NULL, 'Extra' => 'auto_increment', ))
stdClass::__set_state(array( 'Field' => 'name', 'Type' => 'varchar(150)', 'Null' => 'NO', 'Key' => '', 'Default' => NULL, 'Extra' => '', ))
stdClass::__set_state(array( 'Field' => 'price', 'Type' => 'float', 'Null' => 'YES', 'Key' => '', 'Default' => '0', 'Extra' => '', ))
stdClass::__set_state(array( 'Field' => 'promo', 'Type' => 'tinyint(1)', 'Null' => 'NO', 'Key' => '', 'Default' => NULL, 'Extra' => '', ))

comment:7 Changed 12 years ago by turowbye

Je viens de comparer le résultat produit pour mysql 5.0.51 avec ma base précédente.

Il y a une différence au niveau de la valeur par défaut. Il semble que 5.0.51 met un NULL alors que 5.0.41-community-nt met un .

comment:8 Changed 12 years ago by laurentj

  • Status changed from new to assigned

Merci pour le dump.

Il y a une différence au niveau de la valeur par défaut

Oui c'est ce que j'avais présenti, c'est pour cela que je t'ai demandé ce dump pour confirmation ;-)

Je ne trouve pas normal que la valeur par défaut soit NULL alors même que le champs est marqué "not null". On peut noter cependant que la valeur par defaut est NULL pour la clé primaire, et dans les deux cas. Enfin bref, y a un problème quelque part, soit dans PHP 5.2.2/Mysql 5.0.41, soit dans PHP 5.2.5/MYSQL 5.0.51.

Je vais tout de même faire en sorte de contourner ce bug...

comment:9 follow-up: Changed 12 years ago by laurentj

Tu peux faire les modifs suivantes dans mysql.dbtools.php et voir si dans les deux versions de xampp, les tests passent ?

Index: lib/jelix/plugins/db/mysql/mysql.dbtools.php
===================================================================
--- lib/jelix/plugins/db/mysql/mysql.dbtools.php        (révision 745)
+++ lib/jelix/plugins/db/mysql/mysql.dbtools.php        (copie de travail)
@@ -62,9 +62,13 @@
             $field->name = $line->Field;
             $field->notNull = ($line->Null == 'NO');
             $field->primary = ($line->Key == 'PRI');
+            $field->autoIncrement  = ($line->Extra == 'auto_increment');
             $field->hasDefault = ($line->Default != '' || !($line->Default == null && $field->notNull));
-            $field->default = $line->Default;
-            $field->autoIncrement  = ($line->Extra == 'auto_increment');
+            // to fix a bug in php 5.2.5 or mysql 5.0.51
+            if($field->notNull && $line->Default === null && !$field->autoIncrement)
+                $field->default ='';
+            else
+                $field->default = $line->Default;
             $results[$line->Field] = $field;
         }
         return $results;

comment:10 in reply to: ↑ 9 Changed 12 years ago by turowbye

Replying to laurentj:

Tu peux faire les modifs suivantes dans mysql.dbtools.php et voir si dans les deux versions de xampp, les tests passent ?

Index: lib/jelix/plugins/db/mysql/mysql.dbtools.php
===================================================================
--- lib/jelix/plugins/db/mysql/mysql.dbtools.php        (révision 745)
+++ lib/jelix/plugins/db/mysql/mysql.dbtools.php        (copie de travail)
@@ -62,9 +62,13 @@
             $field->name = $line->Field;
             $field->notNull = ($line->Null == 'NO');
             $field->primary = ($line->Key == 'PRI');
+            $field->autoIncrement  = ($line->Extra == 'auto_increment');
             $field->hasDefault = ($line->Default != '' || !($line->Default == null && $field->notNull));
-            $field->default = $line->Default;
-            $field->autoIncrement  = ($line->Extra == 'auto_increment');
+            // to fix a bug in php 5.2.5 or mysql 5.0.51
+            if($field->notNull && $line->Default === null && !$field->autoIncrement)
+                $field->default ='';
+            else
+                $field->default = $line->Default;
             $results[$line->Field] = $field;
         }
         return $results;

D'accord je fais le test aujourd'hui (écrit le dimanche matin)

comment:11 Changed 12 years ago by turowbye

Js viens de compléter le test.

Je te confirme que ton fix passe.

Merçi

Veux-tu que je fasse un message sur le forum?

comment:12 Changed 12 years ago by laurentj

  • Resolution set to fixed
  • Status changed from assigned to closed

Merci beaucoup. Patch appliqué dans le trunk et la branche 1.0.x.

Note: See TracTickets for help on using tickets.