Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
go-atomci
atomci
提交
9fa92d07
atomci
项目概览
go-atomci
/
atomci
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
atomci
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9fa92d07
编写于
3月 09, 2022
作者:
S
SampsonYe
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support basic db migration by code
上级
53143481
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
147 addition
and
69 deletion
+147
-69
internal/migrations/migration20220101.go
internal/migrations/migration20220101.go
+84
-0
internal/migrations/migration20220309.go
internal/migrations/migration20220309.go
+41
-0
internal/models/models.go
internal/models/models.go
+22
-69
未找到文件。
internal/migrations/migration20220101.go
0 → 100644
浏览文件 @
9fa92d07
package
migrations
import
(
"fmt"
"github.com/astaxie/beego/orm"
"github.com/go-atomci/atomci/internal/middleware/log"
"os"
"time"
)
type
Migration20220101
struct
{
}
func
(
m
Migration20220101
)
GetCreateAt
()
time
.
Time
{
return
time
.
Date
(
2022
,
1
,
1
,
0
,
0
,
0
,
0
,
time
.
Local
)
}
func
(
m
Migration20220101
)
Upgrade
(
ormer
orm
.
Ormer
)
{
tables
:=
[]
string
{
"sys_resource_type"
,
"sys_resource_operation"
,
"sys_resource_constraint"
,
"sys_user"
,
"sys_group"
,
"sys_group_user_rel"
,
"sys_group_user_constraint"
,
"sys_group_role"
,
"sys_group_role_user"
,
"sys_group_role_operation"
,
"sys_audit"
,
"sys_resource_router"
,
}
if
err
:=
setCreateAt
(
ormer
,
tables
);
err
!=
nil
{
log
.
Log
.
Error
(
err
.
Error
())
os
.
Exit
(
2
)
}
if
err
:=
setUpdateAt
(
ormer
,
tables
);
err
!=
nil
{
log
.
Log
.
Error
(
err
.
Error
())
os
.
Exit
(
2
)
}
}
func
setCreateAt
(
ormer
orm
.
Ormer
,
tables
[]
string
)
error
{
for
_
,
table
:=
range
tables
{
var
count
int
sql
:=
`SELECT count(1) FROM INFORMATION_SCHEMA.Columns WHERE table_schema=DATABASE() AND table_name=?
AND column_name='create_at' AND COLUMN_DEFAULT='CURRENT_TIMESTAMP'`
if
err
:=
ormer
.
Raw
(
sql
,
table
)
.
QueryRow
(
&
count
);
err
!=
nil
{
return
err
}
if
count
==
0
{
sql
=
`alter table `
+
table
+
` modify column create_at datetime not null DEFAULT CURRENT_TIMESTAMP`
if
_
,
err
:=
ormer
.
Raw
(
sql
)
.
Exec
();
err
!=
nil
{
return
err
}
log
.
Log
.
Info
(
sql
)
}
else
{
log
.
Log
.
Debug
(
fmt
.
Sprintf
(
"table `%v` already alter create_at, skip"
,
table
))
}
}
return
nil
}
func
setUpdateAt
(
ormer
orm
.
Ormer
,
tables
[]
string
)
error
{
for
_
,
table
:=
range
tables
{
var
count
int
sql
:=
`SELECT count(1) FROM INFORMATION_SCHEMA.Columns WHERE table_schema=DATABASE() AND table_name=?
AND column_name='update_at' AND COLUMN_DEFAULT='CURRENT_TIMESTAMP' AND EXTRA='on update CURRENT_TIMESTAMP'`
if
err
:=
ormer
.
Raw
(
sql
,
table
)
.
QueryRow
(
&
count
);
err
!=
nil
{
return
err
}
if
count
==
0
{
sql
=
`alter table `
+
table
+
` modify column update_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`
if
_
,
err
:=
ormer
.
Raw
(
sql
)
.
Exec
();
err
!=
nil
{
return
err
}
log
.
Log
.
Info
(
sql
)
}
else
{
log
.
Log
.
Debug
(
fmt
.
Sprintf
(
"table `%v` already alter update_at, skip"
,
table
))
}
}
return
nil
}
internal/migrations/migration20220309.go
0 → 100644
浏览文件 @
9fa92d07
package
migrations
import
(
"github.com/astaxie/beego/orm"
"strings"
"time"
)
type
Migration20220309
struct
{
}
func
(
m
Migration20220309
)
GetCreateAt
()
time
.
Time
{
return
time
.
Date
(
2022
,
3
,
9
,
0
,
0
,
0
,
0
,
time
.
Local
)
}
func
(
m
Migration20220309
)
Upgrade
(
ormer
orm
.
Ormer
)
{
ormer
.
Raw
(
"UPDATE `sys_integrate_setting` SET `type`='registry' WHERE `type`='harbor';"
)
.
Exec
()
ormer
.
Raw
(
strings
.
ReplaceAll
(
`DROP PROCEDURE IF EXISTS <|SPIT|>ModifyHarborToRegistry<|SPIT|>;
delimiter $$
CREATE PROCEDURE <|SPIT|>ModifyHarborToRegistry<|SPIT|>()
BEGIN
DECLARE HARBOREXISTS int DEFAULT 0;
DECLARE REGISTRYEXISTS int DEFAULT 0;
SELECT count(1) INTO @HARBOREXISTS FROM information_schema.COLUMNS WHERE TABLE_NAME='project_env' AND COLUMN_NAME='harbor';
SELECT count(1) INTO @REGISTRYEXISTS FROM information_schema.COLUMNS WHERE TABLE_NAME='project_env' AND COLUMN_NAME='registry';
IF @HARBOREXISTS>0 AND @REGISTRYEXISTS=0 #存在harbor列 不存在registry列时 直接修改列名
THEN
ALTER TABLE <|SPIT|>project_env<|SPIT|> CHANGE COLUMN <|SPIT|>harbor<|SPIT|> <|SPIT|>registry<|SPIT|> bigint(20) NOT NULL DEFAULT 0;
ELSEIF @HARBOREXISTS>0 AND @REGISTRYEXISTS>0 #harbor列和registry都存在时迁移数据并删除harbor列
THEN
UPDATE <|SPIT|>project_env<|SPIT|> SET <|SPIT|>registry<|SPIT|>=<|SPIT|>harbor<|SPIT|>;
ALTER TABLE <|SPIT|>project_env<|SPIT|> DROP COLUMN <|SPIT|>harbor<|SPIT|>;
END IF;
END;
$$
delimiter ;
CALL <|SPIT|>ModifyHarborToRegistry<|SPIT|>;
DROP PROCEDURE IF EXISTS <|SPIT|>ModifyHarborToRegistry<|SPIT|>;`
,
"<|SPIT|>"
,
"`"
))
.
Exec
()
}
internal/models/models.go
浏览文件 @
9fa92d07
...
...
@@ -18,11 +18,9 @@ package models
import
(
"fmt"
"
o
s"
"
github.com/go-atomci/atomci/internal/migration
s"
"time"
"github.com/go-atomci/atomci/internal/middleware/log"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
"github.com/go-sql-driver/mysql"
...
...
@@ -37,6 +35,12 @@ type Addons struct {
DeleteAt
*
time
.
Time
`orm:"column(delete_at);type(datetime);index;null" json:"delete_at"`
}
// db migration base interface
type
Migration
interface
{
GetCreateAt
()
time
.
Time
Upgrade
(
ormer
orm
.
Ormer
)
}
// TableNamePrefix ..
const
TableNamePrefix
=
"atom"
...
...
@@ -64,52 +68,9 @@ func (a *Addons) MarkDeleted() {
var
(
dbName
string
tableNames
[]
string
migrationTypes
[]
Migration
)
func
setCreateAt
(
tables
[]
string
)
error
{
for
_
,
table
:=
range
tables
{
var
count
int
sql
:=
`SELECT count(1) FROM INFORMATION_SCHEMA.Columns WHERE table_schema=DATABASE() AND table_name=?
AND column_name='create_at' AND COLUMN_DEFAULT='CURRENT_TIMESTAMP'`
ormer
:=
orm
.
NewOrm
()
if
err
:=
ormer
.
Raw
(
sql
,
table
)
.
QueryRow
(
&
count
);
err
!=
nil
{
return
err
}
if
count
==
0
{
sql
=
`alter table `
+
table
+
` modify column create_at datetime not null DEFAULT CURRENT_TIMESTAMP`
if
_
,
err
:=
ormer
.
Raw
(
sql
)
.
Exec
();
err
!=
nil
{
return
err
}
log
.
Log
.
Info
(
sql
)
}
else
{
log
.
Log
.
Debug
(
fmt
.
Sprintf
(
"table `%v` already alter create_at, skip"
,
table
))
}
}
return
nil
}
func
setUpdateAt
(
tables
[]
string
)
error
{
for
_
,
table
:=
range
tables
{
var
count
int
sql
:=
`SELECT count(1) FROM INFORMATION_SCHEMA.Columns WHERE table_schema=DATABASE() AND table_name=?
AND column_name='update_at' AND COLUMN_DEFAULT='CURRENT_TIMESTAMP' AND EXTRA='on update CURRENT_TIMESTAMP'`
ormer
:=
orm
.
NewOrm
()
if
err
:=
ormer
.
Raw
(
sql
,
table
)
.
QueryRow
(
&
count
);
err
!=
nil
{
return
err
}
if
count
==
0
{
sql
=
`alter table `
+
table
+
` modify column update_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`
if
_
,
err
:=
ormer
.
Raw
(
sql
)
.
Exec
();
err
!=
nil
{
return
err
}
log
.
Log
.
Info
(
sql
)
}
else
{
log
.
Log
.
Debug
(
fmt
.
Sprintf
(
"table `%v` already alter update_at, skip"
,
table
))
}
}
return
nil
}
func
initOrm
()
{
DatabaseURL
:=
beego
.
AppConfig
.
String
(
"DB::url"
)
DatabaseDebug
,
_
:=
beego
.
AppConfig
.
Bool
(
"DB::debug"
)
...
...
@@ -193,27 +154,18 @@ func initOrm() {
orm
.
RunSyncdb
(
"default"
,
false
,
true
)
tables
:=
[]
string
{
"sys_resource_type"
,
"sys_resource_operation"
,
"sys_resource_constraint"
,
"sys_user"
,
"sys_group"
,
"sys_group_user_rel"
,
"sys_group_user_constraint"
,
"sys_group_role"
,
"sys_group_role_user"
,
"sys_group_role_operation"
,
"sys_audit"
,
"sys_resource_router"
,
}
if
err
:=
setCreateAt
(
tables
);
err
!=
nil
{
log
.
Log
.
Error
(
err
.
Error
())
os
.
Exit
(
2
)
}
//db migration register
func
initMigration
()
{
migrationTypes
=
[]
Migration
{
new
(
migrations
.
Migration20220101
),
new
(
migrations
.
Migration20220309
),
}
if
err
:=
setUpdateAt
(
tables
);
err
!=
nil
{
log
.
Log
.
Error
(
err
.
Error
())
os
.
Exit
(
2
)
//数据迁移
for
_
,
m
:=
range
migrationTypes
{
m
.
Upgrade
(
orm
.
NewOrm
())
}
}
...
...
@@ -223,5 +175,6 @@ func init() {
return
}
initOrm
()
initMigration
()
// orm.RunSyncdb("default", false, true)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录