commit ef13049206581d5d5a1d237b7b95c542d2e73be4
parent 9d968304bdfb9f57ea8a34313981c6b75f70cb55
Author: Jan Dankert <develop@jandankert.de>
Date: Sun, 7 Nov 2021 23:45:50 +0100
Fix: First successful migration to the new "content" table.
Diffstat:
6 files changed, 52 insertions(+), 24 deletions(-)
diff --git a/modules/cms/status/Status.class.php b/modules/cms/status/Status.class.php
@@ -139,6 +139,11 @@ class Status
// If you don't do this explicitly, PHP will automatically close the connection when your script ends.
$adminDb = null;
unset($adminDb);
+
+ $dbState = [
+ 'state' => 'UP',
+ 'message' => 'Updated',
+ ];
}
}
diff --git a/modules/cms/update/Update.class.php b/modules/cms/update/Update.class.php
@@ -12,7 +12,7 @@ use logger\Logger;
class Update
{
// This is the required DB version:
- const SUPPORTED_VERSION = 28;
+ const SUPPORTED_VERSION = 31;
// -----------------------^^-----------------------------
const STATUS_UPDATE_PROGRESS = 0;
diff --git a/modules/cms/update/version/DBVersion000029.class.php b/modules/cms/update/version/DBVersion000029.class.php
@@ -26,7 +26,7 @@ class DBVersion000029 extends DbVersion
$valueTable = $this->table('value');
$valueTable->column('contentid')->nullable()->add();
$valueTable->addConstraint('contentid','content');
- $valueTable->column('binary')->type( Column::TYPE_BLOB )->add();
+ $valueTable->column('file')->type( Column::TYPE_BLOB )->nullable()->add();
$pageContentTable = $this->table('pagecontent');
$pageContentTable->add();
@@ -51,16 +51,21 @@ class DBVersion000029 extends DbVersion
$stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')');
$stmt->execute();
- $stmt = $db->sql('INSERT INTO '.$pageContentTable->getSqlName().' (id,pageid,elementid,languageid,contentid) VALUES('.$contentid.','.$row['pageid'].','.$row['elementidid'].','.$row['languageid'].','.$contentid.')');
+ $stmt = $db->sql('INSERT INTO '.$pageContentTable->getSqlName().' (id,pageid,elementid,languageid,contentid) VALUES('.$contentid.','.$row['pageid'].','.$row['elementid'].','.$row['languageid'].','.$contentid.')');
$stmt->execute();
- $stmt = $db->sql('UPDATE '.$valueTable->getSqlName().' SET contentid='.$contentid.' WHERE pageid='.$row['pageid'].' AND elementid='.$row['elementid'].' AND languageid='.$row['languageid'].')');
+ $stmt = $db->sql('UPDATE '.$valueTable->getSqlName().' SET contentid='.$contentid.' WHERE pageid='.$row['pageid'].' AND elementid='.$row['elementid'].' AND languageid='.$row['languageid'] );
$stmt->execute();
}
- //$valueTable->column('pageid' )->drop();
- //$valueTable->column('elementid' )->drop();
- //$valueTable->column('languageid')->drop();
+ $valueTable->dropConstraint('pageid');
+ $valueTable->column('pageid' )->drop();
+
+ $valueTable->dropConstraint('elementid');
+ $valueTable->column('elementid' )->drop();
+
+ $valueTable->dropConstraint('languageid');
+ $valueTable->column('languageid')->drop();
}
}
diff --git a/modules/cms/update/version/DBVersion000030.class.php b/modules/cms/update/version/DBVersion000030.class.php
@@ -2,6 +2,7 @@
namespace cms\update\version;
+use cms\base\Startup;
use database\DbVersion;
use database\Column;
use security\Password;
@@ -24,28 +25,32 @@ class DBVersion000030 extends DbVersion
$templateModelTable = $this->table('templatemodel' );
$templateModelTable->column('contentid')->add();
- $templateModelTable->addConstraint('contentid' , 'content' );
$db = $this->getDb();
$stmt = $db->sql('SELECT * FROM '.$templateModelTable->getSqlName().'' );
- foreach($stmt->getAll() as $row )
+ foreach($stmt->getAll() as $row ) // all templates should fit into memory.
{
$stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName().'');
- $contentid = $stmt->getOne();
+ $contentid = $stmt->getOne() + 1;
$stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')') ;
$stmt->execute();
$stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName().'');
- $valueid = $stmt->getOne();
+ $valueid = $stmt->getOne() + 1;
- $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,text) VALUES('.$valueid.','.$contentid.',1,1,{text}');
+ $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,text,lastchange_date) VALUES('.$valueid.','.$contentid.',1,1,{text},{time})');
$stmt->setString( 'text', $row['text'] );
+ $stmt->setInt ( 'time', Startup::getStartTime() );
+ $stmt->execute();
+
+ $stmt = $db->sql('UPDATE '.$templateModelTable->getSqlName().' SET contentid='.$contentid);
$stmt->execute();
}
- //$templateModelTable->column('text')->drop();
+ $templateModelTable->addConstraint('contentid' , 'content' );
+ $templateModelTable->column('text')->drop();
}
}
diff --git a/modules/cms/update/version/DBVersion000031.class.php b/modules/cms/update/version/DBVersion000031.class.php
@@ -2,6 +2,7 @@
namespace cms\update\version;
+use cms\base\Startup;
use database\DbVersion;
use database\Column;
use security\Password;
@@ -24,28 +25,35 @@ class DBVersion000031 extends DbVersion
$fileTable = $this->table('file' );
$fileTable->column('contentid')->add();
- $fileTable->addConstraint('contentid' , 'content' );
$db = $this->getDb();
- $stmt = $db->sql('SELECT * FROM '.$fileTable->getSqlName().'' );
+ $stmt = $db->sql('SELECT id FROM '.$fileTable->getSqlName() );
- foreach($stmt->getAll() as $row )
+ foreach($stmt->getCol() as $fileid )
{
- $stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName().'');
- $contentid = $stmt->getOne();
+ $stmt = $db->sql('SELECT * FROM '.$fileTable->getSqlName().' WHERE id='.$fileid );
+ $row = $stmt->getRow();
+
+ $stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName() );
+ $contentid = $stmt->getOne() + 1;
$stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')') ;
$stmt->execute();
- $stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName().'');
- $valueid = $stmt->getOne();
+ $stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName() );
+ $valueid = $stmt->getOne() + 1;
- $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,binary) VALUES('.$valueid.','.$contentid.',1,1,{file}');
+ $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,file,lastchange_date) VALUES('.$valueid.','.$contentid.',1,1,{file},{time})');
$stmt->setString( 'file', $row['value'] );
+ $stmt->setInt ( 'time', Startup::getStartTime() );
+ $stmt->execute();
+
+ $stmt = $db->sql('UPDATE '.$fileTable->getSqlName().' SET contentid='.$contentid);
$stmt->execute();
}
- //$fileTable->column('value')->drop();
+ $fileTable->addConstraint('contentid' , 'content' );
+ $fileTable->column('value')->drop();
}
}
diff --git a/modules/database/Table.class.php b/modules/database/Table.class.php
@@ -179,9 +179,14 @@ class Table
}
- public function dropConstraint($constraintName)
+ public function dropConstraint($columnName)
{
- $ddl = $this->db->sql('DROP CONSTRAINT ' . $constraintName . ';');
+
+ $constraintName = $this->tablePrefix . self::CONSTRAINT_PREFIX . '_' . $this->name . $this->tableSuffix . '_' . $columnName;
+
+ $table = $this->getSqlName();
+ // In MySQL, there’s no DROP CONSTRAINT, you have to use DROP FOREIGN KEY instead
+ $ddl = $this->db->sql('ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $constraintName . ';');
$ddl->execute();
}