根据an earlier question,我正在从布吉拉迁移到雷德明,在迁移过程中,我想利用雷德明提供的路线图。
在bugzilla中,错误总是记录在导致问题出现的软件版本上,尽管我现在已经在一个自定义字段中保留了这个信息(参见前面提到的问题),但我现在需要将路线图减少到更易于管理的程度,即:
更改所有错误的版本,使其接近符合路线图的简化等效版本(例如0.1234变为0.1,2.9876变为2.9)。这允许任何一个道路地图版本有多达999个子版本,这是我们倾向于与Bugzilla已经做的。
将所有打开的Bug更改为新的“计划外”版本。
删除所有当前未使用的版本号
我想这可以通过以下步骤实现:
获取所有可用的当前版本
对于检索到的每个版本,去掉除前三个字符以外的所有字符
检查该产品的版本号是否已经存在。
如果版本号是新的,则将其添加为新版本。
运行数据库中的每个问题,并且(a)如果问题已关闭,则将其分配给缩短的版本号;或者(b)如果问题仍处于打开状态,则将其分配给“非计划”版本。
…但是,唉,我缺乏SQL知识,这让我很失望。有人知道怎么解决这个问题吗?
最佳答案
此查询将获得所有现有版本的所有3个字符版本名称,按项目:
SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id
您需要一个不存在的所有3个字符版本名称的列表:
SELECT f.project_id, f.newversionname
FROM (
SELECT DISTINCT v.project_id, Left(v.name, 3) newversionname
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
WHERE v2.project_id is null
您需要为上述查询的每个结果插入新版本(我将把上述查询的修改作为
INSERT
查询留给您…)。编辑:更新查询以添加版本详细信息
SELECT f.project_id, f.newversionname, v3.description, v3.created_on, v3.updated_on
FROM (
SELECT v.project_id, Left(v.name, 3) newversionname, MIN(v.id) minversionid
FROM issues i INNER JOIN versions v ON i.fixed_version_id=v.id
GROUP BY v.project_id
) f
LEFT OUTER JOIN versions v2 ON f.project_id = v2.project_id and f.newversionname=v2.name
INNER JOIN versions v3 ON f.minversionid=v3.id
WHERE v2.project_id is null
这只需为每个新版本选择id最低的版本的详细信息。
注意:如果您的版本大于9(即
11.234
变为11.
),则此操作将中断。现在我们对于每一个与旧版本关联的问题,都存在一个新的3字符版本。以下查询显示了哪一个:
SELECT DISTINCT i.id, v.id oldversionid, v.name oldversionname, v2.id newversionid, v2.name newversionname
FROM issues i
INNER JOIN versions v ON i.fixed_version_id=v.id
INNER JOIN versions v2 ON LEFT(v.name, 3) = v2.name and v.project_id = v2.project_id
WHERE v.id <> v2.id
您可以使用此查询,并在进行健全性检查后将其调整为
UPDATE
查询。您仍然需要添加标准来区分打开的问题和关闭的问题(status_id
)。希望这有助于你的移民,玩得开心!