db/schema/blueprint_test.go
2023-04-12 15:58:25 +08:00

217 lines
9.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package schema
import (
"git.fsdpf.net/go/db"
"testing"
)
// func TestMysqlToSql(t *testing.T) {
// bp := NewBlueprint("users")
// // bp.BigIncrements("id") // 等同于自增 UNSIGNED BIGINT主键
// // bp.BigInteger("votes").Default("0") // 等同于 BIGINT 类型列
// // bp.Binary("data") // 等同于 BLOB 类型列
// // bp.Boolean("confirmed") // 等同于 BOOLEAN 类型列
// // bp.Char("name", 4) // 等同于 CHAR 类型列
// // bp.Date("created_at") // 等同于 DATE 类型列
// // bp.DateTime("created_at") // 等同于 DATETIME 类型列
// // bp.Decimal("amount", 5, 2) // 等同于 DECIMAL 类型列,带精度和范围
// // bp.Enum("level", []string{"easy", "hard"}) // 等同于 ENUM 类型列
// bp.Increments("id").Change("pid") // 等同于自增 UNSIGNED INTEGER (主键)类型列
// // bp.Integer("votes").AutoIncrement() // 等同于 INTEGER 类型列
// bp.Json("options").Charset("uft8").Change() // 等同于 JSON 类型列
// // bp.SmallInteger("votes").Comment("等同于 SMALLINT 类型列") // 等同于 SMALLINT 类型列
// // bp.String("name", 100).Nullable() // 等同于 VARCHAR 类型列,带一个可选长度参数
// // bp.Text("description").After("column") // 等同于 TEXT 类型列
// // bp.Time("sunrise").First() // 等同于 TIME 类型列
// bp.Timestamp("added_on").UseCurrent().Default(db.Raw("ON UPDATE CURRENT_TIMESTAMP")) // 等同于 TIMESTAMP 类型列
// // bp.TinyInteger("numbers") // 等同于 TINYINT 类型列
// // bp.UnsignedBigInteger("votes") // 等同于无符号的 BIGINT 类型列
// // bp.UnsignedDecimal("amount", 8, 2) // 等同于 UNSIGNED DECIMAL 类型列,带有总位数和精度
// // bp.UnsignedInteger("votes") // 等同于无符号的 INTEGER 类型列
// // bp.UnsignedSmallInteger("votes") // 等同于无符号的 SMALLINT 类型列
// // bp.UnsignedTinyInteger("votes") // 等同于无符号的 TINYINT 类型列
// // bp.Uuid("id").Default("00000000-0000-0000-0000-000000000000") // 等同于 UUID 类型列
// // bp.Year("birth_year")
// bp.DropColumn("name", "name_a") // 等同于 YEAR 类型列
// t.Log(bp.ToSql(mysql.Connection, &MysqlGrammar{}))
// }
// func TestSqliteToSql(t *testing.T) {
// bp := NewBlueprint("users")
// bp.charset = "utf8mb4"
// bp.collation = "utf8mb4_general_ci"
// // bp.BigIncrements("id").Comment("ID")
// // bp.Boolean("enabled").Default("1").Comment("是否有效")
// bp.Char("created_user", 36).Default("22000000-0000-0000-0000-000000000001").Comment("创建者").Change()
// bp.Char("owned_user", 36).Default("11000000-0000-0000-0000-000000000000").Comment("拥有者").Change()
// // bp.Timestamp("created_at").UseCurrent().Comment("创建时间")
// // bp.Timestamp("updated_at").Default(db.Raw("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")).Comment("更新时间")
// bp.DateTime("deleted_at").Nullable().Comment("删除时间")
// bp.String("name_a", 50).Default("").Comment("姓名").Change("c_name")
// bp.DropColumn("name", "name_a")
// t.Log(bp.ToSql(sqlite3.Connection, &Sqlite3Grammar{}))
// }
// Mysql 创建表
func TestMysqlCreateTableToSql(t *testing.T) {
table := NewBlueprint("users")
table.Create()
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("删除时间")
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// SQLite 创建表
func TestSqliteCreateTableToSql(t *testing.T) {
table := NewBlueprint("users")
table.Create()
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("删除时间")
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}
//Mysql 修改表, 添加字段
func TestMysqlAddColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("name", 50).Nullable().Comment("用户名")
table.TinyInteger("age").Nullable().Comment("年龄")
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// Sqlite 修改表, 添加字段
func TestSqliteAddColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("name", 50).Nullable().Comment("用户名")
table.TinyInteger("age").Nullable().Comment("年龄")
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}
// Mysql 修改表, 添加/编辑字段
func TestMysqlChangeColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("name", 100).Nullable().Comment("用户名").Change()
table.SmallInteger("age").Nullable().Comment("年龄").Change()
table.String("nickname", 100).Nullable().Comment("昵称")
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// Sqlite 修改表, 添加/编辑字段
func TestSqliteChangeColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("name", 100).Nullable().Comment("用户名").Change()
table.SmallInteger("age").Nullable().Comment("年龄").Change()
table.String("nickname", 100).Nullable().Comment("昵称")
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}
// Mysql 修改表, 添加/编辑/删除字段
func TestMysqlDropColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("username", 100).Default("").Comment("--用户名--").Change("name")
table.Boolean("is_vip").Default(1).Comment("是否VIP")
table.DropColumn("age")
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// Sqlite 修改表, 添加/编辑/删除字段
func TestSqliteDropColumnToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.String("username", 100).Default("").Comment("--用户名--").Change("name")
table.Boolean("is_vip").Default(1).Comment("是否VIP")
table.DropColumn("age")
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}
// Mysql 重命名表
func TestMysqlRenameToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.Rename(test_table + "_alias")
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// Sqlite 重命名表
func TestSqliteRenameToSql(t *testing.T) {
table := NewBlueprint(test_table)
table.Rename(test_table + "_alias")
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}
// Mysql 删除表
func TestMysqlDropTableToSql(t *testing.T) {
table := NewBlueprint(test_table + "_alias")
table.Drop()
for _, sql := range table.ToSql(mysql.Connection, &MysqlGrammar{}) {
t.Logf("-- %s -- %s \n", "mysql", sql)
}
}
// Sqlite 删除表
func TestSqliteDropTableToSql(t *testing.T) {
table := NewBlueprint(test_table + "_alias")
table.Drop()
for _, sql := range table.ToSql(sqlite3.Connection, &Sqlite3Grammar{}) {
t.Logf("-- %s -- %s \n", "sqlite", sql)
}
}