<?php

namespace Acms\Services\Unit;

use Acms\Services\Facades\Database as DB;
use SQL;

/**
 * グループユニット（column_type = 'group' および column_add_type で追加された
 * "group_xxx" 拡張ユニット）の column_group_class を一括変換する。
 */
class GroupUnitClassMigrationRepository
{
    /**
     * 対象ブログのグループユニットのうち、指定クラスを使用しているものを一括で書き換える。
     *
     * @param int $blogId
     * @param string $target 変換前のクラス
     * @param string $value 変換後のクラス
     * @return int 更新した行数
     */
    public function rename(int $blogId, string $target, string $value): int
    {
        $sql = SQL::newUpdate('column');
        $sql->addUpdate('column_group_class', $value);
        $type = SQL::newWhere();
        $type->addWhereOpr('column_type', 'group', '=', 'OR');
        $type->addWhereOpr('column_type', 'group\_%', 'LIKE', 'OR');
        $sql->addWhere($type);
        $sql->addWhereOpr('column_group_class', $target);
        $sql->addWhereOpr('column_blog_id', $blogId);
        DB::query($sql->get(dsn()), 'exec');

        return DB::affected_rows();
    }
}
