Introduce database models required by migration hooks
This commit is contained in:
parent
ac369f9156
commit
21bde13274
|
@ -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']));
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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);
|
|
@ -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');
|
||||
|
|
|
@ -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;
|
|
@ -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');
|
||||
|
|
Loading…
Reference in New Issue