From 2d1d2aea796ff73457a6cf3331f3f255e899a0aa Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 12 Jan 2017 12:15:21 +1300 Subject: [PATCH 1/2] FIX Remap versioned ClassNames during build process --- src/ORM/DatabaseAdmin.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ORM/DatabaseAdmin.php b/src/ORM/DatabaseAdmin.php index 475ae7f55..c70f9a643 100644 --- a/src/ORM/DatabaseAdmin.php +++ b/src/ORM/DatabaseAdmin.php @@ -9,6 +9,7 @@ use SilverStripe\Core\Manifest\ClassLoader; use SilverStripe\Dev\SapphireTest; use SilverStripe\Dev\TestOnly; use SilverStripe\Dev\Deprecation; +use SilverStripe\ORM\Versioning\Versioned; use SilverStripe\Security\Security; use SilverStripe\Security\Permission; @@ -325,10 +326,19 @@ class DatabaseAdmin extends Controller echo "
  • Correcting $badRecordCount obsolete classname values for $newClassName
  • \n"; } $table = $schema->baseDataTable($baseDataClass); - DB::prepared_query( - "UPDATE \"$table\" SET \"ClassName\" = ? WHERE \"ClassName\" = ?", - [ $newClassName, $oldClassName ] - ); + + $updateQuery = "UPDATE \"$table%s\" SET \"ClassName\" = ? WHERE \"ClassName\" = ?"; + $updateQueries = [sprintf($updateQuery, '')]; + + // Remap versioned table ClassName values as well + if (singleton($newClassName)->has_extension(Versioned::class)) { + $updateQueries[] = sprintf($updateQuery, '_Live'); + $updateQueries[] = sprintf($updateQuery, '_Versions'); + } + + foreach ($updateQueries as $query) { + DB::prepared_query($query, [$newClassName, $oldClassName]); + } } } } From 9559cb2eda6cdbdedc2769db0c2adb2a728cd948 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Fri, 13 Jan 2017 11:29:48 +1300 Subject: [PATCH 2/2] Handle Versioned implementations that do not have stages --- src/ORM/DatabaseAdmin.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ORM/DatabaseAdmin.php b/src/ORM/DatabaseAdmin.php index c70f9a643..7787eafce 100644 --- a/src/ORM/DatabaseAdmin.php +++ b/src/ORM/DatabaseAdmin.php @@ -331,8 +331,11 @@ class DatabaseAdmin extends Controller $updateQueries = [sprintf($updateQuery, '')]; // Remap versioned table ClassName values as well - if (singleton($newClassName)->has_extension(Versioned::class)) { - $updateQueries[] = sprintf($updateQuery, '_Live'); + $class = singleton($newClassName); + if ($class->has_extension(Versioned::class)) { + if ($class->hasStages()) { + $updateQueries[] = sprintf($updateQuery, '_Live'); + } $updateQueries[] = sprintf($updateQuery, '_Versions'); }