Introduce database models required by migration hooks

This commit is contained in:
Yonas Habteab 2023-06-21 17:24:32 +02:00 committed by Johannes Meyer
parent ac369f9156
commit 21bde13274
6 changed files with 95 additions and 11 deletions

View File

@ -0,0 +1,49 @@
<?php
/* Icinga Web 2 | (c) 2023 Icinga GmbH | GPLv2+ */
namespace Icinga\Model;
use DateTime;
use ipl\Orm\Behavior\BoolCast;
use ipl\Orm\Behavior\MillisecondTimestamp;
use ipl\Orm\Behaviors;
use ipl\Orm\Model;
/**
* A database model for Icinga Web schema version table
*
* @property int $id Unique identifier of the database schema entries
* @property string $version The current schema version of Icinga Web
* @property DateTime $timestamp The insert/modify time of the schema entry
* @property bool $success Whether the database migration of the current version was successful
* @property ?string $reason The reason why the database migration has failed
*/
class Schema extends Model
{
public function getTableName(): string
{
return 'icingaweb_schema';
}
public function getKeyName()
{
return 'id';
}
public function getColumns(): array
{
return [
'version',
'timestamp',
'success',
'reason'
];
}
public function createBehaviors(Behaviors $behaviors): void
{
$behaviors->add(new BoolCast(['success']));
$behaviors->add(new MillisecondTimestamp(['timestamp']));
}
}

View File

@ -49,6 +49,8 @@ parameters:
count: 2
path: library/Icinga/Protocol/Ldap/LdapConnection.php
- '#Call to an undefined method ipl\\Sql\\Connection::exec\(\)#'
scanDirectories:
- vendor
@ -56,6 +58,7 @@ parameters:
- library/Icinga/Test
universalObjectCratesClasses:
- ipl\Orm\Model
- Icinga\Data\ConfigObject
- Icinga\Web\View
- Icinga\Module\Monitoring\Object\MonitoredObject

View File

@ -0,0 +1,11 @@
ALTER TABLE icingaweb_schema
MODIFY COLUMN timestamp bigint unsigned NOT NULL,
MODIFY COLUMN version varchar(64) NOT NULL,
ADD COLUMN IF NOT EXISTS success enum ('n', 'y') DEFAULT NULL,
ADD COLUMN IF NOT EXISTS reason text DEFAULT NULL,
DROP CONSTRAINT IF EXISTS idx_icingaweb_schema_version,
ADD CONSTRAINT idx_icingaweb_schema_version UNIQUE (version);
INSERT INTO icingaweb_schema (version, timestamp, success, reason)
VALUES('2.12.0', UNIX_TIMESTAMP() * 1000, 'y', NULL)
ON DUPLICATE KEY UPDATE timestamp = VALUES(timestamp), success = VALUES(success), reason = VALUES(reason);

View File

@ -54,12 +54,15 @@ CREATE TABLE `icingaweb_rememberme`(
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
CREATE TABLE icingaweb_schema (
id int unsigned NOT NULL AUTO_INCREMENT,
version smallint unsigned NOT NULL,
timestamp int unsigned NOT NULL,
id int unsigned NOT NULL AUTO_INCREMENT,
version varchar(64) NOT NULL,
timestamp bigint NOT NULL,
success enum ('n', 'y') DEFAULT NULL,
reason text DEFAULT NULL,
PRIMARY KEY (id)
PRIMARY KEY (id),
CONSTRAINT idx_icingaweb_schema_version UNIQUE (version)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
INSERT INTO icingaweb_schema (version, timestamp)
VALUES (6, UNIX_TIMESTAMP());
INSERT INTO icingaweb_schema (version, timestamp, success)
VALUES ('2.12.0', UNIX_TIMESTAMP() * 1000, 'y');

View File

@ -0,0 +1,13 @@
CREATE TYPE boolenum AS ENUM ('n', 'y');
ALTER TABLE icingaweb_schema
ALTER COLUMN timestamp TYPE bigint,
ALTER COLUMN version TYPE varchar(64),
ADD COLUMN success boolenum DEFAULT NULL,
ADD COLUMN reason text DEFAULT NULL,
DROP CONSTRAINT IF EXISTS idx_icingaweb_schema_version,
ADD CONSTRAINT idx_icingaweb_schema_version UNIQUE (version);
INSERT INTO icingaweb_schema (version, timestamp, success, reason)
VALUES('2.12.0', EXTRACT(EPOCH FROM now()) * 1000, 'y', NULL)
ON CONFLICT ON CONSTRAINT idx_icingaweb_schema_version DO UPDATE SET timestamp = EXCLUDED.timestamp, success = EXCLUDED.success, reason = EXCLUDED.reason;

View File

@ -118,13 +118,18 @@ ALTER TABLE ONLY "icingaweb_rememberme"
"id"
);
CREATE TYPE boolenum AS ENUM ('n', 'y');
CREATE TABLE "icingaweb_schema" (
"id" serial,
"version" smallint NOT NULL,
"timestamp" int NOT NULL,
"version" varchar(64) NOT NULL,
"timestamp" bigint NOT NULL,
"success" boolenum DEFAULT NULL,
"reason" text DEFAULT NULL,
CONSTRAINT pk_icingaweb_schema PRIMARY KEY ("id")
CONSTRAINT pk_icingaweb_schema PRIMARY KEY ("id"),
CONSTRAINT idx_icingaweb_schema_version UNIQUE (version)
);
INSERT INTO icingaweb_schema (version, timestamp)
VALUES (6, extract(epoch from now()));
INSERT INTO icingaweb_schema (version, timestamp, success)
VALUES ('2.12.0', extract(epoch from now()) * 1000, 'y');