Skip to content
Snippets Groups Projects
Unverified Commit 55c2a8bd authored by Jaime Pérez Crespo's avatar Jaime Pérez Crespo Committed by GitHub
Browse files

Merge pull request #1156 from simplesamlphp/tvdijen-patch-logoutstore

Rewrite table upgrade
parents 89f2aae4 122149b8
No related branches found
No related tags found
No related merge requests found
...@@ -50,17 +50,40 @@ class LogoutStore ...@@ -50,17 +50,40 @@ class LogoutStore
switch ($store->driver) { switch ($store->driver) {
case 'pgsql': case 'pgsql':
// This does not affect the NOT NULL constraint // This does not affect the NOT NULL constraint
$query = 'ALTER TABLE '.$store->prefix. $update = ['ALTER TABLE '.$store->prefix.
'_saml_LogoutStore ALTER COLUMN _authSource TYPE VARCHAR(255)'; '_saml_LogoutStore ALTER COLUMN _authSource TYPE VARCHAR(255)'];
break;
case 'sqlite':
/**
* TableVersion 2 increased the column size to 255 which is the maximum length of a FQDN
* Because SQLite does not support field alterations, the approach is to:
* Create a new table without the proper column size
* Copy the current data to the new table
* Drop the old table
* Rename the new table correctly
* Read the index
*/
$update = [
'CREATE TABLE '.$store->prefix.'_saml_LogoutStore_new (_authSource VARCHAR(255) NOT NULL,'.
'_nameId VARCHAR(40) NOT NULL, _sessionIndex VARCHAR(50) NOT NULL, _expire TIMESTAMP NOT NULL,'.
'_sessionId VARCHAR(50) NOT NULL, UNIQUE (_authSource, _nameID, _sessionIndex))',
'INSERT INTO '.$store->prefix.'_saml_LogoutStore_new SELECT * FROM '.$store->prefix.'_saml_LogoutStore',
'DROP TABLE '.$store->prefix.'_saml_LogoutStore',
'ALTER TABLE '.$store->prefix.'_saml_LogoutStore_new RENAME TO '.$store->prefix.'_saml_LogoutStore',
'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_expire ON '.$store->prefix.'_saml_LogoutStore (_expire)',
'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON '.$store->prefix.'_saml_LogoutStore (_authSource, _nameId)'
];
break; break;
default: default:
$query = 'ALTER TABLE '.$store->prefix. $update = ['ALTER TABLE '.$store->prefix.
'_saml_LogoutStore MODIFY _authSource VARCHAR(255) NOT NULL'; '_saml_LogoutStore MODIFY _authSource VARCHAR(255) NOT NULL'];
break; break;
} }
try { try {
$store->pdo->exec($query); foreach ($update as $query) {
$store->pdo->exec($query);
}
} catch (\Exception $e) { } catch (\Exception $e) {
Logger::warning('Database error: '.var_export($store->pdo->errorInfo(), true)); Logger::warning('Database error: '.var_export($store->pdo->errorInfo(), true));
return; return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment