This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 14e91035e fix #8452 (#8453)
14e91035e is described below

commit 14e91035e69aa844752da1579f79496d51e3367a
Author: NaRro <[email protected]>
AuthorDate: Tue May 27 13:35:55 2025 +0000

    fix #8452 (#8453)
    
    * fix: increase cq_issuescomponent length to text
    
    * refactor(codequality): extend field size for CQ and SonarQube
    
    - Increase CqFileMetrics.FileName to varchar(2000)
    - Increase CqProject.Name to varchar(2000)
    - Increase CqFileMetrics.Id to varchar(3000)
    - Increase SonarqubeFileMetrics.FileMetricsKey to varchar(3000)
    - Increase SonarqubeFileMetrics.FileName to varchar(2000)
    
    These changes accommodate longer file names and identifiers in modern 
projects.
    
    * feat(sonarqube): hash file metrics key for MySQL compatibility
    
    - Hash the file metrics key to make it suitable as a MySQL index
    - Add a new function `hashString` to generate hashed strings
    - Update the `ExtractFilemetrics` function to use the hashed key
    
    ---------
    
    Co-authored-by: abeizn <[email protected]>
---
 .../domainlayer/codequality/cq_file_metrics.go     |  2 +-
 .../models/domainlayer/codequality/cq_issues.go    |  2 +-
 .../models/domainlayer/codequality/cq_projects.go  |  2 +-
 ...20240919_increase_cq_issue_component_length.go} | 29 ++++++++-----------
 .../20250527_extend_field_size_for_cq.go}          | 33 ++++++++++------------
 backend/core/models/migrationscripts/register.go   |  2 ++
 .../_tool_sonarqube_filemetrics.csv                | 12 ++++----
 .../sonarqube/e2e/snapshot_tables/filemetrics.csv  | 12 ++++----
 .../20250527_extend_field_size.go}                 | 30 ++++++++------------
 .../sonarqube/models/migrationscripts/register.go  |  1 +
 .../sonarqube/models/sonarqube_file_metrics.go     |  2 +-
 .../tasks/filemetrics_additional_extractor.go      |  3 +-
 .../sonarqube/tasks/filemetrics_extractor.go       |  2 +-
 backend/plugins/sonarqube/tasks/shared.go          |  7 +++++
 14 files changed, 67 insertions(+), 72 deletions(-)

