isMysql()) { $this->execute( 'ALTER TABLE users ADD CONSTRAINT ' . self::CONSTRAINT_NAME . ' ' . 'CHECK (NOT (is_local = 1 AND subject IS NOT NULL))' ); return; } $this->execute(<<<'SQL' CREATE TRIGGER trg_users_local_subject_null_insert BEFORE INSERT ON users FOR EACH ROW WHEN NEW.is_local = 1 AND NEW.subject IS NOT NULL BEGIN SELECT RAISE(ABORT, 'local user must have null subject'); END SQL); $this->execute(<<<'SQL' CREATE TRIGGER trg_users_local_subject_null_update BEFORE UPDATE ON users FOR EACH ROW WHEN NEW.is_local = 1 AND NEW.subject IS NOT NULL BEGIN SELECT RAISE(ABORT, 'local user must have null subject'); END SQL); } public function down(): void { if ($this->isMysql()) { $this->execute( 'ALTER TABLE users DROP CONSTRAINT ' . self::CONSTRAINT_NAME ); return; } $this->execute('DROP TRIGGER IF EXISTS ' . self::TRIGGER_INSERT); $this->execute('DROP TRIGGER IF EXISTS ' . self::TRIGGER_UPDATE); } }