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 d12a3a152 [fix-5697][Pydevlake]: Fix AddColumn op possibly deleting a 
column (#5714)
d12a3a152 is described below

commit d12a3a1520ddf5721ba0f761cc5aa1f326f270bc
Author: Keon Amini <[email protected]>
AuthorDate: Mon Jul 24 04:44:35 2023 +0330

    [fix-5697][Pydevlake]: Fix AddColumn op possibly deleting a column (#5714)
    
    * fix: fixed AddColumn op deleting the column if it already exists
    
    * fix: RunAutoMigrations now only creates tables if they don't exist to 
partially avoid conflict with manual migrations. See #5689 for context.
    
    * fix: add new migration for entities column addition to force-retrigger it
---
 .../python/plugins/azuredevops/azuredevops/models.py    |  4 ++++
 backend/server/services/remote/models/migration.go      |  9 ++++++---
 backend/server/services/remote/plugin/plugin_impl.go    | 17 ++++++++++++-----
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/backend/python/plugins/azuredevops/azuredevops/models.py 
b/backend/python/plugins/azuredevops/azuredevops/models.py
index 879392e4b..f327334a4 100644
--- a/backend/python/plugins/azuredevops/azuredevops/models.py
+++ b/backend/python/plugins/azuredevops/azuredevops/models.py
@@ -145,6 +145,10 @@ def add_build_id_as_job_primary_key(b: 
MigrationScriptBuilder):
 @migration(20230606165630)
 def rename_tx_rule_table_to_scope_config(b: MigrationScriptBuilder):
     b.rename_table('_tool_azuredevops_azuredevopstransformationrules', 
GitRepositoryConfig.__tablename__)
+
+
+@migration(20230607165630, name="add entities column to gitrepositoryconfig 
table")
+def add_entities_column_to_scope_config(b: MigrationScriptBuilder):
     b.add_column(GitRepositoryConfig.__tablename__, 'entities', 'json')
 
 
diff --git a/backend/server/services/remote/models/migration.go 
b/backend/server/services/remote/models/migration.go
index 3f5aebc78..1862bf5da 100644
--- a/backend/server/services/remote/models/migration.go
+++ b/backend/server/services/remote/models/migration.go
@@ -56,7 +56,10 @@ type AddColumnOperation struct {
 
 func (o AddColumnOperation) Execute(dal dal.Dal) errors.Error {
        if dal.HasColumn(o.Table, o.Column) {
-               return dal.DropColumns(o.Table, o.Column)
+               err := dal.DropColumns(o.Table, o.Column)
+               if err != nil {
+                       return err
+               }
        }
        return dal.AddColumn(o.Table, o.Column, o.ColumnType)
 }
@@ -162,9 +165,9 @@ func (s *RemoteMigrationScript) UnmarshalJSON(data []byte) 
error {
 }
 
 func (s *RemoteMigrationScript) Up(basicRes context.BasicRes) errors.Error {
-       dal := basicRes.GetDal()
+       db := basicRes.GetDal()
        for _, operation := range s.operations {
-               err := operation.Execute(dal)
+               err := operation.Execute(db)
                if err != nil {
                        return err
                }
diff --git a/backend/server/services/remote/plugin/plugin_impl.go 
b/backend/server/services/remote/plugin/plugin_impl.go
index 657409212..1e6c66d1c 100644
--- a/backend/server/services/remote/plugin/plugin_impl.go
+++ b/backend/server/services/remote/plugin/plugin_impl.go
@@ -231,21 +231,20 @@ func (p *remotePluginImpl) ApiResources() 
map[string]map[string]plugin.ApiResour
 }
 
 func (p *remotePluginImpl) RunAutoMigrations() errors.Error {
-       db := basicRes.GetDal()
-       err := api.CallDB(db.AutoMigrate, p.connectionTabler.New())
+       err := p.createTable(p.connectionTabler.New())
        if err != nil {
                return err
        }
-       err = api.CallDB(db.AutoMigrate, p.scopeTabler.New())
+       err = p.createTable(p.scopeTabler.New())
        if err != nil {
                return err
        }
-       err = api.CallDB(db.AutoMigrate, p.scopeConfigTabler.New())
+       err = p.createTable(p.scopeConfigTabler.New())
        if err != nil {
                return err
        }
        for _, toolModelTabler := range p.toolModelTablers {
-               err = api.CallDB(db.AutoMigrate, toolModelTabler.New())
+               err = p.createTable(toolModelTabler.New())
                if err != nil {
                        return err
                }
@@ -253,6 +252,14 @@ func (p *remotePluginImpl) RunAutoMigrations() 
errors.Error {
        return nil
 }
 
+func (p *remotePluginImpl) createTable(tbl coreModels.DynamicTabler) 
errors.Error {
+       db := basicRes.GetDal()
+       if db.HasTable(tbl.TableName()) {
+               return nil
+       }
+       return api.CallDB(db.AutoMigrate, tbl)
+}
+
 func (p *remotePluginImpl) OpenApiSpec() string {
        return p.openApiSpec
 }

Reply via email to