プロジェクト

全般

プロフィール

Vote #81080

未完了

Potential better SQL query in extra/svn/Redmine.pm

Admin Redmine さんが約4年前に追加. ほぼ4年前に更新.

ステータス:
New
優先度:
通常
担当者:
-
カテゴリ:
SCM extra_46
対象バージョン:
-
開始日:
2022/05/09
期日:
進捗率:

0%

予定工数:
category_id:
46
version_id:
0
issue_org_id:
34044
author_id:
473604
assigned_to_id:
0
comments:
0
status_id:
1
tracker_id:
2
plus1:
0
affected_version:
closed_on:
affected_version_id:
ステータス-->[New]

説明

Due to lack of attention, extra/svn/Redmine.pm is ditched from recent improvements to Redmine such as acquisition of identifier in repositories and allowance to register multiple repositories in a project.
As so, the SQL query in Redmine.pm is still referring @projects.identifier@ to identify the repo which is being fetched through HTTP, and this becomes hidden limitation to have multiple repos in a project.


*** original/extra/svn/Redmine.pm   2020-04-07 02:00:47.000000000 +0900
--- modified/extra/svn/Redmine.pm   2020-09-29 10:21:11.504258505 +0900
***************
*** 239,262 ****
    my ($self, $parms, $arg) = @_;
    $self->{RedmineDSN} = $arg;
    my $query = "SELECT 
!                  users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status
!               FROM projects, users, roles
                WHERE 
                  users.login=? 
!                 AND projects.identifier=?
                  AND EXISTS (SELECT 1 FROM enabled_modules em WHERE em.project_id = projects.id AND em.name = 'repository')
                  AND users.type='User'
                  AND users.status=1 
                  AND (
!                   roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id AND members.project_id = projects.id AND members.id = member_roles.member_id)
                    OR
                    (cast(projects.is_public as CHAR) IN ('t', '1')
                      AND (roles.builtin=1
!                          OR roles.id IN (SELECT member_roles.role_id FROM members, member_roles, users g
!                                  WHERE members.user_id = g.id AND members.project_id = projects.id AND members.id = member_roles.member_id
!                                  AND g.type = 'GroupNonMember'))
                    )
                  )
                  AND roles.permissions IS NOT NULL";
    $self->{RedmineQuery} = trim($query);
  }
--- 239,264 ----
    my ($self, $parms, $arg) = @_;
    $self->{RedmineDSN} = $arg;
    my $query = "SELECT 
!                 users.hashed_password, users.salt, users.auth_source_id, roles.permissions, projects.status
!               FROM projects, users, roles, repositories
                WHERE 
                  users.login=? 
!                 AND repositories.identifier=LOWER(?)
                  AND EXISTS (SELECT 1 FROM enabled_modules em WHERE em.project_id = projects.id AND em.name = 'repository')
                  AND users.type='User'
                  AND users.status=1 
                  AND (
!                   roles.id IN (SELECT member_roles.role_id FROM members, member_roles WHERE members.user_id = users.id 
!                                 AND members.project_id = projects.id AND members.id = member_roles.member_id)
                    OR
                    (cast(projects.is_public as CHAR) IN ('t', '1')
                      AND (roles.builtin=1
!                         OR roles.id IN (SELECT member_roles.role_id FROM members, member_roles, users g
!                                 WHERE members.user_id = g.id AND members.project_id = projects.id AND members.id = member_roles.member_id
!                                 AND g.type = 'GroupNonMember'))
                    )
                  )
+                 AND repositories.project_id=projects.id
                  AND roles.permissions IS NOT NULL";
    $self->{RedmineQuery} = trim($query);
  }
***************

Admin Redmine さんがほぼ4年前に更新

  • カテゴリSCM extra_46 にセット

他の形式にエクスポート: Atom PDF

いいね!0
いいね!0