From 2d1d2aea796ff73457a6cf3331f3f255e899a0aa Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Thu, 12 Jan 2017 12:15:21 +1300 Subject: [PATCH] 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]); + } } } }