diff --git a/backend/core/models/domainlayer/codequality/cq_file_metrics.go 
b/backend/core/models/domainlayer/codequality/cq_file_metrics.go
index c83a79813..abc03b85f 100644
--- a/backend/core/models/domainlayer/codequality/cq_file_metrics.go
+++ b/backend/core/models/domainlayer/codequality/cq_file_metrics.go
@@ -24,7 +24,7 @@ import (
 type CqFileMetrics struct {
        domainlayer.DomainEntity
        ProjectKey                          string 
`gorm:"index;type:varchar(255)"` //domain project key
-       FileName                            string `gorm:"type:varchar(255)"`
+       FileName                            string `gorm:"type:varchar(2000)"`
        FilePath                            string
        FileLanguage                        string `gorm:"type:varchar(20)"`
        CodeSmells                          int
diff --git a/backend/core/models/domainlayer/codequality/cq_issues.go 
b/backend/core/models/domainlayer/codequality/cq_issues.go
index 243e675fa..1e9ea7134 100644
--- a/backend/core/models/domainlayer/codequality/cq_issues.go
+++ b/backend/core/models/domainlayer/codequality/cq_issues.go
@@ -26,7 +26,7 @@ type CqIssue struct {
        domainlayer.DomainEntity
        Rule                     string `gorm:"type:varchar(255)"`
        Severity                 string `gorm:"type:varchar(100)"`
-       Component                string `gorm:"type:varchar(255)"`
+       Component                string
        ProjectKey               string `gorm:"index;type:varchar(100)"` 
//domain project key
        Line                     int
        Status                   string `gorm:"type:varchar(20)"`
diff --git a/backend/core/models/domainlayer/codequality/cq_projects.go 
b/backend/core/models/domainlayer/codequality/cq_projects.go
index fe80dd1bb..d0f0be4d3 100644
--- a/backend/core/models/domainlayer/codequality/cq_projects.go
+++ b/backend/core/models/domainlayer/codequality/cq_projects.go
@@ -27,7 +27,7 @@ var _ plugin.Scope = (*CqProject)(nil)
 
 type CqProject struct {
        domainlayer.DomainEntityExtended
-       Name             string `gorm:"type:varchar(255)"`
+       Name             string `gorm:"type:varchar(2000)"`
        Qualifier        string `gorm:"type:varchar(255)"`
        Visibility       string `gorm:"type:varchar(64)"`
        LastAnalysisDate *common.Iso8601Time
diff --git a/backend/core/models/domainlayer/codequality/cq_projects.go 
b/backend/core/models/migrationscripts/20240919_increase_cq_issue_component_length.go
similarity index 56%
copy from backend/core/models/domainlayer/codequality/cq_projects.go
copy to 
backend/core/models/migrationscripts/20240919_increase_cq_issue_component_length.go
index fe80dd1bb..aa1483e06 100644
--- a/backend/core/models/domainlayer/codequality/cq_projects.go
+++ 
b/backend/core/models/migrationscripts/20240919_increase_cq_issue_component_length.go
@@ -15,33 +15,26 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package codequality
+package migrationscripts
 
 import (
-       "github.com/apache/incubator-devlake/core/models/common"
-       "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/context"
+       "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
 )
 
-var _ plugin.Scope = (*CqProject)(nil)
+var _ plugin.MigrationScript = (*increaseCqIssueComponentLength)(nil)
 
-type CqProject struct {
-       domainlayer.DomainEntityExtended
-       Name             string `gorm:"type:varchar(255)"`
-       Qualifier        string `gorm:"type:varchar(255)"`
-       Visibility       string `gorm:"type:varchar(64)"`
-       LastAnalysisDate *common.Iso8601Time
-       CommitSha        string `gorm:"type:varchar(128)"`
-}
+type increaseCqIssueComponentLength struct{}
 
-func (CqProject) TableName() string {
-       return "cq_projects"
+func (script *increaseCqIssueComponentLength) Up(basicRes context.BasicRes) 
errors.Error {
+       return basicRes.GetDal().ModifyColumnType("cq_issues", "component", 
"text")
 }
 
-func (s *CqProject) ScopeId() string {
-       return s.Id
+func (*increaseCqIssueComponentLength) Version() uint64 {
+       return 20240919160242
 }
 
-func (s *CqProject) ScopeName() string {
-       return s.Name
+func (*increaseCqIssueComponentLength) Name() string {
+       return "increase cq_issues.component length to text"
 }
diff --git a/backend/core/models/domainlayer/codequality/cq_projects.go 
b/backend/core/models/migrationscripts/20250527_extend_field_size_for_cq.go
similarity index 55%
copy from backend/core/models/domainlayer/codequality/cq_projects.go
copy to 
backend/core/models/migrationscripts/20250527_extend_field_size_for_cq.go
index fe80dd1bb..e1c0328da 100644
--- a/backend/core/models/domainlayer/codequality/cq_projects.go
+++ b/backend/core/models/migrationscripts/20250527_extend_field_size_for_cq.go
@@ -15,33 +15,30 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package codequality
+package migrationscripts
 
 import (
-       "github.com/apache/incubator-devlake/core/models/common"
-       "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/context"
+       "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
 )
 
-var _ plugin.Scope = (*CqProject)(nil)
+var _ plugin.MigrationScript = (*extendFieldSizeForCq)(nil)
 
-type CqProject struct {
-       domainlayer.DomainEntityExtended
-       Name             string `gorm:"type:varchar(255)"`
-       Qualifier        string `gorm:"type:varchar(255)"`
-       Visibility       string `gorm:"type:varchar(64)"`
-       LastAnalysisDate *common.Iso8601Time
-       CommitSha        string `gorm:"type:varchar(128)"`
-}
+type extendFieldSizeForCq struct{}
 
-func (CqProject) TableName() string {
-       return "cq_projects"
+func (script *extendFieldSizeForCq) Up(basicRes context.BasicRes) errors.Error 
{
+       err := basicRes.GetDal().ModifyColumnType("cq_projects", "name", 
"varchar(2000)")
+       if err != nil {
+               return err
+       }
+       return basicRes.GetDal().ModifyColumnType("cq_file_metrics", 
"file_name", "varchar(2000)")
 }
 
-func (s *CqProject) ScopeId() string {
-       return s.Id
+func (*extendFieldSizeForCq) Version() uint64 {
+       return 20250527000000
 }
 
-func (s *CqProject) ScopeName() string {
-       return s.Name
+func (*extendFieldSizeForCq) Name() string {
+       return "extend field size for cq"
 }
diff --git a/backend/core/models/migrationscripts/register.go 
b/backend/core/models/migrationscripts/register.go
index 4886f66a4..fd90c8fd2 100644
--- a/backend/core/models/migrationscripts/register.go
+++ b/backend/core/models/migrationscripts/register.go
@@ -136,5 +136,7 @@ func All() []plugin.MigrationScript {
                new(addCqIssueImpacts),
                new(addDueDateToIssues),
                new(createQaTables),
+               new(increaseCqIssueComponentLength),
+               new(extendFieldSizeForCq),
        }
 }
diff --git 
a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv 
b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
index f38bf08e6..767d7e7bf 100644
--- 
a/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
+++ 
b/backend/plugins/sonarqube/e2e/snapshot_tables/_tool_sonarqube_filemetrics.csv
@@ -1,7 +1,7 @@
 
connection_id,file_metrics_key,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,coverage,uncovered_lines,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity,num_of_lines
-2,testDevLake:backend/plugins/gitlab/e2e/issues_test.go,testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,0,18,18,31.299999237060547,1,1,46,7,1,7,147
-2,testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,0,24,24,30.299999237060547,2,1,53,7,1,7,175
-2,testDevLake:backend/plugins/gitlab/e2e/mr_test.go,testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,0,15,15,36.400001525878906,1,1,48,7,1,7,132
-2,testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,0,15,15,0,7,7,7,7,1,7,93
-2,testDevLake:backend/plugins/jenkins/impl/impl.go,testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,0,92,92,0,7,7,7,7,39,24,289
-2,testDevLake:backend/plugins/jenkins/tasks/api_client.go,testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,0,8,8,0,7,7,7,7,3,2,49
+2,07653f44dac701abb21be5fd106928a9e426593c,testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,0,15,15,0,7,7,7,7,1,7,93
+2,a571978106a1ad42ac884f404e5c0845d2ecc277,testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,0,24,24,30.299999237060547,2,1,53,7,1,7,175
+2,cd89d4f7457a22dd0c507d4a3d9288bb47f69d31,testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,0,18,18,31.299999237060547,1,1,46,7,1,7,147
+2,d1db10573d322ac2fc8e3c8d50eb94c685666c87,testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,0,92,92,0,7,7,7,7,39,24,289
+2,e06434b2e803e07f19e21de5b17f25c0ac969e70,testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,0,15,15,36.400001525878906,1,1,48,7,1,7,132
+2,f222da572ca48538456c263f3a6ff15c3c95438f,testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,0,8,8,0,7,7,7,7,3,2,49
diff --git a/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv 
b/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
index 520630ce5..dc9b8c1d6 100644
--- a/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
+++ b/backend/plugins/sonarqube/e2e/snapshot_tables/filemetrics.csv
@@ -1,7 +1,7 @@
 
id,project_key,file_name,file_path,file_language,code_smells,sqale_index,sqale_rating,bugs,reliability_rating,vulnerabilities,security_rating,security_hotspots,security_hotspots_reviewed,security_review_rating,ncloc,uncovered_lines,coverage,lines_to_cover,duplicated_lines_density,duplicated_blocks,duplicated_files,duplicated_lines,effort_to_reach_maintainability_rating_a,complexity,cognitive_complexity,num_of_lines
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/issues_test.go,sonarqube:SonarqubeProject:2:testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,18,0,18,31.299999237060547,1,1,46,7,1,7,147
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_commits_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,24,0,24,30.299999237060547,2,1,53,7,1,7,175
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/mr_test.go,sonarqube:SonarqubeProject:2:testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,15,0,15,36.400001525878906,1,1,48,7,1,7,132
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/gitlab/e2e/pipelines_test.go,sonarqube:SonarqubeProject:2:testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,15,0,15,0,7,7,7,7,1,7,93
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/impl/impl.go,sonarqube:SonarqubeProject:2:testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,92,0,92,0,7,7,7,7,39,24,289
-sonarqube:SonarqubeFileMetrics:2:testDevLake:backend/plugins/jenkins/tasks/api_client.go,sonarqube:SonarqubeProject:2:testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,8,0,8,0,7,7,7,7,3,2,49
+sonarqube:SonarqubeFileMetrics:2:07653f44dac701abb21be5fd106928a9e426593c,sonarqube:SonarqubeProject:2:testDevLake,pipelines_test.go,backend/plugins/gitlab/e2e/pipelines_test.go,go,7,7,1,7,A,7,A,7,0,A,64,15,0,15,0,7,7,7,7,1,7,93
+sonarqube:SonarqubeFileMetrics:2:a571978106a1ad42ac884f404e5c0845d2ecc277,sonarqube:SonarqubeProject:2:testDevLake,mr_commits_test.go,backend/plugins/gitlab/e2e/mr_commits_test.go,go,7,7,1,7,A,7,A,7,0,A,139,24,0,24,30.299999237060547,2,1,53,7,1,7,175
+sonarqube:SonarqubeFileMetrics:2:cd89d4f7457a22dd0c507d4a3d9288bb47f69d31,sonarqube:SonarqubeProject:2:testDevLake,issues_test.go,backend/plugins/gitlab/e2e/issues_test.go,go,7,7,1,7,A,7,A,7,0,A,117,18,0,18,31.299999237060547,1,1,46,7,1,7,147
+sonarqube:SonarqubeFileMetrics:2:d1db10573d322ac2fc8e3c8d50eb94c685666c87,sonarqube:SonarqubeProject:2:testDevLake,impl.go,backend/plugins/jenkins/impl/impl.go,go,7,7,1,7,A,7,A,7,0,A,234,92,0,92,0,7,7,7,7,39,24,289
+sonarqube:SonarqubeFileMetrics:2:e06434b2e803e07f19e21de5b17f25c0ac969e70,sonarqube:SonarqubeProject:2:testDevLake,mr_test.go,backend/plugins/gitlab/e2e/mr_test.go,go,7,7,1,7,A,7,A,7,0,A,103,15,0,15,36.400001525878906,1,1,48,7,1,7,132
+sonarqube:SonarqubeFileMetrics:2:f222da572ca48538456c263f3a6ff15c3c95438f,sonarqube:SonarqubeProject:2:testDevLake,api_client.go,backend/plugins/jenkins/tasks/api_client.go,go,5,7,1,6,A,7,A,7,0,A,25,8,0,8,0,7,7,7,7,3,2,49
diff --git a/backend/core/models/domainlayer/codequality/cq_projects.go 
b/backend/plugins/sonarqube/models/migrationscripts/20250527_extend_field_size.go
similarity index 56%
copy from backend/core/models/domainlayer/codequality/cq_projects.go
copy to 
backend/plugins/sonarqube/models/migrationscripts/20250527_extend_field_size.go
index fe80dd1bb..dcb6b872c 100644
--- a/backend/core/models/domainlayer/codequality/cq_projects.go
+++ 
b/backend/plugins/sonarqube/models/migrationscripts/20250527_extend_field_size.go
@@ -15,33 +15,27 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package codequality
+package migrationscripts
 
 import (
-       "github.com/apache/incubator-devlake/core/models/common"
-       "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/context"
+       "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
 )
 
-var _ plugin.Scope = (*CqProject)(nil)
+var _ plugin.MigrationScript = (*extendSonarqubeFieldSize)(nil)
 
-type CqProject struct {
-       domainlayer.DomainEntityExtended
-       Name             string `gorm:"type:varchar(255)"`
-       Qualifier        string `gorm:"type:varchar(255)"`
-       Visibility       string `gorm:"type:varchar(64)"`
-       LastAnalysisDate *common.Iso8601Time
-       CommitSha        string `gorm:"type:varchar(128)"`
-}
+type extendSonarqubeFieldSize struct{}
 
-func (CqProject) TableName() string {
-       return "cq_projects"
+func (script *extendSonarqubeFieldSize) Up(basicRes context.BasicRes) 
errors.Error {
+       db := basicRes.GetDal()
+       return db.ModifyColumnType("_tool_sonarqube_file_metrics", "file_name", 
"varchar(2000)")
 }
 
-func (s *CqProject) ScopeId() string {
-       return s.Id
+func (*extendSonarqubeFieldSize) Version() uint64 {
+       return 20250527000000
 }
 
-func (s *CqProject) ScopeName() string {
-       return s.Name
+func (*extendSonarqubeFieldSize) Name() string {
+       return "extend field size for sonarqube file metrics"
 }
diff --git a/backend/plugins/sonarqube/models/migrationscripts/register.go 
b/backend/plugins/sonarqube/models/migrationscripts/register.go
index 849f11248..7c48de842 100644
--- a/backend/plugins/sonarqube/models/migrationscripts/register.go
+++ b/backend/plugins/sonarqube/models/migrationscripts/register.go
@@ -38,5 +38,6 @@ func All() []plugin.MigrationScript {
                new(increaseProjectKeyLength),
                new(addOrgToConn),
                new(addIssueImpacts),
+               new(extendSonarqubeFieldSize),
        }
 }
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go 
b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
index a7acef9c1..aa03d5bf8 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
@@ -25,7 +25,7 @@ type SonarqubeFileMetrics struct {
        ConnectionId             uint64 `gorm:"primaryKey"`
        FileMetricsKey           string `gorm:"primaryKey;type:varchar(500)"`
        ProjectKey               string `gorm:"index"`
-       FileName                 string
+       FileName                 string `gorm:"type:varchar(2000)"`
        FilePath                 string
        FileLanguage             string
        CodeSmells               int
diff --git 
a/backend/plugins/sonarqube/tasks/filemetrics_additional_extractor.go 
b/backend/plugins/sonarqube/tasks/filemetrics_additional_extractor.go
index cb3036c66..42c1b8867 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_additional_extractor.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_additional_extractor.go
@@ -19,6 +19,7 @@ package tasks
 
 import (
        "encoding/json"
+
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
@@ -41,7 +42,7 @@ func ExtractAdditionalFileMetrics(taskCtx 
plugin.SubTaskContext) errors.Error {
                        }
                        fileMetrics := &models.SonarqubeAdditionalFileMetrics{
                                ConnectionId:   data.Options.ConnectionId,
-                               FileMetricsKey: body.Key,
+                               FileMetricsKey: hashString(body.Key),
                        }
                        err = setAdditionalMetrics(fileMetrics, body.Measures)
                        return []interface{}{fileMetrics}, err
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go 
b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
index a107d2283..24c1f7fef 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
@@ -41,7 +41,7 @@ func ExtractFilemetrics(taskCtx plugin.SubTaskContext) 
errors.Error {
                        }
                        fileMetrics := &models.SonarqubeFileMetrics{
                                ConnectionId:   data.Options.ConnectionId,
-                               FileMetricsKey: body.Key,
+                               FileMetricsKey: hashString(body.Key), // hash 
the key to make it suitable as mysql index
                                FileName:       body.Name,
                                FilePath:       body.Path,
                                FileLanguage:   body.Language,
diff --git a/backend/plugins/sonarqube/tasks/shared.go 
b/backend/plugins/sonarqube/tasks/shared.go
index 2ac13eeb9..99c22613b 100644
--- a/backend/plugins/sonarqube/tasks/shared.go
+++ b/backend/plugins/sonarqube/tasks/shared.go
@@ -18,6 +18,7 @@ limitations under the License.
 package tasks
 
 import (
+       "crypto/sha1"
        "encoding/hex"
        "fmt"
        "hash"
@@ -78,6 +79,12 @@ func generateId(hashCodeBlock hash.Hash, entity 
*models.SonarqubeIssueCodeBlock)
        entity.Id = hex.EncodeToString(hashCodeBlock.Sum(nil))
 }
 
+func hashString(input string) string {
+       h := sha1.New()
+       h.Write([]byte(input))
+       return hex.EncodeToString(h.Sum(nil))
+}
+
 func convertTimeToMinutes(timeStr string) int {
        days := 0
        hours := 0

Reply via email to