You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by zh...@apache.org on 2022/11/10 12:49:47 UTC

[incubator-devlake] branch main updated: feat: modify refs_commits_diffs table name and struct (#3703)

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

zhangliang2022 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 5722a751 feat: modify refs_commits_diffs table name and struct (#3703)
5722a751 is described below

commit 5722a751eca93bbc6eb409eba829dead836d844c
Author: abeizn <zi...@merico.dev>
AuthorDate: Thu Nov 10 20:49:40 2022 +0800

    feat: modify refs_commits_diffs table name and struct (#3703)
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
    
    * feat: modifity refs-commits-diffs name and struct
---
 helpers/migrationhelper/migrationhelper.go         |  39 ++++++++
 .../20221109_modfiy_commits_diffs.go               | 103 +++++++++++++++++++++
 models/migrationscripts/register.go                |   1 +
 3 files changed, 143 insertions(+)

diff --git a/helpers/migrationhelper/migrationhelper.go b/helpers/migrationhelper/migrationhelper.go
index 8870a74e..5bd6a394 100644
--- a/helpers/migrationhelper/migrationhelper.go
+++ b/helpers/migrationhelper/migrationhelper.go
@@ -261,6 +261,45 @@ func TransformTable[S any, D any](
 	return err
 }
 
+// CopyTableColumn can copy data from src table to dst table
+func CopyTableColumn[S any, D any](
+	basicRes core.BasicRes,
+	srcTableName string,
+	dstTableName string,
+	transform func(*S) (*D, errors.Error),
+) (err errors.Error) {
+	db := basicRes.GetDal()
+	cursor, err := db.Cursor(dal.From(srcTableName))
+	if err != nil {
+		return errors.Default.Wrap(err, fmt.Sprintf("failed to load data from src table [%s]", srcTableName))
+	}
+	defer cursor.Close()
+	batch, err := helper.NewBatchSave(basicRes, reflect.TypeOf(new(D)), 200, dstTableName)
+	if err != nil {
+		return errors.Default.Wrap(err, fmt.Sprintf("failed to instantiate BatchSave for table [%s]", srcTableName))
+	}
+	defer batch.Close()
+
+	srcTable := new(S)
+	for cursor.Next() {
+		err = db.Fetch(cursor, srcTable)
+		if err != nil {
+			return errors.Default.Wrap(err, fmt.Sprintf("fail to load record from table [%s]", srcTableName))
+		}
+
+		dst, err := transform(srcTable)
+		if err != nil {
+			return errors.Default.Wrap(err, fmt.Sprintf("failed to transform row %v", srcTable))
+		}
+		err = batch.Add(dst)
+		if err != nil {
+			return errors.Default.Wrap(err, fmt.Sprintf("push to BatchSave failed %v", dstTableName))
+		}
+	}
+
+	return err
+}
+
 func hashScript(script core.MigrationScript) string {
 	hasher := md5.New()
 	_, err := hasher.Write([]byte(fmt.Sprintf("%s:%v", script.Name(), script.Version())))
diff --git a/models/migrationscripts/20221109_modfiy_commits_diffs.go b/models/migrationscripts/20221109_modfiy_commits_diffs.go
new file mode 100644
index 00000000..e412ebe8
--- /dev/null
+++ b/models/migrationscripts/20221109_modfiy_commits_diffs.go
@@ -0,0 +1,103 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+	"github.com/apache/incubator-devlake/errors"
+	"github.com/apache/incubator-devlake/helpers/migrationhelper"
+	"github.com/apache/incubator-devlake/plugins/core"
+)
+
+var _ core.MigrationScript = (*modifyCommitsDiffs)(nil)
+
+type modifyCommitsDiffs struct{}
+
+type FinishedCommitsDiffs20221109 struct {
+	NewCommitSha string `gorm:"primaryKey;type:varchar(40)"`
+	OldCommitSha string `gorm:"primaryKey;type:varchar(40)"`
+}
+
+func (FinishedCommitsDiffs20221109) TableName() string {
+	return "finished_commits_diffs"
+}
+
+type RefsCommitsDiff20221109 struct {
+	NewRefId        string `gorm:"primaryKey;type:varchar(255)"`
+	OldRefId        string `gorm:"primaryKey;type:varchar(255)"`
+	CommitSha       string `gorm:"primaryKey;type:varchar(40)"`
+	NewRefCommitSha string `gorm:"type:varchar(40)"`
+	OldRefCommitSha string `gorm:"type:varchar(40)"`
+	SortingIndex    int
+}
+
+func (RefsCommitsDiff20221109) TableName() string {
+	return "refs_commits_diffs"
+}
+
+type CommitsDiff20221109 struct {
+	CommitSha    string `gorm:"primaryKey;type:varchar(40)"`
+	NewCommitSha string `gorm:"primaryKey;type:varchar(40)"`
+	OldCommitSha string `gorm:"primaryKey;type:varchar(40)"`
+	SortingIndex int
+}
+
+func (CommitsDiff20221109) TableName() string {
+	return "commits_diffs"
+}
+
+func (script *modifyCommitsDiffs) Up(basicRes core.BasicRes) errors.Error {
+	db := basicRes.GetDal()
+	// create table
+	err := db.AutoMigrate(&CommitsDiff20221109{})
+	if err != nil {
+		return err
+	}
+
+	err = db.AutoMigrate(&FinishedCommitsDiffs20221109{})
+	if err != nil {
+		return err
+	}
+
+	// copy data
+	err = migrationhelper.CopyTableColumn(
+		basicRes,
+		RefsCommitsDiff20221109{}.TableName(),
+		CommitsDiff20221109{}.TableName(),
+		func(s *RefsCommitsDiff20221109) (*CommitsDiff20221109, errors.Error) {
+			dst := CommitsDiff20221109{}
+			dst.CommitSha = s.CommitSha
+			dst.NewCommitSha = s.NewRefCommitSha
+			dst.OldCommitSha = s.OldRefCommitSha
+
+			return &dst, nil
+		},
+	)
+	if err != nil {
+		return err
+	}
+
+	return db.DropTables(&RefsCommitsDiff20221109{})
+}
+
+func (*modifyCommitsDiffs) Version() uint64 {
+	return 20221109232735
+}
+
+func (*modifyCommitsDiffs) Name() string {
+	return "modify commits diffs"
+}
diff --git a/models/migrationscripts/register.go b/models/migrationscripts/register.go
index 8f12061e..4144b2d3 100644
--- a/models/migrationscripts/register.go
+++ b/models/migrationscripts/register.go
@@ -54,5 +54,6 @@ func All() []core.MigrationScript {
 		new(createCollectorState),
 		new(removeCicdPipelineRelation),
 		new(addCicdScope),
+		new(modifyCommitsDiffs),
 	}
 }