github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/pkg/service/from-table.go (about) 1 package service 2 3 import ( 4 "fmt" 5 "time" 6 7 i118Utils "github.com/easysoft/zendata/pkg/utils/i118" 8 logUtils "github.com/easysoft/zendata/pkg/utils/log" 9 "github.com/easysoft/zendata/pkg/utils/vari" 10 "gorm.io/driver/mysql" 11 "gorm.io/gorm" 12 ) 13 14 type TableParseService struct { 15 SqlParseService *SqlParseService `inject:""` 16 } 17 18 func (s *TableParseService) GenYamlFromTable() { 19 startTime := time.Now().Unix() 20 21 db, err := gorm.Open(mysql.Open(vari.GlobalVars.DBDsn)) 22 if err != nil { 23 logUtils.PrintTo( 24 fmt.Sprintf("Error on opening db %s, error is %s", vari.GlobalVars.DBDsnParsing.DbName, err.Error())) 25 } 26 27 var mp map[string]interface{} 28 db.Raw("SHOW CREATE TABLE " + vari.GlobalVars.Table).Scan(&mp) 29 sql := mp["Create Table"].(string) + ";" 30 statementMap, pkMap, fkMap := s.SqlParseService.getCreateStatement(sql) 31 32 recordsMap := map[string]map[string][]interface{}{} 33 var records []map[string]interface{} 34 query := fmt.Sprintf("SELECT * FROM %s", vari.GlobalVars.Table) 35 db.Raw(query).Scan(&records) 36 recordsMap[vari.GlobalVars.Table] = s.GenColArr(records) 37 38 s.SqlParseService.genKeysYaml(pkMap) 39 s.SqlParseService.genTablesYaml(statementMap, pkMap, fkMap, recordsMap) 40 41 entTime := time.Now().Unix() 42 logUtils.PrintTo(i118Utils.I118Prt.Sprintf("generate_yaml", len(statementMap), vari.GlobalVars.Output, entTime-startTime)) 43 } 44 45 func (s *TableParseService) GenColArr(records []map[string]interface{}) (ret map[string][]interface{}) { 46 ret = map[string][]interface{}{} 47 48 for _, record := range records { 49 for key, val := range record { 50 if val != nil { 51 ret[key] = append(ret[key], val) 52 } 53 } 54 } 55 56 return 57 }