On Dec 4, 2007 3:29 PM, Gábor Hojtsy <gabor@hojtsy.hu> wrote:
Take system_update_6027 for example, which we try to fix at http://drupal.org/node/197500 .
- it calls _block_rehash() (note the underscore, not even a public API function!) - _block_rehash() uses drupal_save_record(), which uses the most up to date schema from system_schema()
Now what happens if the schema is changed in a later update in Drupal 6? (ie. > 6027 but < 7000). Well, system_update_6027() becomes broken, because its _block_rehash() call tries to use the latest schema (as in after all Drupal 6 updates are run), but all Drupal 6 updates are not run yet.
A similar example is system_update_1005() which is still in system.install in the name of letting enterprising folks try to update their 4.7 sites to 6.0. Well, it uses some API functions, namely: _node_type_set_defaults node_type_save cache_clear_all system_modules menu_rebuild node_types_rebuild (db_ functions and variable_ functions are mostly taken to be usable in updates). So guess which one of the above breaks in a Drupal 6. Out of pure luck, only menu_rebuild() (at least in my testing), as at system_update_1005(), the menu system is far from being in the state where it is expected in Drupal 6. So why isn't this a critical bug? Well, this is in pre 5.0 update code, and we officially only support updates from 5.x. So why are pre 5.x update functions still in Drupal 6? Nobody suggested to remove them yet (although we removed pre 4.7 update code). Let's discuss! Gabor