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  }