feat(migrator,migrator/migrator.go,tests/migrate_test.go) : Get multiple data tables for migrator.
This commit is contained in:
		
							parent
							
								
									4c8810a848
								
							
						
					
					
						commit
						f676d504f3
					
				
							
								
								
									
										10
									
								
								migrator.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								migrator.go
									
									
									
									
									
								
							@ -33,6 +33,14 @@ type ViewOption struct {
 | 
				
			|||||||
	Query       *DB
 | 
						Query       *DB
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ALLTables get all database tables
 | 
				
			||||||
 | 
					const ALLTables = "migrator:all_tables"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Table Database table list info
 | 
				
			||||||
 | 
					type Table struct {
 | 
				
			||||||
 | 
						TableName string `gorm:"column:TABLE_NAME"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ColumnType interface {
 | 
					type ColumnType interface {
 | 
				
			||||||
	Name() string
 | 
						Name() string
 | 
				
			||||||
	DatabaseTypeName() string
 | 
						DatabaseTypeName() string
 | 
				
			||||||
@ -54,7 +62,7 @@ type Migrator interface {
 | 
				
			|||||||
	DropTable(dst ...interface{}) error
 | 
						DropTable(dst ...interface{}) error
 | 
				
			||||||
	HasTable(dst interface{}) bool
 | 
						HasTable(dst interface{}) bool
 | 
				
			||||||
	RenameTable(oldName, newName interface{}) error
 | 
						RenameTable(oldName, newName interface{}) error
 | 
				
			||||||
 | 
						GetTables(tables ...string) (tableList []Table, err error)
 | 
				
			||||||
	// Columns
 | 
						// Columns
 | 
				
			||||||
	AddColumn(dst interface{}, field string) error
 | 
						AddColumn(dst interface{}, field string) error
 | 
				
			||||||
	DropColumn(dst interface{}, field string) error
 | 
						DropColumn(dst interface{}, field string) error
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,13 @@ var (
 | 
				
			|||||||
	regFullDataType = regexp.MustCompile(`[^\d]*(\d+)[^\d]?`)
 | 
						regFullDataType = regexp.MustCompile(`[^\d]*(\d+)[^\d]?`)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// allTableQuery query db table list
 | 
				
			||||||
 | 
						allTableQuery = "SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA=?"
 | 
				
			||||||
 | 
						// tablesQuery query tables is has
 | 
				
			||||||
 | 
						tablesQuery = "SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA=? and TABLE_NAME in (?)"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Migrator m struct
 | 
					// Migrator m struct
 | 
				
			||||||
type Migrator struct {
 | 
					type Migrator struct {
 | 
				
			||||||
	Config
 | 
						Config
 | 
				
			||||||
@ -155,6 +162,13 @@ func (m Migrator) AutoMigrate(values ...interface{}) error {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (m Migrator) GetTables(tables ...string) (tableList []gorm.Table, err error) {
 | 
				
			||||||
 | 
						if len(tables) == 1 && tables[0] == gorm.ALLTables {
 | 
				
			||||||
 | 
							return tableList, m.DB.Raw(allTableQuery, m.CurrentDatabase()).Scan(&tableList).Error
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return tableList, m.DB.Raw(tablesQuery, m.CurrentDatabase(), tables).Scan(&tableList).Error
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m Migrator) CreateTable(values ...interface{}) error {
 | 
					func (m Migrator) CreateTable(values ...interface{}) error {
 | 
				
			||||||
	for _, value := range m.ReorderModels(values, false) {
 | 
						for _, value := range m.ReorderModels(values, false) {
 | 
				
			||||||
		tx := m.DB.Session(&gorm.Session{})
 | 
							tx := m.DB.Session(&gorm.Session{})
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,8 @@ func TestMigrate(t *testing.T) {
 | 
				
			|||||||
	rand.Shuffle(len(allModels), func(i, j int) { allModels[i], allModels[j] = allModels[j], allModels[i] })
 | 
						rand.Shuffle(len(allModels), func(i, j int) { allModels[i], allModels[j] = allModels[j], allModels[i] })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DB.Migrator().DropTable("user_speaks", "user_friends", "ccc")
 | 
						DB.Migrator().DropTable("user_speaks", "user_friends", "ccc")
 | 
				
			||||||
 | 
						DB.Migrator().GetTables("user_speaks", "user_friends", "ccc")
 | 
				
			||||||
 | 
						DB.Migrator().GetTables(gorm.ALLTables)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := DB.Migrator().DropTable(allModels...); err != nil {
 | 
						if err := DB.Migrator().DropTable(allModels...); err != nil {
 | 
				
			||||||
		t.Fatalf("Failed to drop table, got error %v", err)
 | 
							t.Fatalf("Failed to drop table, got error %v", err)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user