Fix default column value comparison between strings and ints 5.2.0_Beta_2
authorMatthias Schmidt <gravatronics@live.com>
Sun, 6 Oct 2019 12:06:26 +0000 (14:06 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Sun, 6 Oct 2019 12:06:26 +0000 (14:06 +0200)
wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php

index 6a0edd586f531f518e5a7bfe1b15633d17416bc3..43e4b88010b87064885562f350810e1019fd7947 100644 (file)
@@ -666,9 +666,16 @@ class DatabaseTableChangeProcessor {
                        return true;
                }
                
-               // default type has to be checked with a strict check to differentiate between having
-               // no default value (`null`) and having an empty string as default value
-               return $oldColumn->getDefaultValue() !== $newColumn->getDefaultValue();
+               // default type has to be checked explicitly for `null` to properly detect changing
+               // from no default value (`null`) and to an empty string as default value (and vice
+               // versa)
+               if ($oldColumn->getDefaultValue() === null || $newColumn->getDefaultValue() === null) {
+                       return $oldColumn->getDefaultValue() !== $newColumn->getDefaultValue();
+               }
+               
+               // for all other cases, use weak comparison so that `'1'` (from database) and `1`
+               // (from script PIP) match, for example 
+               return $oldColumn->getDefaultValue() != $newColumn->getDefaultValue();
        }
        
        /**