196 lines
5.4 KiB
Go
196 lines
5.4 KiB
Go
package schema
|
|
|
|
import (
|
|
"git.fsdpf.net/go/db"
|
|
"testing"
|
|
)
|
|
|
|
const test_table = "test_users"
|
|
|
|
var mysql *Builder
|
|
var sqlite3 *Builder
|
|
|
|
func init() {
|
|
odbc := db.Open(map[string]db.DBConfig{
|
|
"default": {
|
|
Driver: "mysql",
|
|
Host: "localhost",
|
|
Port: "3366",
|
|
Database: "demo",
|
|
Username: "demo",
|
|
Password: "ded86bf25d661bb723f3898b2440dd678382e2dd",
|
|
Charset: "utf8mb4",
|
|
MultiStatements: true,
|
|
// ParseTime: true,
|
|
},
|
|
"sqlite3": {
|
|
Driver: "sqlite3",
|
|
File: "test.db3",
|
|
},
|
|
})
|
|
|
|
mysql = NewSchema(odbc.Connection("default"))
|
|
sqlite3 = NewSchema(odbc.Connection("sqlite3"))
|
|
}
|
|
|
|
func TestHasTable(t *testing.T) {
|
|
t.Log(mysql.HasTable("users"))
|
|
t.Log(sqlite3.HasTable("users"))
|
|
}
|
|
|
|
func TestHasColumns(t *testing.T) {
|
|
t.Log("mysql")
|
|
t.Log(mysql.HasColumns("users", "id"))
|
|
t.Log("sqlite3")
|
|
t.Log(sqlite3.HasColumns("users", "id"))
|
|
}
|
|
|
|
func TestGetColumnListing(t *testing.T) {
|
|
t.Log("mysql")
|
|
t.Log(mysql.GetColumnListing("users"))
|
|
t.Log("sqlite3")
|
|
t.Log(sqlite3.GetColumnListing("users"))
|
|
}
|
|
|
|
// Mysql 创建表
|
|
func TestMysqlCreateTable(t *testing.T) {
|
|
if err := mysql.Create(test_table, func(table *Blueprint) {
|
|
table.Charset("utf8mb4")
|
|
|
|
table.BigIncrements("id").Comment("ID")
|
|
table.Boolean("enabled").Default("1").Comment("是否有效")
|
|
table.Char("created_user", 36).Default("00000000-0000-0000-0000-000000000000").Comment("创建者")
|
|
table.Char("owned_user", 36).Default("00000000-0000-0000-0000-000000000000").Comment("拥有者")
|
|
table.Timestamp("created_at").UseCurrent().Comment("创建时间")
|
|
table.Timestamp("updated_at").UseCurrent().Default(db.Raw("ON UPDATE CURRENT_TIMESTAMP")).Comment("更新时间")
|
|
table.DateTime("deleted_at").Nullable().Comment("删除时间")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 创建表
|
|
func TestSqliteCreateTable(t *testing.T) {
|
|
if err := sqlite3.Create(test_table, func(table *Blueprint) {
|
|
table.Charset("utf8mb4")
|
|
|
|
table.Increments("id").Comment("ID")
|
|
table.Boolean("enabled").Default("1").Comment("是否有效")
|
|
table.Char("created_user", 36).Default("00000000-0000-0000-0000-000000000000").Comment("创建者")
|
|
table.Char("owned_user", 36).Default("00000000-0000-0000-0000-000000000000").Comment("拥有者")
|
|
table.Timestamp("created_at").UseCurrent().Comment("创建时间")
|
|
table.Timestamp("updated_at").UseCurrent().Default(db.Raw("ON UPDATE CURRENT_TIMESTAMP")).Comment("更新时间")
|
|
table.DateTime("deleted_at").Nullable().Comment("删除时间")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql 修改表, 添加字段
|
|
func TestMysqlAddColumn(t *testing.T) {
|
|
if err := mysql.Table(test_table, func(table *Blueprint) {
|
|
table.String("name", 50).Nullable().Comment("用户名")
|
|
table.TinyInteger("age").Nullable().Comment("年龄")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 修改表, 添加字段
|
|
func TestSqliteAddColumn(t *testing.T) {
|
|
if err := sqlite3.Table(test_table, func(table *Blueprint) {
|
|
table.String("name", 50).Nullable().Comment("用户名")
|
|
table.TinyInteger("age").Nullable().Comment("年龄")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql 修改表, 添加/编辑字段
|
|
func TestMysqlChangeColumn(t *testing.T) {
|
|
if err := mysql.Table(test_table, func(table *Blueprint) {
|
|
table.String("name", 100).Nullable().Comment("用户名").Change("username")
|
|
table.SmallInteger("age").Nullable().Comment("年龄").Change()
|
|
|
|
table.String("nickname", 100).Nullable().Comment("昵称")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 修改表, 添加/编辑字段
|
|
func TestSqliteChangeColumn(t *testing.T) {
|
|
if err := sqlite3.Table(test_table, func(table *Blueprint) {
|
|
table.String("name", 100).Nullable().Comment("用户名").Change("username")
|
|
table.SmallInteger("age").Nullable().Comment("年龄").Change()
|
|
|
|
table.String("nickname", 100).Nullable().Comment("昵称")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql 修改表, 添加/编辑/删除字段
|
|
func TestMysqlDropColumn(t *testing.T) {
|
|
if err := mysql.Table(test_table, func(table *Blueprint) {
|
|
table.String("username", 100).Default("").Comment("--用户名--").Change("name")
|
|
table.Boolean("is_vip").Default(1).Comment("是否VIP")
|
|
table.DropColumn("age")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 修改表, 添加/编辑/删除字段
|
|
func TestSqliteDropColumn(t *testing.T) {
|
|
if err := sqlite3.Table(test_table, func(table *Blueprint) {
|
|
table.String("username", 100).Default("").Comment("--用户名--").Change("name")
|
|
table.Boolean("is_vip").Default(1).Comment("是否VIP")
|
|
table.DropColumn("age")
|
|
}); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql重命名表
|
|
func TestMysqlRename(t *testing.T) {
|
|
if err := mysql.Rename(test_table, test_table+"_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// SQLite 重命名表
|
|
func TestSqliteRename(t *testing.T) {
|
|
if err := sqlite3.Rename(test_table, test_table+"_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql 删除表
|
|
func TestMysqlDropTable(t *testing.T) {
|
|
if err := mysql.Drop(test_table + "_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 删除表
|
|
func TestSqliteDropTable(t *testing.T) {
|
|
if err := sqlite3.Drop(test_table + "_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Mysql 删除表
|
|
func TestMysqlDropTableIfExists(t *testing.T) {
|
|
if err := mysql.DropIfExists(test_table + "_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Sqlite 删除表
|
|
func TestSqliteDropTableIfExists(t *testing.T) {
|
|
if err := sqlite3.DropIfExists(test_table + "_alias"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|