dialector.go 984 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package mysql
  2. import (
  3. "gorm.io/driver/mysql"
  4. "gorm.io/gorm"
  5. "gorm.io/gorm/clause"
  6. "gorm.io/gorm/schema"
  7. )
  8. type myDialector struct {
  9. *mysql.Dialector
  10. }
  11. func (dialector myDialector) Migrator(db *gorm.DB) gorm.Migrator {
  12. return myMigrator{dialector.Dialector.Migrator(db).(mysql.Migrator)}
  13. }
  14. func (dialector myDialector) DataTypeOf(field *schema.Field) string {
  15. dataType := dialector.Dialector.DataTypeOf(field)
  16. switch dataType {
  17. case "uuid":
  18. return "char(36)"
  19. case "text":
  20. return "longtext"
  21. default:
  22. return dataType
  23. }
  24. }
  25. type myMigrator struct {
  26. mysql.Migrator
  27. }
  28. func (migrator myMigrator) FullDataTypeOf(field *schema.Field) clause.Expr {
  29. if field.DataType == "uuid" {
  30. field.DataType = "char(36)"
  31. if field.HasDefaultValue && field.DefaultValue == "uuid_generate_v4()" {
  32. field.HasDefaultValue = false
  33. field.DefaultValue = ""
  34. }
  35. } else if field.DataType == "text" {
  36. field.DataType = "longtext"
  37. }
  38. return migrator.Migrator.FullDataTypeOf(field)
  39. }